GCAT5.0 released

pull/3/head
Minh 10 years ago
commit 67544a10e6

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,2 @@
^.*\.Rproj$
^\.Rproj\.user$

@ -0,0 +1,159 @@
library(GCAT)
library(GCAT)
library(GCAT)
source('~/Documents/GCAT4_old/trunk/R/GCAT/R/addingParams.R')
library(GCAT)
source('~/Documents/GCAT4_old/trunk/R/GCAT/R/addingParams.R')
t
warnings()
library(GCAT)
source('~/Documents/GCAT4_old/trunk/R/GCAT/R/addingParams.R')
warnings()
library(GCAT)
source('~/Documents/GCAT4_old/trunk/R/GCAT/R/addingParams.R')
warnings()
library(GCAT)
source('~/Documents/GCAT4_old/trunk/R/GCAT/R/addingParams.R')
library(GCAT)
library(GCAT)
library("GCAT")
library("codetools")
checkUsagePackage("GCAT")
library(GCAT)
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
checkUsagePackage("GCAT")
library("codetoolds")
library("codetoolss")
library("codetools")
checkUsagePackage("GCAT")
library(GCAT)
library("codetools")
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
checkUsagePackage("GCAT")
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/fit.model.R')
library(GCAT)
checkUsagePackage("GCAT")
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
checkUsagePackage("GCAT")
source('~/Documents/GCAT4/trunk/R/GCAT/R/class.model.R')
library(GCAT)
checkUsagePackage("GCAT")
library(GCAT)
checkUsagePackage("GCAT")
library(GCAT)
checkUsagePackage("GCAT")
?? checkusagePackage
checkUsagePackage("GCAT", all + T)
checkUsagePackage("GCAT", all = T)
checkUsagePackage("GCAT")
checkUsagePackage("GCAT")
source('~/Documents/GCAT4/trunk/R/GCAT/R/plot.fit.R')
library(GCAT)
checkUsagePackage("GCAT")
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
t
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
source('~/Documents/GCAT4/trunk/R/GCAT/R/plot.fit.R')
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/plot.fit.R')
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/table2well.R')
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
library(GCAT)
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
library(GCAT)
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
library(GCAT)
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library("codetools")
library("GCAT")
checkUsagePackage(GCAT)
checkUsagePackage("GCAT)
checkUsagePackage("GCAT")
checkUsagePackage("GCAT")
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R')
t
checkUsagePack(GCAT)
checkUsagePackage(GCAT)
checkUsagePackage("GCAT")
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/normalize.and.transform.R')
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
source('~/Documents/GCAT4/trunk/R/GCAT/R/plot.fit.R')
library(GCAT)
library(GCAT)
library(GCAT)
?? plot
? plot
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library(GCAT)
library("codetools")
checkPackageUsage("GCAT")
checkUsagePackage("GCAT")
checkUsagePackage("GCAT", all = T)

@ -0,0 +1,4 @@
auto_roxygenize_for_build_and_reload="1"
auto_roxygenize_for_build_package="1"
auto_roxygenize_for_check="1"
makefile_args=""

@ -0,0 +1,9 @@
build-last-errors="[]"
build-last-errors-base-dir="~/Documents/GCAT4/trunk/R/GCAT/"
build-last-outputs="[{\"output\":\"==> roxygenize('.', roclets=c('rd'))\\n\\n\",\"type\":0},{\"output\":\"* checking for changes ... \",\"type\":1},{\"output\":\"DONE\\n\",\"type\":1},{\"output\":\"\\n\",\"type\":1},{\"output\":\"==> R CMD INSTALL --no-multiarch --with-keep.source GCAT\\n\\n\",\"type\":0},{\"output\":\"* installing to library /home/minh/R/x86_64-pc-linux-gnu-library/3.0\\n\",\"type\":1},{\"output\":\"\",\"type\":1},{\"output\":\"* installing *source* package GCAT ...\\n\",\"type\":1},{\"output\":\"** R\\n\",\"type\":1},{\"output\":\"\",\"type\":1},{\"output\":\"** inst\\n\",\"type\":1},{\"output\":\"** preparing package for lazy loading\\n\",\"type\":1},{\"output\":\"\",\"type\":1},{\"output\":\"\\n\",\"type\":1},{\"output\":\"Reading input files...\",\"type\":1},{\"output\":\"Error in try(gcat.load.data(file.name = file.name, input.data = input.data, : \\n\",\"type\":1},{\"output\":\" could not find function \\\"gcat.load.data\\\"\\n\",\"type\":1},{\"output\":\"\",\"type\":1},{\"output\":\"Creating a generic function for 'plot' from package 'graphics' in package 'GCAT'\\n\",\"type\":1},{\"output\":\"\",\"type\":1},{\"output\":\"No man pages found in package 'GCAT' \\n\",\"type\":1},{\"output\":\"\",\"type\":1},{\"output\":\"** help\\n\",\"type\":1},{\"output\":\"*** installing help indices\\n\",\"type\":1},{\"output\":\"** building package indices\\n\",\"type\":1},{\"output\":\"** testing if installed package can be loaded\\n\",\"type\":1},{\"output\":\"\",\"type\":1},{\"output\":\"* DONE (GCAT)\\n\",\"type\":1},{\"output\":\"\",\"type\":1}]"
compile_pdf_state="{\"errors\":[],\"output\":\"\",\"running\":false,\"tab_visible\":false,\"target_file\":\"\"}"
console_procs="[]"
files.monitored-path=""
find-in-files-state="{\"handle\":\"\",\"input\":\"\",\"path\":\"\",\"regex\":false,\"results\":{\"file\":[],\"line\":[],\"lineValue\":[],\"matchOff\":[],\"matchOn\":[]},\"running\":false}"
imageDirtyState="1"
saveActionState="-1"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,16 @@
{
"contents" : "#Copyright 2012 The Board of Regents of the University of Wisconsin System.\n#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead, \n#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman\n#\n#This file is part of GCAT.\n#\n#GCAT is free software: you can redistribute it and/or modify\n#it under the terms of the GNU Lesser General Public License as published by\n#the Free Software Foundation, either version 3 of the License, or\n#(at your option) any later version.\n#\n#GCAT is distributed in the hope that it will be useful,\n#but WITHOUT ANY WARRANTY; without even the implied warranty of\n#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n#GNU Lesser General Public License for more details.\n#\n#You should have received a copy of the GNU Lesser General Public License \n#along with GCAT. If not, see <http://www.gnu.org/licenses/>.\n\n# Wrapper for sapply to use lapply over an array, conserving the dimensions.\naapply = function(x, FUN,...){\n dim.values = dim(x)\n\tdim.names = dimnames(x)\n\tx = lapply(x, function(x){FUN(x,...)})\n\tdim(x) = dim.values\n\tdimnames(x) = dim.names\n\treturn(x)\n\t}\n\n# A function to manually create an unchecked exception.\nexception = function(class, msg)\n{\n cond <- simpleError(msg)\n class(cond) <- c(class, \"MyException\", class(cond))\n stop(cond)\n}\n",
"created" : 1425413273698.000,
"dirty" : false,
"encoding" : "UTF-8",
"folds" : "",
"hash" : "3044086993",
"id" : "4E20D973",
"lastKnownWriteTime" : 1424208963,
"path" : "~/Documents/GCAT4/trunk/R/GCAT/R/misc.R",
"project_path" : "R/misc.R",
"properties" : {
},
"source_on_save" : false,
"type" : "r_source"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,16 @@
{
"contents" : "# Default NAMESPACE created by R\n# Remove the previous line if you edit this file\n\n# Export all names\nexportPattern(\".\")\n\n# Import all packages listed as Imports or Depends\nimport(\"pheatmap\", \"gplots\")\n",
"created" : 1428439772005.000,
"dirty" : false,
"encoding" : "UTF-8",
"folds" : "",
"hash" : "749067415",
"id" : "907B51DB",
"lastKnownWriteTime" : 1423260997,
"path" : "~/Documents/GCAT4/trunk/R/GCAT/NAMESPACE",
"project_path" : "NAMESPACE",
"properties" : {
},
"source_on_save" : false,
"type" : "r_namespace"
}

@ -0,0 +1,16 @@
{
"contents" : "#Copyright 2012 The Board of Regents of the University of Wisconsin System.\n#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,\n#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman\n#\n#This file is part of GCAT.\n#\n#GCAT is free software: you can redistribute it and/or modify\n#it under the terms of the GNU Lesser General Public License as published by\n#the Free Software Foundation, either version 3 of the License, or\n#(at your option) any later version.\n#\n#GCAT is distributed in the hope that it will be useful,\n#but WITHOUT ANY WARRANTY; without even the implied warranty of\n#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n#GNU Lesser General Public License for more details.\n#\n#You should have received a copy of the GNU Lesser General Public License \n#along with GCAT. If not, see <http://www.gnu.org/licenses/>.\n########################################################################\n# #\n# <model> class definition and functions. Objects contain equations #\n# and other information for parameterized growth curve models. #\n# #\n########################################################################\nsetClass(\"model\", representation(name = \"character\",\n expression = \"expression\",\n formula = \"formula\",\n guess = \"function\"))\n# Slots:\n# name - a simple description of the model.\n# expression - an object of class \"expression\" that evaluates the response (transformed OD) with respect to the variable Time.\n# formula - same as expression, but with y as the response.\n# guess - a function that computes initial guesses for the parameters given a well object with a valid \"screen.data\" slot\n# containing useable OD values and slope estimates\n# --------------------------------------------------------------------\n###################### BEGIN PROTOTYPING ACCESSOR METHODS##############\n\n# Minh: Let this code fragment be F1.\nif (!isGeneric(\"getName\")){\n if (is.function(\"getName\"))\n fun <- getName\n else\n fun <- function(object) standardGeneric(\"getName\")\n setGeneric(\"getName\", fun)\n}\n# End of F1\nsetMethod(\"getName\", \"model\", function(object) object@name)\n\n# Minh: Let this line be F2.\nsetGeneric(\"getExpression\", function(object){standardGeneric(\"getExpression\")})\n# Question: How is F1 different from F2?\n\nsetMethod(\"getExpression\", \"model\",\n function(object){\n return(object@expression)\n })\n\nsetGeneric(\"getFormula\", function(object){standeardGeneric(\"getFormula\")})\nsetMethod(\"getFormula\", \"model\", \n function(object){\n return(object@formula)\n })\n\nsetGeneric(\"getGuess\", function(object){standeardGeneric(\"getGuess\")})\nsetMethod(\"getGuess\", \"model\", \n function(object){\n return(object@guess)\n })\n######################## ENG PROTOTYPING ########################\n\n# Function to create a new model\n#' Model \n#' \n#' Function to create a new model \n#' @param name The name of the model \n#' @param expression Expression of the model \n#' @param formula The formula of this model \n#' @param guess The guess of this model \n#' @return The new model \nmodel = function(name, expression, formula, guess){\n new(\"model\", name = name, expression = expression, formula = formula, guess = guess)\n}\n\nloess.g = function(well,smooth.param=0.75){\n #data = data.from(well)\n #growth = data[,2]\n #Time = data[,1]\n Time = data.from(well)[,1]\n \n # predicted growth values to be used in estimating growth curve parameters\n loess.fit = loess(data.from(well)[,2]~Time,span=smooth.param)\n t = seq(from = min(Time), to = max(Time), by = (max(Time)-min(Time))/1000)\n y = predict(loess.fit, data.frame(Time=t))\n attr(y,\"names\") = NULL # need to remove the names to prevent them from showing up in the returned vector\n \n # Remove any data points where y has not been estimated\n filt = is.finite(y)\n t = t[filt]\n y = y[filt] # remove any NA etc\n \n # specific growth using loess to find max derivative\n delta.t = diff(t)\n dydt = diff(y)/delta.t\n u = max(dydt)\n \n # lower and upper asymptotes\n b = min(y)\n A = max(y) - min(y)\n \n # inflection point\n inflection.pt.index = which.max(dydt)\n inflection.time = t[inflection.pt.index]\n inflection.y = y[inflection.pt.index]\n \n # lag time\n lam = inflection.time - (inflection.y-b)/u\n \n # Return named array of estimates\n c(A = A, b = b, lam = lam, u = u)\n}\n\n\n",
"created" : 1425419995370.000,
"dirty" : false,
"encoding" : "UTF-8",
"folds" : "",
"hash" : "2225975310",
"id" : "992E3490",
"lastKnownWriteTime" : 1425511077,
"path" : "~/Documents/GCAT4/trunk/R/GCAT/R/class.model.R",
"project_path" : "R/class.model.R",
"properties" : {
},
"source_on_save" : false,
"type" : "r_source"
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,17 @@
{
"contents" : "setwd(\"~/Downloads/\")\nfile.list = file.name = \"YPDAFEXglucoseTests_2-25-10.csv\"\nlayout.file = \"YPDAFEXglucoseTests_2-25-10_Layout.csv\"\nsingle.plate = T\nout.dir = getwd()\ngraphic.dir = paste(out.dir, \"/pics\", sep = \"\")\nadd.constant = 1\nblank.value = NULL\nstart.index = 2\ngrowth.cutoff = 0.05\nuse.linear.param = F\nuse.loess = F\nsmooth.param = 0.6\npoints.to.remove = 0\nremove.jumps = F\nsilent = F\nverbose = T\nreturn.fit = F\noverview.jpgs = T\nplate.nrow = 8\nplate.ncol = 12\ninput.skip.lines = 0\nmulti.column.headers = c(\"Plate ID\", \"Well\", \"OD\", \"Time\")\nsingle.column.headers = c(\"\",\"A1\")\nlayout.sheet.headers = c(\"Strain\", \"Media Definition\")\n\nt = gcat.analysis.main(file.list, single.plate, layout.file = NULL, \n out.dir = getwd(), graphic.dir = paste(out.dir, \"/pics\", sep = \"\"), \n add.constant = 1, blank.value = NULL, start.index = 2, growth.cutoff = 0.05,\n use.linear.param=use.linear.param, use.loess=use.loess, smooth.param=0.1,\n points.to.remove = 0, remove.jumps = F, time.input = NA,\n plate.nrow = 8, plate.ncol = 12, input.skip.lines = 0,\n multi.column.headers = c(\"Plate.ID\", \"Well\", \"OD\", \"Time\"), single.column.headers = c(\"\",\"A1\"), \n layout.sheet.headers = c(\"Strain\", \"Media Definition\"),\n silent = F, verbose = F, return.fit = F, overview.jpgs = T)\n",
"created" : 1425413468083.000,
"dirty" : false,
"encoding" : "UTF-8",
"folds" : "",
"hash" : "3533220190",
"id" : "E3886516",
"lastKnownWriteTime" : 1425422563,
"path" : "~/Documents/GCAT4/trunk/R/GCAT/R/addingParams.R",
"project_path" : "R/addingParams.R",
"properties" : {
"tempName" : "Untitled1"
},
"source_on_save" : false,
"type" : "r_source"
}

@ -0,0 +1,3 @@
{
"tempName" : "Untitled1"
}

@ -0,0 +1,3 @@
{
"tempName" : "Untitled1"
}

@ -0,0 +1,18 @@
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FNAMESPACE="972C75E0"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2FGCAT.main.R="11120BC5"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2FaddingParams.R="54A894D0"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Fclass.model.R="9127986F"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Fclass.well.R="8250000E"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Ffit.model.R="3F8DCF42"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Ffitted.calculations.R="E533697B"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Fmisc.R="8341E8EB"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Fnormalize.and.transform.R="EDBD9DE"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Fplot.fit.R="2E01469A"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Fslope.analysis.R="4E0B0FCA"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Ftable.output.R="B005EA5F"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2FR%2Ftable2well.R="A3297EED"
~%2FDocuments%2FGCAT4%2Ftrunk%2FR%2FGCAT%2Fman%2Fgcat.load.data.Rd="2A2D32C6"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2FGCAT.main.R="61AC4784"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2FaddingParams.R="DEDB5126"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2Fclass.model.R="8CEE19EC"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2Ffit.model.R="9D1E246E"

@ -0,0 +1,17 @@
Package: GCAT
Title: Growth Curve Analysis Tool
Description: Imports high-throughput growth curve data from microtiter
plate reads in .csv format and performs non-linear
regression using the Richards, Logistic, or Gompertz functions.
Richards is used unless the shape parameter is not significant.
Local polynomial regression can be performed as well.
GCAT estimates important growth characteristics
(specific growth rate, maximum growth capacity, and lag time)
for each well in a read.
The code was written by Jason Shao (no longer at GLBRC) and Nate DiPiazza.
Version: 5.0
Depends: pheatmap, gplots
Maintainer: Yury Bukhman <ybukhman@glbrc.wisc.edu>
License: LGPL-3
Date: 2014-02-10
Author: Jason Shao, Nate DiPiazza <ndipiazza@wisc.edu>, Minh Duc Bui, Yury V Bukhman

@ -0,0 +1,17 @@
Version: 1.0
RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default
EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 2
Encoding: UTF-8
RnwWeave: Sweave
LaTeX: pdfLaTeX
BuildType: Package
PackageInstallArgs: --no-multiarch --with-keep.source
PackageRoxygenize: rd

@ -0,0 +1,8 @@
# Default NAMESPACE created by R
# Remove the previous line if you edit this file
# Export all names
exportPattern(".")
# Import all packages listed as Imports or Depends
import("pheatmap", "gplots")

@ -0,0 +1,17 @@
Version: 1.0
RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default
EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 2
Encoding: UTF-8
RnwWeave: Sweave
LaTeX: pdfLaTeX
BuildType: Package
PackageInstallArgs: --no-multiarch --with-keep.source
PackageRoxygenize: rd

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,16 @@
{
"contents" : "#Copyright 2012 The Board of Regents of the University of Wisconsin System.\n#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,\n#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman\n#\n#This file is part of GCAT.\n#\n#GCAT is free software: you can redistribute it and/or modify\n#it under the terms of the GNU Lesser General Public License as published by\n#the Free Software Foundation, either version 3 of the License, or\n#(at your option) any later version.\n#\n#GCAT is distributed in the hope that it will be useful,\n#but WITHOUT ANY WARRANTY; without even the implied warranty of\n#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n#GNU Lesser General Public License for more details.\n#\n#You should have received a copy of the GNU Lesser General Public License \n#along with GCAT. If not, see <http://www.gnu.org/licenses/>.\n########################################################################\n# #\n# <model> class definition and functions. Objects contain equations #\n# and other information for parameterized growth curve models. #\n# #\n########################################################################\nsetClass(\"model\", representation(name = \"character\",\n expression = \"expression\",\n formula = \"formula\",\n guess = \"function\"))\n# Slots:\n# name - a simple description of the model.\n# expression - an object of class \"expression\" that evaluates the response (transformed OD) with respect to the variable Time.\n# formula - same as expression, but with y as the response.\n# guess - a function that computes initial guesses for the parameters given a well object with a valid \"screen.data\" slot\n# containing useable OD values and slope estimates\n# --------------------------------------------------------------------\n# Function to create a new model \t \n#' Model \n#' \n#' Function to create a new model \n#' @param name The name of the model \n#' @param expression Expression of the model \n#' @param formula The formula of this model \n#' @param guess The guess of this model \n#' @return The new model \nmodel = function(name, expression, formula, guess){\n new(\"model\", name = name, expression = expression, formula = formula, guess = guess)\n}\n\nloess.g = function(well,smooth.param=0.75){\n data = data.from(well)\n growth = data[,2]\n Time = data[,1]\n \n # predicted growth values to be used in estimating growth curve parameters\n loess.fit = loess(growth~Time,span=smooth.param)\n t = seq(from = min(Time), to = max(Time), by = (max(Time)-min(Time))/1000)\n y = predict(loess.fit, data.frame(Time=t))\n attr(y,\"names\") = NULL # need to remove the names to prevent them from showing up in the returned vector\n \n # Remove any data points where y has not been estimated\n filt = is.finite(y)\n t = t[filt]\n y = y[filt] # remove any NA etc\n \n # specific growth using loess to find max derivative\n delta.t = diff(t)\n dydt = diff(y)/delta.t\n u = max(dydt)\n \n # lower and upper asymptotes\n b = min(y)\n A = max(y) - min(y)\n \n # inflection point\n inflection.pt.index = which.max(dydt)\n inflection.time = t[inflection.pt.index]\n inflection.y = y[inflection.pt.index]\n \n # lag time\n lam = inflection.time - (inflection.y-b)/u\n \n # Return named array of estimates\n c(A = A, b = b, lam = lam, u = u)\n}\n\n\n",
"created" : 1423869204555.000,
"dirty" : false,
"encoding" : "UTF-8",
"folds" : "",
"hash" : "3423035371",
"id" : "EE21755B",
"lastKnownWriteTime" : 1423869219,
"path" : "~/Documents/GCAT4_old/trunk/R/GCAT/R/class.model.R",
"project_path" : "class.model.R",
"properties" : {
},
"source_on_save" : false,
"type" : "r_source"
}

@ -0,0 +1,7 @@
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2FGCAT.main.R="59ABD774"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2Fclass.model.R="6E6918EE"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2Ffit.model.R="5C623936"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2Ffitted.calculations.R="2ACDF6EF"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2Fnormalize.and.transform.R="F3CF638E"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2Fplot.fit.R="EFF3E540"
~%2FDocuments%2FGCAT4_old%2Ftrunk%2FR%2FGCAT%2FR%2Ftable2well.R="9402820B"

@ -0,0 +1,585 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
# GCAT version 5.00
# Notes by Jason
# 08/18/2011
# Initialization
PLATE.LETTERS = paste(rep(c("", LETTERS), each = 26), rep(LETTERS, 26), sep="")
global.version.number = packageDescription(pkg="GCAT")$Version
########################################################################
# #
# Top-level functions for analysis of screening data from .csv files. #
# #
########################################################################
# This functions is called directly by the user interface.
# They in turn call the main function <gcat.fit.main> (below) multiple times for each data file provided in <file.list>.
# Arguments:
# file.list - a list of full paths to .csv files. all files must be in the same format (see <single.plate>)
# single.plate - are the file in the single plate (wide) format vs. the multi-plate (long) format?
# layout.file - (optional) provide full path to a layout file with strain and media definitions (applies to all files in list)
# out.dir - name a directory to output the table of curve parameters to (defaults to working directory)
# graphic.dir - name a directory to output the images of the fitted curves to (defaults to subdirectory "pics" of <out.dir> above)
# add.constant- should be a numeric constant that will be added to each curve before the log transform (defaults to 1)
# blank.value - user can enter a blank OD measurement for uninoculated wells. if NULL, defaults to the value of the first OD measurement of each well.
# start.index - which timepoint should be used as the first one after inoculation (defaults to the 2th one)
# growth.cutoff - minimum threshold for curve growth.
# points.to.remove - a list of numbers referring to troublesome points that should be removed across all wells.
# remove.jumps - should the slope checking function be on the lookout for large jumps in OD?
# silent - should messages be returned to the console?
# verbose - should sub-functions return messages to console? (when I say verbose, I mean it!)
# Returns:
# if <return.fit> = F (default), avector of full paths to all the files generated by the function.
# otherwise, the fitted array of well objects.
# Use this function to analyze any set of .csv files using the same plate layout info.
#' Analyze screening growth data from the given .csv files.
#'
#' Top-level GCAT function
#'
#' @param file.list A list of full paths to .csv files. all files must be in the same format (see <single.plate>)
#' @param single.plate The file in the single plate (wide) format vs. the multi-plate (long) format?
#' @param layout.file Full path to a layout file with strain and media definitions (applies to all files in list)
#' @param out.dir A directory to output the table of curve parameters to (defaults to working directory)
#' @param graphic.dir A directory to output the images of the fitted curves to (defaults to subdirectory "pics" of <out.dir> above)
#' @param use.linear.param Whether to use linear parameters or not?
#' @param use.loess Whether to use LOESS model or not?
#' @param smooth.param Smoothing parameter for LOESS model.
#' @param add.constant A numeric constant that will be added to each curve before the log transform (defaults to 1)
#' @param blank.value User can enter a blank OD measurement for uninoculated wells. if NULL, defaults to the value of the first OD measurement of each well.
#' @param start.index Which timepoint should be used as the first one after inoculation (defaults to the 2th one)
#' @param growth.cutoff Minimum threshold for curve growth.
#' @param points.to.remove A list of numbers referring to troublesome points that should be removed across all wells.
#' @param remove.jumps Should the slope checking function be on the lookout for large jumps in OD?
#' @param time.input The time setting in which the current system is running?
#' @param plate.nrow The number of rows in a plate.
#' @param plate.ncol The number of columns in a plate.
#' @param input.skip.lines If specified, this number of lines shall be skipped from the top when reading the input file with read.csv
#' @param multi.column.headers The headers of the result tabular data when analyzing multiple plates at once.
#' @param single.column.headers The headers of the result tebaular data when analyzaing a single plate.
#' @param layout.sheet.headers The headers of the layout file?
#' @param silent Shoulde messages be returned to the console?
#' @param verbose Should sub-functions return messages to console? (when I say verbose, I mean it!)
#' @param overview.jpgs Should GCAT enable an overview image?
#'
#' @return A list of the output files.
gcat.analysis.main = function(file.list, single.plate, layout.file = NULL,
out.dir = getwd(), graphic.dir = paste(out.dir, "/pics", sep = ""),
add.constant = 0.1, blank.value = NULL, start.index = 2, growth.cutoff = 0.05,
use.linear.param = F, use.loess = F, smooth.param=0.1,
points.to.remove = 0, remove.jumps = F, time.input = NA,
plate.nrow = 8, plate.ncol = 12, input.skip.lines = 0,
multi.column.headers = c("Plate.ID", "Well", "OD", "Time"), single.column.headers = c("","A1"),
layout.sheet.headers = c("Strain", "Media Definition"),
silent = T, verbose = F, return.fit = F, overview.jpgs = T){
# MB: Prototyping system unwanted argument guarding. Proper function
# will be added in the future.
# Not the best solution.
if (is.na(time.input)) {
if (single.plate)
time.input = 1/3600
else
exception("Error: ", "time.input is NA.")
}
if (add.constant < 0)
exception("Error: ", "The constant r should not be negative.")
# End prototyping temporary solution.
upload.timestamp = strftime(Sys.time(), format="%Y-%m-%d %H:%M:%S") # Get a timestamp for the time of upload.
fitted.well.array.master = list()
source.file.list = c()
dim(fitted.well.array.master) = c(plate.nrow,plate.ncol,0)
dimnames(fitted.well.array.master) = list(PLATE.LETTERS[1:plate.nrow], 1:plate.ncol, c())
for(file.name in file.list){
# Call <gcat.fit.main> on the file with single plate options
fitted.well.array = try(gcat.fit.main(file.name = file.name, load.type = "csv",
single.plate = single.plate, layout.file = layout.file, start.index = start.index,
time.input = time.input, add.constant = add.constant, blank.value = blank.value,
growth.cutoff = growth.cutoff, points.to.remove = points.to.remove, remove.jumps = remove.jumps,
use.linear.param=use.linear.param, use.loess=use.loess, smooth.param=smooth.param,
plate.nrow = plate.nrow, plate.ncol = plate.ncol, multi.column.headers = multi.column.headers,
single.column.headers = single.column.headers, layout.sheet.headers = layout.sheet.headers,
input.skip.lines = input.skip.lines, silent = silent, verbose = verbose), silent = T)
# Return error message if the function fails.
if(class(fitted.well.array) == "try-error")
return(as.character(fitted.well.array))
}
# Add fitted well array onto existing fitted wells
fitted.well.array.master = gcat.append.arrays(fitted.well.array.master, fitted.well.array, plate.ncol, plate.nrow)
# Remove the "processed_" tag from file names and add to the list of source files.
source.file.list = c(source.file.list, basename(paste(strsplit(file.name, "processed_")[[1]],collapse="/")))
out.files = try(gcat.output.main(fitted.well.array.master, out.prefix = "output",
source.file.list = source.file.list, upload.timestamp = upload.timestamp,
growth.cutoff = growth.cutoff, add.constant = add.constant, blank.value = blank.value, start.index = start.index,
points.to.remove = points.to.remove, remove.jumps = remove.jumps,
out.dir = out.dir, graphic.dir = graphic.dir, overview.jpgs=overview.jpgs,
use.linear.param=use.linear.param, use.loess=use.loess, plate.ncol = plate.ncol, plate.nrow = plate.nrow,
silent = silent), silent = T)
# Return file list or error message otherwise return "successful analysis" message (?)
# file.list = c("Data was successfully analyzed.", file.list) # <--- yet to be implemented. causes errors downstream right now
if(class(out.files) == "try-error") return(as.character(out.files))
if(return.fit) return(fitted.well.array.master)
else return(out.files)
}
########################################################################
# #
# Main function for analysis of screening data from input tables. #
# #
########################################################################
# This is the main function that handles all the analyses for files in both single and multiple plate formats.
# It is called by the top level function <analysis.main>
#
# It then calls the following functions on each member of the array:
# - curve normalization and standardization: <gcat.start.times>, <remove.points>, <normalize.ODs>, <transform.ODs>,
# - curve shape analysis before model fitting: <fill.slopes>, <check.curve>, <classify.curve>
# - to fit a nonlinear model to the growth data: <fit.model>
# Finally, it returns the fitted array of well objects.
#' Main analysis function for GCAT
#'
#' This is the main function that handles all the analyses for data files in both single and multiple plate formats.
#' It is called by the top level function \code{gcat.analysis.main} along with \code{gcat.output.main}.
#'
#' @param file.name Complete path and file name of a comma-separated values (.csv) file containing growth curve data
#' in the multiple-plate (long) format.
#' @param input.data A list of tables representing input files read with \code{read.table}. Used to save time in cases
#' of running multiple analyses on the same dataset. If used, the function will ignore \code{file.name} entirely.
#' @param load.type .csv by default.
#' @param layout.file Specifies the location of a layout file containing identifying information.
#' @param single.plate Whether the GCAT is analyzing a single plate or not.
#' @param blank.value Blank OD measurement for uninoculated wells. By default(NULL), the value of the first OD
#'measurement in each well is used.
#' @param start.index Which timepoint should be used as the first one after inoculation?
#' @param time.input Either a character describing the format used to convert timestamps in the input to numbers
#' representing number of seconds (see \code{strptime}), or a factor to divide entries in the Time column by to get the
#' numbers of hours.
#' @param normalize.method Describes the method used by \code{normalize.ODs} to normalize cell density values using blank reads.
#' @param add.constant A value for r in the log(OD + r) transformation.
#' @param use.log Should the analysis use log on all values.
#' @param points.to.remove A vector of integers specifying which timepoints should be removed across all wells.
#' By default(0) none are marked for removal.
#' @param use.linear.param Should the linear parameter be used or not.
#' @param use.loess Should the loess model be used or not.
#' @param smooth.param If loess model is used, this parameter define the smoothing parameter for the loess model.
#' @param fall.cutoff A cutoff used by \code{check.slopes} to decide on thresholds for jumps and tanking.
#' @param growth.cutoff A threshold used by check.growth to decide whether a well displays growth.
#' @param remove.jumps Should jumps in OD detected by the subfunction \code{check.slopes}?
#' @param plate.nrow The number of rows in the input files.
#' @param plate.ncol The number of columns in the input files.
#' @param input.skip.lines If specified, this number of lines shall be skipped from the top when reading the input file with read.csv
#' @param multi.column.headers The headers of the column when analyzing multiple plates.
#' @param single.column.headers The headers of the column when analyzing a single plate.
#' @param layour.sheet.headers The headers of the layout file.
#' @param growth.model What growth model should be used?
#' @param backup.growth.model If the main growth model fails, the back up model will be used.
#' @param silent Surpress all messages.
#' @param verbose Display all messages when analyzing each well.
#'
#' @return An array of well objects
gcat.fit.main = function(file.name, input.data = NULL, load.type = "csv", layout.file = NULL,
single.plate = F, blank.value = NULL, start.index = 2, time.input = NA,
normalize.method = "default", add.constant = 1, use.log = T, points.to.remove = 0,
use.linear.param=F, use.loess=F, smooth.param=0.1,
fall.cutoff = -0.0025, growth.cutoff = 0.05, remove.jumps = F,
plate.nrow = 8, plate.ncol = 12, input.skip.lines = 0,
multi.column.headers = c("Plate.ID", "Well", "OD", "Time"), single.column.headers = c("","A1"),
layout.sheet.headers = c("Strain", "Media Definition"),
growth.model = NA, backup.growth.model = NA,
silent = F, verbose = F){
# Explanation of arguments:
# ---File Handling---
# file.name - full path to an excel spreadsheet, .csv or tab-delimited text file, in either the single or multiple-plate format
# input.data - use pre-loaded data set (output from <gcat.load.data> function only). will override <file.name> if not NULL
# load.type - supports "csv."
# layout.file - full path to a file containing the plate layout in the same format as <file.name>. will not be used if <load.type> is "xlsx"
# ---Input file format---
# single.plate - true denotes data in single-plate format, i.e. simple OD output. false denotes multiple-plate robotic screening output.
# note: reading directly from excel to R results in timestamps being converted to days.
# ---Normalization and Transforms---
# blank.value - user can enter a blank OD measurement for uninoculated wells. if NULL, defaults to the value of the first OD measurement of each well.
# start.index - which timepoint should be used as the first one after inoculation (defaults to the 2th one)
# normalize.method - how should each growth curve be normalized? allowed values are:
# "first": subtracts the first OD, assumed to be the blank, from all ODs
# "none": does nothing, assumes no blank. highly recommend log(OD+1) transform in this case.
# "average.first": forces all filled wells on each plate to match the average value at <start.index> (after subtracting the first OD)
# add.constant - a numeric constant that will be added to each curve before the log transform (defaults to 1)
# use.log - should a log transform be applied to the data after normalization?
# points.to.remove - a list of numbers referring to troublesome points that should be removed across all wells.
# ---Pre-fitting processing---
# fall.cutoff - a cutoff value for determining whether OD falls significantly between two timepoints. see <check.slopes> in prefit.processing.R for details.
# growth.cutoff - a cutoff value for determining whether a well contains a successfully growing culture or not.
# remove.jumps - should the slope checking function be on the lookout for large jumps in OD?
# ---Model fitting---
# model - which parametrized growth model to use? can be richards, gompertz, or logistic. models are defined as objects of class model, see "model.class.R"
# backup.model - which model should be used if fitting using <model> fails? should ideally be simpler than the main model (less parameters)
# ---Miscellanous input/output preferences---
# silent - should messages be returned to the console?
# verbose - should sub-functions return messages to console? (when I say verbose, I mean it!)
# unlog - should exported graphics be transformed back to the OD scale?
# return.fit - should the function return an array of wells? if not, it will return a list of generated files.
########################################################################
# Read from .csv file #
########################################################################
#
# The functions used here are found in table2well.R
if(!silent) cat("\nReading input files...")
# Read from .csv or tab-delimited text file using <gcat.load.data> (in load.R)
# if <layout.file> is provided, it will be used here.
plate.layout = NULL
# Read layout file if it is specified.
if(!is.null(layout.file)){
if(load.type=="csv") plate.layout = read.csv(layout.file,header=T,stringsAsFactors=F)
else plate.layout = read.table(layout.file,header=T,sep="\t",stringsAsFactors=F)
if(!silent) cat("\n\tAdded plate layout information from", layout.file, "\n")
}
# Load the data
well.array = try(gcat.load.data(file.name = file.name, input.data = input.data,
plate.layout = plate.layout, plate.nrow = plate.nrow, plate.ncol = plate.ncol,
input.skip.lines = input.skip.lines, multi.column.headers = multi.column.headers,
single.column.headers = single.column.headers, layout.sheet.headers = layout.sheet.headers,
blank.value = blank.value, start.index = start.index, single.plate = single.plate,
load.type = load.type, silent=silent),silent=silent)
# Return an error if there is a problem with file loading.
if (class(well.array) == "try-error")
stop("Error in <gcat.load.data>: ", well.array)
# !---At this point, <well.array> is an array of well objects, each containing raw data and media/strain information if provided---
# Attempt to apply time formatting to all wells in array
well.array = try(aapply(well.array, gcat.start.times, start.index = start.index, time.input = time.input),silent=silent)
# Return an error if there is a problem with time formatting
if (class(well.array) == "try-error")
stop("Error in <gcat.start.times>: ", well.array)
########################################################################
# Perform normalization and transformation of raw data #
########################################################################
#
# The functions used here are found in normalize.and.transform.R
if(!silent) cat("\nProcessing raw data...")
# Set all timepoints to active for now using "points.to.remove=0" argument with <remove.points>
# adds an extra column to the "well.array" slot of each well specifying which points to remove when data is retrieved from the well
well.array = aapply(well.array, remove.points, points = 0)
# Normalize ODs using specified method and adding a constant if desired.
# sets the "norm" slot of each well to a value to be subtracted from OD values whenever data is retrieved from the well
well.array = try(normalize.ODs(well.array, normalize.method = normalize.method,
start.index = start.index, blank.value = blank.value, add.constant = add.constant),silent=silent)
# Return an error if there is a problem with normalization
if (class(well.array) == "try-error")
stop("Error in <normalize.ODs>: ", well.array)
# Transform ODs on the logarithmic scale, regardless of whether <use.log> is true
# an extra column of log-transformed values is added to the "well.array" slot of each well
# the "use.log" slot of each well is set instead to determine whether the transformed values will be returned when data is retrieved from the well.
well.array = try(aapply(well.array, transform.ODs, start.index = start.index, blank.value = blank.value, use.log = use.log, constant.added = add.constant),silent=silent)
# Return an error if there is a problem with transformation
if (class(well.array) == "try-error")
stop("Error in <transform.ODs>: ", well.array)
# Remove specified timepoints across wells (use "points.to.remove=NULL" if no points to remove)
well.array = try(aapply(well.array, remove.points, points = points.to.remove),silent=silent)
# Return an error if there is a problem with point removal
if (class(well.array) == "try-error")
stop("Error in <remove.points>: ", well.array)
########################################################################
# Pre-fitting data processing (analysis of curve shapes) #
########################################################################
#
# The functions used here are found in slope.analysis.R
# Estimate slope at each timepoint
# add a column to the "well.array" slot of each well with the local slope at each timepoint
well.array = try(aapply(well.array, calculate.slopes, silent=!verbose),silent=silent)
# Return an error if there is a problem with slope calculation
if (class(well.array) == "try-error")
stop("Error in <calculate.slopes>: ", well.array)
# Check slopes for tanking and/or jumping behavior
# fills the "curve.par" slot of each well with <tanking.start>, denoting the timepoint at which tanking starts (if none, value is NA)
# uses <remove.points> to remove all points after <tanking.start>
# It will also fill the "jump.error" slot with a status message, and try to use an automated process to remove the
# erroneous points if <remove.jumps> is true (default false).
well.array = try(aapply(well.array, check.slopes, fall.cutoff = fall.cutoff, remove.jumps = remove.jumps, silent=!verbose, draw = F),silent=silent)
# Return an error if there is a problem with slope analysis
if (class(well.array) == "try-error")
stop("Error in <check.slopes>: ", well.array)
# Check curves for growth above cutoff
# fills the "curve.par" slot of each well with <no.growth>, denoting whether the well has no detectable growth.
well.array = try(aapply(well.array, check.growth, growth.cutoff = growth.cutoff, start.index = start.index),silent=silent)
# Return an error if there is a problem with growth.check
if (class(well.array) == "try-error")
stop("Error in <check.growth>: ", well.array)
########################################################################
# Fit parameterized models to data #
########################################################################
#
# The functions used here are found in fit.model.R
# Fit each well with the selected model and attempt to catch failed fittings with the backup model
# skips wells designated as <no.growth> above
# fills the "fit.info" slot of each well with "success," "failed," or "skipped"
# if fit was successful:
# fills the "equation" and "model.name" slots with the relevant info for the successful model
# fills the "fit.par" slot with fitted parameters if fit is successful
if(!silent) cat("\nFitting models to data...")
well.array = aapply(well.array, fit.model, growth.model=growth.model,
backup.growth.model = backup.growth.model, use.linear.param=use.linear.param,
use.loess=use.loess, smooth.param=smooth.param, silent=!verbose)
# Return an error if there is a problem with model fitting
if (class(well.array) == "try-error")
stop("Error in <fit.model>: ", well.array)
if(!silent) cat("\ndone!\n")
return(well.array)
}
########################################################################
# #
# Output function for generating files from fitted data. #
# #
########################################################################
#' Output function for generating files from fitted data.
#'
#' Handles files and directories, calls \code{table.out}, \code{plate.overview} and \code{view.fit}
#' to generate output tables and graphics.
#'
#' @param fitted.well.array A list of fitted well objects.
#' @param out.prefix Prefix that is in the name of output files.
#' @param blank.value User can enter a blank OD measurement for uninoculated wells.
#' If NULL, defaults to the value of the first OD measurement of each well.
#' @param start.index Which timepoint should be used as the first one after inoculation (defaults to the 2th one)
#' @param growth.cutoff Minimum threshold for curve growth.
#' @param points.to.remove A list of numbers referring to troublesome points that should be removed across all wells.
#' @param remove.jumps Should the slope checking function be on the lookout for large jumps in OD?
#' @param out.dir name a directory to output the table of curve parameters to (defaults to working directory)
#' @param graphic.dir name a directory to output the images of the fitted curves to
#' (defaults to subdirectory "pics" of <out.dir> above)
#' @param overview.jpgs should jpgs be generated for each plate with the overview graphic?
#' This is for backwards compatibility with the old web server.
#' @param silent should messages be returned to the console?
#' @param unlog should exported graphics be transformed back to the OD scale?
#' @param constant.added (should be the same value as add.constant above) -
#' used to readjust for the constant added during the log transform when plotting ODs.
#' @return A list of output files if success.
gcat.output.main = function(fitted.well.array, out.prefix = "", source.file.list, upload.timestamp = NULL,
add.constant, blank.value, start.index, growth.cutoff, points.to.remove, remove.jumps,
out.dir = getwd(), graphic.dir = paste(out.dir,"/pics",sep = ""), overview.jpgs = T,
use.linear.param=F, use.loess=F, plate.nrow = 8, plate.ncol = 12,
unlog = F, silent = T){
# Prepare timestamp for addition to output file names.
filename.timestamp = strftime(upload.timestamp, format="_%Y-%m-%d_%H.%M.%S")
########################################################################
# Prepare to write to output files #
########################################################################
if(is.null(blank.value)) blank.value = "First timepoint in well"
if(!silent) cat("\nFinding/creating new output directories...")
old.wd = getwd()
# Create output directory if it doesn't exist
if(class(try(setwd(out.dir), silent = T)) == "try-error"){
if(!silent) cat("\ncreating new output directory")
if (class(try(dir.create(out.dir))) == "try-error")
stop("Error creating new output directory!")
}
# Create graphics directory if it doesn't exist
if(class(try(setwd(graphic.dir), silent = T)) == "try-error"){
if(!silent) cat("\ncreating new graphics directory")
if (class(try(dir.create(graphic.dir))) == "try-error")
stop("Error creating new graphics directory!")
}
########################################################################
# Populate a data table with fit results and write to file #
########################################################################
#
# The functions used here are found in table.output.R
# Creates a table with a row for each well and a column for each of various identifiers and fitted and calculated parameters.
if(!silent) cat("\nPopulating data table...")
table.fit = try(table.out(fitted.well.array, filename.timestamp=filename.timestamp,use.linear.param=use.linear.param, use.loess=use.loess, constant.added=add.constant))
# Return an error if there is a problem with returning the table
if (class(fitted.well.array) == "try-error")
stop("Error in <table.out>: ", fitted.well.array)
# Set working directory to <out.dir>
if (class(try(setwd(out.dir))) == "try-error")
stop("Error setting directory for table output")
# Write output table to file in <out.dir>
table.filename = paste(out.dir, "/", out.prefix, "_gcat.fit", filename.timestamp, ".txt", sep = "")
if (class(try(write.table(table.fit, table.filename, sep = "\t", row.names = F))) == "try-error")
stop("Error writing tabular output")
# ---If successfully written, add postscript and start a list of generated files.
generated.files = table.filename
########################################################################
# Write individual fit and overview graphics to file #
########################################################################
#
# The functions used here are found in graphic.output.R
if(!silent) cat("\nDrawing graphics...")
# Set working directory to <graphic.dir>
if (class(try(setwd(graphic.dir))) == "try-error")
stop("Error setting directory for graphic output")
# Use function <pdf.by.plate> to write fit graphics to file.
graphic.files = try(pdf.by.plate(fitted.well.array, out.prefix=out.prefix, upload.timestamp = upload.timestamp,
unlog=unlog,constant.added=add.constant,overview.jpgs=overview.jpgs, plate.ncol = plate.ncol, plate.nrow = plate.nrow),silent=silent)
if (class(graphic.files) == "try-error")
stop("Error in <pdf.by.plate>: ", graphic.files)
# If successfully written, add to the list of generated files.
generated.files = c(generated.files, graphic.files)
########################################################################
# Add a postscript to the output table with legend and file info. #
########################################################################
#
sink(table.filename, append = T)
analysis.timestamp = strftime(Sys.time(), format="%Y-%m-%d %H:%M:%S")
cat("\n# Raw OD values are adjusted and log-transformed before fitting a growth curve as follows: log.OD = log(OD - blank + const) where blank is OD of blank medium and const is specified by the user (1 by default)",
"\n# Values are reported on the above 'log.OD' scale unless otherwise specified.",
"\n# .SE columns report standard errors of those values that are estimated directly as parameters of global sigmoid models.",
"\n# .OD columns report values back-transformed to the linear 'OD - blank' scale.",
"\n")
cat("\n# -- Explanation of columns --",
"\n# - model: Name of the model the well was successfully fit with (if any)",
"\n# - lag.time: Lag time estimate inferred from the fitted model",
"\n# - inflection.time: inflection time point of the growth curve when drawn on the log scale",
"\n# - max.spec.growth.rate: maximum specific growth rate estimate inferred from the fitted model. Estimated as the first derivative of the growth curve at inflection time point",
"\n# - baseline: growth curve baseline. Global sigmoid model: baseline is parameter 'b' of the model. LOESS: baseline is the same as the lowest predicted log.OD value",
"\n# - amplitude: difference between upper plateau and baseline values. Global sigmoid model: amplitude is parameter 'A' of the model. LOESS: amplitude = max.log.OD - min.log.OD",
"\n# - plateau: upper asymptote value of the fitted model. Global sigmoid model: plateau = b + A. LOESS: plateau = max.log.OD",
"\n# - inoc.log.OD: log.OD value at inoculation. Estimated value from the fitted model is used, rather than the actual measurement",
"\n# - max.log.OD: maximal log.OD value reached during the experiment. Estimated value from the fitted model is used rather than the actual measurement",
"\n# - projected.growth: maximal projected growth over inoculation value. Global sigmoid model: projected.growth = plateau - inoc.log.OD. LOESS: not reported",
"\n# - achieved.growth: maximal growth over inoculation value actually achieved during the experiment. achieved.growth = max.log.OD - inoc.log.OD",
"\n# - shape.par: shape parameter of the Richard equation",
"\n# - R.squared: goodness of fit metric. Also known as coefficient of determination. R.squared is usually between 0 and 1. A value close to 1 indicates good fit.",
"\n# - RSS: residual sum of squares. Another goodness of fit metric. Smaller values indicate better fits.",
"\n# - empty: (Well indicator)",
"\n# - an 'E' indicates that the well was empty and no growth was detected. ",
"\n# - an 'I' indicates that the well was inoculated and growth was detected above the threshold. ",
"\n# - an 'E*' indicates that the well was empty and growth was detected (possible contamination). ",
"\n# - an '!' indicates that the well was inoculated and no growth was detected. ",
"\n# - asymp.not.reached: shows “L” if the bottom asymptote (baseline) was not reached and “U” if the upper asymptote (plateau) was not reached.",
"\n# - tank: (Tanking indicator) If a number is present then the growth trend was determined to tank at that timepoint index.",
"\n# - other: Additional flag column. Displays information about whether jumps in OD were detected and what was done about them.",
"\n# - pdf.file and page.no: location of the figure for this well in the output .pdf files."
)
# Analysis information
cat("\n#\n# -- Source file information--",
"\n# ", paste(source.file.list, collapse = "\n# "),
"\n# analyzed using GCAT v", global.version.number,
"\n# request sent: ", upload.timestamp,
"\n# completed: ", analysis.timestamp,
"\n#\n# -- Parameters used in current analysis --",
"\n# - Constant added to log(OD + n) transformation:", add.constant,
"\n# - Blank OD value: ", blank.value,
"\n# - Index of inoculation timepoint", start.index,
"\n# - Minimum growth threshold:", growth.cutoff,
"\n# - Removed points:", paste(points.to.remove, collapse = " "),
"\n# - Jump detection:", remove.jumps)
sink()
########################################################################
# Return values to R #
########################################################################
#
if(!silent) cat("\ndone!")
setwd(old.wd)
# Return list of generated files
return(generated.files)
}

@ -0,0 +1,35 @@
setwd("~/Downloads/")
file.list = file.name = "YPDAFEXglucoseTests_2-25-10.csv"
layout.file = "YPDAFEXglucoseTests_2-25-10_Layout.csv"
single.plate = T
out.dir = getwd()
graphic.dir = paste(out.dir, "/pics", sep = "")
add.constant = 1
blank.value = NULL
start.index = 2
growth.cutoff = 0.05
use.linear.param = F
use.loess = F
smooth.param = 0.6
points.to.remove = 0
remove.jumps = F
silent = F
verbose = T
return.fit = F
overview.jpgs = T
plate.nrow = 8
plate.ncol = 12
input.skip.lines = 0
multi.column.headers = c("Plate ID", "Well", "OD", "Time")
single.column.headers = c("","A1")
layout.sheet.headers = c("Strain", "Media Definition")
t = gcat.analysis.main(file.list, single.plate, layout.file = NULL,
out.dir = getwd(), graphic.dir = paste(out.dir, "/pics", sep = ""),
add.constant = 1, blank.value = NULL, start.index = 2, growth.cutoff = 0.05,
use.linear.param=use.linear.param, use.loess=use.loess, smooth.param=0.1,
points.to.remove = 0, remove.jumps = F, time.input = NA,
plate.nrow = 8, plate.ncol = 12, input.skip.lines = 0,
multi.column.headers = c("Plate.ID", "Well", "OD", "Time"), single.column.headers = c("","A1"),
layout.sheet.headers = c("Strain", "Media Definition"),
silent = F, verbose = F, return.fit = F, overview.jpgs = T)

@ -0,0 +1,122 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
########################################################################
# #
# <model> class definition and functions. Objects contain equations #
# and other information for parameterized growth curve models. #
# #
########################################################################
setClass("model", representation(name = "character",
expression = "expression",
formula = "formula",
guess = "function"))
# Slots:
# name - a simple description of the model.
# expression - an object of class "expression" that evaluates the response (transformed OD) with respect to the variable Time.
# formula - same as expression, but with y as the response.
# guess - a function that computes initial guesses for the parameters given a well object with a valid "screen.data" slot
# containing useable OD values and slope estimates
# --------------------------------------------------------------------
###################### BEGIN PROTOTYPING ACCESSOR METHODS##############
# Minh: Let this code fragment be F1.
if (!isGeneric("getName")){
if (is.function("getName"))
fun <- getName
else
fun <- function(object) standardGeneric("getName")
setGeneric("getName", fun)
}
# End of F1
setMethod("getName", "model", function(object) object@name)
# Minh: Let this line be F2.
setGeneric("getExpression", function(object){standardGeneric("getExpression")})
# Question: How is F1 different from F2?
setMethod("getExpression", "model",
function(object){
return(object@expression)
})
setGeneric("getFormula", function(object){standeardGeneric("getFormula")})
setMethod("getFormula", "model",
function(object){
return(object@formula)
})
setGeneric("getGuess", function(object){standeardGeneric("getGuess")})
setMethod("getGuess", "model",
function(object){
return(object@guess)
})
######################## ENG PROTOTYPING ########################
# Function to create a new model
#' Model
#'
#' Function to create a new model
#' @param name The name of the model
#' @param expression Expression of the model
#' @param formula The formula of this model
#' @param guess The guess of this model
#' @return The new model
model = function(name, expression, formula, guess){
new("model", name = name, expression = expression, formula = formula, guess = guess)
}
loess.g = function(well,smooth.param=0.75){
#data = data.from(well)
#growth = data[,2]
#Time = data[,1]
Time = data.from(well)[,1]
# predicted growth values to be used in estimating growth curve parameters
loess.fit = loess(data.from(well)[,2]~Time,span=smooth.param)
t = seq(from = min(Time), to = max(Time), by = (max(Time)-min(Time))/1000)
y = predict(loess.fit, data.frame(Time=t))
attr(y,"names") = NULL # need to remove the names to prevent them from showing up in the returned vector
# Remove any data points where y has not been estimated
filt = is.finite(y)
t = t[filt]
y = y[filt] # remove any NA etc
# specific growth using loess to find max derivative
delta.t = diff(t)
dydt = diff(y)/delta.t
u = max(dydt)
# lower and upper asymptotes
b = min(y)
A = max(y) - min(y)
# inflection point
inflection.pt.index = which.max(dydt)
inflection.time = t[inflection.pt.index]
inflection.y = y[inflection.pt.index]
# lag time
lam = inflection.time - (inflection.y-b)/u
# Return named array of estimates
c(A = A, b = b, lam = lam, u = u)
}

@ -0,0 +1,435 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
########################################################################
# #
# <well> class definition and functions. Objects contain raw #
# data from screening runs on single wells from 96-well plates, and #
# other slots for processing and model-fitting details. #
# #
########################################################################
# Windows OS compatibility
Sys.setlocale(locale="C")
#require(RExcelXML)
# Treat nls and loess as S4 classes to avoid warnings
setOldClass("nls")
setOldClass("loess")
setClass("well", representation(position = "character",
well.info = "list",
screen.data = "data.frame",
start.index = "numeric",
use.log = "logical",
norm = "numeric",
curve.par = "list",
fit.par = "list",
fit.std.err = "list",
equation = "expression",
model.name = "character",
fit.info = "character",
add.info = "character",
inflection.time = "numeric",
rss = "numeric",
loess = "loess",
nls = "nls"))
# Slots:
# position - 3-member vector containing identifying information for the well: row (letters), column (numbers) and plate ID.
# well.info - a list containing strain and media names if provided
# screen.data - a data frame with Time and raw OD values. This is the only slot that is filled upon creation of a well object.
# as different functions are run on the well the data frame gets filled with additional columns.
# use.log - a single logical value denoting whether to return log-transformed values when data is requested from the well
# norm - a value to subtract from all OD values before returning data. filled by <normalize.ODs> (see normalize.and.transform.R)
# curve.par - a list of parameters that denote whether the well is empty, whether it contains ODs indicating a viable culture, whether it tanks at a certain timepoint.
# if model fitting using <fit.model> is successful:
# fit.par - will be a list containing the fitted model parameters
# fit.std.err - will be a list containing the standard errors for the fitted model parameters
# equation - will contain an expression for evaluating the successfully fitted model
# model.name - will contain the name of the successfully fit model
# fit.info - a message with info about whether the fit was successful, failed, or skipped.
# add.info - a message with info about whether jumps in OD were detected or removed, or if ODs were detected below the blank OD.
# inflection.time - the Time value at the point where the specific growth is located. no longer a formula param NWD
# rss - residual sum of squares
# loess - object returned by running loess on the normalized well data
# nls - object returned by running nls on the normalized well data
setGeneric("getPosition", function(object){standeardGeneric("getPosition")})
setMethod("getPosition", "well",
function(object){
return(object@position)
})
setGeneric("getWellInfo", function(object){standeardGeneric("getWellInfo")})
setMethod("getWellInfo", "well",
function(object){
return(object@well.info)
})
setGeneric("getScreenData", function(object){standeardGeneric("getScreenData")})
setMethod("getScreenData", "well",
function(object){
return(object@screen.data)
})
setGeneric("getStartIndex", function(object){standeardGeneric("getStartIndex")})
setMethod("getStartIndex", "well",
function(object){
return(object@start.index)
})
setGeneric("getUseLog", function(object){standeardGeneric("getUseLog")})
setMethod("getUseLog", "well",
function(object){
return(object@use.log)
})
setGeneric("getNorm", function(object){standeardGeneric("getNorm")})
setMethod("getNorm", "well",
function(object){
return(object@norm)
})
setGeneric("getCurPar", function(object){standeardGeneric("getCurPar")})
setMethod("getCurPar", "well",
function(object){
return(object@curve.par)
})
setGeneric("getFitErr", function(object){standeardGeneric("getFitErr")})
setMethod("getFitErr", "well",
function(object){
return(object@fit.std.err)
})
setGeneric("getEquation", function(object){standeardGeneric("getEquation")})
setMethod("getEquation", "well",
function(object){
return(object@equation)
})
setGeneric("getModelName", function(object){standeardGeneric("getModelName")})
setMethod("getModelName", "well",
function(object){
return(object@model.name)
})
setGeneric("getFitInfo", function(object){standeardGeneric("getFitInfo")})
setMethod("getFitInfo", "well",
function(object){
return(object@fit.info)
})
setGeneric("getAddInfo", function(object){standeardGeneric("getAddInfo")})
setMethod("getAddInfo", "well",
function(object){
return(object@add.info)
})
setGeneric("getInflectionTime", function(object){standeardGeneric("getInflectionTime")})
setMethod("getInflectionTime", "well",
function(object){
return(object@inflection.time)
})
setGeneric("getRSS", function(object){standeardGeneric("getRSS")})
setMethod("getRSS", "well",
function(object){
return(object@rss)
})
setGeneric("getLoess", function(object){standeardGeneric("getLoess")})
setMethod("getLoess", "well",
function(object){
return(object@loess)
})
setGeneric("getnls", function(object){standeardGeneric("getnls")})
setMethod("getnls", "well",
function(object){
return(object@nls)
})
setGeneric("getFitPar", function(object){standeardGeneric("getFitPar")})
setMethod("getFitPar", "well",
function(object){
return(object@fit.par)
})
# --------------------------------------------------------------------
# Function to create a new well (requires only Time and OD vectors, which will fill slot "screen.data")
# slots "nls" and "loess" are initialized to empty lists
well = function(Time = NULL, OD = NULL){
x = list()
class(x) = "loess"
y = list()
class(y) = "nls"
new("well", screen.data = data.frame(Time, OD, stringsAsFactors=F), loess=x, nls=y)
}
# -----------------------------------------------------------------------
#### A show method for well ####
setMethod("show", "well",
function(object) {
print("Object of class well")
print("@position:")
print(object@position)
print("@well.info:")
print(object@well.info)
print("@screen.data:")
print(head(object@screen.data))
print("...")
print(paste(nrow(object@screen.data),"rows of data"))
print(paste("@start.index:",object@start.index))
print(paste("@use.log:",object@use.log))
print(paste("@norm:",object@norm))
print("@curve.par:")
print(object@curve.par)
print("@fit.par:")
print(object@fit.par)
print("@fit.std.err:")
print(object@fit.std.err)
print(paste("@equation:",object@equation))
print(paste("@model.name:",object@model.name))
print(paste("@fit.info:",object@fit.info))
print(paste("@add.info:",object@add.info))
print(paste("@inflection.time:",object@inflection.time))
print(paste("@rss:",object@rss))
if (length(object@nls) > 0) {
print("@nls:")
print(object@nls)
} else {
print("no nls model")
}
if (length(object@loess) > 0) {
print("@loess:")
print(object@loess)
} else {
print("no loess model")
}
}
)
#### A plot method for well ####
# x - object of class well
# y - not used
# constant.added - used to readjust for the constant added during the log transform: log.OD = log(OD - blank + constant.added)
# xlim - x axis limits, vector of length 2
# ylim - y axis limits, vector of length 2
# scale - determines the font scale for the entire graph. all cex values are calculated from this
# number.points - should points be labeled with numeric indices?
# draw.symbols - should <check.slopes> be called on the well and markings drawn on the graph?
# show.text - show R^2 and growth curve parameters as text on the plot
# show.calc - draw lines that illustrate growth curve parameters
# draw.guess - initial guess model. Drawn if specified
# well.number - the number of the well in an array of wells
# ... - additional arguments passed to the generic plot function
setMethod("plot",
signature(x = "well", y="missing"),
function (x, y, constant.added = 1.0, xlim = NULL, ylim = NULL,
well.number = NULL, scale = 1, number.points = T, draw.symbols = F, show.text = T, show.calc = T, draw.guess = NULL, ...)
{
# Determine the boundaries for the axes (if user did not specify them)
if(is.null(ylim)){
min.y = min(data.from(x, remove = F, remove.tanking = F)[,2], na.rm = T)
min.y = min(min.y, x@fit.par$b)
max.y = max(data.from(x, remove = F, remove.tanking = F)[,2], na.rm = T)
max.y = max(max.y, x@fit.par$b + x@fit.par$A)
ylim = c(min.y, min.y + (max.y-min.y)*1.15)
}
if(is.null(xlim)){
min.x = min(data.from(x, remove = F, remove.tanking = F)[,1], na.rm = T)
max.x = max(data.from(x, remove = F, remove.tanking = F)[,1], na.rm = T)
xlim = c(min.x - 0.05 * (max.x-min.x), max.x)
}
# Title of plot: [well number] plate name; well name;
# strain name; media name
main = paste(plate.name(x), " ", well.name(x), "\n",
strain.name(x), "; ", media.name(x), sep = "")
if (!is.null(well.number)) main = paste("[", well.number , "] ", main, sep="")
# Draw the data and symbols if <draw.symbols> is true.
plot.data(x, main = main, scale = scale, constant.added=constant.added,
number.points = number.points, draw.symbols = draw.symbols, xlim = xlim, ylim = ylim, ...)
# Draw the fitted model.
plot.model(x, scale = scale, constant.added=constant.added)
# Draw text info if specified.
if(show.text)
draw.text(x, scale = scale * 0.5, xlim = xlim, ylim = ylim,...)
# Show calculated parameters if specified.
if (show.calc)
draw.calc.par(x, scale = scale * 0.5, constant.added = constant.added)
# Draw initial guess if a model is specified.
if (class(draw.guess) == "model"){
Time = data.from(x)$Time
guess = eval(getExpression(draw.guess), as.list(getGuess(draw.guess)(x)))
try(lines(Time, guess, col = "brown2"), silent = T)
}
}
)
########################################################################
# Some miscellaneous functions to extract info from well objects #
# Most of these return a single value from the well. #
########################################################################
#
# Since many of these need to be applied to all wells over an array, while conserving the dimensions of
# that array, this file includes a wrapper function <aapply> (see bottom of file).
plate.name = function(well)
getPosition(well)[1]
# Return the full alphanumeric well name (with leading zeros if applicable)
well.name = function(well){
row = getPosition(well)[2]
col = as.numeric(getPosition(well)[3])
if (col>9)
col = as.character(col)
else
col = paste("0", col, sep = "")
paste(row,col,sep = "")
}
is.empty = function(well)
getCurPar(well)$empty.well
lacks.growth = function(well)
getCurPar(well)$no.growth
tanking.start = function(well)
getCurPar(well)$tanking.start
removed.points = function(well)
(1:length(well))[getScreenData(well)$Remove]
remaining.points = function(well,...){
as.numeric(rownames(data.from(well,...)))
}
strain.name = function(well){
if(is.null(getWellInfo(well)$Strain))
return("<NA>")
else
return(getWellInfo(well)$Strain)
}
media.name = function(well){
if(is.null(getWellInfo(well)$Media))
return("<NA>")
else
return(getWellInfo(well)$Media)
}
raw.data = function(well)
data.from(well, remove.tanking = F, remove = F, na.rm = F, raw.data = T)
contains.fit = function(well)
length(getFitPar(well)) > 0
setMethod("length", signature(x = "well"), function(x) length(x@screen.data[,1]))
# The <data.from> function has some options: by default it returns a two-column data frame with time and OD
# (or log OD if the <use.log> slot is true in the object), after normalization to the value specified in <norm> slot.
# - With <remove> set to true the rows specified in the <remove> column of the <screen.data> slot are not returned.
# - With <remove.tanking> set to true all the rows after the <tanking.start> index are removed.
# - Setting <raw.data> to true overrides all these settings and just returns 2 columns with Time and Raw OD.
data.from = function(well, remove = T, remove.tanking = T, raw.data = F, na.rm = F){
if (length(getUseLog(well)) == 0)
OD.column = "OD"
else if (getUseLog(well))
OD.column = "log.OD"
else
OD.column = "OD"
if (raw.data){
OD.column = "OD"
norm = 0
}
else if (!getUseLog(well))
norm = getNorm(well)
else
norm = 0
if(remove.tanking & is.numeric(tanking.start(well)))
well = remove.points(well, (tanking.start(well)):length(well))
if (!remove | is.null(getScreenData(well)$Remove))
output = getScreenData(well)[c("Time", OD.column)]
else
output = getScreenData(well)[!getScreenData(well)$Remove ,c("Time", OD.column)]
output[,2] = output[,2] - norm
if (!raw.data){
if (!length(getUseLog(well)))
names(output)[2] = "Corrected.OD"
if (!getUseLog(well))
names(output)[2] = "Corrected.OD"
}
if (na.rm)
output[!is.na(output[,2]),]
else
output
}
# Functions much like <data.from> but gives a single vector containing the
# slope at each point. Has a parameter allowing removal of NA values.
slopes = function(well, remove = T, remove.tanking = T, na.rm = F){
if(remove.tanking & is.numeric(tanking.start(well)))
well = remove.points(well, (tanking.start(well)):length(well))
if (!remove | is.null(getScreenData(well)$Remove))
output = getScreenData(well)$Slope
else
output = getScreenData(well)$Slope[!getScreenData(well)$Remove]
if (na.rm)
output[!is.na(output)]
else
output
}
# -----------------------------------------------------------------------
# Well array functions: these must be used on entire arrays of well objects
# instead of single ones.
plate.names = function(well.array)
dimnames(well.array)[[3]]
tanking.start.values = function(well.array, array = F){
if (array)
aapply(well.array, function(well) tanking.start(well))
else
sapply(well.array, function(well) tanking.start(well))
}

@ -0,0 +1,257 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
########################################################################
# #
# Fit a parameterized model to the growth data in a well object. #
# #
# There are now three modelling choices: #
# 1) Sigmoid model (no linear param c) #
# 2) Linear Sigmoid model #
# 3) Loess (with optional smoothing parameter) #
########################################################################
#' fit.model
#'
#' This function will use the function stored in the "guess" slot of \code{growth.model} to calculate initial guesses
#' for growth.model parameters, then it will use the "formula" slot with \code{nls} to fit a non-linear least squares
#' \code{growth.model} or Local Polynomial Regression Fitting to the data. Richards model is first fitted.
#' If the shape parameter is statisticaly significant then Richards is used. If it is within 2 SE of 1 or Zero than
#' a simpler model is preferred. If the Richards fit fails, then Logistic is tried. If it fails, Gompertz is tried.
#' Model fit failure is reported if none of the models can sucessfully fit the data
#'
#' @param input.well The well needed to be fitted with the given model.
#' @param growth.model What growth model should be used?
#' @param backup.growth.model If \code{gowth.mode} fails, this model will be used.
#' @param fit.if.no.growth should the function attempt to fit a well even if there was no growth detected? default is F
#' @param silent output back to R console?
#' @param use.linear.param: Should an additional linear parameter (c) be used when fitting the data to the model?
#' @param use.loess: Should Local Polynomial Regression Fitting (loess function) be used instead of nls?
#' @param smooth.param: If loess is used, an optional smoothing parameter. Default is .6
fit.model = function(input.well, growth.model, backup.growth.model = NULL, fit.if.no.growth = F,
use.linear.param=F, use.loess=F, smooth.param, silent = T){
# Conditional breakpoint: go into debugging mode when fitting a specific well
#if (input.well@position["row"] == "A" && input.well@position["col"] == "12") browser()
# Change all relevant slots to <NA> or blank values
input.well@model.name = "<NA>"
input.well@fit.par = list()
input.well@equation = expression()
# Get OD vs. time data from well
input.data = data.from(input.well, na.rm = T)
# Skip well if <no.growth> in slot "curve.par" is set to true, and <fit.if.no.growth> is false.
if(!fit.if.no.growth & lacks.growth(input.well)){
input.well@fit.info = "skipped - no growth in well."
if (!silent)
cat(plate.name(input.well), well.name(input.well), ":", input.well@fit.info, "\n")
return(input.well)
}
# Skip well if there are fewer than 5 data points left in the analysis.
if (length(input.data$Time) < 5){
input.well@fit.info = "skipped - not enough points."
if (!silent)
cat(plate.name(input.well), well.name(input.well), ":", input.well@fit.info, "\n")
return(input.well)
}
# Change column headers of input.data to the more general "Time" vs. "y"
names(input.data) = c("Time", "y")
# Set a lower bound for nls model parameters A and b to slightly lower than min(y)
low.y = min(input.data$y,na.rm=T)
low.y = low.y - 0.1*abs(low.y)
# Extract the model formula from <growth.model> (slot "formula")
# Use the function from slot "guess" to calculate initial guesses for model parameters based on slope estimates in <input.well>
# Attempt to fit a nonlinear least squares odel using <nls>
# Creating loess, logistics, richards, and gompertz model.
loess.e = expression("loess")
loess.f = formula(Time ~ y)
loess.model = model("local polynomial regression fit.", loess.e, loess.f, loess.g)
### Testing accessor method for class model.
#print(getName(loess.model))
#print(getFormula(loess.model))
#print(getGuess(loess.model))
### End testing ###
remove(loess.e, loess.f)
########################################################################
# Create the logistic 4-parameter model (when v ~ 1) #
########################################################################
logistic.g = function(well,smooth.param=0.75) {
loess.model@guess(well,smooth.param)
}
########################################################################
# Create the Richards 5-parameter model #
########################################################################
richards.g = function(well,smooth.param=0.75){
c(loess.model@guess(well,smooth.param),v=0.5)
}
########################################################################
# Create the Gompertz model (might be useful as a #
# limiting case of Richards model when v ~ 0) #
########################################################################
gompertz.g = function(well,smooth.param=0.75){
loess.model@guess(well,smooth.param)
}
logistic.e = expression((A/(1+exp((4*u/A)*(lam-Time)+2)))+b)
logistic.f = formula(y~(A/(1+exp((4*u/A)*(lam-Time)+2)))+b)
logistic = model("logistic sigmoid.", logistic.e, logistic.f, logistic.g)
remove(logistic.e, logistic.f, logistic.g)
richards.e = expression(A*(1+v*exp(1+v)*exp((u/A)*(1+v)**(1+1/v)*(lam-Time)))**(-1/v)+b)
richards.f = formula(y~A*(1+v*exp(1+v)*exp((u/A)*(1+v)**(1+1/v)*(lam-Time)))**(-1/v)+b)
richards = model("richards sigmoid", richards.e, richards.f, richards.g)
remove(richards.e, richards.f, richards.g)
gompertz.e = expression(A*exp(-exp((u*exp(1)/A)*(lam-Time)+1))+b)
gompertz.f = formula(y~A*exp(-exp((u*exp(1)/A)*(lam-Time)+1))+b)
gompertz = model("gompertz sigmoid", gompertz.e, gompertz.f, gompertz.g)
remove(gompertz.e, gompertz.f, gompertz.g)
# 3) Loess (with optional smoothing parameter)
if(use.loess){
number.of.points = nrow(input.well@screen.data)
if (smooth.param <= 1/number.of.points)
exception("Invalid input", "Smoothing parameter is out of range.")
fit = try(loess(y~Time, data=input.data, span=smooth.param), silent=TRUE)
input.well@loess = fit
if (class(fit) != "loess") stop("loess fit failed on well", paste(input.well@position,collapse=" "))
input.well@fit.info = "Loess model fit successfully."
input.well@model.name = loess.model@name
input.well@equation = loess.model@expression
# There are no estimated params, so just return the initial guesses
input.well@fit.par = append(as.list(loess.model@guess(input.well,smooth.param)),list("smoothing parameter"=smooth.param))
# Note: since there are no params there are no Std. Errors either
input.well@inflection.time = inflection.time(input.well)
# calculate Rss for loess
input.well@rss = sum((input.data$y-predict(fit))**2)
} else {
fit = fit.nls.model(input.well,richards)
# should we use richards? Yes, unless the v param is close to 1 or Zero
if(class(fit) == "nls"){
rich.fit = fit # if v is significant or other fits consequently fail
fit.par = as.list(coef(fit))
# is fit similar to the Logistic?
if(fit.par$v >= .5 && abs(fit.par$v-1) < 2*summary(fit)$parameters["v","Std. Error"] ){
fit = fit.nls.model(input.well,logistic)
input.well@fit.info = paste("Logistic model fit successfully.")
input.well@model.name = logistic@name
input.well@equation = logistic@expression
# is fit similar to Gompertz?
}else if(fit.par$v < .5 && abs(fit.par$v) < 2*summary(fit)$parameters["v","Std. Error"]){
fit = fit.nls.model(input.well,gompertz)
input.well@fit.info = "Gompertz model fit successfully."
input.well@model.name = gompertz@name
input.well@equation = gompertz@expression
# v param is significant. stick with Richards
}else{
input.well@fit.info = paste("Richards model fit successfully.")
input.well@model.name = richards@name
input.well@equation = richards@expression
}
# just in case logistic or gompertz failed to fit...
if(class(fit) != "nls"){
fit = rich.fit
input.well@fit.info = paste("Richards model fit successfully.")
input.well@model.name = richards@name
input.well@equation = richards@expression
}
} else{
# Richards failed. try backup models
fit = fit.nls.model(input.well,logistic)
if(class(fit) != "nls"){
# last resort try gompertz
fit = fit.nls.model(input.well,gompertz)
if(class(fit) != "nls"){
input.well@fit.info = "Model fitting failed."
} else{
input.well@fit.info = "Gompertz model fit successfully."
input.well@model.name = gompertz@name
input.well@equation = gompertz@expression
}
}else{
input.well@fit.info = paste("Logistic model fit successfully.")
input.well@model.name = logistic@name
input.well@equation = logistic@expression
}
}
}
# If no error was reported by the model fitting, add coefficients to slot "fit.par",
# Also add the Standard Errors for each parameter
if (class(fit) == "nls"){
input.well@nls = fit
input.well@inflection.time = inflection.time(input.well)
input.well@fit.par = as.list(coef(fit))
rSs = sum(residuals(fit)**2)
if (length(rSs) != 0)
input.well@rss = rSs
else
input.well@rss = NA
input.well@fit.std.err = as.list(summary(fit)$parameters[,"Std. Error"])
}
# Output to console
if (!silent)
cat(plate.name(input.well), well.name(input.well), ":", input.well@fit.info, "\n")
return(input.well)
}
# Fit nls model to a well using a specified model
# Arguments:
# input.well: object of class well
# model: object of class model, e.g. richards, gompertz or logistic
fit.nls.model <- function (input.well, model) {
# Get OD vs. time data from well
input.data = data.from(input.well, na.rm = T)
# Change column headers of input.data to the more general "Time" vs. "y"
names(input.data) = c("Time", "y")
# Set a lower bound for nls model parameters A and b to slightly lower than min(y)
low.y = min(input.data$y,na.rm=T)
low.y = low.y - 0.1*abs(low.y)
# Set the initial guess
start = model@guess(input.well)
# Set lower bounds
if (length(start) == 4) {
lower = c(low.y,low.y,0,0)
} else if (length(start) == 5) {
lower = c(low.y,low.y,0,0,0.07)
} else {
stop("Unsupported model: ", model@name)
}
# Make sure initial guess values do not violate lower bounds
start[start < lower] = lower[start < lower]
# Fit the model
try(nls(formula = model@formula, data = input.data, start = start, algorithm="port", lower=lower), silent = TRUE)
}

@ -0,0 +1,381 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
########################################################################
# #
# Functions to calculate various things about wells based on fit model #
# #
########################################################################
# S3 generic
lag <- function(fitted.well, ...)
{
UseMethod("lag")
}
#
# Common arguments:
# fitted.well - should be a well containing the results of <fit.model>, most functions will return NA if well has not been fit yet.
# unlog - should the value be returned on the linear scale as opposed to the log-transformed scale?
# constant.added - for returning values on the linear scale, what was the constant added before the log transform?
# digits - passed to the <round> function, default is no rounding (infinity digits)
unlog = function(x, constant.added) {
########################################################################
# Transform values back to OD scale #
########################################################################
exp(x) - constant.added
}
well.eval = function(fitted.well, Time = NULL){
########################################################################
# Evaluate estimated OD at any timepoints using the fitted model #
########################################################################
# If no timepoints are provided, use the ones collected in the experiment itself.
if(!is.numeric(Time))
Time = data.from(fitted.well)$Time
# Use of equation is deprecated. Use nls and loess models stored in the well object instead
# Attempt to use <eval> with the fitted equation and parameters to get estimates for OD at the given timepoints.
#output = try(eval(fitted.well@equation, fitted.well@fit.par), silent = T)
# Predict log.OD value(s) using nls model if present. If no nls model, try using loess.
if (length(fitted.well@nls)>0) {
output = try(predict(fitted.well@nls,list(Time=Time)),silent=T)
} else if (length(fitted.well@loess)>0) {
output = try(predict(fitted.well@loess,Time),silent=T)
} else {
output = NA
}
# Return values. If OD evaluation failed for any reason, return NULL.
if (is.numeric(output)){
return(output)
} else {
return(NULL)
}
}
model.residuals = function(fitted.well, unlog = F){
########################################################################
# Evaluate model residuals using the measured vs. fitted log.OD values #
########################################################################
measured.OD = data.from(fitted.well)[,2]
# Use <well.eval> with no Time argument to get fitted OD values at measured timepoints.
predicted.OD = well.eval(fitted.well)
# If all values are valid, return the differences
if (!is.numeric(predicted.OD))
return(NA)
else
return(measured.OD - predicted.OD)
}
dev.from.mean = function(fitted.well){
########################################################################
# Evaluate deviations of log.OD values from the mean #
########################################################################
measured.ODs = data.from(fitted.well,remove=T,na.rm=T)[,2]
# Get the mean values of these measured ODs.
mean.ODs = mean(measured.ODs)
if (!is.numeric(mean.ODs))
return (NA)
else
return (measured.ODs - mean.ODs)
}
rss = function(fitted.well){
#######################################################################
# Get the residual sum of square. #
#######################################################################
if (length(fitted.well@rss) == 0)
return (NA)
else
return (fitted.well@rss)
}
model.good.fit = function(fitted.well, digits = Inf){
########################################################################
# Calculate a metric for fit accuracy using squared residuals #
########################################################################
# Sum of squared residuals
RSS = rss(fitted.well)
# Total sum of squared
tot = sum(dev.from.mean(fitted.well)^2)
# Coefficient of determination
return (1 - RSS/tot)
}
parameter.text = function(fitted.well){
########################################################################
# Output a string with values of fitted parameters #
########################################################################
# Get a list of fitted parameters
fit.par = fitted.well@fit.par
# Giving the parameter text descriptive names.
if (length(fitted.well@fit.par) != 0){
names(fit.par)[1] = "A"
names(fit.par)[2] = "b"
names(fit.par)[3] = "lambda"
names(fit.par)[4] = "max.spec.growth.rate"
if (fitted.well@model.name == "richards sigmoid"){
names(fit.par)[5] = "shape.par"
}
if (fitted.well@model.name == "richards sigmoid with linear par."){
names(fit.par)[5] = "shape.param"
names(fit.par)[6] = "linear term"
}
if (fitted.well@model.name == "logistic sigmoid with linear par.")
names(fit.par)[5] = "linear.term"
# if loess, just show smoothing param
if(fitted.well@model.name == "local polynomial regression fit.")
fit.par = fitted.well@fit.par["smoothing parameter"]
}
# Return nothing if the list is empty. Otherwise, concatenate the terms in the list with the parameter names.
if(!is.list(fit.par))
return()
else{
output = ""
i = 1
while(i <= length(fit.par)){
output = paste(output, names(fit.par)[i], "=", round(as.numeric(fit.par[i]),3), "; ", sep = "")
i = i + 1
if (i %% 6 == 0)
output = paste(output, "\n")
}
output
}
}
max.spec.growth.rate = function(fitted.well, digits = Inf, ...){
########################################################################
# Calculate maximum specific growth rate #
########################################################################
if(length(fitted.well@fit.par) == 0)
return(NA)
round(fitted.well@fit.par$u,digits)
}
plateau = function(fitted.well, digits = Inf){
########################################################################
# Calculate plateau log.OD from fitted parameters #
########################################################################
if(length(fitted.well@fit.par) == 0)
return(NA)
plat = fitted.well@fit.par$A + fitted.well@fit.par$b
if (!is.numeric(plat)) {
plat = NA
} else {
plat = round(plat, digits)
}
return(plat)
}
baseline = function(fitted.well, digits = Inf){
########################################################################
# Calculate baseline log.OD from fitted parameters #
########################################################################
if(length(fitted.well@fit.par) == 0)
return(NA)
base = fitted.well@fit.par$b
# If A (plateau OD) is invalid, return NA.
if (!is.numeric(fitted.well@fit.par$A))
base = NA
# If b (baseline OD) is invalid but plateau OD was valid, return zero.
else if (!is.numeric(base))
base = 0
else{
base = round(base, digits)
}
return(base)
}
inoc.log.OD = function(fitted.well, digits = Inf){
########################################################################
# Calculate log.OD at inoculation from fitted parameters #
########################################################################
# Evaluated the fitted model at the inoculation timepoint (should be zero from using <start.times> from table2wells.R)
if (is.null(well.eval(fitted.well)))
return(NA)
else{
inoc.time = fitted.well@screen.data$Time[fitted.well@start.index]
inoc.log.OD = well.eval(fitted.well, inoc.time)
if (is.na(inoc.log.OD)) inoc.log.OD = fitted.well@fit.par$b # need this in a special case: loess fits with start.index = 1
return(round(inoc.log.OD, digits))
}
}
max.log.OD = function(fitted.well, digits = Inf, ...){
########################################################################
# Calculate max log.OD from model fit #
########################################################################
# Evaluated the fitted model at the final timepoint (just the last valid timepoint in the experiment)
if (is.null(well.eval(fitted.well)))
return(NA)
else{
return(round(max(well.eval(fitted.well),na.rm=T), digits))
}
}
projected.growth = function(fitted.well,digits=Inf) {
########################################################################
# Calculate projected growth: plateau minus the inoculated log.OD #
########################################################################
plateau(fitted.well,digits) - inoc.log.OD(fitted.well,digits)
}
projected.growth.OD = function(fitted.well,constant.added,digits=Inf) {
########################################################################
# Calculate projected growth: plateau minus the inoculated log.OD #
########################################################################
value = unlog(plateau(fitted.well),constant.added) - unlog(inoc.log.OD(fitted.well),constant.added)
round(value,digits)
}
achieved.growth = function(fitted.well,digits=Inf) {
########################################################################
# Calculate achieved growth: max.log.OD minus the inoculated log.OD #
########################################################################
max.log.OD(fitted.well,digits) - inoc.log.OD(fitted.well,digits)
}
achieved.growth.OD = function(fitted.well,constant.added,digits=Inf) {
########################################################################
# Calculate projected growth: plateau minus the inoculated log.OD #
########################################################################
value = unlog(max.log.OD(fitted.well),constant.added) - unlog(inoc.log.OD(fitted.well),constant.added)
round(value,digits)
}
reach.plateau = function(fitted.well, cutoff = 0.75){
########################################################################
# Did the curve come close to the plateau OD during the experiment? #
########################################################################
plat = plateau(fitted.well)
inoc = inoc.log.OD(fitted.well)
final = max.log.OD(fitted.well)
if (!is.na(final)){
# If the plateau is the same as the OD at inoculation, return TRUE
if ((plat - inoc) == 0)
return(T)
# If the difference between the final OD and inoculation OD is at least a certain proportion
# <cutoff> of the difference between the plateau and inoculated ODs, return TRUE.
else
return((final - inoc) / (plat - inoc) > cutoff)
}
else
return(T)
# If no final OD was calculated (if curve was not fit properly) just return T.
}
lag.time = function(fitted.well, digits = Inf, ...){
########################################################################
# Calculate the lag time from the fitted OD #
########################################################################
if(length(fitted.well@fit.par) == 0)
return(NA)
fitted.well@fit.par$lam
}
# new params for GCAT 4.0
amplitude = function(fitted.well){
if(length(fitted.well@fit.par) == 0)
return(NA)
return(fitted.well@fit.par$A)
}
shape.par = function(fitted.well){
if(length(fitted.well@fit.par) == 0)
return(NA)
ifelse(is.null(fitted.well@fit.par$v), NA, fitted.well@fit.par$v)
}
max.spec.growth.rate.SE = function(fitted.well, ...){
if(length(fitted.well@fit.std.err) == 0)
return(NA)
ifelse(is.null(fitted.well@fit.std.err$u), NA, fitted.well@fit.std.err$u)
}
lag.time.SE = function(fitted.well, ...){
if(length(fitted.well@fit.std.err) == 0)
return(NA)
ifelse(is.null(fitted.well@fit.std.err$lam), NA, fitted.well@fit.std.err$lam)
}
shape.par.SE = function(fitted.well){
if(length(fitted.well@fit.std.err) == 0)
return(NA)
ifelse(is.null(fitted.well@fit.std.err$v), NA, fitted.well@fit.std.err$v)
}
amplitude.SE = function(fitted.well){
if(length(fitted.well@fit.std.err) == 0)
return(NA)
ifelse(is.null(fitted.well@fit.std.err$A), NA, fitted.well@fit.std.err$A)
}
baseline.SE = function(fitted.well){
if(length(fitted.well@fit.std.err) == 0)
return(NA)
ifelse(is.null(fitted.well@fit.std.err$b), NA, fitted.well@fit.std.err$b)
}
# used to calulate the inflection.time value
inflection.time = function(well){
if (length(well@loess) == 0 && length(well@nls) == 0) return(NA) # can' compute inflection time in the absence of a fit
data = data.from(well)
Time = data[,1]
t = seq(from = min(Time), to = max(Time), by = (max(Time)-min(Time))/1000)
y = well.eval(well,t)
if (is.null(y)) return(NA)
delta.t = diff(t)
dydt = diff(y)/delta.t
infl.index = which.max(dydt)
t[infl.index]
}

@ -0,0 +1,36 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
# Wrapper for sapply to use lapply over an array, conserving the dimensions.
aapply = function(x, FUN,...){
dim.values = dim(x)
dim.names = dimnames(x)
x = lapply(x, function(x){FUN(x,...)})
dim(x) = dim.values
dimnames(x) = dim.names
return(x)
}
# A function to manually create an unchecked exception.
exception = function(class, msg)
{
cond <- simpleError(msg)
class(cond) <- c(class, "MyException", class(cond))
stop(cond)
}

@ -0,0 +1,198 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
########################################################################
# #
# Normalize OD readings for an entire array of well objects #
# #
########################################################################
#
# Note: This function does not write any new OD values to the well objects in the array - it only
# fills the "norm" slot of each well object in the array with a value that will be subtracted
# from all OD measurements when returning data from the wells using the function <data.from> (see well.class.R)
#
# These functions make use of <raw.data> which simply returns the raw time and OD of a well (also see well.class.R)
#
# well.array: an array of well objects. note this is the only normalization function that acts on an entire array instead of an individual well.
# normalize.method:
# - (default): subtracts the blank OD (either specified by <blank.value> or taken from the first timepoint as default) of each well from all timepoints in that well
# - average.blank: subtracts the mean of all first OD timepoints on a plate from all timepoints in all wells on that plate
# - average.first: takes the mean of the difference between the OD of the specified <start> timepoint and the first timepoint of all wells on a plate
# and subtracts this value from all timepoints in all wells on that plate
# - anything else: do nothing
# blank.value - user can enter a blank OD measurement for uninoculated wells. if NULL, defaults to the value of the first OD measurement of each well.
# start.index - which timepoint should be used as the first one after inoculation (defaults to the 2th one)
# add.constant: add a numeric constant to all timepoints in all wells.
normalize.ODs = function(well.array, normalize.method = "default", blank.value = NULL, start.index = 2, add.constant = 1){
if (normalize.method == "default"){
well.array = aapply(well.array, function(well, blank.value){
# Use the blank OD value if specified; otherwise, get it from the first OD timepoint.
if(is.null(blank.value)) blank.value = raw.data(well)[1,2]
# Set the blank OD (minus the constant to be added) to the "norm" slot of each well.
well@norm = blank.value - add.constant
return(well)}, blank.value)
}
else if (normalize.method == "average.blank"){
# Use the blank OD value if specified; otherwise, get it from the first OD timepoint.
blank.ODs = unlist(aapply(well.array, function(well, blank.value){
if(is.null(blank.value)) blank.value = raw.data(well)[1,2]
return(blank.value)}, blank.value))
plate.IDs = unlist(aapply(well.array, plate.name))
blank.averages = tapply(blank.ODs, plate.IDs, mean)
# Set this value (minus the constant to be added) to the "norm" slot of each well.
well.array = aapply(well.array, function(well){
well@norm = blank.averages[plate.name(well)] - add.constant
return(well)})
}
else if (normalize.method == "average.first"){
# Find the mean difference between starting OD (timepoint specified by <start>) and blank OD (first timepoint) for each plate
# Use the blank OD value if specified; otherwise, get it from the first OD timepoint.
blank.ODs = unlist(aapply(well.array, function(well, blank.value){
if(is.null(blank.value)) blank.value = raw.data(well)[1,2]
return(blank.value)}, blank.value))
first.ODs = unlist(aapply(well.array, function(well) raw.data(well)[start.index,2]))
plate.IDs = unlist(aapply(well.array, plate.name))
blank.averages = tapply(first.ODs-blank.ODs,plate.IDs,mean)
# Set this value (minus the constant to be added) to the "norm" slot of each well.
well.array = aapply(well.array, function(well){
well@norm = raw.data(well)[start,2] - blank.averages[plate.name(well)] - add.constant
return(well)})
}
else{
# Simply set the negative constant to be added to the "norm" slot of each well.
well.array = aapply(well.array, function(well){
well@norm = - add.constant
return(well)})
}
if(is.null(blank.value))
well.array = aapply(well.array, remove.points, 1)
return(well.array)
}
########################################################################
# #
# Log-transform OD readings for a single well object #
# #
########################################################################
# Must include this so that the checking process will not complain about
# inconsistency S3 generic/method. Though I don't know why.
transform <- function(input.well, ...) {
UseMethod("transform")
}
#' Transform.Ods
#'
#' This function adds a "log.OD" column to the "screen.data" slot of a well object with log-transformed data.
#' The raw data is kept intact.
#' It also checks to see if any of the raw OD values (before a certain timepoint) is below the blank OD.
#' This can be disastrous for the log(OD) transform.
#' @param input.well an object of class well
#' @param use.log gets added to the "use.log" slot of the well object. this will determine whether the log-transformed data
#' or raw normalized data is returned using the function \code{data.from}.
#' @param blank.value user can enter a blank OD measurement for uninoculated wells. if NULL, defaults to the value of the first OD measurement of each well.
#' @param start.index which timepoint should be used as the first one after inoculation (defaults to the 2th one)
#' @param negative.OD.cutoff if any ODs below the specified blank value are detected before this index timepoint, the entire well is discarded.
transform.ODs = function(input.well, use.log = T, blank.value = NULL, start.index = 2, negative.OD.cutoff = 10, constant.added = 1.0, ...){
# The default value for the log-transformed ODs will be NA. Valid values will be filled in.
log.OD = rep(NA, length(input.well))
OD = raw.data(input.well)[,2]
# Use the blank OD value if specified; otherwise, get it from the first OD timepoint.
if(is.null(blank.value))
blank.value = OD[1]
# Remove any points from the analysis that weren't already removed and fall below the blank value (using <remove.points> below)
OD[input.well@screen.data$Remove] = NA
negative.points = which(OD + 0.2 * constant.added < blank.value)
if(length(negative.points) > 0)
input.well = remove.points(input.well, negative.points)
# If any points fall below the blank value by more than 0.2 * <constant.added> and before the cutoff index <negative.OD.cutoff>, remove the well from analysis.
# First adjust the cutoff to compensate for curves that don't start at timepoint 1
negative.OD.cutoff = negative.OD.cutoff + start.index - 1
if(any(negative.points <= negative.OD.cutoff)){
input.well = remove.points(input.well, rep(T,length(input.well)))
input.well@add.info = paste("ODs at timepoint(s)", paste(negative.points[negative.points <= negative.OD.cutoff],collapse=" "), "were below blank OD; well discarded")
}
# Take the natural log of the rest of the OD values (after subtracting the normalization value)
log.OD[which(OD > input.well@norm)] = log(OD[which(OD > input.well@norm)] - input.well@norm)
# Add a column to the "screen.data" slot of the well
input.well@screen.data$log.OD = log.OD
# Update the "use.log" slot of the well
input.well@use.log = use.log
return(input.well)
}
########################################################################
# #
# Remove timepoints from the analysis but not from the raw data #
# #
########################################################################
#
# Removes timepoints from further analysis. Does not remove them from the raw data;
# instead, this function creates or updates the Remove column in slot "screen.data" of the well which dictates whether
# individual timepoints are returned using the <load.data> function.
#
# <points> can be a vector containing:
# - any combination of positive and negative integers
# the timepoints at indices corresponding to positive integers will be set to be removed.
# the timepoints at indices corresponding to negative integers will be be re-added if they were previously set to be removed.
# - a single zero, which resets all timepoints (nothing will be removed)
# - a logical vector to replace the Remove column and which will be cycled along the length of the timepoints.
remove.points = function(input.well, points){
# Copy the Remove column or create a new one if it doesn't yet exist
if (is.null(input.well@screen.data$Remove))
Remove = rep(F, length(input.well))
else
Remove = input.well@screen.data$Remove
# If <points> is a logical vector, recycle it along the length of Remove
if (length(points[!is.na(points)]) != 0){
# Separate positive and negative integers
if (is.logical(points) & !any(is.na(points)))
Remove = rep(points,length.out=nrow(input.well@screen.data))
else{
pos = points[points > 0]
neg = -points[points < 0]
Remove[pos] = T
Remove[neg] = F
# If <points> contains only zeros, reset the Remove vector to all F
if (all(points == 0))
Remove[1:length(Remove)] = F
}
}
# replace the Remove column
input.well@screen.data$Remove = Remove
input.well
}

@ -0,0 +1,664 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
require(pheatmap)
require(gplots)
########################################################################
# #
# Graphic output functions for fitted well objects. The functions are #
# fairly complicated and intertwined and may need revision. #
# #
########################################################################
# S3 Generic.
plot <- function(input.well, ...) {
UseMethod("plot")
}
########################################################################
# Basic function plots time vs. OD from a well object #
########################################################################
#' plot.data
#'
#' Basic function plots time vs. OD from a well object
#'
#' @param input.well The well object that need to be plottedd
#' @param unlog should data be plotted on a linear (vs. logarithmic) scale?
#' @param view.raw.data should the raw data be plotted? (
#' @param number.points should points be labeled with numeric indices?
#' @param scale determines the font scale for the entire graph. all cex values are calculated from this.
#' @param draw.symbols - should <check.slopes> be called on the well and markings drawn on the graph?
#' @param ... additional arguments passed to plot()
plot.data = function(input.well, view.raw.data = F, unlog = F, scale = 1,
main = paste(plate.name(input.well), well.name(input.well)), number.points = T,
draw.symbols = F, constant.added, ylim, ...){
# Get data as well as a vector showing which points were removed.
input.data = data.from(input.well, remove = F, remove.tanking = F, raw.data=view.raw.data)
removed.points = !(rownames(input.data) %in% rownames(data.from(input.well, remove = T, remove.tanking = T)))
point.colors = as.character(factor(removed.points,levels=c(F,T),labels=c("black","gray80")))
# Draw the axes and all text labels first.
par(mar = c(5, 4, 4, 5)+0.1)
plot(input.data, main = main, xlab = "Time(hours)", ylab = "log(OD - blank + const)",
mex = scale, cex.main = 1.5*scale, cex.axis = 1.2*scale, cex.lab = 1.2*scale, type ="n",...)
# Draw a second vertical axis, showing unlogged OD scale
# - Determine the range of the labels: from min.OD to max.OD
if (class(try(ylim,silent=T)) == "try-error") {
OD = unlog(input.data[,2],constant.added)
baseline.OD = unlog(baseline(input.well),constant.added)
min.OD = min(min(OD,na.rm=T),baseline.OD,na.rm=T)
plateau.OD = unlog(plateau(input.well),constant.added)
max.OD = max(max(OD,na.rm=T),plateau.OD,na.rm=T)
} else {
min.OD = unlog(ylim[1],constant.added)
max.OD = unlog(ylim[2],constant.added)
}
# - Compute labels and their positions
OD.labels = seq(from = min.OD, to = max.OD, length.out = 5)
OD.labels = signif(OD.labels,2)
OD.at = log(OD.labels+constant.added)
# - Draw the axis
axis(side=4, at=OD.at, labels=OD.labels, cex.axis = 1.2*scale, cex.lab = 1.2*scale)
mtext(4, text = "OD - blank", line = 3, cex=1.2)
# If <number.points> is true, then label each point with the index of its timepoint and plot removed points in grey, others in black.
if (number.points)
text(input.data$Time, input.data[,2], rownames(input.data), col = point.colors, cex = 0.5*scale)
# Otherwise plot all points, using a different plotting character for removed points.
else
points(input.data$Time, input.data[,2], pch = 1 + removed.points*15)
# If <check.slopes> is set to T, then draw all the markings that <check.slopes> makes to determine curve parameters.
if (draw.symbols & !view.raw.data)
check.slopes(input.well, draw = T)
return()
}
########################################################################
# Plots the fitted model curve from a well object if it exists #
########################################################################
#
# time: specify which points (in units of time) to plot fitted OD values for. if not specifies, plot all timepoints in range of well.
plot.model = function(input.well, col = 1, scale = 1, lty = 1, time = NULL, unlog = F, constant.added=1, ...){
#input.data = data.from(input.well)
#growth = input.data[,2]
# If no list of timepoints is specified, get a list of 360 timepoints (should be smooth enough) from the well's range.
if (is.null(time)){
time.fin = max(data.from(input.well, raw.data = T, remove = F, remove.tanking = F)$Time)
time = seq(0, time.fin, length.out = 360)
}
# Evaluate the predicted OD at the specified timepoints based on the fitted model.
predicted.OD = well.eval(input.well, time)
# If any values were returned, plot the lines on the current graph. Otherwise, just return without doing anything.
if (is.numeric(predicted.OD))
lines(time, predicted.OD, col = col, lty = lty, lw = 2 * scale)
else
return()
}
########################################################################
# Put various parameters and info in text form on the graphs #
########################################################################
#
draw.text = function(input.well, scale = 0.5, xlim = 0, ylim = 0,...){
#input.data = data.from(input.well, remove = F, remove.tanking = F)
#fit = input.well@fit.par
# <text2> - fit information (fit status, model name if available, jump detection output, fit parameters if available) from well
# color = red if no fit, blue if fit, green if skipped
# <text1> - empty or inoculated well.
# color = green if empty, blue if inoculated, red if inoculated but has no growth or empty but has growth.
col2 = "blue"
text2 = paste(input.well@fit.info, input.well@model.name, input.well@add.info, "\n", parameter.text(input.well))
if (length(input.well@fit.par) == 0) # no fit
col2 = "red"
if (is.empty(input.well)){
text1 = "empty well"
if(!lacks.growth(input.well) | length(input.well@fit.par) == 0) # growth curve fit for an empty well
col1 = "red"
else
col1 = "forestgreen"
if (length(input.well@model.name) == 0) # well was skipped
col1 = col2 = "forestgreen"
}
else{
text1 = "inoculated well"
if(lacks.growth(input.well) | length(input.well@fit.par) == 0) # failure to fit an inoculated well
col1 = "red"
else
col1 = "forestgreen"
}
# <text1.5> - goodness of fit metric.
# color = red if below 2, yellow if between 2 and 2.72, and green if above 2.72.
if(!is.na(model.good.fit(input.well))){
#if (model.good.fit(input.well, unlog = F) > 2.72)
# col1.5 = "forestgreen"
#else if (model.good.fit(input.well, unlog = F)> 2.0)
# col1.5 = "gold2"
#else
# col1.5 = "red"
col1.5 = "forestgreen"
text1.5 = paste("R squared:", round(model.good.fit(input.well),3))
}
else
col1.5 = text1.5 = NULL
# Print all text at the top of the graph with approprate positions and scaling
text(x = xlim[1] + 0.50 * diff(xlim), y = ylim[2] - 0.025 * diff(ylim),
text1.5, cex = 1.5*scale, col = col1.5)
text(x = xlim[1] + 0.50 * diff(xlim), y = ylim[2] - 0 * diff(ylim),
text1, cex = 1.5*scale, col = col1)
text(x = xlim[1] + 0.50 * diff(xlim), y = ylim[2] - 0.03 * diff(ylim),
text2, pos = 1, cex = 1.5*scale, col = col2)
}
########################################################################
# Draw lines on graph denoting calculated parameters #
########################################################################
#
# <show.num> - should curve parameters be labeled?
draw.calc.par = function(input.well, scale = 0.5, unlog = F, constant.added, show.num = T){
# Don't do anything if well was not fit.
if (is.null(well.eval(input.well)))
return()
# Collect values for various curve parameters.
baseline = baseline(input.well)
inoc.log.OD = inoc.log.OD(input.well)
max.log.OD = max.log.OD(input.well)
plateau = plateau(input.well)
inflection.time = input.well@inflection.time # was a param in model
fin.time = (inflection.time+max(data.from(input.well)[,1]))/2
# <inflection.time> = timepoint at greatest growth
# <max.y> = OD measurement at <inflection.time>, minus the constant added before taking the log (if reversing the transformation)
# <max.slope> = slope (on log scale) at <inflection.time> (specific growth)
# had to add the unlog code. was calculated differently before NWD 7/21/14
max.slope = max.spec.growth.rate(input.well)
max.y = well.eval(input.well, inflection.time)
lag.x = lag.time(input.well)
lag.y = baseline
# ---- Specific growth rate ---- #
lines(c(lag.x, inflection.time), c(lag.y, max.y), lty = 2, col = "red")
# Blue dotted line at time of maximum growth, with text label for specific growth rate.
abline(v = inflection.time, lty = 2, lw = (scale^2)*2, col = "blue")
if(show.num) text(inflection.time, max.y, round(max.slope,3), col = "blue", cex = 1.5*scale, pos = 2)
# inoculation OD and baseline of the fitted model
abline(h = inoc.log.OD, lw = scale*2, lty = 3)
abline(h = baseline, col = "red", lw = (scale^2)*2, lty = 2)
if(show.num) {
text(fin.time, inoc.log.OD, paste(round(inoc.log.OD,3),"\n",sep="") , col = "black", cex = 1.5*scale, pos = 2)
text(fin.time, baseline, paste("\n\n", round(baseline,3), sep="") , col = "red", cex = 1.5*scale, pos = 2)
}
# ---- Lag time ---- #
# Do not draw a horizontal line to lag time if it is 0 or negative.
# Otherwise draw a red line from the starting point to the lag time, and label with the lag time
if (lag.time(input.well) == 0){
if(show.num) text(0, inoc.log.OD, "\n\n0.000", col = "red", cex = 1.5*scale, pos = 4)
}
else{
lines(c(0, lag.x), c(baseline, baseline), col = "red", lw = (scale^2)*2, lty = 2)
if(show.num) text(lag.x, lag.y, paste("\n\n", round(lag.time(input.well),3)), col = "red", cex = 1.5*scale, pos = 2)
}
# ---- Total growth ---- #
# Draw horizontal lines for the max.log.OD in black, the plateau in green and the initial OD in black.
abline(h = max.log.OD, lty = 3, lw = scale*2)
abline(h = plateau, lty = 2, lw = (scale^2)*2, col = "forestgreen")
# Draw a vertical line from the initial OD to the final OD in black, and then to the plateau in gray.
lines(c(fin.time, fin.time), c(inoc.log.OD, max.log.OD), lw = (scale^2)*2, lty = 3)
lines(c(fin.time, fin.time), c(max.log.OD, plateau), lw = (scale^2)*2, lty = 3, col = "grey")
# Text: plateau and initial ODs (on left), difference between initial and final OD on right
if(show.num){
text(fin.time, plateau, paste(round(plateau,3),"\n",sep="") , col = "forestgreen", cex = 1.5*scale, pos = 2)
text(fin.time, max.log.OD, paste("\n\n\n",round(max.log.OD,3),sep="") , col = "black", cex = 1.5*scale, pos = 2)
text(fin.time, .5*(max.log.OD-inoc.log.OD)+inoc.log.OD, round(max.log.OD - inoc.log.OD,3), cex = 1.5*scale, pos = 4)
# difference between final and plateau OD (if large enough)
if (!reach.plateau(input.well))
text(fin.time, .5*(plateau-max.log.OD)+max.log.OD, paste("(", round(plateau - max.log.OD,3), ")", sep = ""), col = "grey", cex = 1.5*scale, pos = 2)
}
}
########################################################################
# Draw residuals from the nonlinear fit with option for lowess line #
########################################################################
#
plot.residuals = function(input.well, xlim = NULL, lowess = T, ...){
well = input.well
data = data.from(well, remove = F, remove.tanking = F)
if (is.null(xlim))
xlim = c(min(data$Time, 0)-1, max(data$Time))
plot(data.from(well)[,1], model.residuals(well), main = paste(plate.name(well), well.name(well), "\n[Residuals]"),
xlab = "Time(hours)", ylab = paste("Residual", names(data)[2]), xlim = xlim)
abline(0,0, lty = 2)
if (lowess)
lines(lowess(data.from(well)[,1], model.residuals(well)), lw = 2, col = "red")
}
##############################################################################
# This function is used to create a heatmap using:
# specific growth, total growth, and lag time
# for each well on a plate.
#
# @params
# fitted.well.array: matrix containing well array object data
# attribute: the data type we should use to create a heatmap
# @returns
# path of heatmap pdf file
##############################################################################
create.heatmap = function(fitted.well.array, attribute, unlog=NULL){
attr.name <- deparse(substitute(attribute))
pdf.name <- ""
if(class(fitted.well.array) == "matrix"){
#We may want to sub() out periods from plate.ID if it causes problems
plate.ID = unique(unlist(aapply(fitted.well.array,plate.name)))[1]
if(is.null(unlog)) {
spec.growth = unlist(aapply(fitted.well.array, attribute))
}
# currently only total growth needs to be unlogged if unlog == T
else {
spec.growth = unlist(aapply(fitted.well.array, attribute))
}
num.dig = 3 #how many digits should be put on pdf?
max = round(max(spec.growth, na.rm=T), digits=num.dig)
min = round(min(spec.growth, na.rm=T), digits=num.dig)
avg = round(mean(spec.growth, na.rm=T), digits=num.dig)
heat.text = paste(toupper(sub("\\.", " ", attr.name)), ":\n", plate.ID, "\n",
paste("Max:",max ,"Min:" ,min ,"Avg:", avg, sep=""))
attr.name <- sub("\\.", "_", attr.name) #do not want periods in file path
letters <- attr(fitted.well.array, "dimnames")[[1]]
for(i in 1:length(letters)) letters[i] = paste(" ", letters[i], " ")
nums <- attr(fitted.well.array, "dimnames")[[2]]
for(i in 1:length(nums)) nums[i] = paste(" ", nums[i], " ")
heat <- matrix(spec.growth, nrow=dim(fitted.well.array)[1], ncol=dim(fitted.well.array)[2], dimnames=list(letters,nums))
pdf.name <- paste(getwd(), "/", plate.ID, "_", attr.name, ".pdf", sep="")
pdf(pdf.name)
#heatmap(heat, Rowv=NA, Colv=NA, revC=T, scale="none", na.rm=T, main=plate.ID, col=rainbow(100), margins=c(6,6))
#mtext(paste("Max:", round(max(spec.growth, na.rm=T), digits=4),"Min:", round(min(spec.growth, na.rm=T), digits=4), "Avg:", round(mean(spec.growth, na.rm=T), digits=4)), side=1, line=3)
pheatmap(heat, color=colorpanel(100, "red", "orange", "yellow"),
border_color="black", cell_width=2, cell_height=3,
cluster_rows=F, cluster_cols=F, scale='none', main=heat.text, fontsize=16)
dev.off()
}
else {
return("Error")
}
return(pdf.name)
}
########################################################################
# Draw grids of 96 points as a visual representation of fit status, #
# and other info for an array of fitted well objects, plate by plate #
########################################################################
#
plate.overview = function(fitted.well.array, scale = 1, plate.ncol = 12, plate.nrow = 8){
# Start with a list of the unique plate names in the fitted well array
# and an appropriately-sized grid of coordinates to plot wells on.
plates = unique(unlist(aapply(fitted.well.array,plate.name)))
grid = data.frame(x = rep(rep(1:plate.ncol, each = plate.nrow), length(plates)),
y = rep( rep(-(1:plate.nrow), times = plate.ncol), length(plates)))
# Gather information on each well to display on each of the coordinates in <grid>:
# - was it marked as empty in the plate layout?
# - did the program find it to contain no growth ("dead")?
# - was the fitting procedure successful?
# - did the curve tank? if so, at what timepoint? if not, or if the curve was marked as dead anyway, do not display the value.
# - does the "additional info" slot indicate that any points were removed or the whole well discarded?
empty = unlist(aapply(fitted.well.array, is.empty))
dead = unlist(aapply(fitted.well.array, lacks.growth))
fit = unlist(aapply(fitted.well.array, contains.fit))
tanking = unlist(aapply(fitted.well.array, tanking.start))
tanking[is.na(tanking) | tanking == 1 | dead] = ""
errors = unlist(aapply(fitted.well.array, function(well){
if (length(well@add.info) == 0)
""
else if (grepl("removed", well@add.info))
"-"
else if (grepl("detected", well@add.info))
"+"
else if (grepl("discarded", well@add.info))
"!"
else
""
}))
# Color and plotting character vectors (length = the number of wells in the array)
# Default = 1 (open point, black)
colors = char = rep(1, length(tanking))
# Desired colors
colors[empty & dead] = "green3" # Empty well with no growth.
colors[!empty & fit] = "blue" # Inoculated well with successfully fitted growth curve.
# Undesired colors
colors[empty & !dead] = "darkolivegreen4" # Inoculated well with some growth.
colors[!empty & !fit] = "red" # Inoculated well with no successfully fit (either no growth or unsuccessful fit).
char[!dead & fit] = 19 # Filled points for non-empty wells with successful fits
char[!dead & !fit] = 4 # an X for non-empty wells with failed fits.
char[errors == "!"] = 8 # Asterisk for discarded wells.
char[errors == "-" & dead ] = 5 # Open diamond for empty wells (after removing points).
char[errors == "-" & !dead & fit] = 23 # Filled diamond for non-empty wells with removed points and successful fits.
char[errors == "-" & !dead & !fit] = 8 # Asterisk for wells with removed points and failed fits.
for (plate in 1:length(plates)){
indices = (plate - 1) * plate.nrow*plate.ncol + 1:(plate.nrow*plate.ncol)
# Plot the grid using colors and plotting characters determined above.
plot(grid[indices,], col = colors[indices], bg = colors[indices], pch = char[indices],
main = plates[plate], mex = scale, cex = scale, cex.main = 1.5*scale, cex.axis = 1.2*scale,
xaxt = "n", yaxt = "n", xlim = c(-0.5,plate.ncol + 0.5), ylim = c(-(plate.nrow + 1.5), 0.5), xlab = "", ylab = "")
# Symbol legends
legend.xpos = (c(-1,2.75,6.5,6.86,10.25)+0.5)*(plate.ncol+1)/13 - 0.5
legend.ypos = -(plate.nrow + 0.5)
legend(x=legend.xpos[1], y= legend.ypos, cex = 0.7 * scale, y.intersp = 1.5, bty="n",
legend=c("Empty, no growth","Empty with growth"),
pch = c(1,19),
pt.bg = c("green3","darkolivegreen4"),
col = c("green3","darkolivegreen4")
)
legend(x=legend.xpos[2], y= legend.ypos, cex = 0.7 * scale, y.intersp = 1.5, bty="n",
legend=c("Inoculated with growth", "Inoculated, no growth"),
pch = c(19,1),
pt.bg = c("blue","red"),
col = c("blue","red")
)
legend(x=legend.xpos[3], y= legend.ypos, cex = 0.7 * scale, y.intersp = 1.5, bty="n",
legend=c("Well tanks at specified index", "Some points removed"),
pch = c(21,23),
pt.bg = c("grey","grey"),
col = c("black","black")
)
text(x=legend.xpos[4], y=legend.ypos - 0.29,"#",cex=0.5*scale)
legend(x=legend.xpos[5], y=legend.ypos, cex = 0.7 * scale, y.intersp = 1.5, bty="n",
legend=c("Model fitting failed", "Well discarded"),
pch = c(4,8),
pt.bg = c("black","black"),
col = c("black","black")
)
# Add tanking indices if any were found.
text(grid[indices,] + 0.30, cex = 0.75*scale,
labels = tanking[indices], col = colors[indices])
# Label rows and columns
text(-1, -1:-plate.nrow, pos = 4, LETTERS[1:plate.nrow], cex = scale)
text( 1:plate.ncol, 0 , 1:plate.ncol, cex = scale)
}
}
########################################################################
# Draw each well in an array of fitted well objects in succession. #
# Include options for adding notations, text info and fit parameters. #
########################################################################
#
view.fit = function(fitted.data, indices = 1:length(fitted.data),
unlog = F, constant.added, xlim = NULL, ylim = NULL, display.legend = T,
show.text = T, show.calc = T, draw.guess = NULL, draw.symbols = F, number.points = T,
user.advance = T, show.residuals = F, scale = 1,...){
if(!is.array(fitted.data))
fitted.data = list(fitted.data)
# Determine the boundaries for the axes (if user did not specify them)
if(is.null(ylim)){
min.y = min(unlist(aapply(fitted.data, function(well){
if (unlog) well@use.log = F
min.y = min(data.from(well, remove = F, remove.tanking = F)[,2], na.rm = T)
min(min.y, well@fit.par$b)
})))
max.y = max(unlist(aapply(fitted.data, function(well){
if (unlog) well@use.log = F
max.y = max(data.from(well, remove = F, remove.tanking = F)[,2], na.rm = T)
max(max.y, well@fit.par$b + well@fit.par$A)
})))
ylim = c(min.y, min.y + (max.y-min.y)*1.15) - unlog*constant.added
}
if(is.null(xlim)){
min.x = min(unlist(aapply(fitted.data, function(well){
min(data.from(well, remove = F, remove.tanking = F)[,1], na.rm = T)
})))
max.x = max(unlist(aapply(fitted.data, function(well){
max(data.from(well, remove = F, remove.tanking = F)[,1], na.rm = T)
})))
xlim = c(min.x - 0.05 * (max.x-min.x), max.x)
}
# Display a figure legend
if(display.legend){
well.fit.legend(xlim=xlim,ylim=ylim,scale=scale,constant.added=constant.added)
if(user.advance){
prompt = readline("<Enter> to continue or Q to quit >>")
if (toupper(prompt) == "Q") break
}
}
# Start to cycle through the wells
well.number = 1
while (well.number <= length(fitted.data)) {
# Only show wells specified by <indices> (default all wells)
if (well.number %in% indices){
# plot the well
fitted.well = fitted.data[[well.number]]
plot(x=fitted.well, constant.added = constant.added, xlim = xlim, ylim = ylim,
unlog = unlog, well.number = well.number, scale = scale, number.points = T, draw.symbols = F, show.text = T, show.calc = T, draw.guess = NULL, ...)
if(user.advance)
cat("\n[", well.number, "] ", plate.name(fitted.well), " ", well.name(fitted.well), ".", sep = "")
if (show.residuals & is.numeric(model.residuals(fitted.well))){
if(user.advance)
if (toupper(readline("<Enter> for residuals >>")) == "Q") break
plot.residuals(fitted.well)
}
# Allow user to advance the currently shown well if specified.
if (user.advance){
prompt = readline("<Enter> to continue, or type # of next well or Q to quit >>")
if (toupper(prompt) == "Q") break
user.input = suppressWarnings(try(as.numeric(prompt),silent=T))
# Go onto the next well unless input is a number.
if (is.numeric(user.input) & !is.na(user.input) & length(user.input) > 0)
well.number = user.input - 1
}
}
# Advance the loop
well.number = well.number + 1
}
}
well.fit.legend = function(xlim, ylim, scale = 1, constant.added){
par(mar = c(5, 4, 4, 5)+0.1)
plot(0,0, main = "[Index] <Plate Name> <Well Position>\n<Strain Name>; <Media Definition>",
xlim = xlim, ylim = ylim, xlab = "Time", ylab = "log(OD - blank + const)",
mex = scale, cex.main = 1.5*scale, cex.axis = 1.2*scale, cex.lab = 1.2*scale, type = "n")
# Draw a second vertical axis, showing unlogged OD scale
min.OD = unlog(ylim[1],constant.added)
max.OD = unlog(ylim[2],constant.added)
OD.labels = seq(from = min.OD, to = max.OD, length.out = 5)
OD.labels = round(OD.labels,1)
OD.at = log(OD.labels+constant.added)
axis(side=4, at=OD.at, labels=OD.labels, cex.axis = 1.2*scale, cex.lab = 1.2*scale)
mtext(4, text = "OD - blank", line = 3, cex=1.2)
# Sample max. slope line
abline(v=min(xlim)+0.5*max(xlim), col="blue", lty=2)
text(mean(xlim),min(ylim)+0.4*diff(ylim),labels="Maximum specific\ngrowth rate",col="blue",pos=2,cex=0.75*scale)
# Sample plateau line
abline(h=min(ylim)+0.8*diff(ylim),col="forestgreen",lty=2)
text(min(xlim)+0.9*diff(xlim),ylim+0.8*diff(ylim),labels="Growth plateau",col="forestgreen",pos=3,cex=0.75*scale)
# Sample max.log.OD line
abline(h=min(ylim)+0.7*diff(ylim),col="black",lty=3)
text(min(xlim)+0.9*diff(xlim),ylim+0.7*diff(ylim),labels="max.log.OD",col="black",pos=1,cex=0.75*scale)
# Sample inoc.log.OD
abline(h=min(ylim)+0.1*diff(ylim),col="black",lty=3)
text(min(xlim)+0.1*diff(xlim),min(ylim)+0.1*diff(ylim),labels="Fitted growth\nat inoculation",col="black",pos=3,cex=0.75*scale)
# Sample baseline
abline(h=min(ylim)+0.05*diff(ylim),col="red",lty=2)
text(min(xlim)+0.1*diff(xlim),min(ylim)+0.05*diff(ylim),labels="Baseline",col="red",pos=1,cex=0.75*scale)
# Sample lag time
lines(min(xlim)+c(0.1,0.25,0.50)*max(xlim),min(ylim)+c(0.05,0.05,0.4)*diff(ylim),col="red",lty=2)
text(min(xlim)+0.25*max(xlim),min(ylim)+0.05*diff(ylim),labels="Lag time",col="red",pos=1,cex=0.75*scale)
# Sample achieved growth
lines(min(xlim)+c(0.75,0.75)*max(xlim),min(ylim)+c(0.1,0.7)*diff(ylim),col="black",lty=3)
text(min(xlim)+0.75*max(xlim),min(ylim)+0.3*diff(ylim),labels="Achieved growth",col="black",cex=0.75*scale)
# Sample plateau - achieved growth
lines(min(xlim)+c(0.75,0.75)*max(xlim),min(ylim)+c(0.7,0.8)*diff(ylim),col="grey",lty=3)
text(min(xlim)+0.75*max(xlim),min(ylim)+0.75*diff(ylim),labels="Projected minus achieved growth",col="grey",cex=0.75*scale)
# Symbol legend
legend(x="right", title = "Timepoint Symbols", legend = c("Normal point", "Ignored point"),
cex = 0.75*scale, pt.cex = c(0.6,0.6)*scale, pch = c(35,35), col=c("black","gray80"),
x.intersp=1, xjust = 1, y.intersp=1.5)
}
pdf.by.plate = function(fitted.data, out.prefix = "", upload.timestamp = NULL,
out.dir = getwd(), unlog = F, constant.added, silent = T, overview.jpgs = T, plate.ncol = 12, plate.nrow = 8,...){
# Prepare timestamp for addition to output file names.
filename.timestamp = strftime(upload.timestamp, format="_%Y-%m-%d_%H.%M.%S")
# Start file list with the overview pdf
file.list.out = paste(out.dir,"/",out.prefix, "_overview", filename.timestamp, ".pdf",sep="")
# Call <plate.overview> to draw a graphic representation of each plate in this file.
pdf(file.list.out, title = paste(out.prefix, "plate overview"))
plate.overview.out = try(plate.overview(fitted.data),silent=T)
if(class(plate.overview.out) == "try-error")
stop("Error in <plate.overview>: ", plate.overview.out)
# Close devices
while(dev.cur() != 1)
dev.off()
# Cycle through each plate
for(i in 1:dim(fitted.data)[3]){
# Get plate ID and position in data array.
plate.ID = dimnames(fitted.data)[[3]][i]
plate.indices = (i-1) * plate.nrow*plate.ncol + 1:(plate.nrow*plate.ncol)
if(overview.jpgs){
# most be > 1 to partition value breaks for heatmap
well.matrix <- aapply(fitted.data[,,i], max.spec.growth.rate)
num.wells <- length(well.matrix[!sapply(well.matrix, is.na)])
if(num.wells > 1){
#Heatmap block##########################################################
#alongside the jpgs file create 3 heatmaps for each plate. NWD
spec.heat.file = create.heatmap(fitted.data[,,i], max.spec.growth.rate)
if(spec.heat.file == "Error")
stop("Error in <create.heatmap> for specific growth")
lag.heat.file = create.heatmap(fitted.data[,,i], lag.time)
if(lag.heat.file == "Error")
stop("Error in <create.heatmap> for lag time")
total.heat.file = create.heatmap(fitted.data[,,i], achieved.growth)
if(total.heat.file == "Error")
stop("Error in <create.heatmap> for total growth")
# Add name of file if successfully written to file list output. Including heatmap files NWD
file.list.out = c(file.list.out, spec.heat.file, lag.heat.file, total.heat.file)
########################################################################
}
jpg.name = paste(out.dir, "/", plate.ID, "_overview", ".jpg", sep="")
jpeg(jpg.name, quality = 90, width = 600, height = 480)
plate.overview.out = try(plate.overview(fitted.data[,,i]),silent = T)
if(class(plate.overview.out) == "try-error")
stop("Error in <plate.overview>: ", plate.overview.out)
}
else
jpg.name = c()
# Open a separate PDF for each plate.
if(!silent) cat("\nprinting PDF for", plate.ID)
pdf.name = paste(out.dir, "/", plate.ID, "_plots", filename.timestamp, ".pdf", sep="")
pdf(pdf.name, title = paste("R Graphics output for plate", plate.ID))
# Call <view.fit> to draw each well on the plate to the pdf.
view.fit.out = try(view.fit(fitted.data, indices = plate.indices, unlog=unlog, constant.added=constant.added, user.advance=F,...),silent=T)
if(class(view.fit.out) == "try-error")
stop("Error in <view.fit>: ", view.fit.out)
# Close all devices
while(dev.cur() != 1)
dev.off()
if(!silent) cat("...done!\n\twritten to", pdf.name, "\n")
file.list.out = c(file.list.out, jpg.name , pdf.name)
}
return(file.list.out)
}

@ -0,0 +1,419 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
########################################################################
# #
# Estimate the growth curve slope at each timepoint of a well #
# #
########################################################################
#
# uses the functions <data.from> and <well.name> (see well.class.R)
# adds estimated slopes as a new column to the "screen.data" slot
calculate.slopes = function(input.well, silent = T){
# Get the growth curve data (excluding removed points, but not excluding points marked as tanking)
growth.data = data.from(input.well, remove = T, remove.tanking = F)
x = growth.data[,1]
y = growth.data[,2]
# Get a list of timepoint indices
indices = as.numeric(rownames(growth.data))
# Default slope is NA, values will be filled in as they are calculated
slopes = rep(NA, length(input.well))
for (i in 1:length(x)){
if (i == 1)
slopes[indices[i]] = NA
# Calculate the slope of the line drawn from each point to the point preceding it.
else
slopes[indices[i]] = (y[i] - y[i-1])/(x[i] - x[i-1])
}
# Add a Slope column to the "screen.data" slot
input.well@screen.data$Slope = slopes
if (!silent)
cat("slopes filled for", input.well@position[1], well.name(input.well), "\n")
return(input.well)
}
########################################################################
# #
# Use slope estimates to check growth curves for tanking and OD jumps #
# #
########################################################################
#
# uses the functions <data.from> and <well.name> (see well.class.R)
# Arguments:
# ----- stringency parameters ----
# remove.jumps - should the program remove OD jumps? default F (just report them) -
# should be set to T if data contains distinct jumps in OD that need to be eliminated
# otherwise, this might be too stringent and will result in loss of data.
# check.start - which timepoint should checking for jumps and tanking start at? this is included because early timepoints can be unstable.
# fall.cutoff - what downward slope should constitute a fall in OD?
# jump.cutoffs - multipliers to determine whether a curve jumps up or down (see methods 1 and 2, below)
# tank.limit - how many timepoints in a row can have falling slopes until the curve is marked as tanking?
# tank.cutoff - what proportion of the maximum OD can the curve go below until it is considered tanking?
# ---- input/output ----
# silent - output to R console?
# draw - plot growth curve with curve checking details?
#
# Fills the "curve.par" slot in the well with the starting index of tanking (NA if none is found)
#
#check.slopes = function(input.well, check.start = 8, fall.cutoff = -.0025, remove.jumps = F,
# jump.multipliers = -c(15, 500, 10), tank.cutoff = 1.0, tank.limit = 3, silent = T, draw = T){
#changed default values to parameters to account for settling
check.slopes = function(input.well, check.start = 22, fall.cutoff = -.0025, remove.jumps = F,
jump.multipliers = -c(15, 500, 10), tank.cutoff = 1.0, tank.limit = 6, silent = T, draw = T){
if (!silent)
cat("\nNow checking slopes for", plate.name(input.well), well.name(input.well))
# Get estimated slopes and untransformed points from the well
slopes = input.well@screen.data$Slope
x = data.from(input.well, remove=F, remove.tanking=F)[,1]
y = data.from(input.well, remove=F, remove.tanking=F)[,2]
# Get a list of indices with valid slope estimates
indices = (1:length(input.well))[!is.na(slopes)]
# Do not report tanking or check for jumps if there are fewer valid points than the number needed to detect it
if (length(indices) < tank.limit){
input.well@curve.par$tanking.start = NA
if (!silent)
cat("...does not have enough points to check.\n")
return(input.well)
}
#######################################################################################
# Create indicator variables and recalculate cutoffs based on timepoint density. #
#######################################################################################
#
# Create <slope.indicator>, a vector of indicator variables for each timepoint with a valid slope estimate.
slope.indicator = rep(NA, length(slopes))
# Calculate the mean time difference between two timepoints (this typically doesn't vary too much)
time.diff = mean(diff(x[-1]))
# Use the mean time difference to recalculate what should constitute a fall in OD using <fall.cutoff> (which should be a proportion)
# Honestly I don't remember why the fifth root thing is in here...this is probably going to be revised later.
fall.cutoff = fall.cutoff * time.diff ^ (1/5) / 0.9506785
# Recalculate stringency parameters for jump detection based on spread of timepoints
jump.cutoffs = jump.multipliers* fall.cutoff
# Recalculate tanking limit based on spread of timepoints
tank.limit = round(tank.limit / time.diff ^ (1/5) * 0.9506785)
# Cycle through the indices of input.wells with valid slope estimate
counter = 0
for(j in 1:length(indices)){
#######################################################################################
# Method #1 for finding OD jumps: compare the slope estimate of each point to the #
# ones for the closest surrounding points. #
#######################################################################################
# Get indices of the two closest surrounding timepoints with valid slope estimates.
if (j == 1)
prev.i = indices[2]
else
prev.i = indices[j-1]
if (j == length(indices))
next.i = indices[length(indices) - 1]
else
next.i = indices[j+1]
i = indices[j]
# How the program determines a jump up:
# If slope estimate of current timepoint is larger than <jump.cutoffs[2]> times the highest surrounding slope estimate plus <jump.cutoffs[1]>
# Add a "2" to the indicator variable
# How the program determines a fall:
# If slope estimate of current timepoint is more negative than <fall.cutoff>
# Add a "5" to the indicator variable
# How the program determines a jump down:
# If slope estimate is lower than <fall.cutoff> AND is smaller than <jump.cutoffs[2]> times the lowest surrounding slope estimate minus <jump.cutoffs[1]>
# Add a "6" to the slope indicator variable
#
# If none of these are true, add a "0" to the indicator variable
if (slopes[i] > jump.cutoffs[2] * max(c(slopes[next.i],slopes[prev.i]),0) + jump.cutoffs[1])
slope.indicator[i] = 2
else if (slopes[i] < fall.cutoff){
slope.indicator[i] = 5
if (slopes[i] < jump.cutoffs[2] * min(c(slopes[next.i],slopes[prev.i], 0)) - jump.cutoffs[1])
slope.indicator[i] = 6
}
else
slope.indicator[i] = 0
#######################################################################################
# Method #2 for finding OD jumps: see if each point lies close to a line drawn #
# between the closest surrounding points. #
#######################################################################################
#
# Use <counter> variable to track the location of each point. If two subsequent points lie farther
# away than the cutoff from their respectively drawn lines AND are on different sides, then count that as a jump.
if (j > 1 & j < length(indices)){
# Make equation (y=mx+b) for line drawn between two surrounding points
m = (y[next.i] - y[prev.i])/(x[next.i] - x[prev.i])
b = y[prev.i] - m * x[prev.i]
# Estimate y from that line. Points will be judged by how much their true y value deviate from this estimate.
# calculate b for perpendicular line from observed point to drawn line (slope is -1/m)
b2 = y[i] + x[i]/m
# solve equation for intersection to determine the shortest Euclidean distance between the point and line.
# assign a sign to the distance based on the vertical distance.
est.x = (b2 - b) / (m + 1/m)
est.y = est.x * m + b
#est.y = m * x[i] + b
#est.x = x[i]
if(m != 0)
point.distance = sqrt((y[i]-est.y)^2 + (x[i]-est.x)^2) * sign(y[i]-est.y)
else # horizontal case
point.distance = y[i] - b
#print(paste(i, point.distance, slopes[i], jump.cutoffs[2] * max(c(slopes[next.i],slopes[prev.i]),0) + jump.cutoffs[1], point.distance > jump.cutoffs[3]))
color = "gray30"
# If the true point exceeds that estimate by more than <jump.cutoffs[3]>, update <counter> to positive.
# if the counter weas previously negative, mark this as a jump up.
if (point.distance > jump.cutoffs[3]){
if (counter == -1){
slope.indicator[i] = 2
color = "red"
}
counter = 1
}
# If the true point is under that estimate by more than <jump.cutoffs[3]>, update <counter> to negative.
# if the counter was previously positive, mark this as a jump down.
else if (point.distance < -jump.cutoffs[3]){
if (counter == 1){
slope.indicator[i] = 6
color = "red"
}
counter = -1
}
# If the true point lies within <jump.cutoffs[3]> of that estimate, update <counter> to zero.
else
counter = 0
if(draw)
# Graphic representation: draw each line used in Method #2 as a dotted line,
# and highlight in red if a jump was detected
lines(x[c(prev.i, next.i)], y[c(prev.i, next.i)], lty = 2, col = color)
}
}
#######################################################################################
# Check for tanking by looking for unbroken series of points with falling slopes. #
#######################################################################################
#
# Cycle through <slope.indicator>, adding to <tank> until the end of the curve or until <tank> reaches the <tank.limit>
tank = 0
i = 1
while(i < length(slope.indicator) & tank < tank.limit){
# If a fall was not detected, reset <tank> to 0.
if (is.na(slope.indicator[i]))
tank = 0
# If a fall was detected at a point index greater than <check.start>, add 1 to <tank> .
else if (slope.indicator[i] >= 5 & i > check.start)
tank = tank + 1
else
tank = 0
i = i + 1
}
# If the above loop was terminated because <tank> reached <tank.limit>, update the "curve.par"
# slot to denote the first point at which tanking started (should be the last index checked minus <tank.limit>)
# also truncate <slope.indicator> so that it does not include the timepoints after tanking.
if (tank == tank.limit){
input.well@curve.par$tanking.start = i - tank.limit
slope.indicator = slope.indicator[1:i]
if (!silent)
cat("...tanks at timepoint", i - tank.limit, ".\n")
}
else{
input.well@curve.par$tanking.start = NA
if (!silent)
cat("...does not tank.\n")
}
#######################################################################################
# Method #2 of checking for tanking: see if OD falls below cutoff #
# (as a proportion of max OD) without recovery (according to <tank.limit>) #
#######################################################################################
#
i = check.start
tanking.start = NA
while(i < length(y) & is.na(tanking.start)){
# If the <tank.limit> next ODs beyond i do not reach the cutoff, then mark i as tanking.
if (all(y[i+(1:tank.limit)] < max(y,na.rm=T)*tank.cutoff, na.rm=T))
tanking.start = i
i = i+1
}
# Graphic representation: draw the indicators used in Method #1 using the pch symbols in <slope.indicator>
# slope index = 2: an upward-pointing traingle for an upward jump
# slope index = 5: a diamond for a fall
# slope index = 6: a downward-pointing triangle for downward jump
if (draw){
points(data.from(input.well, remove = F, remove.tanking = F)[which(slope.indicator != 0),],
col = 2, bg = 2, cex = 1.3, pch = slope.indicator[which(slope.indicator != 0)])
}
#######################################################################################
# Decide what to do about any remaining jumps in OD #
#######################################################################################
jump.up = which(slope.indicator == 2)
jump.down = which(slope.indicator == 6)
# <jump.all> is a variable which keeps track of all the jumps, whether up or down.
jump.all = sort(c(match(jump.down, indices), match(jump.up, indices)))
# commented out; jump not working
# if (length(jump.all) > 0)
# add.info = paste("Jump(s) detected at timepoint(s)",paste(indices[jump.all],collapse=" "))
# else
add.info = ""
# If <remove.jumps> is true, use the following automated process to try and remove OD jumps by selectively removing points from analysis.
# if not, just return the well with the above slot filled.
if (!remove.jumps)
input.well@add.info = add.info
else{
# Cycle through first few jumps (before <check.start>). <remove.initial.jump> is a logical that controls this loop.
remove.initial.jump = T
while (length(jump.all) > 0 & jump.all[1] < check.start & remove.initial.jump){
# If any other jumps are also before <check.start>...
if (any(jump.all[-1] < check.start)){
# ...and the next jump is in a different direction, stop the loop and don't remove the first one.
if(slope.indicator[indices[min(jump.all[-1])]] != slope.indicator[indices[jump.all[1]]])
remove.initial.jump = F
# ...or if the next two jumps are different, stop the loop and don't remove the first one.
else if(length(jump.all[-1]) > 1 &
slope.indicator[indices[jump.all[2]]] != slope.indicator[indices[jump.all[3]]])
remove.initial.jump = F
# ...otherwise, remove the jump and keep looping.
else
remove.initial.jump = T
}
# If no jumps other than the first one are before <check.start>, remove it and keep looping.
else
remove.initial.jump = T
# If the initial jump is to be removed, remove all points before the jump from analysis.
# also delete the initial jump from <jump.all>
if (remove.initial.jump){
input.well = remove.points(input.well, 1:(indices[jump.all[1]] - 1))
input.well@add.info = paste(add.info, "and removed.")
jump.all = jump.all[-1]
}
}
# If greater than 3 jumps remain, discard the curve as uninterpretable
if (length(jump.all) >= 4){
input.well = remove.points(input.well, 1:length(input.well))
input.well@add.info = paste(add.info, " - data was discarded.")
}
else{
# If there are 3 jumps, remove all points after the last one from analysis and delete the last jump from <jump.all>
if(length(jump.all) == 3){
input.well = remove.points(input.well, indices[jump.all[3]]:length(input.well))
input.well@add.info = paste(add.info, "and removed.")
jump.all = jump.all[-3]
}
# If there are now 2 jumps...
if(length(jump.all) == 2){
# ...and they are different (one up, one down), remove the points in between them from analysis.
if (diff(slope.indicator[indices[jump.all]]) != 0 ){
input.well = remove.points(input.well, indices[jump.all[1]:(jump.all[2] - 1)])
input.well@add.info = paste(add.info, "and removed.")
}
# ...and they are in the same direction, remove all the points after the first one from analysis.
else{
input.well = remove.points(input.well, indices[jump.all[1]]:length(input.well))
input.well@add.info = paste(add.info, "and removed.")
}
}
# If there is only one jump, remove all points after it from analysis.
else if (length(jump.all == 1)){
input.well = remove.points(input.well, indices[jump.all[1]]:length(input.well))
input.well@add.info = paste(add.info, "and removed.")
jump.all = jump.all[-1]
}
}
}
if(!silent)
cat("\t", input.well@add.info)
return(input.well)
}
########################################################################
# #
# Check wells for growth, remove from analysis if OD is too low #
# #
########################################################################
#
# The well will be tagged with no.growth = T in the slot "curve.par" if raw OD values (except for <points.to.remove>)
# do not increase beyond <growth.cutoff> above the specified time of inoculation for that well (<start.index>)
check.growth = function(input.well, growth.cutoff, start.index = 2){
# Get raw ODs (not including <points.to.remove>) and slope estimates from the well
# as well as OD at inoculation timepoint <start.index>
raw.ODs = raw.data(input.well)[,2]
start.OD = raw.ODs[start.index]
raw.ODs[input.well@screen.data$Remove] = NA
slope.estimates = slopes(input.well, remove.tanking = T, na.rm = T)
# If fewer than 3 points remain in the analysis with valid slope estimates, discard the well.
if (length(slope.estimates) < 3 | all(is.na(slope.estimates)))
input.well@curve.par$no.growth= T
else{
# If there are no points at all in the raw ODs
if(all(is.na(raw.ODs)))
input.well@curve.par$no.growth = T
else if(max(raw.ODs, na.rm=T) - start.OD < growth.cutoff) # See if OD increases by at least <growth.cutoff> above
input.well@curve.par$no.growth = T
else
input.well@curve.par$no.growth = F
}
if(all(raw.data(input.well)[,2] - raw.data(input.well)[start.index,2] < growth.cutoff))
input.well@add.info = "" # This is simply to reduce the amount of unnecessary info in the output.
# If the well is below growth cutoff anyway, don't bother reporting other errors.
return(input.well)
}

@ -0,0 +1,210 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
########################################################################
# #
# Populate an output table with parameters and other useful info for #
# each well in a fitted dataset. #
# #
########################################################################
#
# unlog - Should OD values be returned on the linear scale instead of log-transformed scale?
# constant.added - For returning values on linear scale, what constant was added to ODs before the log transform?
# reach.cutoff - what proportion of the plateau OD must tbe reached by the last valid timepoint for the curve to be marked as reaching its plateau OD?
#
table.out = function(fitted.data.set, unlog = F, constant.added, reach.cutoff = 0.90, filename.timestamp = NULL,use.linear.param=F, use.loess=F){
# The idea is basically to use <unlist> and <aapply> on the fitted data array in order
# to get one vector for each column of the output table.
# Get identifying information (plate, well, media and strain names)
plate.ID = unlist(aapply(fitted.data.set,plate.name))
well.ID = unlist(aapply(fitted.data.set,well.name))
media.ID = unlist(aapply(fitted.data.set,media.name))
strain.ID = unlist(aapply(fitted.data.set,strain.name))
# Get fit information for each well
# - was it marked as empty in the plate layout?
# - did the program find it to contain no growth ("dead")?
# - was the fitting procedure successful?
# - did the curve tank? if so, at what timepoint? if not, set value to "-"
empty = unlist(aapply(fitted.data.set, is.empty))
dead = unlist(aapply(fitted.data.set, lacks.growth))
fit = unlist(aapply(fitted.data.set, contains.fit))
tanking = unlist(aapply(fitted.data.set, tanking.start))
tanking[is.na(tanking) | tanking == 1 | dead] = "-"
# Get calculated values for each well: specific growth, final and initial OD, fitted plateau and baseline OD, lag time, etc.
inflection.time = unlist(aapply(fitted.data.set, inflection.time))
max.spec.growth.rate = unlist(aapply(fitted.data.set, max.spec.growth.rate))
max.log.OD = unlist(aapply(fitted.data.set, max.log.OD))
inoc.log.OD = unlist(aapply(fitted.data.set, inoc.log.OD))
projected.growth = unlist(aapply(fitted.data.set, projected.growth))
projected.growth.OD = unlist(aapply(fitted.data.set, projected.growth.OD, constant.added))
achieved.growth = unlist(aapply(fitted.data.set, achieved.growth))
achieved.growth.OD = unlist(aapply(fitted.data.set, achieved.growth.OD, constant.added))
lag.time = unlist(aapply(fitted.data.set, lag.time))
shape.par = unlist(aapply(fitted.data.set, shape.par))
RSS = unlist(aapply(fitted.data.set, rss))
baseline = unlist(aapply(fitted.data.set, baseline))
amplitude = unlist(aapply(fitted.data.set, amplitude))
plateau = unlist(aapply(fitted.data.set, plateau))
########################3h#############################################
max.spec.growth.rate.SE = unlist(aapply(fitted.data.set, max.spec.growth.rate.SE))
shape.par.SE = unlist(aapply(fitted.data.set, shape.par.SE))
lag.time.SE = unlist(aapply(fitted.data.set, lag.time.SE))
amplitude.SE = unlist(aapply(fitted.data.set, amplitude.SE)) # a.k.a amplitude error
baseline.SE = unlist(aapply(fitted.data.set, baseline.SE)) # a.k.a baseline error
#######################################################################
# If the curve falls short of 90% of plateau OD by the final timepoint.
no.reach.plateau = !unlist(aapply(fitted.data.set, reach.plateau, cutoff = 0.9))
# If the fitted baseline is below zero on linear scale
no.reach.baseline = unlog(baseline,constant.added) < 0
# If any of these are NA as a result of failed fits, change them to false: they don't need to be reported.
no.reach.plateau[is.na(no.reach.plateau)] = F
no.reach.baseline[is.na(no.reach.baseline)] = F
# What percent of the total growth does the curve actually reach?
# (in case of total growth being 0, change this to 100%)
percent.reach = 100*((max.log.OD - inoc.log.OD) / (projected.growth))
percent.reach[is.infinite(percent.reach)] = 100
# Return the name of the model (if any) that was successfully fit to the well.
model.used = unlist(aapply(fitted.data.set, function(well)well@model.name))
# "Goodness of fit" metric
good.fit = unlist(aapply(fitted.data.set, model.good.fit))
# Code the two flags:
flag1 = flag2 = rep("-", length(tanking))
for(i in 1:length(tanking)){
# Flag 1 (empty/inoculated flag) possible values:
# well was empty and no growth was found (E)
# well was empty, but growth was found (E*)
# well was inoculated but no growth was found (!)
# well was inoculated and growth was found (I)
if(empty[i] & !fit[i])
flag1[i] = "E "
if(empty[i] & fit[i])
flag1[i] = "E*"
if(!empty[i] & dead[i])
flag1[i] = "! "
if(!empty[i] & !dead[i])
flag1[i] = "I "
# Flag 2 (lower/upper asymptotes) possible values:
# well did not reach lower asymptote (baseline OD) (L)
# well did not reach upper asymptote (plateau OD) (U)
# well did not reach either asymptote (L/U)
# well reached both asymptotes (-)
if(no.reach.baseline[i]){
if (no.reach.plateau[i])
flag2[i] = "L/U"
else
flag2[i] = "L"
}
else{
if (no.reach.plateau[i])
flag2[i] = "U"
else
flag2[i] = "-"
}
# Also use the <dead> and <empty> and <fit> to provie more info about why model fitting failed in some cases.
if(dead[i])
model.used[i] = "<NA>: skipped"
else if(!empty[i] & !fit[i])
model.used[i] = "<NA>: failed"
}
# Flag 3: return the additional info slot.
flag3 = unlist(aapply(fitted.data.set, function(well){
if (length(well@add.info) > 0)
return(well@add.info)
else
return("")
}))
# If something is amiss with the data table use this to check on the arguments...
#cat("plate ", length(plate.ID)," well ", length(well.ID)," media ", length(media.ID)," strain ", length(strain.ID),
#" model ", length(model.used)," max.spec.growth.rate", length(max.spec.growth.rate), "projected.growth", length(projected.growth),
#"lag.time", length(lag.time), "inoc.log.OD", length(inoc.log.OD), "good.fit",
#length(good.fit),"empty", length(flag1),"asymp", length(flag2)," tank ", length(tanking)," reach ", length(percent.reach)," other ", length(flag3), sep = "\n")
# 06.28.11: Add a row number identifier for output perusal
row.number = 1:length(plate.ID)
pdf.file = page.no = c()
# 06.29.11: Add pdf file name and page number references. Prepare timestamp for addition to output file names (for file references in last column)
for(i in 1:length(plate.ID)){
pdf.file[i] = paste(plate.ID[i], "_plots", filename.timestamp, ".pdf", sep="")
page.no[i] = (i-1) %% 96 + 2
}
# Slap it all together into a data frame.
if(use.loess){
output.core = data.frame(row = row.number, plate = plate.ID, well = well.ID, media = media.ID, strain = strain.ID,
model = model.used, lag.time, inflection.time, max.spec.growth.rate,
baseline, amplitude, plateau, inoc.log.OD, max.log.OD, achieved.growth,
baseline.OD = unlog(baseline,constant.added), amplitude.OD = unlog(amplitude,constant.added),
plateau.OD = unlog(plateau,constant.added), inoc.OD = unlog(inoc.log.OD,constant.added),
max.OD = unlog(max.log.OD,constant.added), achieved.growth.OD = achieved.growth.OD,
R.squared = good.fit, RSS = RSS, empty = flag1, asymp.not.reached = flag2, tank = tanking, other = flag3, pdf.file = pdf.file, page.no = page.no)
} else {
output.core = data.frame(row = row.number, plate = plate.ID, well = well.ID, media = media.ID, strain = strain.ID,
model = model.used, lag.time = lag.time, lag.time.SE, inflection.time, max.spec.growth.rate, max.spec.growth.rate.SE,
baseline, baseline.SE, amplitude, amplitude.SE, plateau, inoc.log.OD, max.log.OD, projected.growth, achieved.growth,
baseline.OD = unlog(baseline,constant.added), amplitude.OD = unlog(amplitude,constant.added),
plateau.OD = unlog(plateau,constant.added), inoc.OD = unlog(inoc.log.OD,constant.added),
max.OD = unlog(max.log.OD,constant.added), projected.growth.OD = projected.growth.OD, achieved.growth.OD = achieved.growth.OD,
shape.par = shape.par, shape.par.SE,
R.squared = good.fit, RSS = RSS, empty = flag1, asymp.not.reached = flag2, tank = tanking, other = flag3, pdf.file = pdf.file, page.no = page.no)
}
# Add units to column names
names2 = names(output.core)
names2[grep("time",names2)] = sub("$",", hrs", names2[grep("time",names2)])
names2[grep("rate",names2)] = sub("$",", log.OD/hr", names2[grep("rate",names2)])
log.OD.fields = c("baseline", "baseline.SE", "amplitude", "amplitude.SE", "plateau", "projected.growth", "achieved.growth")
names2[names2 %in% log.OD.fields] = sub("$", ", log.OD", names2[names2 %in% log.OD.fields])
names(output.core) = names2
# Add on any additional fields found in the plate layout.
all.layout.fields = sapply(fitted.data.set, function(well) unlist(well@well.info))
all.layout.fields = as.data.frame(t(all.layout.fields))
addl.info = all.layout.fields[,!(names(all.layout.fields) %in% c("Strain", "Media"))]
if(!is.data.frame(addl.info)){
addl.info = data.frame(addl.info)
names(addl.info) = names(all.layout.fields)[!(names(all.layout.fields) %in% c("Strain", "Media"))]
}
output = cbind(output.core,addl.info)
return(output)
}

@ -0,0 +1,427 @@
#Copyright 2012 The Board of Regents of the University of Wisconsin System.
#Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
#Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
#
#This file is part of GCAT.
#
#GCAT is free software: you can redistribute it and/or modify
#it under the terms of the GNU Lesser General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#GCAT is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public License
#along with GCAT. If not, see <http://www.gnu.org/licenses/>.
# Notes by Jason
# 9/07/11
########################################################################
# #
# Function for loading data from tabular format into an object array #
# #
########################################################################
#' Load tabular data
#'
#' This function handles loading data from tabular format (.csv, tab-delimited text or R data frame object)
#' and returns an array of well objects, each filled with raw Time vs. OD data.
#' It takes single-plate or multiple-plate format data. For single-plate data,
#'it calls on the function \code{gcat.reorganize.single.plate.data} to rearrange the table before creating the output object.
#'
#' @param file.name Complete path and file name of a comma-separated values (.csv) file containing growth curve data
#' in the multiple-plate (long) format.
#' @param input.data A list of tables representing input files read with \code{read.table}. Used to save time in cases
#' of running multiple analyses on the same dataset. If used, the function will ignore \code{file.name} entirely.
#' @param load.type .csv by default.
#' @param plate.laout Specifies the layout of the given plate.
#' @param single.plate.ID specifies a plate name for a single-plate read. If NULL, this is derived from the file name.
#' @param blank.value Blank OD measurement for uninoculated wells. By default(NULL), the value of the first OD
#' measurement in each well is used.
#' @param add.constant A value for r in the log(OD + r) transformation.
#' @param plate.nrow The number of rows in the input files.
#' @param plate.ncol The number of columns in the input files.
#' @param input.skip.lines specifies a plate name for a single-plate read. If NULL, this is derived from the file name.
#' @param multi.column.headers The headers of the column when analyzing multiple plates.
#' @param single.column.headers The headers of the column when analyzing a single plate.
#' @param layout.sheet.headers The headers of the layout file.
#' @param silent Surpress all messages.
#' @param verbose Display all messages when analyzing each well.
#'
#' @return A list of well objects.
gcat.load.data = function(file.name = NULL, load.type = "csv", input.data = NULL, single.plate.ID = NULL,
plate.layout = NULL,plate.nrow = 8, plate.ncol = 12, input.skip.lines = 0,
multi.column.headers = c("Plate.ID", "Well", "OD", "Time"), single.column.headers = c("","A1"),
layout.sheet.headers = c("Strain", "Media Definition"),
blank.value = NULL, start.index = 2, single.plate = F, silent = T){
########################################################################
# Read from .csv, tab-delimited text file or data frame object #
########################################################################
if(is.null(input.data)){
# Either read from .csv.
input.data = read.csv(file.name, stringsAsFactors=F, skip = input.skip.lines, fileEncoding='UTF-8')
# Determine single plate name if not specified.
if (is.null(single.plate.ID)){
# Split the file name by "." and discard the last member (file extension).
single.plate.ID = strsplit(basename(file.name),"\\.")[[1]]
single.plate.ID = paste(single.plate.ID[-length(single.plate.ID)],collapse=".")
}
}
# Call <gcat.reorganize.single.plate.data> to arrange data from a single plate format file
if(single.plate)
input.data = gcat.reorganize.single.plate.data(input.data = input.data, single.column.headers,
blank.value = blank.value, single.plate.ID = single.plate.ID, plate.nrow = plate.nrow, plate.ncol = plate.ncol, silent=silent)
########################################################################
# Search for and standardize column headers in input data #
########################################################################
# Go through the specified column headers, determining what their positions are in the
# input data frame and if any are missing.
# Get names of column headers in input data
input.colnames = colnames(input.data)
# Create a list denoting the column numbers in input data that match each of the specified column names,
# and a separate list for any missing columns.
column.matches = c()
missing.list = NULL
for(i in 1:length(multi.column.headers)){
if (multi.column.headers[i] %in% input.colnames)
column.matches[i] = min(which(input.colnames == multi.column.headers[i]))
# Take the first column in input file that matches a specified column header.
else{
missing.list = c(missing.list, i)
}
}
# If any columns are missing, stop and report error with missing column names
if (is.vector(missing.list)){
message = "The following columns:"
for (i in missing.list)
message = paste(message, paste(" ", multi.column.headers[i]), sep = "\n")
stop(message, "\n were not found in the data file.")
}
# Reorder and rename the columns, using the list of matching column numbers from above.
input.data = input.data[,column.matches]
names(input.data)[1:4] = c("Plate.ID", "Well", "OD", "Time")
# Use 'substring' to split the alphanumeric "Well" field into row (letters) and column (numbers)
input.data$Well.row = substring(input.data$Well, 0,1)
input.data$Well.col = as.numeric(substring(input.data$Well, 2))
########################################################################
# Create an array of well objects with the Time and OD data #
########################################################################
#
# Use the by function to split up the data frame into shorter segments by well (row, column and plate)
well.array = by(data = input.data[,c("OD", "Time")],
INDICES = list(input.data$Well.row,input.data$Well.col,input.data$Plate.ID),
FUN = function(x){data.frame(Time=x$Time, OD=x$OD,stringsAsFactors = F)}, simplify = F)
# Then apply the function <well> (found in well.class) to each member to create a well object
well.array = aapply(well.array,function(x){well(x$Time,x$OD)})
# Differentiate any duplicate plate names in the array's dimnames
new.dimnames = dimnames(well.array)
for (i in length(new.dimnames[[3]]):1){
if (any(new.dimnames[[3]][-i] == new.dimnames[[3]][i]))
new.dimnames[[3]][i] = paste("another_", new.dimnames[[3]][i], sep = "")
}
dimnames(well.array) = new.dimnames
# Copy the plate/row/column names found in the dimnames into the array objects themselves (use "position" slot)
for(plate in unique(dimnames(well.array)[[3]])){
for (col in unique(dimnames(well.array)[[2]])){
for(row in unique(dimnames(well.array)[[1]])){
well.array[[row,col,plate]]@position = c(plate=plate,row=row,col=col)
}
}
}
########################################################################
# Add plate layout information to well array #
########################################################################
# Use the <plate.layout> object to add media and strain information to the "well.info" slot of each well
# Also set the value of the parameter <empty.well> in slot "curve.par" to T for empty wells.
########################################################################
# Add plate layout information to well array #
########################################################################
# Use the <plate.layout> object to add media and strain information to the "well.info" slot of each well
# Also set the value of the parameter <empty.well> in slot "curve.par" to T for empty wells.
# If <plate.layout> is not provided, do not add strain information, and assume all wells are inoculated.
if(is.null(plate.layout)){
plate.layout = data.frame(Row=rep(PLATE.LETTERS[1:plate.nrow],plate.ncol),Column=rep(1:plate.ncol,each=plate.nrow),rep("Unknown Strain",96),rep("Unknown Media",96))
colnames(plate.layout) = c("Row", "Column", layout.sheet.headers)
}
else
if(!silent) cat("\n\t\tusing plate layout to fill well info.")
for(plate in unique(dimnames(well.array)[[3]])){
for (col in unique(dimnames(well.array)[[2]])){
for(row in unique(dimnames(well.array)[[1]])){
well = well.array[[row,col,plate]]
# For each well on each plate, find the corresponding row in <plate.layout>.
# If <plate.layout> refers to specific plates, then use those to find the correct row.
# Otherwise, generalize across all plates.
if ("Plate.ID" %in% names(plate.layout))
layout.row.number = which(plate.layout$Column==well@position["col"] &
plate.layout$Row==well@position["row"] &
plate.layout$Plate.ID==well@position["plate"] )
else
layout.row.number = which(plate.layout$Column==well@position["col"] &
plate.layout$Row==well@position["row"])
# Error if either no rows or more than one row matches the well
if (length(layout.row.number) != 1)
stop("incorrectly formatted plate layout! check names of columns, rows, and plates (if applicable).")
# Add any additional columns to the well's "well.info" slot
well.info = plate.layout[layout.row.number,!(names(plate.layout) %in% c("Row","Column","Plate.ID",layout.sheet.headers))]
# Fix the column name issue if there is only one additional entry.
if(length(well.info) == 1){
well.info = data.frame(well.info,stringsAsFactors=F)
names(well.info) = names(plate.layout)[!(names(plate.layout) %in% c("Row","Column","Plate.ID",layout.sheet.headers))]
}
well@well.info = as.list(well.info)
well@well.info$Strain = plate.layout[layout.row.number, layout.sheet.headers[1]]
well@well.info$Media = plate.layout[layout.row.number, layout.sheet.headers[2]]
# Set <empty.well> parameter in slot "curve.par" accordingly
well@curve.par$empty.well = (plate.layout$Strain[layout.row.number] == "Empty")
well.array[[row,col,plate]] = well
}
}
}
# Set start index value in each well
well.array = aapply(well.array, function(x,start.index) { x@start.index = start.index; x }, start.index)
########################################################################
# Return values to R #
########################################################################
#
# Console output if desired, return the completed well array.
if (!silent)
cat("\n\t", dim(well.array)[[3]], "plates added to array from", file.name)
return(well.array)
}
########################################################################
# #
# Reorganize data from single-plate input format before reading #
# #
########################################################################
#
# This function reorganizes the data frame from a single-plate format file.
# input.data - data frame read straight from a single-plate format data file.
# single.plate.ID - specifies a plate name for a single-plate read, since none is given in the single-plate format
# The plate will be named Plate_1 unless otherwise specified.
gcat.reorganize.single.plate.data = function(input.data, blank.value = NULL, single.column.headers, single.plate.ID = "Plate_1",
plate.nrow = 8, plate.ncol = 12, silent=T){
########################################################################
# Standardize the formatting and search for specified column names #
########################################################################
#
# Locate the first and last rows from the table and return errors if not defined
# Note: this only works if the time column is the first column
header.row = min(which(input.data[,1] == single.column.headers[1]))
if (length(header.row) != 1 | is.infinite(header.row))
stop("could not locate header row in input file!")
# The last row: where column 2 starts to be blank, or the total number of rows, whichever is smaller
extra.rows.start = min(which(input.data[-(1:header.row),2] == ""), which(is.na(input.data[-(1:header.row),2])), nrow(input.data[-(1:header.row),]))
if (length(extra.rows.start) != 1 & is.infinite(extra.rows.start))
stop("could not locate last row in input file!")
# Use header row to rename the columns, then cut off extra rows (including the ones above header)
names(input.data) = as.character(unlist(input.data[header.row,]))
input.data = input.data[(header.row+1):(header.row+extra.rows.start-1),]
# Time column: allow for multiple matches to the name (since it's usually blank) but assume it's the first one
Time.column = which(names(input.data) == single.column.headers[1])
if (length(Time.column) != 1){
if(!silent) cat("No unique time column in input.data file! Using the first one encountered.")
Time.column = min(Time.column)
}
# First well column (default A1): only allow for one match.
Well.column.start = which(names(input.data) == single.column.headers[2])
if (length(Well.column.start) != 1)
stop("No unique start point for well columns in input.data file!")
# If the time column was found, rename it "Time" and reformat it into a numeric value
# Adjust the blank measurement timestamp to -1 seconds if there is one
names(input.data)[Time.column] = "Time"
# Note: Some single plate screens have timepoints ending with "s" for seconds.
# This line removes the "s" while maintaining general compatibility.
input.data$Time = unlist(strsplit(input.data$Time, "s"))
# If <blank.value> is NULL (default - takes the first OD as the blank reading), then the first timepoint can labeled something non-numeric.
# In that case, rename it to match the first real timepoint minus one.
# when user input blank value, Blank timepoint i.e. input.data$Time[1] == Blank, labeled as "Blank" from data input file
# It also should rename it to match the first real timepoint minus one.
if(is.null(blank.value) || is.na(as.numeric(input.data$Time[1])))
input.data$Time[1] = as.numeric(input.data$Time[2]) - 1
########################################################################
# Start to fill the reformatted data frame #
########################################################################
# If all columns are present, make a list of all the wells.
well.list = paste(rep(PLATE.LETTERS[1:plate.nrow], each = plate.ncol), rep(formatC(1:plate.ncol, digits = log(plate.ncol, 10), flag = "0"), plate.nrow), sep = "")
# Duplicate the well names times the number of time measurements in each well
Well = rep(well.list, each = length(input.data[,Time.column]))
# Duplicate <plate.name> times the length of the entire output
Plate.ID = rep(single.plate.ID, length(Well))
# Duplicate the time column times the number of wells and convert to numeric
Time = as.numeric(rep(input.data[,Time.column], times = length(Well.column.start:ncol(input.data))))
# Append OD measurements from each well together and convert to numeric
OD = c()
for (i in Well.column.start:ncol(input.data)){
OD = as.numeric(c(OD, input.data[,i]))
OD = unlist(OD)
}
# Fill and return the data frame containing the above four vectors.
output = data.frame(Plate.ID, Well, OD, Time)
# Include any extra columns that were not Time or OD measurements?
for(i in (1:length(names(input.data)))[-c(Time.column,Well.column.start:ncol(input.data))]){
new.column = data.frame(rep(input.data[,i], length(Well.column.start:ncol(input.data))))
names(new.column) = names(input.data)[i]
output = cbind(output, new.column)
}
return(output)
}
########################################################################
# #
# Function to combine two well array datasets by plate #
# #
########################################################################
# ----------------------------------------------------------
# This function can append together arrays created using <load.data>
# Arguments: any number of array objects as long as they are all output straight from <load.data>
gcat.append.arrays = function(...){
# Transfer arrays to a list
args.arrays = list(...)
first.array = args.arrays[[1]]
first.dims = dim(first.array)
plate.nrow = args.arrays[[4]]
plate.ncol = args.arrays[[3]]
input.arrays = list(args.arrays[[1]], args.arrays[[2]])
for (i in 2:length(input.arrays)){
next.array = input.arrays[[i]]
next.dims = dim(next.array)
# Check to make sure the arrays have proper dimensions for 96-well plate data
if (!(all(c(first.dims[1], next.dims[1]) == plate.nrow) & all(c(first.dims[2], next.dims[2]) == plate.ncol)))
stop("Data should have dimensions (",plate.nrow,",",plate.ncol,",n)!")
# If dimensions are alright, append dimensions and dimension names
new.dims = c(plate.nrow,plate.ncol,first.dims[3]+next.dims[3])
new.names = dimnames(first.array)
new.names[[3]] = c(new.names[[3]], dimnames(next.array)[[3]])
# Differentiate duplicate names
for (i in length(new.names[[3]]):1){
if (any(new.names[[3]][-i] == new.names[[3]][i]))
new.names[[3]][i] = paste("another_", new.names[[3]][i], sep = "")
}
# Create a new array
new.array = c(first.array, next.array)
dim(new.array) = new.dims
dimnames(new.array) = new.names
# Update plate name in well objects
for (i in 1:length(unlist(new.array)))
new.array[[i]]@position[1] = new.names[[3]][floor((i-1)/96)+1]
# Loop until complete
first.array = new.array
first.dims = dim(first.array)
}
return(new.array)
}
########################################################################
# #
# Convert timestamps to hours from start and sort timepoints #
# #
########################################################################
#
# This function acts on a single well and modifies the raw data stored in slot "screen.data"
#
# input.well - an object of class well
# time.format - specifies the time format. allowed values are "%S", for seconds, "%d", for days, or anything complying with ISO C / POSIX standards; see <strptime>
# note: reading directly from excel to R results in timestamps being converted to days.
# start.index - which timepoint should be used as the starting time at inoculation?
gcat.start.times = function(input.well, time.input, start.index = 2) {
if(start.index > length(input.well))
stop("Start index is greater than length of well!")
# If using a numeric time format, simply multiply times by the appropriate conversion factor
# Conversion factor should be supplied to convert timestamps to hours. For example,
# <time.format> should be equal to 1/3600 if "time" is in seconds, 24 if "time" is in days, etc.
time.format = time.input # Set default constant from rails user input
if (is.numeric(time.format))
input.well@screen.data$Time = (input.well@screen.data$Time - min(input.well@screen.data$Time)) * time.format
else{
# Otherwise, convert timestamps from ISO C / POSIX to numeric values representing seconds (since the dawn of time?) and subtract out the initial value.
rtimes = input.well@screen.data$Time
ptimes = strptime(as.character(rtimes),time.format)
ctimes = as.POSIXct(ptimes)
int.times = unclass(ctimes)
# Time will be in seconds, convert to hours by dividing by 3600
input.well@screen.data$Time = (int.times - min(int.times))/3600
}
# Sort raw data by timestamp and return the input.well
input.well@screen.data = input.well@screen.data[order(input.well@screen.data$Time),]
input.well@screen.data$Time = input.well@screen.data$Time - input.well@screen.data$Time[start.index]
if(all(is.na(input.well@screen.data$Time)))
stop("Error in <time.format>.")
rownames(input.well@screen.data) = NULL
return(input.well)
}

@ -0,0 +1,170 @@
Well positions,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Raw data,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11,E12,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,G1,G2,G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,H1,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12
Blank,0.0623,0.0626,0.0596,0.0602,0.061,0.0598,0.0604,0.0623,0.062,0.0648,0.0601,0.0602,0.0583,0.093,0.0934,0.0929,0.0927,0.093,0.2159,0.2214,0.2249,0.224,0.223,0.0617,0.0604,0.0921,0.0926,0.0943,0.0937,0.094,0.2207,0.22,0.2199,0.2191,0.2133,0.0623,0.0569,0.0932,0.0965,0.0943,0.094,0.0971,0.2214,0.2256,0.2236,0.2196,0.2163,0.0589,0.0583,0.0927,0.0924,0.0941,0.0935,0.0929,0.2204,0.2211,0.2209,0.2197,0.2142,0.0606,0.0601,0.0921,0.0919,0.0958,0.0925,0.0933,0.2211,0.2246,0.2202,0.22,0.212,0.0588,0.0575,0.0923,0.0923,0.0942,0.0973,0.0921,0.2217,0.2218,0.221,0.2195,0.2198,0.059,0.0586,0.058,0.0577,0.0576,0.0581,0.0585,0.0582,0.0582,0.0585,0.0577,0.0577,0.0572
0s,0.0631,0.0633,0.0607,0.0613,0.0623,0.0612,0.0617,0.0636,0.063,0.0657,0.0607,0.0612,0.0592,0.2053,0.2676,0.2104,0.1872,0.0926,0.2631,0.3007,0.2867,0.2736,0.2197,0.0622,0.0606,0.1578,0.1811,0.1762,0.156,0.0939,0.2681,0.2907,0.2769,0.2603,0.212,0.0634,0.0581,0.1686,0.1948,0.1673,0.1432,0.0963,0.26,0.2915,0.2799,0.2631,0.2127,0.061,0.0585,0.1601,0.1703,0.1704,0.162,0.0919,0.2608,0.2906,0.2729,0.26,0.213,0.0617,0.0608,0.1734,0.1982,0.1829,0.1778,0.0927,0.2591,0.2884,0.2715,0.2627,0.2106,0.0591,0.0581,0.1656,0.2065,0.1829,0.1707,0.0913,0.2637,0.2925,0.2752,0.2741,0.2186,0.06,0.0593,0.0585,0.0587,0.0584,0.0589,0.0595,0.0592,0.0592,0.0596,0.0586,0.0584,0.0577
640s,0.0642,0.0645,0.0612,0.0616,0.0624,0.0613,0.063,0.0639,0.0632,0.0659,0.0608,0.0616,0.059,0.2046,0.2813,0.2226,0.1947,0.0927,0.2767,0.3375,0.3023,0.2892,0.2194,0.0627,0.0604,0.1712,0.2078,0.1926,0.1708,0.0938,0.2808,0.3185,0.2881,0.2706,0.2117,0.0636,0.0579,0.1824,0.224,0.1858,0.1559,0.0961,0.2702,0.319,0.2898,0.2711,0.2128,0.0592,0.0587,0.1709,0.2068,0.1943,0.1793,0.0917,0.2713,0.3203,0.2858,0.2682,0.2129,0.0613,0.0608,0.1832,0.2254,0.1973,0.1904,0.0927,0.2671,0.3156,0.2802,0.2709,0.2104,0.0593,0.0588,0.178,0.2312,0.1937,0.184,0.0915,0.2695,0.3126,0.2787,0.2706,0.2183,0.06,0.0594,0.0587,0.0591,0.0586,0.0591,0.0597,0.0591,0.0593,0.0598,0.0589,0.0585,0.0573
1280s,0.0641,0.0635,0.0612,0.0616,0.0624,0.0613,0.0619,0.0638,0.0631,0.0659,0.0613,0.0617,0.0592,0.2043,0.2854,0.2256,0.1985,0.0925,0.283,0.3447,0.3134,0.3022,0.2194,0.0594,0.0602,0.1707,0.2156,0.1999,0.1751,0.0938,0.2866,0.3256,0.2996,0.2818,0.2119,0.0637,0.0579,0.1862,0.2311,0.1961,0.1602,0.0959,0.2767,0.3247,0.3,0.2817,0.2126,0.0602,0.0586,0.1735,0.2129,0.2028,0.1844,0.092,0.2791,0.328,0.2994,0.2788,0.2129,0.0614,0.061,0.1866,0.2379,0.2086,0.1986,0.0927,0.2734,0.3239,0.2896,0.2806,0.2105,0.0592,0.0585,0.1842,0.2422,0.2047,0.1951,0.0915,0.274,0.3176,0.2859,0.277,0.2186,0.0602,0.0596,0.0589,0.0589,0.0586,0.0593,0.0599,0.0592,0.0594,0.0598,0.059,0.0585,0.0577
1921s,0.0646,0.0642,0.0613,0.062,0.0626,0.0614,0.0621,0.064,0.0634,0.0661,0.0615,0.0619,0.0592,0.2054,0.2872,0.2262,0.1994,0.0927,0.2846,0.3478,0.3224,0.3119,0.2197,0.0585,0.0599,0.1681,0.2164,0.2006,0.1736,0.0937,0.2875,0.3279,0.3066,0.2894,0.2118,0.0636,0.0579,0.1898,0.2348,0.1991,0.1629,0.096,0.2801,0.3264,0.3091,0.29,0.2125,0.0595,0.0588,0.1772,0.2149,0.2047,0.1855,0.0918,0.2822,0.3287,0.3075,0.2856,0.213,0.0615,0.0611,0.1875,0.2419,0.2129,0.2033,0.0925,0.2772,0.3252,0.2981,0.2885,0.2106,0.0591,0.0584,0.1874,0.2472,0.2141,0.1983,0.0914,0.2771,0.3178,0.2926,0.2837,0.2209,0.0602,0.0597,0.059,0.0593,0.0589,0.0594,0.06,0.0594,0.0594,0.0601,0.0589,0.0587,0.0575
2561s,0.0641,0.0637,0.0609,0.0616,0.0626,0.0612,0.0619,0.0639,0.0631,0.0657,0.0619,0.0618,0.0592,0.2061,0.2873,0.2247,0.1979,0.0925,0.2858,0.352,0.3305,0.3176,0.2197,0.0601,0.0597,0.1658,0.2185,0.2016,0.1748,0.0938,0.2888,0.331,0.3153,0.2951,0.212,0.0637,0.0581,0.1916,0.2381,0.1997,0.1644,0.0962,0.2818,0.3296,0.3175,0.2959,0.2127,0.0608,0.0581,0.1805,0.2172,0.2046,0.1876,0.0918,0.2846,0.3317,0.3173,0.2911,0.2131,0.0615,0.061,0.1868,0.2421,0.2198,0.2071,0.0926,0.2796,0.3284,0.3055,0.2955,0.2107,0.0593,0.0585,0.1914,0.2444,0.2191,0.2043,0.0915,0.2788,0.3184,0.2996,0.2917,0.2189,0.0603,0.06,0.0591,0.059,0.0588,0.0594,0.06,0.0595,0.0597,0.0601,0.0592,0.059,0.0573
3201s,0.064,0.0675,0.061,0.0619,0.0627,0.0613,0.0621,0.0639,0.0633,0.0659,0.0623,0.0619,0.0596,0.2072,0.2892,0.2249,0.1965,0.0927,0.2884,0.3553,0.3405,0.3248,0.2199,0.0593,0.0595,0.1664,0.2186,0.204,0.177,0.0937,0.2906,0.3346,0.3246,0.3015,0.2121,0.0638,0.0581,0.1925,0.2384,0.2003,0.17,0.0961,0.2845,0.3347,0.3269,0.302,0.2129,0.0615,0.0588,0.1821,0.2156,0.2047,0.1887,0.092,0.2871,0.3354,0.326,0.2962,0.2132,0.0616,0.0612,0.1884,0.2396,0.2267,0.2061,0.0926,0.2833,0.3328,0.3144,0.3026,0.2109,0.0595,0.0587,0.196,0.2392,0.2231,0.206,0.0914,0.2811,0.3215,0.3075,0.298,0.2191,0.0603,0.0601,0.0592,0.0593,0.0591,0.0596,0.0602,0.0597,0.0598,0.0603,0.0594,0.0593,0.0572
3841s,0.0646,0.0719,0.0613,0.0619,0.0627,0.0614,0.0621,0.064,0.0634,0.0658,0.0624,0.0618,0.0592,0.2087,0.2903,0.224,0.1958,0.0925,0.2911,0.3565,0.3501,0.3288,0.2199,0.063,0.0595,0.1693,0.2208,0.2078,0.1793,0.0936,0.2935,0.3375,0.3339,0.3073,0.2121,0.0638,0.0579,0.1943,0.2387,0.2039,0.1718,0.096,0.2888,0.3394,0.3367,0.3075,0.2129,0.0623,0.059,0.1838,0.2143,0.2092,0.1895,0.0918,0.2908,0.3383,0.3356,0.3026,0.2135,0.0617,0.0611,0.1893,0.2368,0.2226,0.1997,0.0925,0.2855,0.3365,0.3227,0.3084,0.2108,0.061,0.0589,0.1997,0.238,0.2296,0.2076,0.0915,0.2845,0.3249,0.3157,0.3037,0.2192,0.0607,0.0602,0.0591,0.0595,0.0591,0.0596,0.0602,0.0596,0.0597,0.0604,0.0595,0.0594,0.0574
4482s,0.0645,0.0652,0.0614,0.0623,0.0628,0.0617,0.0624,0.0639,0.0637,0.0657,0.0626,0.0621,0.0595,0.2104,0.2921,0.2249,0.1959,0.0925,0.2937,0.3564,0.3536,0.3303,0.2202,0.0674,0.0625,0.1722,0.2233,0.2134,0.1827,0.0939,0.2966,0.3392,0.3402,0.3089,0.2123,0.0639,0.0584,0.197,0.2382,0.2094,0.1755,0.0959,0.2913,0.3407,0.3438,0.311,0.213,0.0632,0.0585,0.1848,0.2155,0.2138,0.1901,0.0917,0.2939,0.3396,0.3424,0.3069,0.2135,0.0616,0.0614,0.1909,0.2352,0.2293,0.207,0.0926,0.2893,0.3387,0.3313,0.3134,0.211,0.0599,0.0591,0.2022,0.2387,0.2344,0.2078,0.0914,0.2878,0.3274,0.3231,0.3095,0.2194,0.0609,0.0609,0.0593,0.0596,0.0591,0.0597,0.0603,0.06,0.0602,0.0604,0.0597,0.0597,0.0581
5122s,0.0642,0.0647,0.0613,0.062,0.0628,0.0615,0.0624,0.064,0.0635,0.0657,0.0627,0.0619,0.0596,0.2111,0.2933,0.2267,0.1965,0.0926,0.2977,0.3589,0.356,0.3284,0.2202,0.0633,0.0603,0.1741,0.2251,0.2186,0.1866,0.0937,0.3002,0.3402,0.3474,0.309,0.2124,0.0643,0.0582,0.1994,0.2393,0.2152,0.178,0.096,0.2951,0.3427,0.349,0.313,0.2131,0.0631,0.058,0.1875,0.2173,0.2188,0.1939,0.0918,0.2975,0.3412,0.347,0.3099,0.2136,0.0617,0.0613,0.1907,0.2369,0.2376,0.2155,0.0926,0.2929,0.3401,0.3376,0.3146,0.2111,0.0596,0.0592,0.2025,0.2358,0.2361,0.2144,0.0912,0.2906,0.3294,0.3304,0.3131,0.2195,0.0608,0.0609,0.0596,0.0598,0.0595,0.0599,0.0605,0.0601,0.0602,0.0606,0.0597,0.0597,0.0593
5762s,0.0647,0.065,0.062,0.0626,0.0637,0.0624,0.0626,0.0646,0.064,0.0661,0.0631,0.0627,0.0598,0.2125,0.2945,0.2275,0.197,0.0927,0.3008,0.3591,0.3601,0.3354,0.2206,0.0642,0.0603,0.1758,0.2266,0.2248,0.1905,0.0938,0.3038,0.3415,0.346,0.3099,0.2127,0.064,0.0586,0.2003,0.2386,0.22,0.1823,0.0961,0.2993,0.3456,0.3524,0.3137,0.2134,0.0644,0.0597,0.1894,0.2179,0.2271,0.2016,0.092,0.3019,0.3443,0.3467,0.3105,0.2139,0.0621,0.0617,0.1913,0.2378,0.2474,0.2263,0.0928,0.2963,0.341,0.3417,0.3145,0.2114,0.0616,0.0596,0.2013,0.2385,0.2492,0.226,0.0914,0.2939,0.3309,0.334,0.313,0.2198,0.0609,0.0613,0.0597,0.0599,0.0596,0.06,0.0608,0.0605,0.0605,0.0606,0.0599,0.0598,0.0583
6402s,0.0648,0.0653,0.062,0.0629,0.0636,0.0621,0.0626,0.0646,0.0638,0.0661,0.0634,0.0624,0.0599,0.2144,0.2956,0.2287,0.1975,0.0927,0.304,0.3623,0.3598,0.3338,0.2208,0.0663,0.0605,0.1787,0.2278,0.2308,0.1966,0.0938,0.3072,0.3422,0.3517,0.313,0.2129,0.0642,0.0585,0.2006,0.2401,0.2276,0.1889,0.0961,0.3032,0.3464,0.3536,0.3175,0.2137,0.0633,0.06,0.191,0.2193,0.2344,0.21,0.0919,0.3051,0.3477,0.3559,0.3134,0.2141,0.062,0.0617,0.1916,0.2408,0.2573,0.2357,0.0928,0.2996,0.3432,0.3403,0.3162,0.2116,0.0596,0.0586,0.2006,0.2437,0.259,0.2343,0.0916,0.2976,0.3319,0.3411,0.3201,0.22,0.061,0.0615,0.0598,0.0603,0.0597,0.0602,0.0609,0.0605,0.0607,0.0608,0.0599,0.06,0.0584
7042s,0.0644,0.0725,0.062,0.0626,0.0634,0.062,0.0629,0.0646,0.0641,0.0663,0.0634,0.0626,0.0601,0.2148,0.2964,0.2294,0.198,0.0926,0.3064,0.3678,0.3629,0.3452,0.2209,0.0608,0.0611,0.1808,0.2306,0.2406,0.2049,0.0937,0.3099,0.3463,0.3558,0.3177,0.213,0.0644,0.0584,0.2003,0.2409,0.236,0.1974,0.0962,0.3057,0.3492,0.363,0.3245,0.2138,0.0634,0.0593,0.1928,0.2212,0.2429,0.2221,0.0919,0.3069,0.3503,0.3638,0.3179,0.2142,0.0621,0.0615,0.1921,0.2458,0.2687,0.2486,0.0929,0.3022,0.3442,0.3477,0.3211,0.2118,0.0597,0.0595,0.2033,0.2513,0.2708,0.2464,0.0914,0.2999,0.3333,0.3377,0.3206,0.2202,0.0612,0.0615,0.0598,0.0602,0.0598,0.0604,0.0609,0.0605,0.0607,0.061,0.0599,0.0601,0.0577
7683s,0.0641,0.0651,0.0621,0.0629,0.0639,0.0622,0.0631,0.0648,0.0641,0.0663,0.0636,0.0627,0.0602,0.2158,0.299,0.2315,0.1992,0.0926,0.3084,0.3703,0.3751,0.3562,0.221,0.0695,0.0609,0.1839,0.2345,0.2531,0.2144,0.0939,0.3131,0.3495,0.3632,0.3282,0.2131,0.0643,0.0587,0.2022,0.2437,0.2468,0.2077,0.096,0.3079,0.3549,0.3655,0.3326,0.2139,0.0629,0.06,0.1958,0.2241,0.2525,0.234,0.092,0.3091,0.3563,0.3642,0.3239,0.2143,0.0624,0.0618,0.194,0.253,0.2812,0.264,0.0929,0.305,0.3497,0.3563,0.3284,0.2118,0.059,0.0595,0.2069,0.2594,0.2835,0.262,0.0915,0.303,0.3352,0.3467,0.3267,0.2203,0.0612,0.0616,0.0601,0.0604,0.0599,0.0606,0.0613,0.0606,0.0608,0.0608,0.0598,0.0602,0.0573
8323s,0.0642,0.066,0.0623,0.0632,0.0643,0.0626,0.0633,0.0648,0.0642,0.0664,0.0636,0.0632,0.0601,0.217,0.3001,0.2325,0.2002,0.0926,0.3092,0.3826,0.3836,0.3687,0.2214,0.0676,0.061,0.1866,0.2378,0.2653,0.2271,0.0938,0.314,0.3578,0.3722,0.3404,0.2133,0.0643,0.0587,0.2045,0.2484,0.2591,0.2192,0.0962,0.3104,0.3586,0.3775,0.343,0.2141,0.0642,0.0595,0.1987,0.2297,0.2664,0.248,0.092,0.3116,0.3596,0.3799,0.3339,0.2145,0.0625,0.0617,0.198,0.2616,0.2964,0.2809,0.0929,0.3066,0.3542,0.3624,0.3389,0.2119,0.0603,0.0593,0.211,0.2699,0.2979,0.2782,0.0914,0.3045,0.3387,0.3523,0.3327,0.2205,0.0613,0.0617,0.0603,0.0604,0.0602,0.0607,0.0613,0.0609,0.061,0.0609,0.0599,0.0604,0.0574
8963s,0.0645,0.0662,0.0625,0.0631,0.0641,0.0623,0.0636,0.0649,0.0642,0.0665,0.0639,0.0633,0.0601,0.2179,0.3024,0.2343,0.2014,0.0928,0.3081,0.3918,0.3935,0.3828,0.2215,0.0647,0.0605,0.1905,0.2424,0.28,0.241,0.094,0.3123,0.3653,0.3817,0.3507,0.2134,0.0645,0.0587,0.2086,0.2565,0.2735,0.2333,0.0963,0.3113,0.3692,0.389,0.3533,0.2144,0.0641,0.0597,0.2029,0.2369,0.2825,0.2654,0.092,0.3125,0.3695,0.3878,0.3454,0.2147,0.0624,0.062,0.2031,0.2725,0.3135,0.2988,0.093,0.308,0.3607,0.3694,0.3496,0.2122,0.0591,0.0599,0.2161,0.2805,0.3141,0.295,0.0914,0.3062,0.3427,0.3597,0.3436,0.2207,0.0614,0.0614,0.0605,0.0607,0.0603,0.061,0.0617,0.0609,0.0611,0.061,0.0601,0.0604,0.0572
9603s,0.0643,0.0662,0.0626,0.0634,0.0644,0.0626,0.0638,0.0652,0.0642,0.0664,0.0638,0.0637,0.0602,0.2184,0.3032,0.2349,0.203,0.0925,0.3103,0.4032,0.4061,0.397,0.2215,0.0617,0.0638,0.194,0.2486,0.2953,0.2556,0.0937,0.3154,0.3751,0.3938,0.3626,0.2134,0.0644,0.0588,0.2138,0.2637,0.289,0.2463,0.0962,0.3124,0.3783,0.4018,0.3664,0.2143,0.0634,0.0583,0.2077,0.2444,0.2988,0.2826,0.0918,0.3133,0.3797,0.4004,0.3566,0.2145,0.0623,0.0621,0.2093,0.2854,0.3322,0.3181,0.0929,0.3108,0.3705,0.3822,0.3617,0.2121,0.0619,0.06,0.2219,0.2929,0.3323,0.3135,0.0913,0.3093,0.3491,0.3696,0.3549,0.2206,0.0613,0.061,0.0604,0.0609,0.0603,0.0611,0.0618,0.061,0.0611,0.0618,0.0599,0.0604,0.0574
10243s,0.0641,0.0678,0.0628,0.0635,0.0647,0.0631,0.0639,0.0653,0.0645,0.0669,0.0639,0.0642,0.0604,0.2194,0.3046,0.2363,0.2033,0.0926,0.3189,0.4149,0.4203,0.4126,0.2217,0.0636,0.0611,0.1987,0.2548,0.3093,0.2699,0.0941,0.3231,0.3855,0.4072,0.3758,0.2137,0.0648,0.059,0.2196,0.2736,0.3055,0.2617,0.0963,0.3176,0.3879,0.4159,0.3804,0.2147,0.0647,0.0603,0.2139,0.255,0.3182,0.3013,0.092,0.3159,0.3898,0.4149,0.3699,0.215,0.0626,0.0624,0.2169,0.2989,0.3533,0.3381,0.093,0.313,0.3812,0.395,0.3752,0.2124,0.0595,0.0592,0.2297,0.3094,0.3526,0.3318,0.0915,0.3091,0.3578,0.3798,0.3682,0.2224,0.0615,0.0611,0.0606,0.0609,0.0606,0.0613,0.0618,0.061,0.0616,0.0612,0.0602,0.0606,0.0577
10884s,0.064,0.0726,0.0632,0.064,0.0652,0.0633,0.0642,0.0655,0.0644,0.0673,0.064,0.0645,0.0605,0.22,0.3059,0.2377,0.2044,0.0927,0.3255,0.4272,0.4384,0.4296,0.222,0.0656,0.0609,0.2042,0.263,0.3224,0.2838,0.0941,0.3294,0.397,0.4226,0.3896,0.2139,0.0647,0.0592,0.2266,0.2837,0.3236,0.2773,0.0962,0.3219,0.3997,0.4314,0.3927,0.2147,0.0667,0.0608,0.2226,0.2662,0.3363,0.3199,0.0919,0.321,0.4017,0.4304,0.3826,0.215,0.0629,0.0623,0.225,0.3127,0.3741,0.3603,0.0932,0.3173,0.3908,0.4074,0.3881,0.2126,0.0602,0.0604,0.2374,0.3241,0.3736,0.3522,0.0914,0.3117,0.3678,0.3931,0.3784,0.221,0.0617,0.061,0.0609,0.0608,0.0607,0.0614,0.0591,0.0612,0.0615,0.0615,0.0604,0.0607,0.0574
11527s,0.0646,0.067,0.0632,0.0642,0.0651,0.0633,0.0641,0.0655,0.0644,0.0672,0.0638,0.0644,0.0606,0.2209,0.3074,0.239,0.2056,0.0927,0.3338,0.4412,0.4551,0.4463,0.2219,0.0638,0.0613,0.2097,0.2727,0.335,0.2954,0.0939,0.3363,0.4079,0.4392,0.4064,0.214,0.0649,0.0593,0.2343,0.2965,0.3437,0.2949,0.0962,0.3271,0.412,0.4468,0.4097,0.2147,0.0635,0.0588,0.2302,0.2779,0.3572,0.3426,0.092,0.3261,0.4135,0.4471,0.3975,0.2151,0.0628,0.0626,0.2334,0.3288,0.3958,0.3845,0.0931,0.3215,0.4017,0.425,0.4032,0.2126,0.0603,0.0593,0.2455,0.3409,0.3956,0.3748,0.0913,0.317,0.378,0.4058,0.3924,0.2211,0.0617,0.061,0.0611,0.0611,0.0607,0.0614,0.0621,0.0613,0.0616,0.0669,0.0603,0.0607,0.0578
12167s,0.0647,0.0672,0.0632,0.0638,0.065,0.0631,0.0647,0.0657,0.0643,0.0671,0.0635,0.0639,0.0607,0.2212,0.308,0.2398,0.2063,0.0926,0.3411,0.455,0.4721,0.466,0.2222,0.0667,0.0612,0.2161,0.2835,0.3466,0.3068,0.0938,0.3431,0.422,0.4568,0.4223,0.2141,0.0648,0.0594,0.2415,0.3098,0.3647,0.3136,0.0965,0.3326,0.4245,0.4643,0.4269,0.2149,0.0634,0.0589,0.2364,0.2914,0.3782,0.363,0.092,0.3302,0.4254,0.4633,0.4129,0.2151,0.0627,0.0627,0.2422,0.3459,0.42,0.4084,0.0931,0.3269,0.4147,0.4396,0.4188,0.2127,0.06,0.06,0.2545,0.359,0.4181,0.4007,0.0913,0.3202,0.3872,0.4198,0.4049,0.2212,0.062,0.0606,0.061,0.0607,0.0608,0.0614,0.0622,0.0614,0.0618,0.0659,0.0602,0.0607,0.0577
12807s,0.0649,0.0674,0.0629,0.0643,0.0654,0.0635,0.0642,0.0662,0.0647,0.0671,0.0636,0.0641,0.0606,0.2219,0.3102,0.2416,0.2078,0.0928,0.3485,0.4704,0.4894,0.4872,0.2223,0.0677,0.0605,0.2236,0.2968,0.3581,0.317,0.0939,0.3501,0.4348,0.475,0.4427,0.2144,0.0647,0.0594,0.25,0.3242,0.3882,0.333,0.0962,0.339,0.4384,0.4825,0.4448,0.215,0.0653,0.0592,0.2442,0.3071,0.4019,0.3872,0.0918,0.3362,0.4395,0.4823,0.4305,0.2154,0.0628,0.0626,0.2524,0.3651,0.4448,0.4349,0.0933,0.3331,0.4273,0.4569,0.4364,0.2128,0.0594,0.0602,0.2647,0.3788,0.4432,0.4255,0.0914,0.3245,0.3987,0.4352,0.4217,0.2213,0.0621,0.0607,0.0612,0.061,0.061,0.0616,0.0623,0.0614,0.0617,0.0617,0.0604,0.0607,0.0571
13447s,0.0648,0.0672,0.0638,0.0644,0.0655,0.0638,0.0644,0.066,0.0645,0.0674,0.0635,0.063,0.0608,0.2229,0.3111,0.2427,0.2089,0.0927,0.3565,0.4867,0.5093,0.5086,0.2223,0.0665,0.0614,0.2317,0.311,0.3676,0.3263,0.094,0.3588,0.4497,0.4939,0.4629,0.2143,0.0647,0.0595,0.26,0.3422,0.4117,0.3547,0.0963,0.346,0.4523,0.502,0.463,0.2153,0.0648,0.0607,0.2535,0.3246,0.4273,0.413,0.092,0.3429,0.4537,0.5019,0.4513,0.2155,0.063,0.0626,0.2643,0.3855,0.4717,0.4593,0.0933,0.3392,0.4401,0.4744,0.4546,0.213,0.0611,0.0604,0.2743,0.4006,0.4687,0.4499,0.0916,0.3292,0.4096,0.4506,0.4377,0.2214,0.0623,0.0606,0.0614,0.0609,0.061,0.0615,0.0622,0.0616,0.0617,0.0612,0.0605,0.0606,0.0571
14088s,0.065,0.0675,0.0638,0.0646,0.0651,0.0634,0.0644,0.066,0.0646,0.0674,0.0636,0.0626,0.0613,0.2236,0.3125,0.2442,0.2102,0.0927,0.3651,0.5037,0.5321,0.5319,0.2227,0.0721,0.0615,0.2407,0.3224,0.3741,0.3337,0.094,0.3677,0.466,0.514,0.4856,0.2145,0.0648,0.0596,0.2697,0.3587,0.435,0.3758,0.0963,0.3538,0.4676,0.5225,0.483,0.2154,0.0647,0.0614,0.2634,0.3419,0.4559,0.4401,0.0921,0.3498,0.4702,0.5226,0.4716,0.2156,0.063,0.0632,0.277,0.4085,0.4989,0.4868,0.0935,0.3463,0.4555,0.4936,0.4764,0.2132,0.0591,0.0581,0.2849,0.4223,0.4941,0.4779,0.0914,0.3358,0.4218,0.4669,0.4579,0.2216,0.0625,0.0607,0.0613,0.0606,0.0612,0.0616,0.0625,0.0616,0.0618,0.0612,0.0606,0.0608,0.0586
14728s,0.0653,0.0677,0.0635,0.0646,0.0654,0.064,0.0644,0.0661,0.0645,0.0674,0.0633,0.0624,0.0609,0.2243,0.3134,0.2456,0.2111,0.0928,0.3747,0.5219,0.5554,0.5582,0.2226,0.0645,0.0616,0.2504,0.3352,0.3795,0.3403,0.094,0.3762,0.4825,0.5363,0.5077,0.2146,0.0649,0.0596,0.2798,0.3757,0.4559,0.3987,0.0963,0.3612,0.4844,0.545,0.5045,0.2154,0.0654,0.0611,0.2729,0.3611,0.4824,0.465,0.092,0.3573,0.4862,0.5453,0.4922,0.2157,0.0632,0.0627,0.2897,0.4313,0.5289,0.5125,0.0936,0.3534,0.4704,0.5146,0.4983,0.2131,0.0601,0.0594,0.2968,0.4485,0.5221,0.5008,0.0914,0.3419,0.4349,0.4855,0.4771,0.2217,0.0625,0.0607,0.0616,0.0607,0.0613,0.0617,0.0626,0.0617,0.0617,0.0612,0.0607,0.0606,0.0574
15368s,0.0653,0.0679,0.0637,0.0647,0.0656,0.064,0.0647,0.066,0.0649,0.0678,0.0634,0.0623,0.0613,0.2255,0.3147,0.2463,0.2118,0.0927,0.3852,0.5413,0.5801,0.5828,0.2228,0.0716,0.0616,0.2604,0.349,0.384,0.3453,0.0939,0.3879,0.5003,0.5608,0.5285,0.2147,0.065,0.0595,0.2903,0.3965,0.4774,0.4215,0.0964,0.3697,0.5022,0.5693,0.5269,0.2155,0.0646,0.0581,0.2842,0.3816,0.5117,0.4916,0.0921,0.3649,0.505,0.5702,0.5136,0.2159,0.063,0.063,0.3044,0.4566,0.5571,0.5424,0.0938,0.3607,0.4872,0.5373,0.52,0.2134,0.0597,0.0615,0.309,0.4738,0.5497,0.5273,0.0913,0.3489,0.4483,0.5062,0.499,0.2218,0.0625,0.0607,0.0615,0.0608,0.0612,0.0617,0.0625,0.0618,0.0619,0.0611,0.0605,0.0606,0.0584
16008s,0.065,0.0678,0.0637,0.0648,0.0656,0.064,0.0645,0.0663,0.0648,0.0679,0.0634,0.0624,0.0613,0.2265,0.3152,0.2472,0.2129,0.0929,0.3954,0.5624,0.6067,0.608,0.2229,0.0815,0.0688,0.271,0.3602,0.3883,0.3503,0.094,0.3984,0.5191,0.5861,0.553,0.2149,0.0653,0.0595,0.3021,0.418,0.4944,0.4447,0.0963,0.3793,0.5219,0.5947,0.5516,0.2157,0.0676,0.0583,0.2965,0.4028,0.5401,0.5197,0.0921,0.3722,0.5232,0.5949,0.538,0.2159,0.0635,0.063,0.3194,0.4841,0.5865,0.5702,0.0941,0.3684,0.5046,0.5603,0.5448,0.2134,0.0597,0.0611,0.3218,0.5007,0.5759,0.5544,0.0915,0.3556,0.4644,0.526,0.5186,0.222,0.0623,0.0605,0.0616,0.0605,0.0613,0.0618,0.0625,0.062,0.0619,0.0613,0.0602,0.0604,0.0573
16648s,0.0652,0.0679,0.0639,0.0649,0.0656,0.064,0.0647,0.0663,0.0656,0.0678,0.0629,0.0623,0.0615,0.2273,0.3161,0.2477,0.2136,0.0928,0.4074,0.5834,0.6335,0.6326,0.223,0.0697,0.0622,0.2812,0.3701,0.3914,0.3549,0.0939,0.4094,0.5386,0.6126,0.5759,0.2149,0.0651,0.0597,0.315,0.4398,0.5087,0.4685,0.0962,0.3884,0.5406,0.6196,0.5732,0.2157,0.0654,0.0587,0.3098,0.4258,0.569,0.5508,0.092,0.3817,0.5433,0.621,0.5603,0.2159,0.0633,0.0631,0.335,0.5122,0.6176,0.6015,0.0942,0.3776,0.5241,0.5862,0.5677,0.2135,0.0626,0.059,0.3353,0.5264,0.6041,0.5835,0.0911,0.3623,0.4801,0.5486,0.5437,0.2243,0.0624,0.0607,0.0613,0.0605,0.0611,0.0618,0.0626,0.0621,0.0618,0.0611,0.06,0.0603,0.057
17289s,0.0648,0.068,0.064,0.0648,0.0653,0.0638,0.0647,0.0667,0.0649,0.0679,0.063,0.0624,0.0614,0.2289,0.3173,0.2495,0.2147,0.0928,0.4183,0.6063,0.6581,0.6616,0.2231,0.0682,0.0605,0.2925,0.3806,0.3955,0.3587,0.094,0.4211,0.5593,0.6392,0.6037,0.2151,0.0651,0.0596,0.3292,0.4638,0.5221,0.4905,0.0964,0.3983,0.5619,0.6479,0.5999,0.2159,0.0687,0.0594,0.3245,0.4521,0.601,0.5809,0.0921,0.3907,0.5647,0.6494,0.5876,0.2163,0.0635,0.0629,0.3529,0.5418,0.647,0.6353,0.0944,0.3849,0.5434,0.6119,0.5927,0.2137,0.0639,0.0594,0.351,0.5558,0.6331,0.6131,0.0914,0.3695,0.4972,0.5715,0.5664,0.2221,0.062,0.0609,0.0614,0.0608,0.0612,0.0621,0.0627,0.0614,0.062,0.0612,0.0601,0.0605,0.0575
17929s,0.0652,0.0679,0.0634,0.0648,0.066,0.0637,0.0647,0.0668,0.0652,0.0682,0.0629,0.0625,0.0615,0.2299,0.3184,0.2505,0.2157,0.0929,0.431,0.6301,0.6892,0.6922,0.2233,0.0735,0.0618,0.3024,0.3883,0.3981,0.3614,0.0941,0.4334,0.5801,0.6689,0.6295,0.2152,0.0653,0.0598,0.3429,0.4884,0.5357,0.5079,0.0964,0.4084,0.5844,0.6746,0.6266,0.216,0.0685,0.0613,0.3388,0.478,0.6326,0.6143,0.0922,0.3995,0.5868,0.6765,0.6145,0.2164,0.0634,0.0632,0.3715,0.5706,0.6775,0.6692,0.0949,0.3954,0.5633,0.6363,0.6197,0.2139,0.06,0.0614,0.3665,0.5854,0.6622,0.6448,0.0915,0.3776,0.514,0.5947,0.593,0.2222,0.0621,0.0608,0.0611,0.0607,0.0612,0.062,0.0627,0.0614,0.0616,0.0612,0.0599,0.0604,0.0568
18569s,0.0649,0.07,0.0637,0.0647,0.0657,0.0633,0.0648,0.0665,0.0649,0.0677,0.0625,0.0624,0.0614,0.2309,0.3192,0.2512,0.2167,0.0927,0.4433,0.655,0.7205,0.7223,0.2232,0.0673,0.0604,0.312,0.3954,0.4005,0.3644,0.094,0.446,0.6043,0.6984,0.6598,0.2153,0.0652,0.0596,0.3572,0.5109,0.5439,0.5218,0.0963,0.42,0.6065,0.7044,0.6539,0.2161,0.0672,0.0591,0.3544,0.5041,0.6652,0.6438,0.0921,0.4092,0.6093,0.7052,0.6406,0.2163,0.0635,0.0631,0.3904,0.602,0.71,0.7018,0.095,0.405,0.5844,0.6656,0.6496,0.214,0.06,0.0599,0.3831,0.6162,0.6913,0.6778,0.0914,0.3854,0.5332,0.6216,0.6165,0.2223,0.062,0.0609,0.0611,0.0608,0.0611,0.062,0.0625,0.0614,0.0615,0.0612,0.0597,0.0601,0.0575
19209s,0.0652,0.0753,0.0635,0.0646,0.0658,0.0629,0.0646,0.066,0.0648,0.0678,0.0627,0.0622,0.0616,0.2324,0.3201,0.252,0.2177,0.0929,0.4576,0.681,0.7518,0.7562,0.2235,0.065,0.0611,0.3235,0.4017,0.4027,0.367,0.094,0.4606,0.6278,0.7299,0.6907,0.2153,0.0654,0.0599,0.3735,0.5336,0.552,0.5352,0.0963,0.4305,0.6308,0.7344,0.6825,0.2162,0.0712,0.0604,0.3724,0.5328,0.695,0.6735,0.0921,0.4197,0.6341,0.7366,0.6694,0.2166,0.0638,0.0632,0.4107,0.633,0.7431,0.7382,0.0955,0.4161,0.6082,0.6951,0.6789,0.2141,0.0598,0.0605,0.401,0.6475,0.7222,0.7083,0.0913,0.3945,0.5518,0.6458,0.6425,0.2225,0.0625,0.0608,0.061,0.0607,0.0611,0.0621,0.0623,0.0614,0.0614,0.0613,0.0596,0.0597,0.0576
19850s,0.0649,0.074,0.0638,0.0648,0.0657,0.0629,0.0644,0.0658,0.0644,0.0675,0.0624,0.062,0.0615,0.2334,0.3211,0.2532,0.2186,0.0928,0.4723,0.708,0.7827,0.7883,0.2235,0.0641,0.0619,0.3312,0.4069,0.4043,0.3705,0.0942,0.4744,0.6531,0.7611,0.7181,0.2156,0.0654,0.06,0.3894,0.5506,0.5573,0.5457,0.0963,0.443,0.655,0.7671,0.7132,0.2163,0.0725,0.0585,0.3897,0.562,0.7207,0.7027,0.0921,0.4308,0.6596,0.7686,0.6962,0.2166,0.0636,0.0634,0.4325,0.6643,0.7755,0.7737,0.096,0.4276,0.6319,0.7256,0.7075,0.2142,0.0594,0.0601,0.4187,0.6784,0.7542,0.744,0.0916,0.4038,0.5717,0.6731,0.6715,0.2226,0.062,0.0607,0.0606,0.0606,0.0611,0.062,0.0624,0.0613,0.0611,0.0613,0.0596,0.0597,0.0574
20490s,0.0652,0.0678,0.0637,0.0648,0.0654,0.0629,0.064,0.0656,0.0642,0.0674,0.0621,0.0622,0.0614,0.2344,0.3217,0.2539,0.2193,0.0927,0.4883,0.7361,0.8186,0.8228,0.2235,0.0635,0.062,0.3384,0.411,0.4068,0.3719,0.094,0.4884,0.6789,0.7932,0.7518,0.2157,0.0655,0.0599,0.4072,0.5684,0.5625,0.5542,0.0963,0.456,0.6805,0.7987,0.7434,0.2164,0.0717,0.0586,0.409,0.5916,0.7453,0.7307,0.092,0.4422,0.6862,0.7979,0.7273,0.2167,0.0636,0.0633,0.4533,0.6976,0.8095,0.8108,0.0962,0.4389,0.6564,0.7561,0.739,0.2142,0.0611,0.0592,0.438,0.7105,0.7845,0.7762,0.0916,0.4157,0.5936,0.6997,0.6992,0.2227,0.0624,0.0609,0.0604,0.0604,0.061,0.0617,0.0623,0.0611,0.0611,0.0611,0.0595,0.0597,0.0588
21130s,0.0651,0.0727,0.0637,0.0647,0.0654,0.063,0.064,0.0656,0.0643,0.0677,0.0618,0.0624,0.0617,0.2356,0.3229,0.2552,0.2205,0.0928,0.5047,0.7656,0.8502,0.8543,0.2237,0.0764,0.0614,0.3456,0.4153,0.4088,0.3738,0.0941,0.504,0.7071,0.8253,0.7841,0.2157,0.0655,0.06,0.4252,0.5826,0.5646,0.5619,0.0963,0.4691,0.7087,0.8327,0.7764,0.2165,0.0678,0.0586,0.4289,0.62,0.7663,0.7547,0.0922,0.4559,0.7135,0.8329,0.7561,0.2168,0.0641,0.0635,0.4749,0.7316,0.8449,0.8474,0.0967,0.4514,0.6839,0.7874,0.7723,0.2144,0.0605,0.0614,0.4578,0.7446,0.8168,0.8104,0.0914,0.4258,0.6176,0.7294,0.7291,0.2228,0.0623,0.0609,0.0604,0.0603,0.0608,0.0614,0.0621,0.061,0.0609,0.061,0.0595,0.0598,0.0572
21770s,0.0654,0.0733,0.0633,0.0647,0.0659,0.0632,0.0636,0.0655,0.0642,0.0678,0.0615,0.0623,0.0613,0.2364,0.3234,0.2557,0.2215,0.0927,0.5207,0.7943,0.8836,0.8884,0.2237,0.0618,0.062,0.3526,0.4188,0.4099,0.3757,0.094,0.5216,0.7332,0.861,0.8168,0.2158,0.0656,0.0601,0.443,0.5934,0.5682,0.568,0.0963,0.4824,0.7375,0.8659,0.8098,0.2167,0.0762,0.0609,0.4501,0.6504,0.783,0.7699,0.0922,0.4679,0.7409,0.8653,0.7894,0.2169,0.0638,0.0636,0.4967,0.7644,0.8803,0.882,0.0975,0.4631,0.7088,0.8186,0.8032,0.2144,0.059,0.0597,0.4769,0.7759,0.8492,0.8458,0.0915,0.4375,0.6402,0.7601,0.7622,0.2228,0.0622,0.0608,0.0601,0.0601,0.0605,0.0612,0.0617,0.0611,0.0605,0.0608,0.0596,0.0597,0.0575
22410s,0.0651,0.0709,0.0633,0.0645,0.0651,0.063,0.0635,0.0654,0.064,0.0678,0.0629,0.0624,0.0616,0.2375,0.3239,0.2565,0.222,0.0929,0.5386,0.825,0.9179,0.922,0.2239,0.0711,0.0622,0.3582,0.4208,0.4118,0.3766,0.0943,0.5381,0.7628,0.8935,0.851,0.216,0.0657,0.0602,0.4612,0.6017,0.5709,0.5738,0.0964,0.4984,0.7655,0.8981,0.8415,0.2169,0.0692,0.0584,0.4716,0.6816,0.7938,0.7843,0.0922,0.4813,0.7684,0.8988,0.8204,0.2169,0.0643,0.0637,0.5174,0.7986,0.9157,0.9148,0.0981,0.4766,0.7381,0.8513,0.8354,0.2146,0.061,0.0594,0.4979,0.8096,0.8815,0.8801,0.0915,0.4493,0.6637,0.7913,0.7949,0.2229,0.0622,0.0607,0.06,0.0601,0.0605,0.0611,0.0615,0.0609,0.0604,0.0619,0.0596,0.0594,0.0575
23051s,0.0653,0.0677,0.0631,0.0643,0.065,0.0632,0.0637,0.0656,0.0641,0.0675,0.0634,0.0625,0.0615,0.2381,0.3242,0.2571,0.2226,0.0927,0.5575,0.8565,0.9528,0.9536,0.224,0.0719,0.0625,0.364,0.423,0.4126,0.3784,0.094,0.5559,0.7921,0.9282,0.8862,0.2159,0.0658,0.06,0.4783,0.6092,0.573,0.5795,0.0963,0.5135,0.7945,0.9332,0.8769,0.2168,0.0736,0.059,0.4927,0.7103,0.8047,0.7949,0.0921,0.4958,0.8006,0.9319,0.8534,0.2171,0.0642,0.0636,0.5394,0.8319,0.9515,0.9424,0.0987,0.4902,0.7675,0.8842,0.8699,0.2148,0.0661,0.0602,0.5171,0.8442,0.9154,0.914,0.0915,0.4611,0.6897,0.8213,0.8209,0.2229,0.0621,0.0608,0.0602,0.0601,0.0605,0.0609,0.0616,0.0609,0.0603,0.0607,0.0596,0.0596,0.0574
23691s,0.0648,0.0676,0.0628,0.0641,0.0647,0.063,0.0638,0.0657,0.0639,0.0672,0.0636,0.0623,0.0616,0.239,0.3251,0.2579,0.2238,0.0927,0.576,0.8876,0.9873,0.9874,0.2239,0.0668,0.0627,0.3685,0.4256,0.4147,0.3797,0.0939,0.5738,0.8215,0.9612,0.9195,0.216,0.0656,0.06,0.4945,0.6154,0.5752,0.5843,0.0964,0.5299,0.8253,0.9654,0.9094,0.2168,0.0704,0.0586,0.5159,0.7373,0.813,0.8056,0.0919,0.5113,0.8304,0.9654,0.8838,0.2172,0.064,0.0637,0.5609,0.8661,0.9866,0.9706,0.0997,0.5052,0.796,0.9166,0.9027,0.2147,0.0663,0.0608,0.5375,0.8775,0.9473,0.9491,0.0916,0.4735,0.7154,0.8516,0.8528,0.2231,0.0629,0.0609,0.0602,0.0599,0.0601,0.0608,0.0615,0.0605,0.0603,0.0611,0.0596,0.0595,0.0575
24331s,0.0651,0.068,0.0629,0.0641,0.0647,0.0633,0.0638,0.0654,0.0638,0.0675,0.0634,0.0625,0.0615,0.2404,0.3259,0.259,0.2245,0.0928,0.5955,0.9191,1.0218,1.0187,0.2242,0.0578,0.0605,0.3726,0.4293,0.4165,0.3817,0.094,0.5943,0.853,0.9955,0.954,0.2163,0.0658,0.0601,0.5099,0.6202,0.576,0.588,0.0962,0.5455,0.8576,0.9983,0.9424,0.2171,0.0651,0.061,0.5353,0.7648,0.8192,0.8135,0.0921,0.5263,0.8625,0.9989,0.9208,0.2174,0.064,0.064,0.5805,0.899,1.0165,0.9958,0.101,0.5214,0.8277,0.9497,0.9411,0.2148,0.0609,0.0585,0.557,0.9114,0.9814,0.9836,0.0916,0.4881,0.7419,0.8812,0.8882,0.2232,0.0621,0.0608,0.0602,0.0599,0.0601,0.0607,0.0616,0.0606,0.0605,0.0606,0.0596,0.0597,0.0574
24971s,0.0652,0.0715,0.0627,0.0641,0.0644,0.0632,0.0633,0.0654,0.0638,0.0672,0.0638,0.0622,0.0614,0.2411,0.3264,0.2596,0.2251,0.0928,0.6165,0.9512,1.0528,1.0489,0.2243,0.0581,0.0623,0.3759,0.4301,0.418,0.3827,0.0941,0.6135,0.884,1.0279,0.9861,0.2163,0.0658,0.0603,0.522,0.6243,0.5779,0.5913,0.0963,0.5641,0.8875,1.0311,0.9763,0.2172,0.0698,0.0613,0.5581,0.7868,0.8255,0.8207,0.0922,0.5428,0.8942,1.0295,0.954,0.2175,0.0642,0.0639,0.6008,0.9319,1.0455,1.0195,0.1023,0.5355,0.8585,0.983,0.9751,0.2149,0.0606,0.0606,0.5769,0.9442,1.0133,1.0169,0.0917,0.5013,0.771,0.9124,0.9145,0.2233,0.0621,0.061,0.0599,0.0601,0.0599,0.0607,0.0613,0.0606,0.0606,0.0606,0.0598,0.0598,0.0576
25612s,0.0651,0.0678,0.0624,0.0638,0.0642,0.0631,0.0633,0.0652,0.0639,0.067,0.0633,0.0622,0.0611,0.2421,0.3269,0.2603,0.2256,0.0929,0.6376,0.9836,1.0848,1.0764,0.2245,0.0611,0.0615,0.3792,0.4336,0.4198,0.3848,0.094,0.6357,0.9161,1.0609,1.0181,0.2164,0.0662,0.0601,0.5339,0.6273,0.5813,0.5949,0.0962,0.5835,0.92,1.0623,1.0096,0.2172,0.0681,0.0608,0.5804,0.8052,0.8292,0.8275,0.0922,0.5593,0.926,1.0613,0.9876,0.2175,0.0643,0.0639,0.6222,0.9653,1.071,1.0373,0.1037,0.5543,0.8888,1.0138,1.0071,0.2152,0.0608,0.0583,0.5958,0.9773,1.0444,1.0519,0.0916,0.5164,0.7988,0.9416,0.9483,0.2234,0.062,0.0607,0.0601,0.0602,0.0599,0.0606,0.0612,0.0607,0.0605,0.0605,0.0597,0.0598,0.0574
26252s,0.0658,0.0729,0.0627,0.0641,0.0646,0.0634,0.0635,0.0657,0.064,0.0675,0.0634,0.0626,0.0613,0.2432,0.328,0.2612,0.2266,0.0929,0.66,1.0143,1.1134,1.1002,0.2246,0.0597,0.0608,0.3816,0.4358,0.4207,0.3861,0.0943,0.6557,0.9499,1.0937,1.0503,0.2166,0.0664,0.0603,0.5455,0.6307,0.5818,0.5972,0.0964,0.6019,0.9525,1.0941,1.0403,0.2174,0.0695,0.0589,0.603,0.8213,0.8335,0.8337,0.0923,0.5783,0.9576,1.0941,1.02,0.2177,0.0643,0.064,0.6427,0.9964,1.0923,1.0548,0.1054,0.5716,0.9194,1.0461,1.0376,0.2153,0.0662,0.0594,0.6142,1.0109,1.0773,1.0861,0.0917,0.5331,0.8255,0.9737,0.9845,0.2236,0.062,0.061,0.0602,0.0601,0.0601,0.0607,0.0612,0.0608,0.0608,0.0627,0.0599,0.0597,0.0581
26892s,0.0651,0.0677,0.0627,0.0639,0.0642,0.0631,0.0635,0.0657,0.0639,0.0673,0.0636,0.0625,0.0611,0.244,0.3285,0.2619,0.2275,0.093,0.6816,1.0462,1.1418,1.1238,0.2246,0.0595,0.0614,0.3832,0.4367,0.4222,0.3866,0.0942,0.6782,0.9804,1.1229,1.0807,0.2166,0.0666,0.0601,0.555,0.6321,0.5828,0.5992,0.0964,0.6214,0.9841,1.1248,1.0735,0.2174,0.0711,0.0591,0.6225,0.8332,0.8347,0.8384,0.0922,0.5969,0.9901,1.1243,1.0531,0.2178,0.0646,0.0639,0.6638,1.0275,1.1082,1.0677,0.1073,0.5892,0.9516,1.0751,1.0705,0.2154,0.0584,0.059,0.6326,1.0419,1.1089,1.1172,0.0917,0.5475,0.8568,1.0054,1.0142,0.2235,0.0617,0.0608,0.0601,0.0601,0.06,0.0606,0.061,0.0606,0.0608,0.0612,0.0599,0.0597,0.058
27532s,0.065,0.0678,0.0628,0.0638,0.0643,0.063,0.0637,0.0658,0.0638,0.067,0.0634,0.0626,0.0612,0.2451,0.3297,0.2631,0.2284,0.093,0.7054,1.0771,1.1678,1.1453,0.2249,0.0587,0.0629,0.3842,0.4374,0.4229,0.3871,0.0943,0.6998,1.0132,1.1508,1.1086,0.2167,0.0664,0.0604,0.563,0.6346,0.5843,0.6019,0.0964,0.642,1.0143,1.1527,1.1015,0.2175,0.0724,0.0591,0.643,0.842,0.8385,0.843,0.0921,0.6154,1.0209,1.1558,1.0856,0.2179,0.0643,0.0641,0.6835,1.0572,1.1225,1.0796,0.11,0.6091,0.9832,1.1067,1.1047,0.2156,0.0599,0.0607,0.652,1.0729,1.1407,1.1471,0.0917,0.5631,0.887,1.0352,1.0414,0.2237,0.0617,0.0609,0.0602,0.0603,0.06,0.0607,0.0612,0.0607,0.0608,0.0611,0.0601,0.0597,0.0579
28172s,0.0652,0.068,0.0626,0.0637,0.0643,0.0634,0.0634,0.0657,0.0636,0.0671,0.0633,0.0622,0.0611,0.246,0.3295,0.2631,0.2286,0.093,0.729,1.1082,1.1916,1.1675,0.225,0.0579,0.0627,0.3856,0.439,0.4233,0.3874,0.094,0.7236,1.0433,1.1764,1.1328,0.2167,0.0658,0.0603,0.5703,0.6365,0.5855,0.6039,0.0963,0.6635,1.0462,1.1804,1.1296,0.2177,0.077,0.0584,0.661,0.8502,0.8413,0.8461,0.0921,0.6364,1.0506,1.1847,1.1169,0.2179,0.0643,0.064,0.7016,1.0867,1.1334,1.0901,0.1135,0.6298,1.0156,1.1359,1.1349,0.2157,0.0591,0.0587,0.6704,1.1029,1.1692,1.18,0.0916,0.5802,0.9176,1.0648,1.073,0.2236,0.0619,0.0606,0.0601,0.0601,0.06,0.0607,0.0611,0.0605,0.0607,0.0607,0.0599,0.0596,0.0575
28813s,0.065,0.0678,0.0625,0.0636,0.0642,0.0631,0.0637,0.0657,0.0637,0.067,0.0635,0.0623,0.0611,0.247,0.3303,0.2637,0.2291,0.093,0.7524,1.1362,1.2128,1.1859,0.225,0.0583,0.0616,0.3866,0.4408,0.4249,0.3877,0.0941,0.7472,1.0741,1.201,1.1543,0.2169,0.0655,0.0604,0.578,0.6382,0.5879,0.6046,0.0964,0.6833,1.0776,1.2066,1.1523,0.2178,0.0666,0.0611,0.6787,0.8562,0.8432,0.8498,0.0923,0.6556,1.083,1.2111,1.1457,0.2179,0.0646,0.0641,0.7202,1.114,1.1409,1.0979,0.1181,0.6513,1.0452,1.1653,1.1662,0.216,0.0601,0.0609,0.6896,1.1328,1.1978,1.2083,0.0917,0.597,0.9496,1.0937,1.1015,0.2239,0.062,0.0608,0.0602,0.0603,0.0599,0.0608,0.0612,0.0606,0.0609,0.0605,0.0601,0.06,0.0579
29453s,0.0648,0.074,0.0625,0.0638,0.0643,0.0632,0.0635,0.0656,0.0636,0.067,0.0635,0.0625,0.061,0.2479,0.3307,0.2646,0.2298,0.093,0.7762,1.1653,1.2307,1.2026,0.2251,0.0601,0.0628,0.3892,0.4425,0.4252,0.3885,0.0941,0.7712,1.105,1.2251,1.1747,0.2169,0.0649,0.0601,0.5826,0.6392,0.5889,0.6064,0.0963,0.707,1.1088,1.2311,1.1764,0.2177,0.0693,0.06,0.6966,0.8614,0.8446,0.8531,0.0921,0.677,1.1146,1.2371,1.174,0.218,0.0645,0.0641,0.7373,1.1402,1.1482,1.1048,0.1247,0.6719,1.077,1.1939,1.1939,0.2161,0.0587,0.0581,0.7073,1.1604,1.2276,1.2342,0.0918,0.6166,0.9799,1.1224,1.1305,0.2239,0.062,0.0608,0.0603,0.0605,0.0598,0.0608,0.0613,0.0607,0.0609,0.0659,0.0599,0.0599,0.0575
30093s,0.0646,0.0674,0.0625,0.0635,0.0643,0.0631,0.0634,0.0656,0.0635,0.0671,0.0635,0.0626,0.0609,0.2486,0.3311,0.265,0.23,0.0928,0.7999,1.1924,1.2466,1.2176,0.2251,0.0602,0.0619,0.3909,0.4441,0.4256,0.3885,0.0941,0.793,1.1347,1.2465,1.1933,0.2171,0.0647,0.0604,0.5869,0.6397,0.5896,0.6077,0.0964,0.7301,1.1379,1.2538,1.1956,0.2179,0.0714,0.0583,0.7109,0.8655,0.8466,0.8554,0.0922,0.6989,1.1442,1.2625,1.1991,0.2181,0.0647,0.064,0.7533,1.1635,1.1533,1.1112,0.1337,0.6932,1.1062,1.2204,1.2213,0.2163,0.0596,0.0595,0.7247,1.1878,1.2535,1.2622,0.0916,0.6351,1.0116,1.1484,1.1579,0.224,0.0622,0.0607,0.0603,0.0606,0.0599,0.0607,0.0614,0.0607,0.0607,0.0611,0.06,0.06,0.0573
30733s,0.0649,0.0677,0.0626,0.0638,0.0643,0.0633,0.0635,0.0657,0.0636,0.0669,0.0633,0.0626,0.061,0.2498,0.332,0.2659,0.2309,0.0931,0.8243,1.2194,1.26,1.23,0.2253,0.0585,0.0615,0.3926,0.4446,0.4257,0.3894,0.0941,0.8164,1.1628,1.2651,1.211,0.2171,0.0646,0.0605,0.59,0.6408,0.5898,0.6092,0.0964,0.7526,1.1656,1.2751,1.2145,0.218,0.0696,0.0591,0.7247,0.8682,0.8467,0.8577,0.0923,0.7198,1.173,1.2845,1.2198,0.2182,0.0644,0.0641,0.7689,1.1828,1.1576,1.1167,0.1442,0.7171,1.1364,1.2476,1.2482,0.2166,0.0597,0.0585,0.7398,1.2146,1.2807,1.2875,0.0917,0.656,1.0413,1.1736,1.1838,0.2242,0.062,0.0609,0.0604,0.0606,0.0599,0.0608,0.0615,0.0608,0.0609,0.0615,0.06,0.0602,0.058
31373s,0.065,0.0682,0.0627,0.0637,0.0644,0.0634,0.0634,0.0658,0.0639,0.0669,0.0634,0.0624,0.0609,0.2507,0.3328,0.2668,0.2316,0.0931,0.8487,1.2441,1.2708,1.2393,0.2254,0.0598,0.0629,0.3934,0.4454,0.4259,0.3897,0.094,0.8412,1.19,1.2806,1.2264,0.2172,0.0647,0.0605,0.5931,0.6417,0.5903,0.609,0.0963,0.7759,1.1937,1.2939,1.2312,0.2181,0.0775,0.0587,0.7384,0.8712,0.8478,0.8592,0.0921,0.7428,1.2016,1.3057,1.24,0.2183,0.0644,0.0641,0.7839,1.1983,1.161,1.1204,0.157,0.7385,1.1662,1.2729,1.2718,0.2168,0.0591,0.0587,0.7552,1.2396,1.3063,1.3105,0.0915,0.6768,1.0718,1.1998,1.2077,0.2239,0.0623,0.0609,0.0605,0.0605,0.06,0.0608,0.0614,0.061,0.0606,0.0607,0.0598,0.0602,0.0589
32014s,0.0649,0.0695,0.0625,0.0636,0.0642,0.0631,0.0634,0.0656,0.0638,0.0669,0.0635,0.0624,0.0606,0.2513,0.3329,0.2671,0.232,0.0929,0.874,1.2685,1.2805,1.2474,0.2254,0.0584,0.0629,0.3945,0.4455,0.4262,0.3901,0.0941,0.8658,1.217,1.2944,1.24,0.2173,0.0646,0.0603,0.5949,0.6428,0.591,0.6104,0.0963,0.8001,1.2203,1.3093,1.2475,0.2181,0.0724,0.0585,0.7496,0.8728,0.8491,0.861,0.0921,0.7674,1.2282,1.3266,1.2584,0.2183,0.0648,0.0642,0.7986,1.2093,1.1633,1.1245,0.1681,0.7609,1.1947,1.2964,1.2928,0.217,0.0594,0.0587,0.7692,1.2626,1.3278,1.3309,0.0917,0.6958,1.1032,1.2249,1.2338,0.2242,0.0621,0.0606,0.0603,0.0606,0.0598,0.0606,0.0614,0.0608,0.0605,0.0614,0.0597,0.06,0.0571
32654s,0.0651,0.0674,0.0628,0.0638,0.0645,0.0633,0.0635,0.0656,0.0634,0.0669,0.0634,0.0625,0.061,0.252,0.333,0.2675,0.2323,0.0929,0.8963,1.2913,1.2887,1.255,0.2255,0.0581,0.063,0.3948,0.4458,0.4258,0.3904,0.0941,0.8898,1.2436,1.3057,1.2522,0.2172,0.0653,0.0604,0.5975,0.644,0.5918,0.612,0.0965,0.8238,1.2461,1.3238,1.2609,0.2184,0.0772,0.0603,0.7608,0.8749,0.8503,0.8626,0.0922,0.7896,1.2543,1.3463,1.2786,0.2185,0.0644,0.0639,0.8124,1.2188,1.1653,1.1277,0.1773,0.7836,1.2226,1.3179,1.3132,0.2171,0.0604,0.058,0.7828,1.286,1.3496,1.3488,0.0916,0.7162,1.1318,1.2501,1.2586,0.2243,0.0621,0.0605,0.0603,0.0604,0.0599,0.0607,0.0617,0.0609,0.0608,0.0609,0.0597,0.0601,0.0574
33294s,0.065,0.0701,0.0627,0.0637,0.0642,0.0632,0.0632,0.0655,0.0636,0.0668,0.0634,0.0622,0.0608,0.2526,0.3336,0.2684,0.2326,0.0929,0.92,1.311,1.2962,1.2623,0.2256,0.0592,0.0625,0.3956,0.4477,0.427,0.391,0.0941,0.9142,1.266,1.3162,1.2622,0.2174,0.0648,0.0604,0.5988,0.645,0.5922,0.6128,0.0963,0.847,1.2709,1.3355,1.2732,0.2183,0.0646,0.0596,0.7706,0.8766,0.8506,0.8645,0.0921,0.8126,1.2796,1.3629,1.2931,0.2186,0.0638,0.0639,0.8255,1.2261,1.1687,1.1313,0.1863,0.806,1.25,1.3408,1.3325,0.2174,0.0589,0.0608,0.7958,1.3074,1.37,1.3656,0.0917,0.7372,1.1618,1.2722,1.2822,0.2242,0.0624,0.0608,0.0603,0.0606,0.0598,0.0606,0.0616,0.0607,0.0604,0.0606,0.0595,0.0601,0.058
33934s,0.065,0.067,0.0626,0.0634,0.0641,0.0632,0.063,0.0656,0.0636,0.0667,0.0635,0.0623,0.0607,0.2531,0.3334,0.2685,0.2328,0.093,0.945,1.3301,1.302,1.2671,0.2258,0.0607,0.0624,0.3954,0.4477,0.4276,0.3918,0.0941,0.9364,1.2895,1.3241,1.2698,0.2175,0.0649,0.0605,0.5998,0.6449,0.5916,0.6137,0.0964,0.8701,1.294,1.3453,1.2838,0.2184,0.0614,0.0586,0.7825,0.8778,0.8519,0.866,0.0922,0.8362,1.3042,1.3767,1.3085,0.2187,0.064,0.0639,0.8362,1.2316,1.1691,1.1342,0.1949,0.8301,1.276,1.3595,1.3484,0.2179,0.06,0.0588,0.8084,1.3291,1.3869,1.3809,0.0918,0.7575,1.1895,1.2954,1.3042,0.2244,0.0635,0.0607,0.0604,0.0603,0.0598,0.0606,0.0615,0.0607,0.0605,0.0619,0.0594,0.0599,0.0573
34575s,0.0648,0.0725,0.0627,0.0635,0.0642,0.063,0.0631,0.0656,0.0636,0.0669,0.0634,0.0623,0.0607,0.254,0.3343,0.269,0.2332,0.0931,0.9658,1.3463,1.3062,1.2726,0.2258,0.0582,0.0629,0.3966,0.4484,0.4273,0.3922,0.0941,0.9598,1.3107,1.331,1.277,0.2175,0.0649,0.0601,0.6021,0.6457,0.5925,0.6135,0.0964,0.8946,1.3161,1.3536,1.2934,0.2185,0.0662,0.0588,0.791,0.8791,0.8517,0.8667,0.0922,0.86,1.3266,1.3887,1.3226,0.2187,0.0636,0.0637,0.8495,1.2363,1.1704,1.1357,0.2031,0.8544,1.3014,1.3793,1.3644,0.2183,0.0591,0.0578,0.8199,1.3486,1.4027,1.3937,0.0917,0.778,1.2164,1.3165,1.3264,0.2245,0.0623,0.0609,0.0603,0.0604,0.0596,0.0606,0.0614,0.0606,0.0605,0.0603,0.0592,0.0598,0.0574
35215s,0.0651,0.0672,0.0629,0.0637,0.0644,0.0633,0.0632,0.0658,0.064,0.0671,0.0635,0.0625,0.0609,0.255,0.3348,0.2697,0.2339,0.0931,0.9864,1.3597,1.3106,1.2763,0.2261,0.0594,0.0624,0.3975,0.4492,0.4283,0.3931,0.0942,0.9825,1.3307,1.3371,1.2832,0.2177,0.0649,0.0601,0.6024,0.6469,0.5923,0.6146,0.0966,0.9197,1.3375,1.3611,1.2994,0.2186,0.0631,0.0583,0.7991,0.8805,0.8515,0.8676,0.0923,0.8829,1.3492,1.3987,1.3352,0.2187,0.0634,0.0639,0.8598,1.2393,1.171,1.1377,0.2135,0.8776,1.3244,1.3985,1.3782,0.2186,0.0593,0.0593,0.8321,1.3674,1.4175,1.4058,0.0918,0.7995,1.2439,1.3376,1.3466,0.2246,0.0627,0.0605,0.0604,0.0603,0.0597,0.0606,0.0614,0.0606,0.0606,0.0614,0.0593,0.0598,0.0577
35855s,0.0648,0.0669,0.0629,0.0636,0.0645,0.0633,0.0634,0.0659,0.0638,0.0669,0.0635,0.0638,0.0608,0.2556,0.3355,0.2701,0.2339,0.0931,1.0077,1.3723,1.3147,1.2808,0.2262,0.061,0.0626,0.3984,0.4497,0.4288,0.3933,0.0943,1.0038,1.3469,1.3411,1.2892,0.2178,0.0649,0.0601,0.6033,0.6465,0.5923,0.6144,0.0965,0.9416,1.3556,1.3658,1.3056,0.2186,0.0647,0.0584,0.8058,0.881,0.8522,0.8686,0.0922,0.9057,1.3694,1.4073,1.3449,0.2189,0.0633,0.0638,0.8699,1.2417,1.1717,1.1389,0.2217,0.8998,1.3473,1.4142,1.3913,0.2191,0.0588,0.0578,0.8415,1.3854,1.4284,1.4162,0.0915,0.8225,1.2698,1.3571,1.3675,0.2247,0.0633,0.0609,0.0604,0.0605,0.0597,0.0606,0.0614,0.0606,0.0605,0.0615,0.0592,0.0598,0.0578
36495s,0.0648,0.0745,0.063,0.0636,0.0645,0.0634,0.0647,0.066,0.0638,0.067,0.0635,0.0625,0.0609,0.2565,0.3356,0.2705,0.2344,0.093,1.0275,1.3812,1.3168,1.2844,0.2261,0.0605,0.069,0.3983,0.4497,0.4285,0.3937,0.0941,1.0239,1.3621,1.3457,1.2939,0.2177,0.0648,0.0597,0.6034,0.6464,0.5926,0.615,0.0964,0.9641,1.3739,1.3724,1.3113,0.2187,0.0608,0.0581,0.8111,0.8818,0.8519,0.8696,0.0921,0.9292,1.3894,1.4148,1.3549,0.2189,0.0632,0.0637,0.8797,1.2439,1.1725,1.141,0.2314,0.9223,1.3681,1.4291,1.403,0.2192,0.0609,0.0582,0.8518,1.4007,1.4397,1.4249,0.0917,0.844,1.2934,1.3784,1.3861,0.2247,0.0622,0.0608,0.0602,0.0604,0.0594,0.0604,0.0614,0.0605,0.0605,0.062,0.0592,0.0596,0.0574
37135s,0.0646,0.0667,0.063,0.0635,0.0645,0.0631,0.0631,0.0658,0.0635,0.0669,0.0637,0.0625,0.0608,0.2567,0.3359,0.2705,0.2344,0.0932,1.047,1.3901,1.3194,1.2875,0.2262,0.059,0.0623,0.3987,0.4504,0.4294,0.394,0.0943,1.0454,1.3754,1.3484,1.2975,0.2178,0.0652,0.0598,0.6039,0.6474,0.5925,0.6157,0.0964,0.9856,1.3889,1.376,1.3161,0.2189,0.0614,0.0584,0.8158,0.8826,0.8515,0.8701,0.0923,0.9522,1.4075,1.4208,1.3623,0.2191,0.0633,0.0636,0.8895,1.2457,1.1732,1.1424,0.2406,0.9445,1.3898,1.4416,1.4138,0.2197,0.0598,0.0581,0.8612,1.4172,1.4477,1.4319,0.0917,0.865,1.3165,1.3974,1.4046,0.2248,0.0624,0.0607,0.0604,0.0602,0.0596,0.0607,0.0612,0.0606,0.0604,0.0604,0.0591,0.0597,0.0573
37776s,0.0646,0.0725,0.0628,0.0633,0.0641,0.0631,0.063,0.0657,0.0636,0.0668,0.0635,0.0624,0.0606,0.2573,0.336,0.2706,0.2345,0.0931,1.0669,1.3979,1.3216,1.29,0.2263,0.0607,0.0624,0.3994,0.4511,0.4296,0.3946,0.0942,1.0652,1.386,1.3518,1.301,0.218,0.0649,0.0598,0.6045,0.6475,0.5928,0.6168,0.0964,1.0077,1.403,1.38,1.3211,0.219,0.0626,0.0588,0.8196,0.883,0.8527,0.871,0.0923,0.9735,1.4253,1.4263,1.3696,0.2191,0.0631,0.0635,0.8993,1.2468,1.1735,1.1444,0.2507,0.9655,1.4096,1.4535,1.4251,0.2202,0.0587,0.0586,0.871,1.4319,1.4545,1.4381,0.0918,0.887,1.338,1.4149,1.4227,0.2264,0.0624,0.0607,0.0602,0.0602,0.0592,0.0603,0.0613,0.0606,0.0602,0.0611,0.059,0.0597,0.0578
38417s,0.0646,0.0668,0.0628,0.0633,0.0643,0.0631,0.0631,0.0657,0.0636,0.0669,0.0637,0.0626,0.0608,0.258,0.3366,0.2712,0.2353,0.0931,1.0848,1.4023,1.323,1.2919,0.2264,0.0644,0.0584,0.3994,0.4498,0.4301,0.3951,0.0941,1.0856,1.3957,1.3544,1.305,0.218,0.0648,0.0595,0.6056,0.6476,0.5932,0.6173,0.0964,1.0279,1.4154,1.3826,1.3248,0.2189,0.061,0.0584,0.8217,0.8826,0.8523,0.8721,0.0923,0.9947,1.4398,1.4306,1.3751,0.2192,0.0633,0.0635,0.9081,1.2477,1.1734,1.1453,0.2614,0.987,1.4276,1.4623,1.4321,0.2207,0.0599,0.0581,0.8798,1.4459,1.4605,1.4445,0.0917,0.9061,1.3597,1.4322,1.4385,0.2249,0.0623,0.0606,0.0603,0.0603,0.0594,0.0605,0.0614,0.0606,0.0602,0.06,0.0589,0.0599,0.0572
39058s,0.0648,0.0718,0.063,0.0635,0.0645,0.0631,0.0629,0.0657,0.0639,0.0669,0.0636,0.0625,0.0608,0.2583,0.3367,0.2711,0.2353,0.093,1.1023,1.4072,1.3245,1.2948,0.2262,0.0596,0.0613,0.4001,0.451,0.4303,0.3956,0.0943,1.1054,1.4037,1.3571,1.3074,0.218,0.0649,0.0595,0.6055,0.6472,0.5936,0.618,0.0965,1.0471,1.4254,1.3846,1.3273,0.2189,0.0603,0.0583,0.8236,0.8824,0.8522,0.8722,0.0923,1.0145,1.4521,1.434,1.3792,0.2191,0.0631,0.0633,0.916,1.2479,1.1738,1.146,0.2733,1.007,1.444,1.4712,1.4408,0.2211,0.0598,0.0591,0.8885,1.4586,1.4648,1.4494,0.0917,0.9273,1.3793,1.4477,1.4541,0.225,0.0623,0.0607,0.0602,0.0604,0.0593,0.0603,0.0612,0.0605,0.0601,0.0611,0.0588,0.0595,0.0576
39698s,0.0645,0.0665,0.0628,0.0634,0.0641,0.063,0.0629,0.0656,0.0634,0.0668,0.0637,0.0623,0.0608,0.2593,0.3373,0.2718,0.2357,0.0931,1.1171,1.4116,1.3255,1.2962,0.2265,0.0596,0.0612,0.4005,0.4525,0.4308,0.3965,0.0943,1.1216,1.4102,1.3582,1.3093,0.2182,0.0646,0.0596,0.6053,0.6489,0.5935,0.6179,0.0965,1.0665,1.4349,1.3872,1.33,0.2191,0.0598,0.0585,0.8258,0.8828,0.8519,0.8729,0.0923,1.0346,1.4644,1.4375,1.384,0.2192,0.0631,0.0633,0.9233,1.2476,1.1732,1.1467,0.2869,1.0263,1.4591,1.4774,1.4466,0.2217,0.0588,0.0593,0.898,1.4715,1.4682,1.4526,0.0919,0.9462,1.3984,1.4638,1.4681,0.2252,0.063,0.0606,0.0602,0.0604,0.0593,0.0605,0.0614,0.0606,0.0601,0.0615,0.0589,0.0595,0.0572
40338s,0.0646,0.0741,0.0629,0.0633,0.0645,0.0633,0.0627,0.0658,0.0634,0.0669,0.0635,0.0625,0.0607,0.2601,0.3383,0.2727,0.2364,0.0932,1.131,1.4143,1.3267,1.2979,0.2267,0.0582,0.061,0.4005,0.4521,0.4313,0.3965,0.0942,1.139,1.4162,1.36,1.3122,0.2183,0.0648,0.0594,0.6061,0.6485,0.5942,0.6182,0.0964,1.0857,1.4429,1.3893,1.3332,0.2192,0.061,0.0598,0.8259,0.8831,0.8513,0.8728,0.0924,1.055,1.4748,1.4398,1.3872,0.2194,0.0632,0.0629,0.9306,1.2492,1.1733,1.1481,0.2966,1.0456,1.4746,1.4844,1.4534,0.222,0.0595,0.059,0.9062,1.4831,1.4716,1.4553,0.0918,0.9667,1.417,1.4776,1.482,0.2251,0.0627,0.0608,0.0603,0.0604,0.0593,0.0606,0.0613,0.0604,0.0601,0.0605,0.0588,0.0595,0.0593
40978s,0.0648,0.0665,0.0628,0.0634,0.0643,0.0629,0.0629,0.0655,0.0634,0.0668,0.0636,0.0623,0.0607,0.2608,0.3386,0.2729,0.2367,0.0933,1.1438,1.4172,1.3279,1.3001,0.2268,0.0579,0.0614,0.4006,0.4522,0.4315,0.3967,0.0944,1.1557,1.4219,1.3622,1.3142,0.2184,0.0649,0.0596,0.6065,0.6482,0.5941,0.6184,0.0966,1.104,1.4492,1.3914,1.3352,0.2193,0.0608,0.0587,0.8274,0.8837,0.851,0.873,0.0925,1.0731,1.4848,1.442,1.3915,0.2195,0.0634,0.0632,0.9386,1.2501,1.1734,1.1495,0.3075,1.0652,1.4884,1.4897,1.4589,0.2225,0.0589,0.0583,0.9146,1.4935,1.4739,1.4598,0.0918,0.9859,1.4366,1.4936,1.4958,0.2253,0.0632,0.0609,0.0601,0.0604,0.0593,0.0604,0.0613,0.0605,0.06,0.0624,0.0586,0.0595,0.0573
41619s,0.0648,0.0734,0.0629,0.0634,0.0643,0.0629,0.0629,0.0654,0.0636,0.0668,0.0636,0.0623,0.0608,0.261,0.3384,0.2727,0.2367,0.0933,1.1553,1.4216,1.3283,1.3015,0.2269,0.0637,0.0621,0.4013,0.4525,0.4316,0.3974,0.0944,1.1703,1.4263,1.3635,1.3167,0.2187,0.0649,0.0595,0.6067,0.649,0.5942,0.6193,0.0966,1.1223,1.454,1.3925,1.3378,0.2194,0.0588,0.0581,0.8278,0.884,0.8509,0.8737,0.0925,1.0939,1.4921,1.4444,1.3937,0.2196,0.0631,0.063,0.9453,1.2508,1.1744,1.1513,0.316,1.0842,1.5025,1.4953,1.465,0.2232,0.0587,0.0581,0.9221,1.503,1.4755,1.4619,0.0918,1.0031,1.4527,1.5069,1.5051,0.2252,0.0628,0.0609,0.0603,0.06,0.0594,0.0604,0.0611,0.0604,0.0599,0.064,0.0588,0.0594,0.0574
42259s,0.0646,0.0666,0.0629,0.0634,0.0642,0.0628,0.0629,0.0655,0.0636,0.0669,0.0636,0.0624,0.0608,0.2618,0.3389,0.2731,0.2368,0.0932,1.166,1.424,1.3297,1.3035,0.2271,0.0581,0.0615,0.4012,0.4531,0.4319,0.3978,0.0944,1.1841,1.4293,1.3636,1.3181,0.2185,0.065,0.0594,0.6066,0.6494,0.5944,0.6194,0.0966,1.1401,1.4576,1.3935,1.3396,0.2195,0.0618,0.0583,0.8294,0.8838,0.8513,0.8745,0.0924,1.1109,1.499,1.445,1.3969,0.2196,0.0631,0.063,0.9514,1.2506,1.1744,1.1512,0.3303,1.1021,1.5137,1.4981,1.4688,0.2239,0.0586,0.0583,0.9304,1.5102,1.4766,1.462,0.0919,1.0211,1.4689,1.5182,1.5142,0.2253,0.0626,0.0606,0.0601,0.06,0.0593,0.0603,0.0611,0.0602,0.0598,0.0624,0.0587,0.0595,0.0575
42899s,0.0646,0.0738,0.0627,0.0633,0.0641,0.0629,0.0629,0.0652,0.0633,0.0669,0.0637,0.0625,0.0607,0.2624,0.3393,0.2737,0.2373,0.0933,1.1746,1.4258,1.3299,1.3045,0.2271,0.0583,0.0614,0.4024,0.4532,0.4321,0.3984,0.0944,1.1959,1.432,1.3647,1.3201,0.2186,0.0648,0.0595,0.607,0.6484,0.5938,0.62,0.0967,1.1579,1.4619,1.3948,1.3413,0.2195,0.0639,0.0587,0.8301,0.8842,0.8516,0.8752,0.0924,1.1295,1.5044,1.4472,1.4,0.2197,0.0632,0.063,0.9569,1.2511,1.1745,1.1522,0.3433,1.1188,1.5239,1.5019,1.4713,0.225,0.059,0.0581,0.9397,1.5167,1.4767,1.4644,0.092,1.0403,1.4834,1.5296,1.5238,0.2255,0.063,0.0608,0.0601,0.0602,0.0592,0.0604,0.0611,0.0601,0.0598,0.0643,0.0586,0.0593,0.0576
43539s,0.0647,0.0668,0.063,0.0635,0.064,0.0628,0.063,0.0653,0.0632,0.067,0.0635,0.0623,0.0608,0.2632,0.34,0.2741,0.2378,0.0934,1.1837,1.427,1.3305,1.3058,0.2273,0.0603,0.0611,0.4026,0.454,0.4332,0.3988,0.0944,1.2068,1.4345,1.365,1.3215,0.2187,0.0648,0.0596,0.6079,0.6479,0.5941,0.6208,0.0966,1.1744,1.4652,1.3955,1.3436,0.2197,0.0596,0.0583,0.8306,0.8843,0.8509,0.8753,0.0926,1.1473,1.5089,1.4481,1.4016,0.2199,0.0633,0.0629,0.9614,1.2515,1.1736,1.1531,0.3551,1.1362,1.5334,1.5046,1.474,0.226,0.0595,0.0579,0.9487,1.5232,1.4779,1.4655,0.0921,1.0571,1.4979,1.5398,1.5329,0.2257,0.0632,0.0606,0.0601,0.0602,0.0592,0.0603,0.061,0.0602,0.0597,0.0615,0.0587,0.0595,0.0577
44179s,0.0649,0.0667,0.0627,0.0635,0.0643,0.0627,0.0631,0.0653,0.0634,0.067,0.0635,0.0626,0.061,0.2639,0.3406,0.275,0.2386,0.0935,1.1908,1.4278,1.3299,1.3072,0.2274,0.0583,0.0612,0.4028,0.4537,0.4335,0.3992,0.0945,1.2172,1.4375,1.3652,1.3227,0.219,0.0649,0.0595,0.6083,0.649,0.5942,0.6204,0.0969,1.189,1.4684,1.3963,1.3441,0.2198,0.0636,0.0584,0.8303,0.8844,0.8512,0.8754,0.0926,1.1648,1.5131,1.4488,1.4028,0.2199,0.0634,0.063,0.9663,1.2511,1.1736,1.1538,0.3688,1.1536,1.5402,1.5064,1.4767,0.2271,0.0608,0.0585,0.9556,1.5266,1.477,1.4668,0.092,1.0743,1.5121,1.5501,1.5398,0.2257,0.0634,0.0609,0.0604,0.0604,0.0594,0.0605,0.0613,0.0603,0.06,0.0649,0.0588,0.0595,0.0584
44820s,0.0646,0.0738,0.0629,0.0637,0.0643,0.0628,0.063,0.0653,0.0632,0.0668,0.0634,0.0625,0.0609,0.2639,0.3404,0.2746,0.2383,0.0933,1.1985,1.4302,1.3305,1.3086,0.2274,0.0578,0.0616,0.4027,0.4545,0.4331,0.3995,0.0944,1.2258,1.4398,1.3661,1.3236,0.2188,0.0648,0.0594,0.6081,0.6493,0.5941,0.6209,0.0968,1.2033,1.4708,1.3974,1.3448,0.2199,0.0649,0.0583,0.8308,0.8844,0.8507,0.8759,0.0925,1.1813,1.516,1.4505,1.4045,0.22,0.0632,0.0629,0.9715,1.2522,1.1738,1.1542,0.3808,1.1703,1.5477,1.5085,1.4782,0.2279,0.0601,0.0585,0.9641,1.5299,1.4782,1.4681,0.0918,1.0896,1.5262,1.5584,1.5469,0.2257,0.0634,0.0607,0.0601,0.06,0.0593,0.0602,0.061,0.0601,0.0595,0.0618,0.0584,0.0594,0.0578
45460s,0.0648,0.0668,0.0629,0.0635,0.0642,0.0628,0.063,0.0651,0.0635,0.0667,0.0634,0.0624,0.0608,0.2645,0.3402,0.2744,0.2384,0.0934,1.2047,1.4315,1.3301,1.3092,0.2275,0.0576,0.0616,0.403,0.4537,0.4331,0.4,0.0944,1.2336,1.44,1.3663,1.324,0.2188,0.0648,0.0595,0.6086,0.6499,0.5952,0.6214,0.0968,1.2155,1.4724,1.3972,1.3467,0.2199,0.0616,0.0593,0.8318,0.8841,0.8508,0.8762,0.0926,1.1983,1.5185,1.4507,1.4059,0.2202,0.0629,0.0628,0.9758,1.2527,1.1733,1.1549,0.3922,1.1878,1.5528,1.5104,1.4811,0.2297,0.0589,0.058,0.9707,1.5324,1.4775,1.4678,0.092,1.1063,1.5368,1.5661,1.5532,0.2258,0.0628,0.0606,0.0601,0.0599,0.0592,0.0602,0.0609,0.06,0.0596,0.0604,0.0585,0.0592,0.0575
46100s,0.0649,0.0726,0.0631,0.0637,0.0644,0.0629,0.0629,0.0653,0.0636,0.067,0.0634,0.0626,0.0608,0.2648,0.3408,0.275,0.2387,0.0934,1.2097,1.4324,1.3302,1.3099,0.2276,0.0579,0.0606,0.4037,0.4541,0.4332,0.4003,0.0945,1.2418,1.4417,1.3677,1.3256,0.219,0.0649,0.0594,0.6088,0.6509,0.5953,0.6216,0.0968,1.2262,1.4742,1.3971,1.3471,0.22,0.0614,0.059,0.8326,0.8842,0.8504,0.8765,0.0926,1.2128,1.5216,1.4508,1.4072,0.2202,0.0629,0.063,0.9784,1.2522,1.173,1.156,0.406,1.2034,1.5592,1.5117,1.4827,0.2313,0.06,0.0591,0.9788,1.5338,1.4782,1.4696,0.092,1.1226,1.5472,1.5736,1.5608,0.2258,0.0623,0.0608,0.0601,0.0601,0.0591,0.0604,0.0609,0.0601,0.0597,0.061,0.0586,0.0592,0.0573
46740s,0.0646,0.0665,0.0627,0.0635,0.0642,0.0629,0.0632,0.0652,0.0634,0.0668,0.0634,0.0624,0.0607,0.2648,0.3404,0.2746,0.2385,0.0933,1.2158,1.4345,1.3308,1.3109,0.2276,0.0618,0.0614,0.4042,0.4561,0.4344,0.401,0.0945,1.248,1.4426,1.3672,1.3259,0.2192,0.0648,0.0592,0.6094,0.6505,0.5957,0.6218,0.0967,1.2359,1.4756,1.3975,1.3482,0.2201,0.0628,0.0585,0.8329,0.884,0.8508,0.8773,0.0925,1.2292,1.5236,1.4515,1.4088,0.2202,0.0628,0.0626,0.9827,1.2525,1.1732,1.1564,0.42,1.2196,1.5621,1.5122,1.4844,0.2334,0.0592,0.0588,0.9861,1.5362,1.4774,1.4695,0.092,1.1388,1.5593,1.5802,1.5661,0.2259,0.0618,0.0606,0.06,0.0599,0.0592,0.0602,0.0607,0.0601,0.0596,0.0605,0.0584,0.0592,0.0574
47380s,0.0649,0.0744,0.0628,0.0636,0.0645,0.0628,0.0631,0.0655,0.0634,0.0671,0.0634,0.0625,0.0609,0.2655,0.3414,0.2755,0.2394,0.0935,1.2207,1.4352,1.3303,1.312,0.2278,0.062,0.0612,0.4045,0.4566,0.4348,0.4016,0.0946,1.2548,1.4444,1.3674,1.327,0.2192,0.0649,0.0595,0.6094,0.6503,0.5958,0.6217,0.0968,1.2463,1.4774,1.3979,1.3489,0.2202,0.0603,0.0585,0.8329,0.884,0.8494,0.8781,0.0927,1.243,1.5253,1.4511,1.4094,0.2204,0.0631,0.0629,0.9865,1.2524,1.1731,1.1571,0.4343,1.2361,1.5658,1.5125,1.4855,0.2358,0.059,0.0585,0.9936,1.5366,1.4779,1.4701,0.0922,1.1569,1.5691,1.5851,1.5716,0.226,0.0619,0.0609,0.06,0.0599,0.0592,0.0605,0.061,0.0603,0.0596,0.0605,0.0587,0.0593,0.0571
48021s,0.0648,0.0737,0.0628,0.0634,0.0641,0.0627,0.063,0.0655,0.0632,0.0676,0.0636,0.0625,0.0608,0.2657,0.3413,0.2754,0.2393,0.0934,1.2247,1.436,1.3307,1.3135,0.2277,0.059,0.0613,0.4045,0.4567,0.4348,0.4019,0.0945,1.26,1.4448,1.3671,1.3274,0.2192,0.0648,0.0592,0.6099,0.6502,0.5953,0.6224,0.0967,1.2543,1.4788,1.3975,1.3497,0.2202,0.0629,0.0588,0.8344,0.8842,0.8501,0.8784,0.0925,1.2559,1.5271,1.452,1.4112,0.2202,0.063,0.0626,0.9897,1.2515,1.1721,1.1572,0.4503,1.251,1.5672,1.5132,1.4862,0.2388,0.0588,0.0593,1.0015,1.5381,1.477,1.47,0.092,1.1711,1.5792,1.5908,1.5763,0.2259,0.0615,0.0606,0.06,0.0598,0.0593,0.0602,0.0605,0.0599,0.0596,0.0607,0.0585,0.0592,0.0575
48661s,0.0648,0.0666,0.0626,0.0636,0.0643,0.063,0.063,0.0657,0.0631,0.0672,0.0633,0.0625,0.0609,0.2667,0.3423,0.2767,0.2403,0.0935,1.2277,1.4351,1.3301,1.3134,0.228,0.0582,0.0614,0.4048,0.4562,0.435,0.4022,0.0947,1.2647,1.4453,1.3676,1.3291,0.2193,0.0647,0.0594,0.6105,0.6501,0.596,0.6232,0.0969,1.2625,1.4794,1.3977,1.3511,0.2203,0.0619,0.0589,0.8345,0.8837,0.8498,0.8781,0.0926,1.2661,1.5272,1.4512,1.4118,0.2204,0.0632,0.0628,0.9918,1.2521,1.1726,1.1582,0.4622,1.2666,1.5718,1.5143,1.4877,0.2428,0.0598,0.0583,1.0084,1.538,1.4761,1.4701,0.0921,1.1871,1.5871,1.5948,1.58,0.2262,0.0618,0.0608,0.06,0.0597,0.0592,0.0603,0.0607,0.06,0.0596,0.0614,0.0585,0.0593,0.0572
49301s,0.0648,0.0742,0.0628,0.0637,0.0644,0.063,0.0631,0.0654,0.0633,0.067,0.0635,0.0626,0.061,0.2672,0.3423,0.2764,0.2406,0.0936,1.2308,1.4368,1.3303,1.3145,0.2281,0.0601,0.0614,0.4052,0.4562,0.4349,0.4025,0.0946,1.2698,1.4463,1.3672,1.3291,0.2194,0.065,0.0594,0.611,0.6505,0.5962,0.6237,0.097,1.2701,1.48,1.3976,1.3513,0.2204,0.0618,0.0593,0.835,0.8842,0.8495,0.8786,0.0928,1.2772,1.5289,1.4516,1.4121,0.2205,0.0632,0.0625,0.994,1.2522,1.1724,1.1586,0.478,1.2799,1.5737,1.5151,1.4886,0.2475,0.0593,0.0582,1.0168,1.5378,1.4757,1.4719,0.0922,1.2027,1.5969,1.5995,1.5839,0.2262,0.0617,0.0609,0.0602,0.0599,0.0592,0.06,0.0606,0.06,0.0596,0.0601,0.0586,0.0593,0.0575
49941s,0.0648,0.0669,0.0628,0.0638,0.0643,0.063,0.0629,0.0654,0.063,0.067,0.0637,0.0625,0.0608,0.2673,0.3425,0.2765,0.2404,0.0935,1.2341,1.4374,1.3299,1.3153,0.2281,0.0611,0.0609,0.4054,0.4565,0.435,0.4031,0.0948,1.2738,1.4476,1.3678,1.3301,0.2194,0.0648,0.0594,0.6115,0.6508,0.5969,0.6241,0.0969,1.2763,1.4813,1.3979,1.3523,0.2204,0.0609,0.0588,0.8349,0.8844,0.8494,0.8787,0.0928,1.2863,1.5296,1.4517,1.4133,0.2207,0.0631,0.0625,0.9961,1.253,1.1727,1.1591,0.4943,1.2947,1.5749,1.5151,1.4899,0.2527,0.0588,0.0581,1.0233,1.5385,1.4755,1.4717,0.0922,1.2177,1.6058,1.6031,1.5883,0.2262,0.0617,0.0608,0.0601,0.0597,0.0592,0.0601,0.0606,0.0599,0.0594,0.0618,0.0586,0.0593,0.0577
50582s,0.0649,0.0741,0.0629,0.0635,0.0642,0.0629,0.0628,0.0651,0.0629,0.0668,0.0635,0.0623,0.0607,0.2676,0.3427,0.277,0.2409,0.0936,1.2356,1.4367,1.3295,1.316,0.2282,0.0579,0.0615,0.405,0.456,0.4351,0.4036,0.0946,1.276,1.4482,1.3664,1.3304,0.2195,0.0649,0.059,0.6112,0.6514,0.5966,0.6245,0.0969,1.2817,1.4817,1.3978,1.3529,0.2204,0.0611,0.0581,0.836,0.8841,0.8491,0.8795,0.0927,1.2951,1.5309,1.4516,1.4134,0.2206,0.0629,0.0625,0.9984,1.252,1.1719,1.1592,0.5122,1.3065,1.5763,1.5155,1.49,0.2585,0.0596,0.0586,1.0301,1.539,1.4752,1.4721,0.0921,1.2324,1.6136,1.6055,1.5907,0.2262,0.0614,0.0609,0.06,0.0597,0.0591,0.0603,0.0606,0.0599,0.0595,0.0601,0.0585,0.0592,0.058
51222s,0.0647,0.0666,0.0627,0.0635,0.0642,0.063,0.0627,0.0655,0.0633,0.0667,0.0631,0.0623,0.0607,0.2682,0.3426,0.2769,0.2409,0.0935,1.2385,1.4395,1.3298,1.3174,0.2283,0.0587,0.0611,0.4061,0.4588,0.4361,0.4045,0.0947,1.279,1.4486,1.3674,1.3311,0.2196,0.0648,0.0592,0.6115,0.6518,0.5969,0.625,0.097,1.2875,1.4822,1.3977,1.353,0.2207,0.063,0.0588,0.8369,0.8843,0.8491,0.8804,0.0928,1.3035,1.5328,1.452,1.4149,0.2207,0.063,0.0625,1.0001,1.253,1.1728,1.1607,0.5289,1.3187,1.5791,1.5162,1.4918,0.2654,0.0587,0.058,1.0368,1.54,1.4753,1.4718,0.0923,1.247,1.6211,1.6085,1.5943,0.2264,0.0616,0.0608,0.0598,0.0597,0.0593,0.06,0.0604,0.0598,0.0594,0.0609,0.0584,0.0591,0.0577
51862s,0.065,0.0741,0.0627,0.0636,0.0642,0.0629,0.0629,0.0655,0.0629,0.067,0.0633,0.0627,0.0609,0.2685,0.3429,0.2772,0.2413,0.0934,1.2395,1.4388,1.3298,1.3178,0.2285,0.0591,0.0614,0.406,0.4584,0.436,0.4048,0.0947,1.2809,1.4491,1.3668,1.3312,0.2197,0.0649,0.0593,0.6122,0.6514,0.5969,0.6259,0.0971,1.292,1.4835,1.398,1.3534,0.2207,0.0602,0.0589,0.837,0.8839,0.8496,0.8806,0.0928,1.3108,1.5334,1.4518,1.4157,0.2207,0.063,0.0625,1.0015,1.2528,1.1716,1.1603,0.5478,1.3292,1.5792,1.5153,1.493,0.2731,0.0594,0.0584,1.0447,1.5397,1.4738,1.4723,0.0922,1.2611,1.6278,1.6091,1.5952,0.2264,0.0616,0.0607,0.06,0.0597,0.0593,0.0601,0.0606,0.0597,0.0594,0.0593,0.0583,0.0591,0.0572
52502s,0.0647,0.0667,0.0627,0.0635,0.0639,0.0628,0.0628,0.0653,0.063,0.0669,0.0633,0.0625,0.0607,0.2691,0.3432,0.2775,0.2414,0.0936,1.2418,1.4391,1.3292,1.3182,0.2285,0.0579,0.0612,0.4067,0.4581,0.4367,0.4049,0.0946,1.2841,1.4496,1.3671,1.3324,0.2197,0.065,0.0593,0.6124,0.6513,0.597,0.6265,0.0969,1.2951,1.4838,1.3971,1.3541,0.2206,0.0606,0.0583,0.8381,0.884,0.8496,0.881,0.0928,1.3176,1.5331,1.4521,1.4162,0.2208,0.0628,0.0624,1.003,1.2528,1.1716,1.1606,0.566,1.3389,1.5805,1.5155,1.4927,0.2815,0.0598,0.0584,1.0517,1.5394,1.4735,1.4726,0.0921,1.2743,1.6341,1.6105,1.597,0.2265,0.0615,0.0608,0.06,0.0596,0.0592,0.06,0.0605,0.0595,0.0594,0.0593,0.0585,0.0591,0.0575
53142s,0.0648,0.0669,0.063,0.0637,0.0641,0.0628,0.0631,0.0652,0.0631,0.0675,0.0636,0.0625,0.0611,0.2702,0.3441,0.2785,0.2423,0.0937,1.2432,1.4396,1.329,1.319,0.2288,0.0596,0.0611,0.407,0.4585,0.4374,0.4056,0.0948,1.2868,1.4513,1.3674,1.3337,0.2199,0.065,0.0595,0.6133,0.6513,0.5969,0.6274,0.0971,1.2993,1.4845,1.3983,1.3556,0.221,0.0603,0.0586,0.8388,0.8839,0.8498,0.8808,0.0929,1.3238,1.5351,1.4525,1.4171,0.221,0.063,0.0626,1.0036,1.2524,1.172,1.1614,0.5869,1.3478,1.582,1.5158,1.4934,0.2937,0.0596,0.058,1.0592,1.54,1.4752,1.4747,0.0922,1.2895,1.6398,1.6135,1.6007,0.2267,0.0617,0.0608,0.06,0.0596,0.059,0.0601,0.0606,0.0598,0.0595,0.0598,0.0585,0.059,0.0572
53783s,0.0649,0.0733,0.0628,0.0636,0.0643,0.0629,0.0629,0.0652,0.0631,0.0669,0.0636,0.0625,0.0608,0.2705,0.3441,0.2785,0.2423,0.0936,1.2444,1.4401,1.329,1.3204,0.2287,0.0589,0.0612,0.4069,0.4582,0.4376,0.4057,0.0947,1.288,1.4515,1.3664,1.3334,0.2199,0.0649,0.0593,0.6138,0.652,0.5974,0.6266,0.0971,1.3024,1.4848,1.3977,1.3552,0.2209,0.0601,0.0587,0.8394,0.8841,0.8495,0.8813,0.0929,1.3293,1.5347,1.4528,1.417,0.2209,0.0631,0.0622,1.0046,1.253,1.1718,1.1618,0.6066,1.3551,1.5833,1.5156,1.4946,0.304,0.0599,0.0588,1.0657,1.5403,1.4745,1.4738,0.0923,1.3017,1.6448,1.6142,1.6005,0.2265,0.0613,0.0607,0.0599,0.0596,0.0591,0.06,0.0605,0.0595,0.0593,0.0595,0.0585,0.0591,0.0579
54423s,0.0649,0.0667,0.0629,0.0635,0.0642,0.0631,0.0629,0.0654,0.0632,0.0668,0.0633,0.0624,0.0608,0.2713,0.3445,0.2791,0.2431,0.0936,1.2454,1.4392,1.3285,1.3197,0.2289,0.0577,0.061,0.4068,0.4588,0.4373,0.4055,0.0949,1.2895,1.4506,1.3655,1.334,0.2199,0.0648,0.0595,0.6147,0.6515,0.5973,0.6277,0.097,1.3038,1.4837,1.3968,1.3557,0.221,0.0607,0.0581,0.8394,0.8841,0.8495,0.8813,0.0929,1.3331,1.5344,1.4508,1.4177,0.221,0.063,0.0627,1.0048,1.2519,1.1711,1.1612,0.6264,1.3629,1.583,1.5138,1.4939,0.3164,0.0615,0.058,1.073,1.54,1.4736,1.473,0.0921,1.3141,1.6473,1.614,1.6017,0.2267,0.0614,0.0608,0.0599,0.0595,0.0592,0.06,0.0606,0.0594,0.0593,0.0596,0.0585,0.0588,0.0572
55063s,0.0651,0.0745,0.0631,0.0638,0.0645,0.063,0.063,0.0654,0.0631,0.0668,0.0634,0.0626,0.0609,0.2713,0.3441,0.2785,0.2426,0.0935,1.2467,1.4416,1.3293,1.3215,0.2291,0.06,0.0609,0.4073,0.459,0.4373,0.4063,0.0949,1.2912,1.4514,1.3669,1.3349,0.22,0.0647,0.0592,0.6151,0.6521,0.5976,0.6273,0.0971,1.3065,1.4851,1.3974,1.3565,0.2212,0.0615,0.0578,0.84,0.8842,0.8497,0.8815,0.093,1.3387,1.5351,1.4517,1.4182,0.2213,0.0631,0.0626,1.0067,1.2536,1.1721,1.1626,0.6473,1.3702,1.5848,1.516,1.4956,0.3282,0.0592,0.0583,1.0804,1.5413,1.4737,1.4749,0.0924,1.3272,1.6542,1.617,1.604,0.2268,0.0614,0.061,0.06,0.0596,0.0591,0.0601,0.0605,0.0596,0.0593,0.0596,0.0584,0.0592,0.058
55706s,0.0648,0.0666,0.0628,0.0635,0.0639,0.0627,0.0629,0.0654,0.0631,0.0669,0.0631,0.0624,0.0608,0.2715,0.3443,0.2789,0.243,0.0936,1.247,1.4408,1.3286,1.3221,0.2291,0.0606,0.0613,0.4082,0.4594,0.438,0.4065,0.0948,1.2914,1.4507,1.3657,1.334,0.2201,0.0648,0.0596,0.6155,0.6532,0.5985,0.6277,0.0971,1.3083,1.485,1.3963,1.3552,0.2212,0.0619,0.0579,0.8407,0.884,0.8498,0.8819,0.093,1.3418,1.5353,1.4513,1.4187,0.2213,0.0627,0.0627,1.006,1.253,1.1719,1.1631,0.6682,1.3762,1.5839,1.5148,1.4957,0.3409,0.0593,0.0584,1.0864,1.5399,1.4727,1.4743,0.0924,1.3393,1.6541,1.6154,1.6033,0.2269,0.0615,0.0609,0.06,0.0597,0.0591,0.0601,0.0607,0.0595,0.0593,0.0596,0.0585,0.0591,0.058
56346s,0.0648,0.0668,0.0629,0.0636,0.0641,0.0628,0.0627,0.065,0.0629,0.0667,0.0631,0.0622,0.0609,0.272,0.3448,0.2791,0.2432,0.0937,1.2473,1.4411,1.3284,1.3224,0.2293,0.0625,0.06,0.4082,0.4586,0.4378,0.4067,0.0949,1.2934,1.4525,1.366,1.3358,0.2201,0.0647,0.0594,0.616,0.653,0.5986,0.6281,0.0972,1.3104,1.4855,1.3959,1.3574,0.2213,0.0613,0.0588,0.8418,0.8843,0.8495,0.8829,0.093,1.3456,1.5366,1.452,1.4192,0.2212,0.0628,0.0625,1.0062,1.2533,1.1715,1.1635,0.69,1.3825,1.5858,1.5149,1.4961,0.3554,0.0593,0.0588,1.0926,1.5404,1.4734,1.475,0.0923,1.3508,1.6585,1.6179,1.6051,0.2268,0.0614,0.0608,0.06,0.0596,0.059,0.0599,0.0605,0.0593,0.0592,0.0593,0.0585,0.059,0.0577
56987s,0.0649,0.0737,0.0628,0.0636,0.0643,0.0629,0.0627,0.065,0.0627,0.0667,0.063,0.0623,0.0609,0.2726,0.345,0.2789,0.2434,0.0937,1.249,1.4412,1.3282,1.3235,0.2295,0.0591,0.0611,0.408,0.46,0.4383,0.4071,0.0949,1.2942,1.4519,1.3657,1.336,0.2202,0.0648,0.0596,0.6159,0.653,0.5982,0.6285,0.0972,1.3125,1.4849,1.3961,1.3574,0.2214,0.0618,0.0583,0.8424,0.8841,0.8497,0.8836,0.093,1.3487,1.5369,1.4517,1.4196,0.2213,0.0628,0.0625,1.0069,1.254,1.1719,1.1638,0.7109,1.3879,1.5852,1.5152,1.4965,0.3683,0.0607,0.0583,1.0978,1.5398,1.4729,1.475,0.0924,1.3628,1.6596,1.6176,1.6063,0.227,0.0614,0.0607,0.0599,0.0596,0.0591,0.06,0.0604,0.0595,0.0593,0.0593,0.0585,0.0589,0.058
57627s,0.0649,0.0712,0.0629,0.0636,0.0639,0.0629,0.0626,0.0651,0.0631,0.0669,0.0632,0.0625,0.0609,0.2734,0.3453,0.28,0.2443,0.0938,1.2484,1.4413,1.3281,1.3235,0.2296,0.0624,0.0611,0.4087,0.4606,0.4392,0.4079,0.095,1.2948,1.4518,1.3654,1.3363,0.2204,0.0648,0.0595,0.6168,0.6527,0.5988,0.6292,0.0974,1.3135,1.4857,1.3966,1.358,0.2215,0.0609,0.0582,0.8434,0.8845,0.8498,0.884,0.0931,1.3508,1.5362,1.4512,1.4204,0.2215,0.0628,0.0624,1.0067,1.254,1.1714,1.1639,0.734,1.3921,1.5857,1.5156,1.4962,0.3839,0.059,0.0596,1.1036,1.5395,1.4729,1.4754,0.0924,1.3733,1.663,1.6189,1.6068,0.2271,0.0613,0.0608,0.0599,0.0596,0.0592,0.06,0.0605,0.0594,0.0593,0.0594,0.0585,0.059,0.0579
58267s,0.0647,0.0686,0.0629,0.0635,0.0642,0.0629,0.0627,0.0651,0.0629,0.0673,0.0632,0.0624,0.061,0.2739,0.3461,0.2808,0.2448,0.0939,1.2482,1.4409,1.3271,1.3239,0.2299,0.0581,0.0612,0.4084,0.4604,0.4389,0.408,0.095,1.2955,1.453,1.3652,1.337,0.2204,0.0649,0.0596,0.6171,0.6523,0.5993,0.6295,0.0973,1.3149,1.4863,1.3966,1.3597,0.2215,0.0628,0.0594,0.8434,0.8844,0.8501,0.8845,0.0931,1.353,1.5371,1.4512,1.4207,0.2215,0.0626,0.0624,1.0071,1.2538,1.1713,1.1642,0.758,1.3963,1.5857,1.5157,1.4968,0.3997,0.0598,0.0579,1.1099,1.5408,1.4731,1.4758,0.0925,1.3845,1.6644,1.6187,1.6062,0.2271,0.0611,0.0608,0.0599,0.0594,0.059,0.06,0.0604,0.0595,0.0593,0.0595,0.0585,0.059,0.0573
58907s,0.0647,0.0668,0.0627,0.0635,0.0641,0.063,0.0629,0.065,0.0631,0.0667,0.063,0.0624,0.061,0.2739,0.3458,0.2804,0.2445,0.0938,1.2488,1.4414,1.3275,1.3246,0.23,0.0577,0.061,0.4079,0.4601,0.4389,0.4078,0.0949,1.2964,1.4523,1.3655,1.3376,0.2204,0.0647,0.0595,0.6171,0.6532,0.5998,0.6287,0.0973,1.3151,1.4858,1.3957,1.359,0.2215,0.0621,0.0586,0.8434,0.8845,0.8497,0.8842,0.0931,1.3541,1.5375,1.451,1.4199,0.2215,0.0625,0.0625,1.0072,1.2537,1.1712,1.1647,0.7801,1.3999,1.5862,1.5147,1.4969,0.417,0.0606,0.0586,1.1149,1.5403,1.4725,1.4767,0.0924,1.3952,1.6645,1.6187,1.6069,0.2271,0.0612,0.0605,0.0598,0.0596,0.0591,0.06,0.0602,0.0592,0.0592,0.0593,0.0584,0.0589,0.0571
59547s,0.0652,0.0742,0.063,0.0637,0.0643,0.063,0.0626,0.0653,0.0632,0.0668,0.0633,0.0628,0.0609,0.2746,0.3461,0.2808,0.245,0.0938,1.249,1.441,1.327,1.3257,0.2303,0.0578,0.0616,0.4083,0.4603,0.4392,0.4085,0.095,1.2963,1.4528,1.3656,1.3376,0.2204,0.0649,0.0597,0.6178,0.6539,0.6002,0.6293,0.0972,1.3159,1.4863,1.3965,1.3598,0.2219,0.0618,0.058,0.8448,0.8848,0.8496,0.885,0.0931,1.3566,1.5369,1.4505,1.4216,0.2217,0.0627,0.0623,1.0085,1.2543,1.1719,1.1658,0.8034,1.4038,1.5868,1.5146,1.4981,0.4314,0.0601,0.0578,1.1216,1.5406,1.4723,1.4764,0.0925,1.4052,1.6684,1.6181,1.6091,0.2273,0.0613,0.0607,0.0599,0.0594,0.0589,0.0599,0.0604,0.0594,0.0593,0.0594,0.0585,0.059,0.0578
60188s,0.0648,0.0745,0.0628,0.0634,0.0642,0.0628,0.0628,0.0652,0.0629,0.0665,0.063,0.0625,0.0608,0.2748,0.3464,0.2807,0.2452,0.0937,1.2489,1.4413,1.3271,1.326,0.2305,0.0625,0.0607,0.4088,0.4609,0.439,0.4087,0.0949,1.2971,1.4535,1.3651,1.3378,0.2205,0.0647,0.0593,0.6179,0.6542,0.6001,0.6302,0.0973,1.3169,1.4871,1.3952,1.3607,0.2217,0.0621,0.0581,0.8464,0.8848,0.8495,0.8853,0.0933,1.3573,1.5379,1.4505,1.4214,0.2217,0.0624,0.0625,1.0088,1.2542,1.1711,1.1657,0.8278,1.4063,1.5884,1.514,1.4979,0.4485,0.0601,0.0581,1.1277,1.5403,1.4727,1.4773,0.0924,1.4153,1.67,1.6207,1.6094,0.2273,0.0612,0.0609,0.06,0.0595,0.0589,0.06,0.0603,0.0594,0.0592,0.0593,0.0584,0.0591,0.0573
60828s,0.0647,0.067,0.0628,0.0635,0.0642,0.0627,0.0626,0.0651,0.063,0.0668,0.0632,0.063,0.0608,0.2749,0.3465,0.2812,0.2455,0.0938,1.2494,1.4414,1.3267,1.3265,0.2306,0.0597,0.0607,0.4088,0.4618,0.4402,0.4095,0.095,1.2969,1.453,1.3651,1.338,0.2207,0.0647,0.0595,0.6182,0.6546,0.6002,0.6305,0.0973,1.3169,1.4866,1.3957,1.3604,0.222,0.0594,0.0584,0.8459,0.8852,0.8497,0.8855,0.0934,1.3581,1.5372,1.45,1.4218,0.2218,0.0625,0.0624,1.0087,1.2545,1.171,1.1663,0.8505,1.4091,1.5882,1.5149,1.4983,0.4658,0.0598,0.0594,1.1336,1.54,1.4722,1.4762,0.0924,1.4243,1.6697,1.6193,1.6086,0.2274,0.0612,0.061,0.06,0.0596,0.059,0.06,0.0604,0.0595,0.0593,0.0594,0.0585,0.059,0.0571
61468s,0.0648,0.0743,0.0629,0.0635,0.0643,0.063,0.0626,0.0653,0.063,0.0668,0.0632,0.0624,0.061,0.2752,0.3464,0.2811,0.2456,0.0939,1.2497,1.4425,1.3273,1.3271,0.231,0.0581,0.0613,0.4093,0.463,0.4409,0.4102,0.0951,1.2971,1.453,1.3649,1.3395,0.2209,0.0649,0.0596,0.6183,0.6545,0.6004,0.6311,0.0975,1.3181,1.487,1.3953,1.3615,0.2221,0.0631,0.0584,0.8471,0.8855,0.8497,0.8866,0.0934,1.3596,1.5391,1.4496,1.4227,0.2221,0.0625,0.0627,1.0097,1.2546,1.1722,1.1664,0.8748,1.411,1.5879,1.5149,1.4987,0.4835,0.0599,0.058,1.1404,1.5405,1.4718,1.4775,0.0926,1.4327,1.6713,1.6187,1.6096,0.2276,0.0617,0.061,0.06,0.0595,0.0589,0.0599,0.0602,0.0594,0.0593,0.0595,0.0586,0.0588,0.0575
62108s,0.065,0.0667,0.0631,0.0637,0.0644,0.063,0.0626,0.0653,0.0631,0.0669,0.0633,0.0624,0.061,0.2754,0.3465,0.2813,0.2458,0.0939,1.2495,1.4422,1.3272,1.3274,0.2312,0.061,0.0615,0.4093,0.4623,0.441,0.4102,0.0952,1.2971,1.4525,1.3645,1.3395,0.221,0.0652,0.0597,0.6193,0.6548,0.601,0.6319,0.0975,1.318,1.4875,1.3952,1.3616,0.2222,0.0597,0.059,0.8477,0.8854,0.8503,0.8866,0.0936,1.361,1.5385,1.4505,1.4219,0.2222,0.0624,0.0625,1.0097,1.2553,1.1713,1.1669,0.9028,1.4132,1.5875,1.514,1.4994,0.5025,0.0598,0.0597,1.149,1.5403,1.4726,1.4778,0.0926,1.4416,1.6719,1.6205,1.6091,0.2278,0.0616,0.0609,0.0601,0.0594,0.0592,0.0601,0.0603,0.0593,0.0594,0.0595,0.0587,0.059,0.057
62749s,0.0651,0.0667,0.063,0.0638,0.0642,0.0627,0.0627,0.0651,0.063,0.0669,0.0634,0.0624,0.061,0.276,0.3473,0.282,0.2465,0.094,1.2489,1.4413,1.3268,1.328,0.2313,0.0605,0.0612,0.41,0.4632,0.4416,0.4108,0.0952,1.2966,1.4531,1.3636,1.3392,0.2211,0.0647,0.0597,0.6194,0.6543,0.6008,0.6324,0.0974,1.319,1.4871,1.395,1.3618,0.222,0.0633,0.058,0.8482,0.8855,0.85,0.8866,0.0932,1.3614,1.5386,1.4502,1.4232,0.2221,0.0626,0.0623,1.0101,1.2546,1.1715,1.1665,0.9276,1.4142,1.5875,1.5139,1.4988,0.5225,0.0593,0.059,1.1547,1.5406,1.4718,1.477,0.0925,1.4491,1.6713,1.6192,1.6092,0.2278,0.0617,0.0607,0.0599,0.0594,0.059,0.0598,0.0601,0.0593,0.0593,0.0595,0.0586,0.0588,0.0573
63389s,0.065,0.0738,0.0629,0.0637,0.0642,0.0628,0.0625,0.065,0.0629,0.0673,0.0632,0.0624,0.0609,0.2761,0.3474,0.2823,0.2465,0.0939,1.2498,1.4429,1.3279,1.3289,0.2316,0.0623,0.0614,0.4104,0.4636,0.4421,0.4113,0.0951,1.2974,1.4534,1.365,1.3402,0.2211,0.0647,0.0597,0.6201,0.6549,0.6013,0.6329,0.0976,1.3199,1.4879,1.3948,1.3623,0.2223,0.0606,0.0587,0.8492,0.8854,0.8497,0.8872,0.0934,1.3619,1.5396,1.4499,1.4232,0.2223,0.0624,0.0625,1.0113,1.2549,1.1716,1.1671,0.9557,1.4167,1.5892,1.5138,1.5003,0.5422,0.0585,0.0599,1.1625,1.5416,1.4724,1.4788,0.0926,1.4569,1.6739,1.6206,1.612,0.2281,0.0619,0.0608,0.0599,0.0594,0.059,0.0599,0.0603,0.0593,0.0592,0.0594,0.0587,0.0589,0.0571
64029s,0.0648,0.07,0.0627,0.0637,0.064,0.0629,0.0624,0.065,0.0631,0.0666,0.0631,0.0626,0.0609,0.2762,0.3472,0.2821,0.2465,0.0941,1.25,1.4436,1.3266,1.3292,0.2319,0.0639,0.0623,0.4099,0.463,0.4419,0.4111,0.0952,1.2976,1.454,1.3644,1.341,0.2212,0.0647,0.0597,0.6199,0.655,0.6012,0.6335,0.0976,1.3202,1.488,1.3949,1.3625,0.2224,0.0616,0.059,0.8493,0.8852,0.8503,0.8877,0.0935,1.3635,1.5394,1.4502,1.4246,0.2222,0.0623,0.0624,1.0115,1.2551,1.1713,1.1676,0.9818,1.4174,1.5892,1.5135,1.5004,0.5629,0.0591,0.0585,1.1688,1.5411,1.4725,1.4787,0.0926,1.464,1.6745,1.6199,1.6122,0.2282,0.0615,0.0607,0.06,0.0595,0.0591,0.0599,0.0601,0.0591,0.0593,0.0597,0.0585,0.0588,0.0577
64669s,0.0651,0.0668,0.063,0.0639,0.0643,0.0628,0.0626,0.0653,0.0631,0.0668,0.0632,0.0626,0.061,0.2768,0.3477,0.2827,0.247,0.094,1.249,1.4417,1.3267,1.3288,0.232,0.0586,0.0611,0.4103,0.4628,0.4417,0.4113,0.0952,1.2967,1.453,1.364,1.3406,0.2213,0.0648,0.0595,0.6207,0.6545,0.6014,0.6335,0.0976,1.3192,1.4874,1.3939,1.3626,0.2224,0.0638,0.0588,0.8497,0.8854,0.8503,0.8875,0.0933,1.3628,1.5375,1.45,1.4232,0.2224,0.0624,0.0623,1.0121,1.2549,1.1717,1.1684,1.0071,1.4186,1.5881,1.5128,1.4994,0.5829,0.0598,0.0578,1.1752,1.5408,1.4724,1.4793,0.0926,1.47,1.674,1.6184,1.6105,0.2284,0.0614,0.0606,0.06,0.0595,0.0589,0.0599,0.06,0.0592,0.0593,0.0594,0.0586,0.0588,0.0574
65309s,0.0653,0.0749,0.063,0.0637,0.0641,0.0629,0.0624,0.0652,0.0631,0.0668,0.0632,0.0625,0.0609,0.2772,0.3479,0.2829,0.2472,0.0941,1.2493,1.4422,1.3267,1.3301,0.2322,0.0617,0.0593,0.4103,0.4625,0.4419,0.4116,0.0951,1.2968,1.453,1.3638,1.3408,0.2212,0.0646,0.0596,0.6204,0.6555,0.602,0.6334,0.0976,1.3184,1.4868,1.3936,1.3619,0.2225,0.062,0.0582,0.8495,0.8847,0.8492,0.887,0.0935,1.3625,1.5381,1.4481,1.4226,0.2225,0.0624,0.0622,1.0124,1.2548,1.1714,1.1677,1.0318,1.4187,1.5878,1.5123,1.4993,0.6025,0.0607,0.0585,1.1817,1.5394,1.4715,1.4788,0.0926,1.4764,1.6751,1.6182,1.6102,0.2284,0.0612,0.0609,0.0601,0.0597,0.059,0.0599,0.0602,0.0592,0.0592,0.0595,0.0586,0.059,0.0576
65950s,0.0648,0.0669,0.0628,0.0635,0.064,0.0626,0.0624,0.0652,0.0627,0.0666,0.0632,0.0626,0.0608,0.2776,0.3482,0.2833,0.2476,0.094,1.2492,1.4426,1.3269,1.3302,0.2323,0.0587,0.0615,0.4105,0.4637,0.4425,0.4118,0.095,1.2966,1.4532,1.363,1.3406,0.2213,0.0646,0.0593,0.6208,0.6552,0.6017,0.6336,0.0976,1.3191,1.4871,1.3936,1.3625,0.2226,0.0604,0.0582,0.8509,0.8849,0.8484,0.888,0.0934,1.3633,1.5381,1.4489,1.4237,0.2224,0.0623,0.0622,1.0128,1.2547,1.1711,1.1675,1.0584,1.4194,1.588,1.5118,1.4996,0.6239,0.0595,0.0584,1.188,1.5408,1.4706,1.4796,0.0926,1.4821,1.6761,1.6186,1.6111,0.2287,0.0611,0.0607,0.06,0.0595,0.059,0.0599,0.0602,0.0592,0.0593,0.0595,0.0585,0.0589,0.0574
66590s,0.0648,0.0669,0.0628,0.0638,0.0641,0.0628,0.0626,0.0651,0.0629,0.0668,0.063,0.0624,0.061,0.2784,0.3486,0.2837,0.2481,0.094,1.2491,1.4415,1.3261,1.3308,0.2324,0.0617,0.0607,0.4106,0.4633,0.4427,0.412,0.0951,1.2973,1.4535,1.3636,1.3413,0.2214,0.0645,0.0595,0.6205,0.6556,0.6014,0.6339,0.0975,1.3191,1.4877,1.3934,1.3624,0.2227,0.0596,0.0584,0.8515,0.8851,0.8491,0.8878,0.0934,1.3639,1.5387,1.449,1.4245,0.2225,0.0622,0.0622,1.0135,1.2552,1.1714,1.1685,1.0835,1.4208,1.5883,1.5125,1.5003,0.6449,0.0604,0.0595,1.1947,1.5412,1.472,1.4796,0.0927,1.4883,1.6771,1.6195,1.6117,0.2289,0.0612,0.0608,0.06,0.0596,0.059,0.0599,0.0603,0.0594,0.0593,0.0595,0.0586,0.059,0.0582
67230s,0.0648,0.0672,0.0628,0.0636,0.0642,0.0629,0.0625,0.0653,0.063,0.0668,0.0632,0.0625,0.0608,0.2784,0.3484,0.2836,0.248,0.0941,1.2489,1.4427,1.3263,1.3313,0.2326,0.0625,0.0611,0.4116,0.4655,0.4429,0.4128,0.0951,1.2964,1.4523,1.3625,1.341,0.2216,0.0646,0.0595,0.6213,0.6556,0.6009,0.6342,0.0976,1.3196,1.4874,1.3934,1.3629,0.2228,0.0631,0.0583,0.8514,0.8854,0.8494,0.888,0.0935,1.3637,1.5384,1.4487,1.4237,0.2227,0.0623,0.0622,1.014,1.2549,1.172,1.1681,1.107,1.4211,1.5883,1.5118,1.5002,0.6668,0.059,0.0595,1.1999,1.5403,1.4699,1.4785,0.0928,1.4926,1.6763,1.6186,1.6103,0.2293,0.0613,0.0607,0.06,0.0595,0.0589,0.0598,0.0604,0.0592,0.0594,0.0596,0.0586,0.0588,0.0579
67870s,0.0653,0.0668,0.0628,0.0637,0.064,0.0626,0.0624,0.065,0.0629,0.0668,0.0629,0.0625,0.0606,0.2788,0.349,0.2843,0.2485,0.0941,1.2487,1.4413,1.3261,1.3308,0.2328,0.0605,0.0608,0.4118,0.4646,0.443,0.4127,0.0951,1.2962,1.4527,1.363,1.3415,0.2216,0.0644,0.0593,0.6215,0.6554,0.6012,0.6343,0.0976,1.3189,1.4874,1.3933,1.3633,0.2227,0.062,0.0601,0.8522,0.8855,0.8498,0.8886,0.0934,1.3633,1.5384,1.4479,1.4244,0.2227,0.0625,0.0618,1.0142,1.2549,1.1714,1.1687,1.1294,1.4213,1.5883,1.5115,1.501,0.6888,0.0609,0.0577,1.2061,1.5404,1.4707,1.4791,0.0926,1.4986,1.6751,1.618,1.6111,0.2295,0.061,0.0604,0.0597,0.0594,0.0588,0.0596,0.0601,0.0591,0.0592,0.0606,0.0586,0.0586,0.0575
68510s,0.0652,0.0744,0.0629,0.0635,0.064,0.0626,0.0625,0.0652,0.0628,0.0668,0.0631,0.0624,0.061,0.2791,0.3491,0.2843,0.2486,0.0942,1.2488,1.4422,1.3266,1.3318,0.2329,0.0609,0.0631,0.412,0.4647,0.4438,0.4131,0.0953,1.2968,1.4539,1.3634,1.3428,0.2217,0.0643,0.0594,0.6218,0.6551,0.6015,0.6355,0.0975,1.3197,1.4879,1.3934,1.3652,0.2229,0.0612,0.0583,0.853,0.8853,0.8496,0.8891,0.0935,1.3642,1.5393,1.4491,1.426,0.2229,0.0622,0.0621,1.0148,1.2554,1.1719,1.169,1.1524,1.4223,1.5883,1.512,1.5015,0.712,0.0591,0.0592,1.2121,1.5415,1.4723,1.481,0.0928,1.5038,1.6779,1.6189,1.6129,0.23,0.061,0.0605,0.0599,0.0597,0.0589,0.0598,0.0599,0.0592,0.0594,0.0601,0.0587,0.0586,0.0574
69154s,0.065,0.0669,0.063,0.0638,0.0641,0.0628,0.0625,0.0651,0.063,0.0669,0.0632,0.0625,0.061,0.2796,0.3495,0.2849,0.2493,0.0942,1.2492,1.4419,1.327,1.3317,0.2331,0.058,0.0612,0.4118,0.4653,0.4438,0.4135,0.0954,1.2968,1.4533,1.3632,1.3428,0.2218,0.0645,0.0594,0.6223,0.6562,0.6019,0.6358,0.0977,1.3189,1.4874,1.3931,1.3648,0.2229,0.0616,0.0582,0.8532,0.8856,0.8495,0.889,0.0936,1.3641,1.5387,1.4476,1.4256,0.2229,0.0624,0.0621,1.0152,1.2557,1.1719,1.1695,1.1714,1.4221,1.5884,1.5113,1.5014,0.7346,0.0594,0.0601,1.2174,1.5409,1.4713,1.4801,0.0928,1.5085,1.677,1.6192,1.6121,0.2301,0.061,0.0606,0.0599,0.0595,0.0589,0.0598,0.06,0.0592,0.0593,0.0601,0.0586,0.0589,0.0574
69794s,0.0649,0.0747,0.063,0.0637,0.064,0.0627,0.0626,0.0649,0.0631,0.0667,0.0632,0.0625,0.0611,0.2796,0.3496,0.2853,0.2494,0.0944,1.2491,1.4422,1.3263,1.3324,0.233,0.0603,0.0623,0.4122,0.4649,0.444,0.414,0.0953,1.2967,1.4538,1.3639,1.3432,0.2219,0.0644,0.0597,0.6219,0.6563,0.6022,0.6361,0.0977,1.3185,1.4884,1.3933,1.3639,0.2231,0.0619,0.0579,0.8536,0.8855,0.8498,0.8899,0.0937,1.3643,1.5392,1.4486,1.4255,0.223,0.0623,0.062,1.016,1.2559,1.1716,1.1698,1.1873,1.4223,1.589,1.5112,1.5021,0.7575,0.0588,0.0584,1.2238,1.5402,1.4718,1.4809,0.0929,1.512,1.677,1.6185,1.6125,0.2302,0.061,0.0609,0.06,0.0594,0.0591,0.0598,0.0601,0.0594,0.0594,0.0595,0.0585,0.059,0.0586
70434s,0.0651,0.0745,0.0629,0.0636,0.0642,0.0627,0.0625,0.0651,0.063,0.0667,0.0631,0.0622,0.0609,0.2797,0.3493,0.285,0.2492,0.0944,1.2492,1.443,1.3265,1.3323,0.2333,0.0592,0.0612,0.412,0.4642,0.4438,0.4141,0.0952,1.2966,1.4548,1.3639,1.3438,0.222,0.0645,0.0594,0.6228,0.6562,0.6022,0.6357,0.0976,1.3186,1.4884,1.3925,1.3646,0.223,0.0615,0.0583,0.8544,0.8857,0.8501,0.89,0.0936,1.3647,1.5389,1.4486,1.4263,0.2231,0.0622,0.0623,1.0165,1.2559,1.1717,1.1699,1.2009,1.4224,1.5901,1.5114,1.5018,0.7798,0.06,0.0582,1.2288,1.5405,1.4717,1.4808,0.0928,1.5149,1.6783,1.6186,1.6129,0.2303,0.0612,0.0606,0.0598,0.0595,0.059,0.06,0.0601,0.0591,0.0593,0.0601,0.0587,0.0588,0.058
71074s,0.0649,0.0668,0.0629,0.0636,0.064,0.0627,0.0624,0.0652,0.0629,0.0667,0.0632,0.0623,0.0609,0.28,0.3496,0.2851,0.2497,0.0943,1.2481,1.4421,1.3261,1.3319,0.2333,0.0614,0.0604,0.4121,0.4662,0.4441,0.4149,0.0953,1.2956,1.4521,1.3631,1.3432,0.222,0.0643,0.0596,0.6232,0.657,0.6025,0.6362,0.0977,1.3192,1.4873,1.3926,1.3648,0.2232,0.0617,0.0583,0.8542,0.8855,0.8503,0.8897,0.0935,1.364,1.5383,1.4475,1.4254,0.2231,0.0622,0.0622,1.0166,1.2556,1.1715,1.1699,1.2121,1.422,1.5883,1.51,1.5018,0.8061,0.0603,0.0585,1.2326,1.5414,1.47,1.4804,0.0929,1.5174,1.6764,1.6171,1.611,0.2305,0.0612,0.0607,0.0597,0.0593,0.0589,0.0597,0.0599,0.0591,0.0593,0.0602,0.0587,0.0588,0.0572
71714s,0.0649,0.0746,0.0629,0.0637,0.064,0.0625,0.0627,0.0653,0.0629,0.0669,0.0632,0.0626,0.0609,0.2803,0.3499,0.2857,0.2501,0.0943,1.248,1.4414,1.326,1.3325,0.2331,0.0585,0.0603,0.4123,0.4649,0.4438,0.4149,0.0952,1.2963,1.4544,1.3633,1.3438,0.2219,0.0642,0.0594,0.6232,0.6572,0.6019,0.6358,0.0977,1.3184,1.4877,1.3925,1.3649,0.2231,0.061,0.0587,0.8548,0.886,0.8501,0.8902,0.0934,1.3643,1.5389,1.448,1.4266,0.2231,0.0622,0.0623,1.0172,1.2554,1.1713,1.1698,1.2225,1.422,1.5882,1.5099,1.5017,0.829,0.0594,0.0584,1.2377,1.5408,1.4698,1.4812,0.0926,1.5198,1.6784,1.6163,1.6124,0.2305,0.0612,0.0606,0.0597,0.0592,0.0589,0.0596,0.0599,0.0591,0.0593,0.0607,0.0587,0.0587,0.0573
72355s,0.0648,0.0668,0.0629,0.0636,0.064,0.0629,0.0626,0.0652,0.0628,0.0667,0.063,0.0625,0.0609,0.2802,0.3497,0.2854,0.2501,0.0942,1.2487,1.4427,1.3269,1.3334,0.2334,0.0593,0.0593,0.4122,0.4653,0.4439,0.415,0.0954,1.2963,1.4542,1.3639,1.3444,0.2221,0.0645,0.0595,0.6233,0.6574,0.6025,0.6362,0.0978,1.3187,1.4875,1.3927,1.3649,0.2233,0.0633,0.0593,0.8558,0.886,0.8501,0.8904,0.0935,1.3642,1.5394,1.4478,1.4259,0.2232,0.0621,0.0625,1.018,1.2561,1.1719,1.1701,1.2305,1.4221,1.5887,1.5107,1.5027,0.8534,0.0606,0.0581,1.242,1.5407,1.4707,1.4812,0.0928,1.5225,1.6773,1.6178,1.6128,0.231,0.061,0.0606,0.0598,0.0592,0.0588,0.0598,0.0599,0.0592,0.0593,0.0603,0.0587,0.0587,0.0578
72995s,0.0649,0.0668,0.0627,0.0635,0.0641,0.0627,0.0625,0.0649,0.0628,0.0667,0.0629,0.0625,0.0608,0.281,0.3505,0.2863,0.2508,0.0945,1.2481,1.4418,1.3261,1.3324,0.2334,0.0621,0.0605,0.4129,0.4672,0.4447,0.4156,0.0953,1.296,1.4536,1.3625,1.3435,0.2222,0.0643,0.0593,0.6239,0.6571,0.6021,0.6365,0.0977,1.3178,1.4873,1.392,1.3655,0.2235,0.0631,0.0588,0.8566,0.8861,0.8497,0.8904,0.0935,1.3638,1.5392,1.4476,1.4266,0.2234,0.0621,0.0623,1.0183,1.2563,1.1721,1.171,1.2361,1.4223,1.5896,1.5099,1.5016,0.8759,0.0598,0.0581,1.2458,1.5407,1.4705,1.4815,0.0927,1.5242,1.6778,1.6175,1.6117,0.2311,0.0611,0.0607,0.0598,0.0593,0.0588,0.0597,0.06,0.0591,0.0594,0.0607,0.0586,0.0587,0.0577
73635s,0.0652,0.0667,0.0629,0.0636,0.0638,0.0625,0.0625,0.065,0.0629,0.0667,0.0628,0.0622,0.0608,0.2811,0.3505,0.2864,0.2512,0.0945,1.2485,1.4428,1.3273,1.3335,0.2333,0.0618,0.06,0.4129,0.4675,0.4449,0.4161,0.0953,1.2962,1.4534,1.3639,1.3446,0.2223,0.0644,0.0595,0.6243,0.6572,0.6023,0.6374,0.0976,1.3183,1.4886,1.393,1.3661,0.2236,0.0617,0.0585,0.8561,0.8863,0.8502,0.8906,0.0935,1.3643,1.5395,1.4477,1.4269,0.2235,0.0619,0.0624,1.0193,1.257,1.1719,1.1713,1.2418,1.4233,1.589,1.509,1.5028,0.9009,0.0599,0.0581,1.25,1.5409,1.4714,1.4832,0.093,1.5271,1.6786,1.6181,1.6141,0.2311,0.061,0.0607,0.0598,0.0593,0.059,0.0596,0.06,0.0591,0.0593,0.0607,0.0586,0.0587,0.058
74275s,0.065,0.0742,0.0627,0.0636,0.064,0.0627,0.0624,0.0653,0.063,0.0669,0.0629,0.0623,0.0609,0.2814,0.3508,0.2869,0.2513,0.0945,1.2484,1.442,1.3274,1.3338,0.2333,0.0627,0.0625,0.413,0.4672,0.4449,0.4162,0.0954,1.2964,1.4534,1.3633,1.345,0.2223,0.0643,0.0592,0.6244,0.6577,0.6025,0.6381,0.0977,1.3175,1.4887,1.3929,1.366,0.2236,0.0617,0.0594,0.8571,0.8864,0.8504,0.8908,0.0936,1.3647,1.5394,1.4484,1.4276,0.2234,0.0618,0.0623,1.0195,1.2566,1.1722,1.1713,1.2464,1.4221,1.5896,1.51,1.503,0.9237,0.0631,0.0587,1.2533,1.5413,1.4692,1.4809,0.0928,1.5283,1.6789,1.6178,1.6125,0.2314,0.061,0.0605,0.0598,0.0594,0.059,0.0595,0.0599,0.0591,0.0593,0.0609,0.0585,0.0586,0.0582
74915s,0.0648,0.0747,0.0629,0.0635,0.0641,0.0627,0.0624,0.0651,0.0626,0.0667,0.0631,0.0625,0.0609,0.2823,0.3516,0.2875,0.2522,0.0949,1.2486,1.4423,1.3275,1.3341,0.2335,0.06,0.0609,0.4132,0.4678,0.4455,0.4164,0.0955,1.296,1.4547,1.3637,1.3449,0.2225,0.0645,0.0594,0.6248,0.6569,0.6024,0.6388,0.0977,1.3182,1.4892,1.3937,1.3668,0.2237,0.0621,0.059,0.858,0.8866,0.8501,0.8914,0.0936,1.3639,1.5394,1.4486,1.4275,0.2235,0.0621,0.0626,1.0198,1.2568,1.1716,1.1715,1.2503,1.423,1.5906,1.5098,1.5029,0.9492,0.0602,0.0592,1.2568,1.5421,1.4705,1.4835,0.0929,1.5301,1.6791,1.6167,1.6131,0.2315,0.061,0.0609,0.06,0.0595,0.0589,0.0597,0.0602,0.0593,0.0592,0.0598,0.0586,0.0588,0.0586
75556s,0.0652,0.0672,0.0628,0.0636,0.064,0.0628,0.0626,0.0651,0.063,0.0667,0.0632,0.0624,0.061,0.282,0.3511,0.2875,0.252,0.0948,1.249,1.4427,1.3281,1.3341,0.2335,0.0594,0.0614,0.4128,0.4667,0.445,0.4163,0.0954,1.2963,1.4547,1.3642,1.3451,0.2225,0.0648,0.0593,0.6248,0.6579,0.6028,0.6384,0.0979,1.3176,1.4891,1.3923,1.3671,0.2238,0.0617,0.0591,0.8584,0.8867,0.8495,0.8916,0.0937,1.3629,1.5396,1.447,1.4274,0.2236,0.0623,0.0625,1.0202,1.2568,1.1715,1.1713,1.2537,1.4223,1.5879,1.5088,1.5031,0.9736,0.06,0.0594,1.2605,1.5414,1.4707,1.4825,0.0929,1.5307,1.679,1.6181,1.6129,0.2315,0.0611,0.0606,0.0598,0.0595,0.059,0.0597,0.0599,0.0592,0.0592,0.0596,0.0586,0.0587,0.0574
76196s,0.0651,0.0669,0.0629,0.0636,0.0642,0.0626,0.0623,0.065,0.0627,0.0666,0.0629,0.0623,0.0608,0.2821,0.3513,0.2873,0.2519,0.0947,1.249,1.4431,1.328,1.3353,0.2335,0.0594,0.0608,0.4135,0.4671,0.445,0.4166,0.0954,1.2961,1.4548,1.3645,1.3451,0.2226,0.0645,0.0594,0.6248,0.6584,0.6035,0.639,0.0978,1.318,1.4886,1.393,1.3673,0.224,0.063,0.0605,0.859,0.8866,0.8504,0.8916,0.0937,1.3632,1.5395,1.4479,1.4279,0.2237,0.0621,0.0623,1.0209,1.2575,1.1721,1.1722,1.2565,1.423,1.5906,1.5093,1.5035,0.9957,0.0607,0.0581,1.2629,1.5411,1.4702,1.4838,0.0929,1.5325,1.679,1.6175,1.613,0.2316,0.0609,0.0606,0.0598,0.0595,0.0589,0.0596,0.0599,0.0592,0.0593,0.06,0.0585,0.0586,0.0573
76836s,0.0652,0.0748,0.0629,0.0634,0.0641,0.0625,0.0626,0.0652,0.0628,0.0666,0.063,0.0623,0.0609,0.2828,0.3514,0.288,0.2527,0.0948,1.2486,1.4421,1.3274,1.3347,0.2335,0.0599,0.0604,0.4133,0.4667,0.4453,0.4167,0.0954,1.2958,1.4545,1.3645,1.3462,0.2225,0.0644,0.0594,0.6255,0.6584,0.603,0.639,0.0979,1.3179,1.4883,1.3927,1.3666,0.2239,0.0626,0.0581,0.8589,0.8867,0.85,0.8907,0.0939,1.362,1.5398,1.4478,1.427,0.2239,0.0618,0.0625,1.0214,1.2576,1.1721,1.1718,1.258,1.4221,1.5887,1.5087,1.5033,1.021,0.0615,0.0582,1.2648,1.5409,1.4695,1.4843,0.093,1.5335,1.6797,1.6167,1.6137,0.2319,0.061,0.0606,0.0599,0.0596,0.0589,0.0596,0.0599,0.0591,0.0593,0.0594,0.0586,0.0585,0.0576
77476s,0.0649,0.0674,0.0631,0.0636,0.0642,0.0627,0.0627,0.0652,0.0629,0.0669,0.0631,0.0623,0.061,0.2827,0.3515,0.2881,0.2529,0.0949,1.249,1.4424,1.3279,1.3355,0.2336,0.0616,0.0608,0.4136,0.4681,0.4459,0.4173,0.0956,1.2964,1.4538,1.3637,1.3452,0.2228,0.0645,0.0595,0.626,0.6587,0.6034,0.6396,0.0979,1.3172,1.4886,1.3925,1.3669,0.2242,0.0616,0.0586,0.8595,0.887,0.85,0.8916,0.0938,1.363,1.5393,1.4475,1.4268,0.2239,0.0621,0.0624,1.0214,1.2575,1.1717,1.1725,1.2598,1.4215,1.5888,1.5088,1.5035,1.0461,0.0601,0.0584,1.2667,1.5411,1.47,1.4836,0.0931,1.5333,1.6788,1.6166,1.6125,0.2321,0.0611,0.0607,0.0599,0.0595,0.0589,0.0598,0.0599,0.0592,0.0594,0.0607,0.0587,0.0587,0.0578
78117s,0.0649,0.0749,0.0628,0.0635,0.064,0.0626,0.0624,0.0651,0.063,0.0667,0.0629,0.0624,0.061,0.283,0.3517,0.2882,0.253,0.0949,1.2485,1.4428,1.3278,1.335,0.2334,0.0577,0.0603,0.4138,0.4683,0.4464,0.4175,0.0954,1.2962,1.4535,1.3647,1.3454,0.2228,0.0642,0.0591,0.6259,0.6583,0.6034,0.6403,0.0979,1.3172,1.4884,1.393,1.3673,0.2241,0.0617,0.0586,0.8608,0.8867,0.8497,0.8918,0.0937,1.3627,1.5398,1.4476,1.4275,0.2239,0.0618,0.0622,1.0221,1.2575,1.1716,1.1728,1.2613,1.422,1.5896,1.5085,1.5039,1.0708,0.0595,0.0579,1.2681,1.5411,1.4695,1.4837,0.093,1.5343,1.6791,1.6161,1.6129,0.2319,0.0608,0.0606,0.0597,0.0594,0.0588,0.0596,0.0599,0.0591,0.0593,0.0603,0.0586,0.0585,0.0581
78757s,0.0649,0.0671,0.0628,0.0636,0.0642,0.0626,0.0627,0.0649,0.0628,0.0667,0.0629,0.0625,0.061,0.2835,0.352,0.2881,0.2533,0.0951,1.2489,1.4421,1.3282,1.3356,0.2333,0.0616,0.0611,0.414,0.4688,0.4461,0.4177,0.0956,1.2954,1.4536,1.3649,1.3468,0.223,0.0643,0.0591,0.6263,0.6588,0.6035,0.6397,0.0979,1.3173,1.4882,1.3925,1.3673,0.2242,0.0617,0.0587,0.8607,0.8868,0.8497,0.8924,0.0937,1.3629,1.5397,1.4477,1.4281,0.2239,0.0617,0.0625,1.0222,1.2571,1.1723,1.1729,1.2629,1.4213,1.5884,1.5087,1.5047,1.0942,0.0593,0.0579,1.2711,1.5411,1.4708,1.4835,0.093,1.5353,1.6785,1.6166,1.6137,0.2321,0.0607,0.0606,0.0597,0.0594,0.0588,0.0596,0.0599,0.0591,0.0593,0.0614,0.0587,0.0586,0.0574
79397s,0.0652,0.0747,0.0629,0.0635,0.0638,0.0626,0.0626,0.065,0.0629,0.0667,0.0631,0.063,0.0608,0.2833,0.352,0.2881,0.2533,0.0951,1.2488,1.4424,1.3286,1.3362,0.2333,0.0592,0.0602,0.4139,0.4686,0.4464,0.4178,0.0955,1.2952,1.4549,1.3647,1.3459,0.2229,0.0644,0.0595,0.6261,0.6582,0.6042,0.6404,0.0979,1.3178,1.4886,1.393,1.3676,0.2242,0.062,0.0594,0.8615,0.8868,0.8499,0.893,0.0939,1.3628,1.5399,1.4474,1.4288,0.2241,0.0618,0.0624,1.0222,1.2571,1.1718,1.1729,1.2629,1.4213,1.5896,1.5079,1.5039,1.1196,0.0605,0.0583,1.2718,1.5412,1.4696,1.4833,0.093,1.536,1.6777,1.6155,1.6128,0.2322,0.0606,0.0607,0.0597,0.0594,0.0588,0.0595,0.0598,0.0591,0.0593,0.0599,0.0586,0.0587,0.0571
80037s,0.0655,0.075,0.063,0.0634,0.064,0.0628,0.0624,0.065,0.0627,0.0668,0.063,0.0625,0.061,0.284,0.3521,0.2889,0.2537,0.0952,1.2494,1.4421,1.3286,1.3367,0.2332,0.065,0.0615,0.4144,0.4693,0.4471,0.4185,0.0956,1.2962,1.4541,1.3651,1.3466,0.2232,0.0643,0.0595,0.626,0.6586,0.604,0.6401,0.098,1.3173,1.4888,1.3941,1.3687,0.2243,0.0644,0.0599,0.8615,0.8869,0.8499,0.8931,0.0938,1.3628,1.5404,1.4482,1.4288,0.2243,0.0615,0.0624,1.0232,1.2579,1.1727,1.1739,1.2654,1.421,1.5907,1.5083,1.5052,1.1443,0.0601,0.059,1.2741,1.5424,1.47,1.4844,0.0932,1.5373,1.681,1.6164,1.6145,0.2322,0.0606,0.0607,0.0599,0.0595,0.0589,0.0597,0.0601,0.0592,0.0594,0.0606,0.0586,0.0585,0.0577
80677s,0.0658,0.0706,0.063,0.0639,0.064,0.0628,0.0624,0.0655,0.0629,0.0676,0.0631,0.0627,0.0611,0.2841,0.3522,0.2891,0.2538,0.0954,1.2492,1.4424,1.3294,1.3365,0.2333,0.0591,0.0611,0.4145,0.4697,0.4472,0.4184,0.0956,1.2957,1.4538,1.3651,1.347,0.2232,0.0644,0.0595,0.6267,0.6586,0.604,0.6408,0.0981,1.3172,1.4893,1.3931,1.3681,0.2245,0.0611,0.0587,0.8622,0.8869,0.8498,0.8932,0.094,1.362,1.5402,1.448,1.4286,0.2244,0.0619,0.0625,1.023,1.2572,1.1729,1.1734,1.2657,1.4201,1.5904,1.5076,1.5042,1.1692,0.0598,0.059,1.275,1.5417,1.4696,1.4834,0.0932,1.5367,1.678,1.6172,1.6133,0.2324,0.0608,0.0608,0.0598,0.0597,0.0589,0.0597,0.06,0.0593,0.0594,0.0596,0.0586,0.0587,0.0573
81318s,0.065,0.0668,0.0628,0.0636,0.0639,0.0627,0.0624,0.0651,0.0627,0.0668,0.063,0.0625,0.0611,0.2848,0.3531,0.2899,0.2546,0.0954,1.2486,1.4416,1.3287,1.3366,0.2331,0.0629,0.061,0.4148,0.4701,0.4475,0.4191,0.0955,1.2954,1.4537,1.3648,1.3469,0.2232,0.0642,0.0592,0.6267,0.6588,0.6042,0.6419,0.098,1.3173,1.4889,1.394,1.3686,0.2245,0.0606,0.059,0.8622,0.8869,0.8497,0.8934,0.0938,1.3618,1.5394,1.4478,1.4285,0.2245,0.0617,0.0626,1.0235,1.2572,1.1727,1.1736,1.2664,1.4199,1.5884,1.5076,1.5039,1.192,0.0621,0.0582,1.276,1.5424,1.4694,1.4841,0.0931,1.5367,1.6791,1.6158,1.613,0.2324,0.0606,0.0606,0.0597,0.0596,0.0588,0.0595,0.0599,0.0593,0.0592,0.0603,0.0585,0.0586,0.0574
81958s,0.065,0.0748,0.0628,0.0635,0.0639,0.0625,0.0624,0.0648,0.0628,0.0665,0.063,0.0626,0.061,0.2849,0.3531,0.29,0.2549,0.0956,1.2491,1.4425,1.3288,1.3375,0.2333,0.0611,0.0608,0.4146,0.4687,0.4472,0.419,0.0956,1.2967,1.4546,1.3664,1.3483,0.2233,0.0643,0.0594,0.6271,0.6591,0.6045,0.6419,0.098,1.3178,1.49,1.3947,1.3695,0.2247,0.0615,0.0622,0.863,0.8873,0.8502,0.8941,0.0938,1.3621,1.5405,1.4482,1.4297,0.2246,0.0617,0.0625,1.0245,1.2578,1.173,1.1741,1.2677,1.4198,1.5902,1.5087,1.5048,1.2161,0.0605,0.0581,1.2781,1.5423,1.4708,1.485,0.0932,1.5389,1.6802,1.6164,1.615,0.2327,0.0606,0.0606,0.0597,0.0595,0.0589,0.0595,0.0598,0.0591,0.0593,0.0603,0.0585,0.0585,0.057
82598s,0.065,0.067,0.063,0.0638,0.0641,0.0626,0.0626,0.0651,0.0628,0.0668,0.0634,0.0627,0.061,0.2849,0.3529,0.2901,0.2548,0.0956,1.2497,1.4429,1.3301,1.3375,0.2332,0.0588,0.0611,0.4144,0.4694,0.4471,0.4194,0.0956,1.2966,1.4545,1.3661,1.3486,0.2234,0.0644,0.0595,0.6269,0.6603,0.6048,0.6422,0.0981,1.3169,1.4891,1.3944,1.3692,0.2249,0.0622,0.0582,0.8633,0.8873,0.8502,0.8938,0.0941,1.3614,1.5402,1.4479,1.429,0.2247,0.0618,0.0624,1.0248,1.2583,1.1738,1.1751,1.2672,1.4206,1.5901,1.5077,1.5053,1.238,0.0594,0.0586,1.2786,1.5419,1.4704,1.486,0.0932,1.5394,1.6796,1.6165,1.6133,0.2326,0.0607,0.0608,0.0597,0.0595,0.0591,0.0597,0.06,0.0592,0.0594,0.0606,0.0586,0.0586,0.0577
83238s,0.065,0.0672,0.0631,0.0636,0.064,0.0627,0.0627,0.0651,0.063,0.0669,0.0636,0.0628,0.0609,0.2855,0.3533,0.2903,0.2553,0.0957,1.2495,1.4426,1.3299,1.338,0.2331,0.0603,0.0612,0.4148,0.4695,0.4478,0.4196,0.0957,1.2958,1.4548,1.3664,1.3482,0.2235,0.0642,0.0594,0.6275,0.6599,0.6055,0.6428,0.0981,1.3169,1.4886,1.3948,1.3691,0.225,0.0625,0.0584,0.8642,0.8876,0.8501,0.8944,0.0941,1.3618,1.5395,1.4484,1.43,0.2247,0.0618,0.0626,1.0253,1.258,1.1739,1.1751,1.2676,1.4201,1.5897,1.5085,1.5055,1.2615,0.0621,0.0583,1.2793,1.5422,1.4694,1.4843,0.0936,1.539,1.6798,1.6152,1.6132,0.2328,0.0606,0.0608,0.0598,0.0595,0.059,0.0597,0.0601,0.0592,0.0594,0.0602,0.0588,0.0587,0.0581
83879s,0.0648,0.0671,0.0631,0.0639,0.0641,0.0628,0.0626,0.065,0.0627,0.0667,0.0632,0.0625,0.061,0.2856,0.3536,0.2908,0.2554,0.0957,1.249,1.442,1.3296,1.3383,0.2331,0.0617,0.0602,0.4151,0.4703,0.4482,0.4195,0.0959,1.2958,1.4552,1.3665,1.3483,0.2236,0.0643,0.0594,0.6278,0.6599,0.6052,0.6427,0.0982,1.3165,1.4897,1.3942,1.3691,0.225,0.06,0.0585,0.8644,0.8875,0.8499,0.8946,0.094,1.3612,1.5399,1.4476,1.4297,0.2248,0.0616,0.0626,1.0249,1.2578,1.1729,1.175,1.2681,1.4196,1.5895,1.5076,1.505,1.2814,0.06,0.0584,1.28,1.5423,1.4689,1.4849,0.0935,1.5391,1.6798,1.6161,1.6137,0.2328,0.0608,0.0608,0.0596,0.0596,0.0589,0.0597,0.0599,0.059,0.0594,0.0599,0.0587,0.0585,0.0577
84519s,0.0655,0.075,0.063,0.0637,0.064,0.0625,0.0624,0.0652,0.0629,0.0668,0.0631,0.0627,0.0611,0.2857,0.3536,0.2908,0.2556,0.0958,1.2492,1.4426,1.3295,1.3379,0.2331,0.063,0.0611,0.4152,0.4707,0.448,0.4197,0.0958,1.2957,1.4538,1.3666,1.3487,0.2236,0.0642,0.0593,0.628,0.6592,0.6051,0.6431,0.098,1.3169,1.4897,1.3948,1.3693,0.225,0.06,0.0582,0.8645,0.8878,0.8503,0.8949,0.094,1.3608,1.5394,1.448,1.4298,0.225,0.0616,0.0625,1.0255,1.2579,1.1729,1.175,1.2685,1.4187,1.5882,1.5069,1.5053,1.3019,0.0606,0.0587,1.2805,1.5411,1.4695,1.4851,0.0935,1.5385,1.6798,1.6151,1.6127,0.2327,0.0607,0.0607,0.0598,0.0595,0.0588,0.0596,0.06,0.0591,0.0592,0.0602,0.0587,0.0585,0.0569
85159s,0.0647,0.075,0.0629,0.0635,0.0642,0.0625,0.0627,0.065,0.0628,0.0666,0.0627,0.0624,0.0611,0.2861,0.354,0.2915,0.2563,0.0958,1.249,1.4417,1.3309,1.338,0.2332,0.0638,0.0622,0.4152,0.4702,0.448,0.4198,0.0958,1.296,1.4541,1.3673,1.3491,0.2238,0.0644,0.059,0.628,0.66,0.605,0.643,0.0982,1.3166,1.4893,1.3947,1.3691,0.2253,0.0637,0.0589,0.8653,0.888,0.8503,0.8948,0.0941,1.3611,1.5408,1.4484,1.4305,0.2252,0.0614,0.0627,1.0259,1.2581,1.1737,1.175,1.2686,1.4191,1.5891,1.5077,1.5053,1.3231,0.0609,0.0583,1.2809,1.5417,1.4704,1.4855,0.0937,1.5385,1.6788,1.6149,1.6131,0.233,0.0606,0.0609,0.06,0.0595,0.059,0.0597,0.06,0.0592,0.0593,0.0597,0.0586,0.0585,0.058
85799s,0.0655,0.0671,0.0632,0.0638,0.0641,0.0629,0.0625,0.0653,0.0631,0.0667,0.063,0.0627,0.061,0.2862,0.3541,0.2914,0.2565,0.0959,1.2495,1.4424,1.3307,1.3389,0.233,0.0592,0.061,0.4148,0.4694,0.4481,0.4195,0.0958,1.2963,1.4548,1.3669,1.349,0.2238,0.0642,0.0592,0.6278,0.6598,0.6047,0.6435,0.0981,1.3169,1.489,1.395,1.3695,0.2253,0.0612,0.0597,0.8651,0.888,0.8498,0.895,0.094,1.3606,1.5396,1.448,1.4295,0.2252,0.0616,0.0625,1.026,1.2581,1.1742,1.1753,1.2687,1.4182,1.5893,1.5073,1.5055,1.3417,0.0608,0.0581,1.2814,1.5418,1.4701,1.4863,0.0938,1.5394,1.6789,1.6147,1.6138,0.2332,0.0605,0.0608,0.0598,0.0595,0.059,0.0595,0.0598,0.0591,0.0593,0.0643,0.0586,0.0585,0.0576
Date of measurement: 2010-02-24/Time of measurement: 13:30:10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
YeastOD595growth30degreesMultireadNoshake_HTMPSversion.mth,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
C:\Users\Public\Documents\Tecan\Magellan\mth\YeastOD595growth30degreesMultireadNoshake_HTMPSversion.mth,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
24022010-SG_Glctests_YPD-AFEXNo1.wsp,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
C:\Users\Public\Documents\Tecan\Magellan\wsp\24022010-SG_Glctests_YPD-AFEXNo1.wsp,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
595nm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Unknown user,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
infinite 500,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Instrument serial number: ##########,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Plate,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Plate Description: [NUN96ft] - Nunclon 96 Flat Transparent,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Plate with Cover: Yes,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Barcode: No,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Temperature,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Mode: On,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Temperature: 30.0 ᄀC,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Shaking,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Duration: 10 sec,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Mode: Linear,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Amplitude: 2 mm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Frequency: 70.8 rpm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Kinetic Cycle,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Duration: 23:59:59,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Absorbance,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Measurement wavelength: 595 nm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Measurement bandwidth: 10 nm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Number of reads: 10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Settle time: 0 ms,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Label: Label1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Incubation,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Total kinetic run time: 23h 49min 59s ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1 Well positions
2 Raw data
3 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 G1 G2 G3 G4 G5 G6 G7 G8 G9 G10 G11 G12 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12
4 Blank 0.0623 0.0626 0.0596 0.0602 0.061 0.0598 0.0604 0.0623 0.062 0.0648 0.0601 0.0602 0.0583 0.093 0.0934 0.0929 0.0927 0.093 0.2159 0.2214 0.2249 0.224 0.223 0.0617 0.0604 0.0921 0.0926 0.0943 0.0937 0.094 0.2207 0.22 0.2199 0.2191 0.2133 0.0623 0.0569 0.0932 0.0965 0.0943 0.094 0.0971 0.2214 0.2256 0.2236 0.2196 0.2163 0.0589 0.0583 0.0927 0.0924 0.0941 0.0935 0.0929 0.2204 0.2211 0.2209 0.2197 0.2142 0.0606 0.0601 0.0921 0.0919 0.0958 0.0925 0.0933 0.2211 0.2246 0.2202 0.22 0.212 0.0588 0.0575 0.0923 0.0923 0.0942 0.0973 0.0921 0.2217 0.2218 0.221 0.2195 0.2198 0.059 0.0586 0.058 0.0577 0.0576 0.0581 0.0585 0.0582 0.0582 0.0585 0.0577 0.0577 0.0572
5 0s 0.0631 0.0633 0.0607 0.0613 0.0623 0.0612 0.0617 0.0636 0.063 0.0657 0.0607 0.0612 0.0592 0.2053 0.2676 0.2104 0.1872 0.0926 0.2631 0.3007 0.2867 0.2736 0.2197 0.0622 0.0606 0.1578 0.1811 0.1762 0.156 0.0939 0.2681 0.2907 0.2769 0.2603 0.212 0.0634 0.0581 0.1686 0.1948 0.1673 0.1432 0.0963 0.26 0.2915 0.2799 0.2631 0.2127 0.061 0.0585 0.1601 0.1703 0.1704 0.162 0.0919 0.2608 0.2906 0.2729 0.26 0.213 0.0617 0.0608 0.1734 0.1982 0.1829 0.1778 0.0927 0.2591 0.2884 0.2715 0.2627 0.2106 0.0591 0.0581 0.1656 0.2065 0.1829 0.1707 0.0913 0.2637 0.2925 0.2752 0.2741 0.2186 0.06 0.0593 0.0585 0.0587 0.0584 0.0589 0.0595 0.0592 0.0592 0.0596 0.0586 0.0584 0.0577
6 640s 0.0642 0.0645 0.0612 0.0616 0.0624 0.0613 0.063 0.0639 0.0632 0.0659 0.0608 0.0616 0.059 0.2046 0.2813 0.2226 0.1947 0.0927 0.2767 0.3375 0.3023 0.2892 0.2194 0.0627 0.0604 0.1712 0.2078 0.1926 0.1708 0.0938 0.2808 0.3185 0.2881 0.2706 0.2117 0.0636 0.0579 0.1824 0.224 0.1858 0.1559 0.0961 0.2702 0.319 0.2898 0.2711 0.2128 0.0592 0.0587 0.1709 0.2068 0.1943 0.1793 0.0917 0.2713 0.3203 0.2858 0.2682 0.2129 0.0613 0.0608 0.1832 0.2254 0.1973 0.1904 0.0927 0.2671 0.3156 0.2802 0.2709 0.2104 0.0593 0.0588 0.178 0.2312 0.1937 0.184 0.0915 0.2695 0.3126 0.2787 0.2706 0.2183 0.06 0.0594 0.0587 0.0591 0.0586 0.0591 0.0597 0.0591 0.0593 0.0598 0.0589 0.0585 0.0573
7 1280s 0.0641 0.0635 0.0612 0.0616 0.0624 0.0613 0.0619 0.0638 0.0631 0.0659 0.0613 0.0617 0.0592 0.2043 0.2854 0.2256 0.1985 0.0925 0.283 0.3447 0.3134 0.3022 0.2194 0.0594 0.0602 0.1707 0.2156 0.1999 0.1751 0.0938 0.2866 0.3256 0.2996 0.2818 0.2119 0.0637 0.0579 0.1862 0.2311 0.1961 0.1602 0.0959 0.2767 0.3247 0.3 0.2817 0.2126 0.0602 0.0586 0.1735 0.2129 0.2028 0.1844 0.092 0.2791 0.328 0.2994 0.2788 0.2129 0.0614 0.061 0.1866 0.2379 0.2086 0.1986 0.0927 0.2734 0.3239 0.2896 0.2806 0.2105 0.0592 0.0585 0.1842 0.2422 0.2047 0.1951 0.0915 0.274 0.3176 0.2859 0.277 0.2186 0.0602 0.0596 0.0589 0.0589 0.0586 0.0593 0.0599 0.0592 0.0594 0.0598 0.059 0.0585 0.0577
8 1921s 0.0646 0.0642 0.0613 0.062 0.0626 0.0614 0.0621 0.064 0.0634 0.0661 0.0615 0.0619 0.0592 0.2054 0.2872 0.2262 0.1994 0.0927 0.2846 0.3478 0.3224 0.3119 0.2197 0.0585 0.0599 0.1681 0.2164 0.2006 0.1736 0.0937 0.2875 0.3279 0.3066 0.2894 0.2118 0.0636 0.0579 0.1898 0.2348 0.1991 0.1629 0.096 0.2801 0.3264 0.3091 0.29 0.2125 0.0595 0.0588 0.1772 0.2149 0.2047 0.1855 0.0918 0.2822 0.3287 0.3075 0.2856 0.213 0.0615 0.0611 0.1875 0.2419 0.2129 0.2033 0.0925 0.2772 0.3252 0.2981 0.2885 0.2106 0.0591 0.0584 0.1874 0.2472 0.2141 0.1983 0.0914 0.2771 0.3178 0.2926 0.2837 0.2209 0.0602 0.0597 0.059 0.0593 0.0589 0.0594 0.06 0.0594 0.0594 0.0601 0.0589 0.0587 0.0575
9 2561s 0.0641 0.0637 0.0609 0.0616 0.0626 0.0612 0.0619 0.0639 0.0631 0.0657 0.0619 0.0618 0.0592 0.2061 0.2873 0.2247 0.1979 0.0925 0.2858 0.352 0.3305 0.3176 0.2197 0.0601 0.0597 0.1658 0.2185 0.2016 0.1748 0.0938 0.2888 0.331 0.3153 0.2951 0.212 0.0637 0.0581 0.1916 0.2381 0.1997 0.1644 0.0962 0.2818 0.3296 0.3175 0.2959 0.2127 0.0608 0.0581 0.1805 0.2172 0.2046 0.1876 0.0918 0.2846 0.3317 0.3173 0.2911 0.2131 0.0615 0.061 0.1868 0.2421 0.2198 0.2071 0.0926 0.2796 0.3284 0.3055 0.2955 0.2107 0.0593 0.0585 0.1914 0.2444 0.2191 0.2043 0.0915 0.2788 0.3184 0.2996 0.2917 0.2189 0.0603 0.06 0.0591 0.059 0.0588 0.0594 0.06 0.0595 0.0597 0.0601 0.0592 0.059 0.0573
10 3201s 0.064 0.0675 0.061 0.0619 0.0627 0.0613 0.0621 0.0639 0.0633 0.0659 0.0623 0.0619 0.0596 0.2072 0.2892 0.2249 0.1965 0.0927 0.2884 0.3553 0.3405 0.3248 0.2199 0.0593 0.0595 0.1664 0.2186 0.204 0.177 0.0937 0.2906 0.3346 0.3246 0.3015 0.2121 0.0638 0.0581 0.1925 0.2384 0.2003 0.17 0.0961 0.2845 0.3347 0.3269 0.302 0.2129 0.0615 0.0588 0.1821 0.2156 0.2047 0.1887 0.092 0.2871 0.3354 0.326 0.2962 0.2132 0.0616 0.0612 0.1884 0.2396 0.2267 0.2061 0.0926 0.2833 0.3328 0.3144 0.3026 0.2109 0.0595 0.0587 0.196 0.2392 0.2231 0.206 0.0914 0.2811 0.3215 0.3075 0.298 0.2191 0.0603 0.0601 0.0592 0.0593 0.0591 0.0596 0.0602 0.0597 0.0598 0.0603 0.0594 0.0593 0.0572
11 3841s 0.0646 0.0719 0.0613 0.0619 0.0627 0.0614 0.0621 0.064 0.0634 0.0658 0.0624 0.0618 0.0592 0.2087 0.2903 0.224 0.1958 0.0925 0.2911 0.3565 0.3501 0.3288 0.2199 0.063 0.0595 0.1693 0.2208 0.2078 0.1793 0.0936 0.2935 0.3375 0.3339 0.3073 0.2121 0.0638 0.0579 0.1943 0.2387 0.2039 0.1718 0.096 0.2888 0.3394 0.3367 0.3075 0.2129 0.0623 0.059 0.1838 0.2143 0.2092 0.1895 0.0918 0.2908 0.3383 0.3356 0.3026 0.2135 0.0617 0.0611 0.1893 0.2368 0.2226 0.1997 0.0925 0.2855 0.3365 0.3227 0.3084 0.2108 0.061 0.0589 0.1997 0.238 0.2296 0.2076 0.0915 0.2845 0.3249 0.3157 0.3037 0.2192 0.0607 0.0602 0.0591 0.0595 0.0591 0.0596 0.0602 0.0596 0.0597 0.0604 0.0595 0.0594 0.0574
12 4482s 0.0645 0.0652 0.0614 0.0623 0.0628 0.0617 0.0624 0.0639 0.0637 0.0657 0.0626 0.0621 0.0595 0.2104 0.2921 0.2249 0.1959 0.0925 0.2937 0.3564 0.3536 0.3303 0.2202 0.0674 0.0625 0.1722 0.2233 0.2134 0.1827 0.0939 0.2966 0.3392 0.3402 0.3089 0.2123 0.0639 0.0584 0.197 0.2382 0.2094 0.1755 0.0959 0.2913 0.3407 0.3438 0.311 0.213 0.0632 0.0585 0.1848 0.2155 0.2138 0.1901 0.0917 0.2939 0.3396 0.3424 0.3069 0.2135 0.0616 0.0614 0.1909 0.2352 0.2293 0.207 0.0926 0.2893 0.3387 0.3313 0.3134 0.211 0.0599 0.0591 0.2022 0.2387 0.2344 0.2078 0.0914 0.2878 0.3274 0.3231 0.3095 0.2194 0.0609 0.0609 0.0593 0.0596 0.0591 0.0597 0.0603 0.06 0.0602 0.0604 0.0597 0.0597 0.0581
13 5122s 0.0642 0.0647 0.0613 0.062 0.0628 0.0615 0.0624 0.064 0.0635 0.0657 0.0627 0.0619 0.0596 0.2111 0.2933 0.2267 0.1965 0.0926 0.2977 0.3589 0.356 0.3284 0.2202 0.0633 0.0603 0.1741 0.2251 0.2186 0.1866 0.0937 0.3002 0.3402 0.3474 0.309 0.2124 0.0643 0.0582 0.1994 0.2393 0.2152 0.178 0.096 0.2951 0.3427 0.349 0.313 0.2131 0.0631 0.058 0.1875 0.2173 0.2188 0.1939 0.0918 0.2975 0.3412 0.347 0.3099 0.2136 0.0617 0.0613 0.1907 0.2369 0.2376 0.2155 0.0926 0.2929 0.3401 0.3376 0.3146 0.2111 0.0596 0.0592 0.2025 0.2358 0.2361 0.2144 0.0912 0.2906 0.3294 0.3304 0.3131 0.2195 0.0608 0.0609 0.0596 0.0598 0.0595 0.0599 0.0605 0.0601 0.0602 0.0606 0.0597 0.0597 0.0593
14 5762s 0.0647 0.065 0.062 0.0626 0.0637 0.0624 0.0626 0.0646 0.064 0.0661 0.0631 0.0627 0.0598 0.2125 0.2945 0.2275 0.197 0.0927 0.3008 0.3591 0.3601 0.3354 0.2206 0.0642 0.0603 0.1758 0.2266 0.2248 0.1905 0.0938 0.3038 0.3415 0.346 0.3099 0.2127 0.064 0.0586 0.2003 0.2386 0.22 0.1823 0.0961 0.2993 0.3456 0.3524 0.3137 0.2134 0.0644 0.0597 0.1894 0.2179 0.2271 0.2016 0.092 0.3019 0.3443 0.3467 0.3105 0.2139 0.0621 0.0617 0.1913 0.2378 0.2474 0.2263 0.0928 0.2963 0.341 0.3417 0.3145 0.2114 0.0616 0.0596 0.2013 0.2385 0.2492 0.226 0.0914 0.2939 0.3309 0.334 0.313 0.2198 0.0609 0.0613 0.0597 0.0599 0.0596 0.06 0.0608 0.0605 0.0605 0.0606 0.0599 0.0598 0.0583
15 6402s 0.0648 0.0653 0.062 0.0629 0.0636 0.0621 0.0626 0.0646 0.0638 0.0661 0.0634 0.0624 0.0599 0.2144 0.2956 0.2287 0.1975 0.0927 0.304 0.3623 0.3598 0.3338 0.2208 0.0663 0.0605 0.1787 0.2278 0.2308 0.1966 0.0938 0.3072 0.3422 0.3517 0.313 0.2129 0.0642 0.0585 0.2006 0.2401 0.2276 0.1889 0.0961 0.3032 0.3464 0.3536 0.3175 0.2137 0.0633 0.06 0.191 0.2193 0.2344 0.21 0.0919 0.3051 0.3477 0.3559 0.3134 0.2141 0.062 0.0617 0.1916 0.2408 0.2573 0.2357 0.0928 0.2996 0.3432 0.3403 0.3162 0.2116 0.0596 0.0586 0.2006 0.2437 0.259 0.2343 0.0916 0.2976 0.3319 0.3411 0.3201 0.22 0.061 0.0615 0.0598 0.0603 0.0597 0.0602 0.0609 0.0605 0.0607 0.0608 0.0599 0.06 0.0584
16 7042s 0.0644 0.0725 0.062 0.0626 0.0634 0.062 0.0629 0.0646 0.0641 0.0663 0.0634 0.0626 0.0601 0.2148 0.2964 0.2294 0.198 0.0926 0.3064 0.3678 0.3629 0.3452 0.2209 0.0608 0.0611 0.1808 0.2306 0.2406 0.2049 0.0937 0.3099 0.3463 0.3558 0.3177 0.213 0.0644 0.0584 0.2003 0.2409 0.236 0.1974 0.0962 0.3057 0.3492 0.363 0.3245 0.2138 0.0634 0.0593 0.1928 0.2212 0.2429 0.2221 0.0919 0.3069 0.3503 0.3638 0.3179 0.2142 0.0621 0.0615 0.1921 0.2458 0.2687 0.2486 0.0929 0.3022 0.3442 0.3477 0.3211 0.2118 0.0597 0.0595 0.2033 0.2513 0.2708 0.2464 0.0914 0.2999 0.3333 0.3377 0.3206 0.2202 0.0612 0.0615 0.0598 0.0602 0.0598 0.0604 0.0609 0.0605 0.0607 0.061 0.0599 0.0601 0.0577
17 7683s 0.0641 0.0651 0.0621 0.0629 0.0639 0.0622 0.0631 0.0648 0.0641 0.0663 0.0636 0.0627 0.0602 0.2158 0.299 0.2315 0.1992 0.0926 0.3084 0.3703 0.3751 0.3562 0.221 0.0695 0.0609 0.1839 0.2345 0.2531 0.2144 0.0939 0.3131 0.3495 0.3632 0.3282 0.2131 0.0643 0.0587 0.2022 0.2437 0.2468 0.2077 0.096 0.3079 0.3549 0.3655 0.3326 0.2139 0.0629 0.06 0.1958 0.2241 0.2525 0.234 0.092 0.3091 0.3563 0.3642 0.3239 0.2143 0.0624 0.0618 0.194 0.253 0.2812 0.264 0.0929 0.305 0.3497 0.3563 0.3284 0.2118 0.059 0.0595 0.2069 0.2594 0.2835 0.262 0.0915 0.303 0.3352 0.3467 0.3267 0.2203 0.0612 0.0616 0.0601 0.0604 0.0599 0.0606 0.0613 0.0606 0.0608 0.0608 0.0598 0.0602 0.0573
18 8323s 0.0642 0.066 0.0623 0.0632 0.0643 0.0626 0.0633 0.0648 0.0642 0.0664 0.0636 0.0632 0.0601 0.217 0.3001 0.2325 0.2002 0.0926 0.3092 0.3826 0.3836 0.3687 0.2214 0.0676 0.061 0.1866 0.2378 0.2653 0.2271 0.0938 0.314 0.3578 0.3722 0.3404 0.2133 0.0643 0.0587 0.2045 0.2484 0.2591 0.2192 0.0962 0.3104 0.3586 0.3775 0.343 0.2141 0.0642 0.0595 0.1987 0.2297 0.2664 0.248 0.092 0.3116 0.3596 0.3799 0.3339 0.2145 0.0625 0.0617 0.198 0.2616 0.2964 0.2809 0.0929 0.3066 0.3542 0.3624 0.3389 0.2119 0.0603 0.0593 0.211 0.2699 0.2979 0.2782 0.0914 0.3045 0.3387 0.3523 0.3327 0.2205 0.0613 0.0617 0.0603 0.0604 0.0602 0.0607 0.0613 0.0609 0.061 0.0609 0.0599 0.0604 0.0574
19 8963s 0.0645 0.0662 0.0625 0.0631 0.0641 0.0623 0.0636 0.0649 0.0642 0.0665 0.0639 0.0633 0.0601 0.2179 0.3024 0.2343 0.2014 0.0928 0.3081 0.3918 0.3935 0.3828 0.2215 0.0647 0.0605 0.1905 0.2424 0.28 0.241 0.094 0.3123 0.3653 0.3817 0.3507 0.2134 0.0645 0.0587 0.2086 0.2565 0.2735 0.2333 0.0963 0.3113 0.3692 0.389 0.3533 0.2144 0.0641 0.0597 0.2029 0.2369 0.2825 0.2654 0.092 0.3125 0.3695 0.3878 0.3454 0.2147 0.0624 0.062 0.2031 0.2725 0.3135 0.2988 0.093 0.308 0.3607 0.3694 0.3496 0.2122 0.0591 0.0599 0.2161 0.2805 0.3141 0.295 0.0914 0.3062 0.3427 0.3597 0.3436 0.2207 0.0614 0.0614 0.0605 0.0607 0.0603 0.061 0.0617 0.0609 0.0611 0.061 0.0601 0.0604 0.0572
20 9603s 0.0643 0.0662 0.0626 0.0634 0.0644 0.0626 0.0638 0.0652 0.0642 0.0664 0.0638 0.0637 0.0602 0.2184 0.3032 0.2349 0.203 0.0925 0.3103 0.4032 0.4061 0.397 0.2215 0.0617 0.0638 0.194 0.2486 0.2953 0.2556 0.0937 0.3154 0.3751 0.3938 0.3626 0.2134 0.0644 0.0588 0.2138 0.2637 0.289 0.2463 0.0962 0.3124 0.3783 0.4018 0.3664 0.2143 0.0634 0.0583 0.2077 0.2444 0.2988 0.2826 0.0918 0.3133 0.3797 0.4004 0.3566 0.2145 0.0623 0.0621 0.2093 0.2854 0.3322 0.3181 0.0929 0.3108 0.3705 0.3822 0.3617 0.2121 0.0619 0.06 0.2219 0.2929 0.3323 0.3135 0.0913 0.3093 0.3491 0.3696 0.3549 0.2206 0.0613 0.061 0.0604 0.0609 0.0603 0.0611 0.0618 0.061 0.0611 0.0618 0.0599 0.0604 0.0574
21 10243s 0.0641 0.0678 0.0628 0.0635 0.0647 0.0631 0.0639 0.0653 0.0645 0.0669 0.0639 0.0642 0.0604 0.2194 0.3046 0.2363 0.2033 0.0926 0.3189 0.4149 0.4203 0.4126 0.2217 0.0636 0.0611 0.1987 0.2548 0.3093 0.2699 0.0941 0.3231 0.3855 0.4072 0.3758 0.2137 0.0648 0.059 0.2196 0.2736 0.3055 0.2617 0.0963 0.3176 0.3879 0.4159 0.3804 0.2147 0.0647 0.0603 0.2139 0.255 0.3182 0.3013 0.092 0.3159 0.3898 0.4149 0.3699 0.215 0.0626 0.0624 0.2169 0.2989 0.3533 0.3381 0.093 0.313 0.3812 0.395 0.3752 0.2124 0.0595 0.0592 0.2297 0.3094 0.3526 0.3318 0.0915 0.3091 0.3578 0.3798 0.3682 0.2224 0.0615 0.0611 0.0606 0.0609 0.0606 0.0613 0.0618 0.061 0.0616 0.0612 0.0602 0.0606 0.0577
22 10884s 0.064 0.0726 0.0632 0.064 0.0652 0.0633 0.0642 0.0655 0.0644 0.0673 0.064 0.0645 0.0605 0.22 0.3059 0.2377 0.2044 0.0927 0.3255 0.4272 0.4384 0.4296 0.222 0.0656 0.0609 0.2042 0.263 0.3224 0.2838 0.0941 0.3294 0.397 0.4226 0.3896 0.2139 0.0647 0.0592 0.2266 0.2837 0.3236 0.2773 0.0962 0.3219 0.3997 0.4314 0.3927 0.2147 0.0667 0.0608 0.2226 0.2662 0.3363 0.3199 0.0919 0.321 0.4017 0.4304 0.3826 0.215 0.0629 0.0623 0.225 0.3127 0.3741 0.3603 0.0932 0.3173 0.3908 0.4074 0.3881 0.2126 0.0602 0.0604 0.2374 0.3241 0.3736 0.3522 0.0914 0.3117 0.3678 0.3931 0.3784 0.221 0.0617 0.061 0.0609 0.0608 0.0607 0.0614 0.0591 0.0612 0.0615 0.0615 0.0604 0.0607 0.0574
23 11527s 0.0646 0.067 0.0632 0.0642 0.0651 0.0633 0.0641 0.0655 0.0644 0.0672 0.0638 0.0644 0.0606 0.2209 0.3074 0.239 0.2056 0.0927 0.3338 0.4412 0.4551 0.4463 0.2219 0.0638 0.0613 0.2097 0.2727 0.335 0.2954 0.0939 0.3363 0.4079 0.4392 0.4064 0.214 0.0649 0.0593 0.2343 0.2965 0.3437 0.2949 0.0962 0.3271 0.412 0.4468 0.4097 0.2147 0.0635 0.0588 0.2302 0.2779 0.3572 0.3426 0.092 0.3261 0.4135 0.4471 0.3975 0.2151 0.0628 0.0626 0.2334 0.3288 0.3958 0.3845 0.0931 0.3215 0.4017 0.425 0.4032 0.2126 0.0603 0.0593 0.2455 0.3409 0.3956 0.3748 0.0913 0.317 0.378 0.4058 0.3924 0.2211 0.0617 0.061 0.0611 0.0611 0.0607 0.0614 0.0621 0.0613 0.0616 0.0669 0.0603 0.0607 0.0578
24 12167s 0.0647 0.0672 0.0632 0.0638 0.065 0.0631 0.0647 0.0657 0.0643 0.0671 0.0635 0.0639 0.0607 0.2212 0.308 0.2398 0.2063 0.0926 0.3411 0.455 0.4721 0.466 0.2222 0.0667 0.0612 0.2161 0.2835 0.3466 0.3068 0.0938 0.3431 0.422 0.4568 0.4223 0.2141 0.0648 0.0594 0.2415 0.3098 0.3647 0.3136 0.0965 0.3326 0.4245 0.4643 0.4269 0.2149 0.0634 0.0589 0.2364 0.2914 0.3782 0.363 0.092 0.3302 0.4254 0.4633 0.4129 0.2151 0.0627 0.0627 0.2422 0.3459 0.42 0.4084 0.0931 0.3269 0.4147 0.4396 0.4188 0.2127 0.06 0.06 0.2545 0.359 0.4181 0.4007 0.0913 0.3202 0.3872 0.4198 0.4049 0.2212 0.062 0.0606 0.061 0.0607 0.0608 0.0614 0.0622 0.0614 0.0618 0.0659 0.0602 0.0607 0.0577
25 12807s 0.0649 0.0674 0.0629 0.0643 0.0654 0.0635 0.0642 0.0662 0.0647 0.0671 0.0636 0.0641 0.0606 0.2219 0.3102 0.2416 0.2078 0.0928 0.3485 0.4704 0.4894 0.4872 0.2223 0.0677 0.0605 0.2236 0.2968 0.3581 0.317 0.0939 0.3501 0.4348 0.475 0.4427 0.2144 0.0647 0.0594 0.25 0.3242 0.3882 0.333 0.0962 0.339 0.4384 0.4825 0.4448 0.215 0.0653 0.0592 0.2442 0.3071 0.4019 0.3872 0.0918 0.3362 0.4395 0.4823 0.4305 0.2154 0.0628 0.0626 0.2524 0.3651 0.4448 0.4349 0.0933 0.3331 0.4273 0.4569 0.4364 0.2128 0.0594 0.0602 0.2647 0.3788 0.4432 0.4255 0.0914 0.3245 0.3987 0.4352 0.4217 0.2213 0.0621 0.0607 0.0612 0.061 0.061 0.0616 0.0623 0.0614 0.0617 0.0617 0.0604 0.0607 0.0571
26 13447s 0.0648 0.0672 0.0638 0.0644 0.0655 0.0638 0.0644 0.066 0.0645 0.0674 0.0635 0.063 0.0608 0.2229 0.3111 0.2427 0.2089 0.0927 0.3565 0.4867 0.5093 0.5086 0.2223 0.0665 0.0614 0.2317 0.311 0.3676 0.3263 0.094 0.3588 0.4497 0.4939 0.4629 0.2143 0.0647 0.0595 0.26 0.3422 0.4117 0.3547 0.0963 0.346 0.4523 0.502 0.463 0.2153 0.0648 0.0607 0.2535 0.3246 0.4273 0.413 0.092 0.3429 0.4537 0.5019 0.4513 0.2155 0.063 0.0626 0.2643 0.3855 0.4717 0.4593 0.0933 0.3392 0.4401 0.4744 0.4546 0.213 0.0611 0.0604 0.2743 0.4006 0.4687 0.4499 0.0916 0.3292 0.4096 0.4506 0.4377 0.2214 0.0623 0.0606 0.0614 0.0609 0.061 0.0615 0.0622 0.0616 0.0617 0.0612 0.0605 0.0606 0.0571
27 14088s 0.065 0.0675 0.0638 0.0646 0.0651 0.0634 0.0644 0.066 0.0646 0.0674 0.0636 0.0626 0.0613 0.2236 0.3125 0.2442 0.2102 0.0927 0.3651 0.5037 0.5321 0.5319 0.2227 0.0721 0.0615 0.2407 0.3224 0.3741 0.3337 0.094 0.3677 0.466 0.514 0.4856 0.2145 0.0648 0.0596 0.2697 0.3587 0.435 0.3758 0.0963 0.3538 0.4676 0.5225 0.483 0.2154 0.0647 0.0614 0.2634 0.3419 0.4559 0.4401 0.0921 0.3498 0.4702 0.5226 0.4716 0.2156 0.063 0.0632 0.277 0.4085 0.4989 0.4868 0.0935 0.3463 0.4555 0.4936 0.4764 0.2132 0.0591 0.0581 0.2849 0.4223 0.4941 0.4779 0.0914 0.3358 0.4218 0.4669 0.4579 0.2216 0.0625 0.0607 0.0613 0.0606 0.0612 0.0616 0.0625 0.0616 0.0618 0.0612 0.0606 0.0608 0.0586
28 14728s 0.0653 0.0677 0.0635 0.0646 0.0654 0.064 0.0644 0.0661 0.0645 0.0674 0.0633 0.0624 0.0609 0.2243 0.3134 0.2456 0.2111 0.0928 0.3747 0.5219 0.5554 0.5582 0.2226 0.0645 0.0616 0.2504 0.3352 0.3795 0.3403 0.094 0.3762 0.4825 0.5363 0.5077 0.2146 0.0649 0.0596 0.2798 0.3757 0.4559 0.3987 0.0963 0.3612 0.4844 0.545 0.5045 0.2154 0.0654 0.0611 0.2729 0.3611 0.4824 0.465 0.092 0.3573 0.4862 0.5453 0.4922 0.2157 0.0632 0.0627 0.2897 0.4313 0.5289 0.5125 0.0936 0.3534 0.4704 0.5146 0.4983 0.2131 0.0601 0.0594 0.2968 0.4485 0.5221 0.5008 0.0914 0.3419 0.4349 0.4855 0.4771 0.2217 0.0625 0.0607 0.0616 0.0607 0.0613 0.0617 0.0626 0.0617 0.0617 0.0612 0.0607 0.0606 0.0574
29 15368s 0.0653 0.0679 0.0637 0.0647 0.0656 0.064 0.0647 0.066 0.0649 0.0678 0.0634 0.0623 0.0613 0.2255 0.3147 0.2463 0.2118 0.0927 0.3852 0.5413 0.5801 0.5828 0.2228 0.0716 0.0616 0.2604 0.349 0.384 0.3453 0.0939 0.3879 0.5003 0.5608 0.5285 0.2147 0.065 0.0595 0.2903 0.3965 0.4774 0.4215 0.0964 0.3697 0.5022 0.5693 0.5269 0.2155 0.0646 0.0581 0.2842 0.3816 0.5117 0.4916 0.0921 0.3649 0.505 0.5702 0.5136 0.2159 0.063 0.063 0.3044 0.4566 0.5571 0.5424 0.0938 0.3607 0.4872 0.5373 0.52 0.2134 0.0597 0.0615 0.309 0.4738 0.5497 0.5273 0.0913 0.3489 0.4483 0.5062 0.499 0.2218 0.0625 0.0607 0.0615 0.0608 0.0612 0.0617 0.0625 0.0618 0.0619 0.0611 0.0605 0.0606 0.0584
30 16008s 0.065 0.0678 0.0637 0.0648 0.0656 0.064 0.0645 0.0663 0.0648 0.0679 0.0634 0.0624 0.0613 0.2265 0.3152 0.2472 0.2129 0.0929 0.3954 0.5624 0.6067 0.608 0.2229 0.0815 0.0688 0.271 0.3602 0.3883 0.3503 0.094 0.3984 0.5191 0.5861 0.553 0.2149 0.0653 0.0595 0.3021 0.418 0.4944 0.4447 0.0963 0.3793 0.5219 0.5947 0.5516 0.2157 0.0676 0.0583 0.2965 0.4028 0.5401 0.5197 0.0921 0.3722 0.5232 0.5949 0.538 0.2159 0.0635 0.063 0.3194 0.4841 0.5865 0.5702 0.0941 0.3684 0.5046 0.5603 0.5448 0.2134 0.0597 0.0611 0.3218 0.5007 0.5759 0.5544 0.0915 0.3556 0.4644 0.526 0.5186 0.222 0.0623 0.0605 0.0616 0.0605 0.0613 0.0618 0.0625 0.062 0.0619 0.0613 0.0602 0.0604 0.0573
31 16648s 0.0652 0.0679 0.0639 0.0649 0.0656 0.064 0.0647 0.0663 0.0656 0.0678 0.0629 0.0623 0.0615 0.2273 0.3161 0.2477 0.2136 0.0928 0.4074 0.5834 0.6335 0.6326 0.223 0.0697 0.0622 0.2812 0.3701 0.3914 0.3549 0.0939 0.4094 0.5386 0.6126 0.5759 0.2149 0.0651 0.0597 0.315 0.4398 0.5087 0.4685 0.0962 0.3884 0.5406 0.6196 0.5732 0.2157 0.0654 0.0587 0.3098 0.4258 0.569 0.5508 0.092 0.3817 0.5433 0.621 0.5603 0.2159 0.0633 0.0631 0.335 0.5122 0.6176 0.6015 0.0942 0.3776 0.5241 0.5862 0.5677 0.2135 0.0626 0.059 0.3353 0.5264 0.6041 0.5835 0.0911 0.3623 0.4801 0.5486 0.5437 0.2243 0.0624 0.0607 0.0613 0.0605 0.0611 0.0618 0.0626 0.0621 0.0618 0.0611 0.06 0.0603 0.057
32 17289s 0.0648 0.068 0.064 0.0648 0.0653 0.0638 0.0647 0.0667 0.0649 0.0679 0.063 0.0624 0.0614 0.2289 0.3173 0.2495 0.2147 0.0928 0.4183 0.6063 0.6581 0.6616 0.2231 0.0682 0.0605 0.2925 0.3806 0.3955 0.3587 0.094 0.4211 0.5593 0.6392 0.6037 0.2151 0.0651 0.0596 0.3292 0.4638 0.5221 0.4905 0.0964 0.3983 0.5619 0.6479 0.5999 0.2159 0.0687 0.0594 0.3245 0.4521 0.601 0.5809 0.0921 0.3907 0.5647 0.6494 0.5876 0.2163 0.0635 0.0629 0.3529 0.5418 0.647 0.6353 0.0944 0.3849 0.5434 0.6119 0.5927 0.2137 0.0639 0.0594 0.351 0.5558 0.6331 0.6131 0.0914 0.3695 0.4972 0.5715 0.5664 0.2221 0.062 0.0609 0.0614 0.0608 0.0612 0.0621 0.0627 0.0614 0.062 0.0612 0.0601 0.0605 0.0575
33 17929s 0.0652 0.0679 0.0634 0.0648 0.066 0.0637 0.0647 0.0668 0.0652 0.0682 0.0629 0.0625 0.0615 0.2299 0.3184 0.2505 0.2157 0.0929 0.431 0.6301 0.6892 0.6922 0.2233 0.0735 0.0618 0.3024 0.3883 0.3981 0.3614 0.0941 0.4334 0.5801 0.6689 0.6295 0.2152 0.0653 0.0598 0.3429 0.4884 0.5357 0.5079 0.0964 0.4084 0.5844 0.6746 0.6266 0.216 0.0685 0.0613 0.3388 0.478 0.6326 0.6143 0.0922 0.3995 0.5868 0.6765 0.6145 0.2164 0.0634 0.0632 0.3715 0.5706 0.6775 0.6692 0.0949 0.3954 0.5633 0.6363 0.6197 0.2139 0.06 0.0614 0.3665 0.5854 0.6622 0.6448 0.0915 0.3776 0.514 0.5947 0.593 0.2222 0.0621 0.0608 0.0611 0.0607 0.0612 0.062 0.0627 0.0614 0.0616 0.0612 0.0599 0.0604 0.0568
34 18569s 0.0649 0.07 0.0637 0.0647 0.0657 0.0633 0.0648 0.0665 0.0649 0.0677 0.0625 0.0624 0.0614 0.2309 0.3192 0.2512 0.2167 0.0927 0.4433 0.655 0.7205 0.7223 0.2232 0.0673 0.0604 0.312 0.3954 0.4005 0.3644 0.094 0.446 0.6043 0.6984 0.6598 0.2153 0.0652 0.0596 0.3572 0.5109 0.5439 0.5218 0.0963 0.42 0.6065 0.7044 0.6539 0.2161 0.0672 0.0591 0.3544 0.5041 0.6652 0.6438 0.0921 0.4092 0.6093 0.7052 0.6406 0.2163 0.0635 0.0631 0.3904 0.602 0.71 0.7018 0.095 0.405 0.5844 0.6656 0.6496 0.214 0.06 0.0599 0.3831 0.6162 0.6913 0.6778 0.0914 0.3854 0.5332 0.6216 0.6165 0.2223 0.062 0.0609 0.0611 0.0608 0.0611 0.062 0.0625 0.0614 0.0615 0.0612 0.0597 0.0601 0.0575
35 19209s 0.0652 0.0753 0.0635 0.0646 0.0658 0.0629 0.0646 0.066 0.0648 0.0678 0.0627 0.0622 0.0616 0.2324 0.3201 0.252 0.2177 0.0929 0.4576 0.681 0.7518 0.7562 0.2235 0.065 0.0611 0.3235 0.4017 0.4027 0.367 0.094 0.4606 0.6278 0.7299 0.6907 0.2153 0.0654 0.0599 0.3735 0.5336 0.552 0.5352 0.0963 0.4305 0.6308 0.7344 0.6825 0.2162 0.0712 0.0604 0.3724 0.5328 0.695 0.6735 0.0921 0.4197 0.6341 0.7366 0.6694 0.2166 0.0638 0.0632 0.4107 0.633 0.7431 0.7382 0.0955 0.4161 0.6082 0.6951 0.6789 0.2141 0.0598 0.0605 0.401 0.6475 0.7222 0.7083 0.0913 0.3945 0.5518 0.6458 0.6425 0.2225 0.0625 0.0608 0.061 0.0607 0.0611 0.0621 0.0623 0.0614 0.0614 0.0613 0.0596 0.0597 0.0576
36 19850s 0.0649 0.074 0.0638 0.0648 0.0657 0.0629 0.0644 0.0658 0.0644 0.0675 0.0624 0.062 0.0615 0.2334 0.3211 0.2532 0.2186 0.0928 0.4723 0.708 0.7827 0.7883 0.2235 0.0641 0.0619 0.3312 0.4069 0.4043 0.3705 0.0942 0.4744 0.6531 0.7611 0.7181 0.2156 0.0654 0.06 0.3894 0.5506 0.5573 0.5457 0.0963 0.443 0.655 0.7671 0.7132 0.2163 0.0725 0.0585 0.3897 0.562 0.7207 0.7027 0.0921 0.4308 0.6596 0.7686 0.6962 0.2166 0.0636 0.0634 0.4325 0.6643 0.7755 0.7737 0.096 0.4276 0.6319 0.7256 0.7075 0.2142 0.0594 0.0601 0.4187 0.6784 0.7542 0.744 0.0916 0.4038 0.5717 0.6731 0.6715 0.2226 0.062 0.0607 0.0606 0.0606 0.0611 0.062 0.0624 0.0613 0.0611 0.0613 0.0596 0.0597 0.0574
37 20490s 0.0652 0.0678 0.0637 0.0648 0.0654 0.0629 0.064 0.0656 0.0642 0.0674 0.0621 0.0622 0.0614 0.2344 0.3217 0.2539 0.2193 0.0927 0.4883 0.7361 0.8186 0.8228 0.2235 0.0635 0.062 0.3384 0.411 0.4068 0.3719 0.094 0.4884 0.6789 0.7932 0.7518 0.2157 0.0655 0.0599 0.4072 0.5684 0.5625 0.5542 0.0963 0.456 0.6805 0.7987 0.7434 0.2164 0.0717 0.0586 0.409 0.5916 0.7453 0.7307 0.092 0.4422 0.6862 0.7979 0.7273 0.2167 0.0636 0.0633 0.4533 0.6976 0.8095 0.8108 0.0962 0.4389 0.6564 0.7561 0.739 0.2142 0.0611 0.0592 0.438 0.7105 0.7845 0.7762 0.0916 0.4157 0.5936 0.6997 0.6992 0.2227 0.0624 0.0609 0.0604 0.0604 0.061 0.0617 0.0623 0.0611 0.0611 0.0611 0.0595 0.0597 0.0588
38 21130s 0.0651 0.0727 0.0637 0.0647 0.0654 0.063 0.064 0.0656 0.0643 0.0677 0.0618 0.0624 0.0617 0.2356 0.3229 0.2552 0.2205 0.0928 0.5047 0.7656 0.8502 0.8543 0.2237 0.0764 0.0614 0.3456 0.4153 0.4088 0.3738 0.0941 0.504 0.7071 0.8253 0.7841 0.2157 0.0655 0.06 0.4252 0.5826 0.5646 0.5619 0.0963 0.4691 0.7087 0.8327 0.7764 0.2165 0.0678 0.0586 0.4289 0.62 0.7663 0.7547 0.0922 0.4559 0.7135 0.8329 0.7561 0.2168 0.0641 0.0635 0.4749 0.7316 0.8449 0.8474 0.0967 0.4514 0.6839 0.7874 0.7723 0.2144 0.0605 0.0614 0.4578 0.7446 0.8168 0.8104 0.0914 0.4258 0.6176 0.7294 0.7291 0.2228 0.0623 0.0609 0.0604 0.0603 0.0608 0.0614 0.0621 0.061 0.0609 0.061 0.0595 0.0598 0.0572
39 21770s 0.0654 0.0733 0.0633 0.0647 0.0659 0.0632 0.0636 0.0655 0.0642 0.0678 0.0615 0.0623 0.0613 0.2364 0.3234 0.2557 0.2215 0.0927 0.5207 0.7943 0.8836 0.8884 0.2237 0.0618 0.062 0.3526 0.4188 0.4099 0.3757 0.094 0.5216 0.7332 0.861 0.8168 0.2158 0.0656 0.0601 0.443 0.5934 0.5682 0.568 0.0963 0.4824 0.7375 0.8659 0.8098 0.2167 0.0762 0.0609 0.4501 0.6504 0.783 0.7699 0.0922 0.4679 0.7409 0.8653 0.7894 0.2169 0.0638 0.0636 0.4967 0.7644 0.8803 0.882 0.0975 0.4631 0.7088 0.8186 0.8032 0.2144 0.059 0.0597 0.4769 0.7759 0.8492 0.8458 0.0915 0.4375 0.6402 0.7601 0.7622 0.2228 0.0622 0.0608 0.0601 0.0601 0.0605 0.0612 0.0617 0.0611 0.0605 0.0608 0.0596 0.0597 0.0575
40 22410s 0.0651 0.0709 0.0633 0.0645 0.0651 0.063 0.0635 0.0654 0.064 0.0678 0.0629 0.0624 0.0616 0.2375 0.3239 0.2565 0.222 0.0929 0.5386 0.825 0.9179 0.922 0.2239 0.0711 0.0622 0.3582 0.4208 0.4118 0.3766 0.0943 0.5381 0.7628 0.8935 0.851 0.216 0.0657 0.0602 0.4612 0.6017 0.5709 0.5738 0.0964 0.4984 0.7655 0.8981 0.8415 0.2169 0.0692 0.0584 0.4716 0.6816 0.7938 0.7843 0.0922 0.4813 0.7684 0.8988 0.8204 0.2169 0.0643 0.0637 0.5174 0.7986 0.9157 0.9148 0.0981 0.4766 0.7381 0.8513 0.8354 0.2146 0.061 0.0594 0.4979 0.8096 0.8815 0.8801 0.0915 0.4493 0.6637 0.7913 0.7949 0.2229 0.0622 0.0607 0.06 0.0601 0.0605 0.0611 0.0615 0.0609 0.0604 0.0619 0.0596 0.0594 0.0575
41 23051s 0.0653 0.0677 0.0631 0.0643 0.065 0.0632 0.0637 0.0656 0.0641 0.0675 0.0634 0.0625 0.0615 0.2381 0.3242 0.2571 0.2226 0.0927 0.5575 0.8565 0.9528 0.9536 0.224 0.0719 0.0625 0.364 0.423 0.4126 0.3784 0.094 0.5559 0.7921 0.9282 0.8862 0.2159 0.0658 0.06 0.4783 0.6092 0.573 0.5795 0.0963 0.5135 0.7945 0.9332 0.8769 0.2168 0.0736 0.059 0.4927 0.7103 0.8047 0.7949 0.0921 0.4958 0.8006 0.9319 0.8534 0.2171 0.0642 0.0636 0.5394 0.8319 0.9515 0.9424 0.0987 0.4902 0.7675 0.8842 0.8699 0.2148 0.0661 0.0602 0.5171 0.8442 0.9154 0.914 0.0915 0.4611 0.6897 0.8213 0.8209 0.2229 0.0621 0.0608 0.0602 0.0601 0.0605 0.0609 0.0616 0.0609 0.0603 0.0607 0.0596 0.0596 0.0574
42 23691s 0.0648 0.0676 0.0628 0.0641 0.0647 0.063 0.0638 0.0657 0.0639 0.0672 0.0636 0.0623 0.0616 0.239 0.3251 0.2579 0.2238 0.0927 0.576 0.8876 0.9873 0.9874 0.2239 0.0668 0.0627 0.3685 0.4256 0.4147 0.3797 0.0939 0.5738 0.8215 0.9612 0.9195 0.216 0.0656 0.06 0.4945 0.6154 0.5752 0.5843 0.0964 0.5299 0.8253 0.9654 0.9094 0.2168 0.0704 0.0586 0.5159 0.7373 0.813 0.8056 0.0919 0.5113 0.8304 0.9654 0.8838 0.2172 0.064 0.0637 0.5609 0.8661 0.9866 0.9706 0.0997 0.5052 0.796 0.9166 0.9027 0.2147 0.0663 0.0608 0.5375 0.8775 0.9473 0.9491 0.0916 0.4735 0.7154 0.8516 0.8528 0.2231 0.0629 0.0609 0.0602 0.0599 0.0601 0.0608 0.0615 0.0605 0.0603 0.0611 0.0596 0.0595 0.0575
43 24331s 0.0651 0.068 0.0629 0.0641 0.0647 0.0633 0.0638 0.0654 0.0638 0.0675 0.0634 0.0625 0.0615 0.2404 0.3259 0.259 0.2245 0.0928 0.5955 0.9191 1.0218 1.0187 0.2242 0.0578 0.0605 0.3726 0.4293 0.4165 0.3817 0.094 0.5943 0.853 0.9955 0.954 0.2163 0.0658 0.0601 0.5099 0.6202 0.576 0.588 0.0962 0.5455 0.8576 0.9983 0.9424 0.2171 0.0651 0.061 0.5353 0.7648 0.8192 0.8135 0.0921 0.5263 0.8625 0.9989 0.9208 0.2174 0.064 0.064 0.5805 0.899 1.0165 0.9958 0.101 0.5214 0.8277 0.9497 0.9411 0.2148 0.0609 0.0585 0.557 0.9114 0.9814 0.9836 0.0916 0.4881 0.7419 0.8812 0.8882 0.2232 0.0621 0.0608 0.0602 0.0599 0.0601 0.0607 0.0616 0.0606 0.0605 0.0606 0.0596 0.0597 0.0574
44 24971s 0.0652 0.0715 0.0627 0.0641 0.0644 0.0632 0.0633 0.0654 0.0638 0.0672 0.0638 0.0622 0.0614 0.2411 0.3264 0.2596 0.2251 0.0928 0.6165 0.9512 1.0528 1.0489 0.2243 0.0581 0.0623 0.3759 0.4301 0.418 0.3827 0.0941 0.6135 0.884 1.0279 0.9861 0.2163 0.0658 0.0603 0.522 0.6243 0.5779 0.5913 0.0963 0.5641 0.8875 1.0311 0.9763 0.2172 0.0698 0.0613 0.5581 0.7868 0.8255 0.8207 0.0922 0.5428 0.8942 1.0295 0.954 0.2175 0.0642 0.0639 0.6008 0.9319 1.0455 1.0195 0.1023 0.5355 0.8585 0.983 0.9751 0.2149 0.0606 0.0606 0.5769 0.9442 1.0133 1.0169 0.0917 0.5013 0.771 0.9124 0.9145 0.2233 0.0621 0.061 0.0599 0.0601 0.0599 0.0607 0.0613 0.0606 0.0606 0.0606 0.0598 0.0598 0.0576
45 25612s 0.0651 0.0678 0.0624 0.0638 0.0642 0.0631 0.0633 0.0652 0.0639 0.067 0.0633 0.0622 0.0611 0.2421 0.3269 0.2603 0.2256 0.0929 0.6376 0.9836 1.0848 1.0764 0.2245 0.0611 0.0615 0.3792 0.4336 0.4198 0.3848 0.094 0.6357 0.9161 1.0609 1.0181 0.2164 0.0662 0.0601 0.5339 0.6273 0.5813 0.5949 0.0962 0.5835 0.92 1.0623 1.0096 0.2172 0.0681 0.0608 0.5804 0.8052 0.8292 0.8275 0.0922 0.5593 0.926 1.0613 0.9876 0.2175 0.0643 0.0639 0.6222 0.9653 1.071 1.0373 0.1037 0.5543 0.8888 1.0138 1.0071 0.2152 0.0608 0.0583 0.5958 0.9773 1.0444 1.0519 0.0916 0.5164 0.7988 0.9416 0.9483 0.2234 0.062 0.0607 0.0601 0.0602 0.0599 0.0606 0.0612 0.0607 0.0605 0.0605 0.0597 0.0598 0.0574
46 26252s 0.0658 0.0729 0.0627 0.0641 0.0646 0.0634 0.0635 0.0657 0.064 0.0675 0.0634 0.0626 0.0613 0.2432 0.328 0.2612 0.2266 0.0929 0.66 1.0143 1.1134 1.1002 0.2246 0.0597 0.0608 0.3816 0.4358 0.4207 0.3861 0.0943 0.6557 0.9499 1.0937 1.0503 0.2166 0.0664 0.0603 0.5455 0.6307 0.5818 0.5972 0.0964 0.6019 0.9525 1.0941 1.0403 0.2174 0.0695 0.0589 0.603 0.8213 0.8335 0.8337 0.0923 0.5783 0.9576 1.0941 1.02 0.2177 0.0643 0.064 0.6427 0.9964 1.0923 1.0548 0.1054 0.5716 0.9194 1.0461 1.0376 0.2153 0.0662 0.0594 0.6142 1.0109 1.0773 1.0861 0.0917 0.5331 0.8255 0.9737 0.9845 0.2236 0.062 0.061 0.0602 0.0601 0.0601 0.0607 0.0612 0.0608 0.0608 0.0627 0.0599 0.0597 0.0581
47 26892s 0.0651 0.0677 0.0627 0.0639 0.0642 0.0631 0.0635 0.0657 0.0639 0.0673 0.0636 0.0625 0.0611 0.244 0.3285 0.2619 0.2275 0.093 0.6816 1.0462 1.1418 1.1238 0.2246 0.0595 0.0614 0.3832 0.4367 0.4222 0.3866 0.0942 0.6782 0.9804 1.1229 1.0807 0.2166 0.0666 0.0601 0.555 0.6321 0.5828 0.5992 0.0964 0.6214 0.9841 1.1248 1.0735 0.2174 0.0711 0.0591 0.6225 0.8332 0.8347 0.8384 0.0922 0.5969 0.9901 1.1243 1.0531 0.2178 0.0646 0.0639 0.6638 1.0275 1.1082 1.0677 0.1073 0.5892 0.9516 1.0751 1.0705 0.2154 0.0584 0.059 0.6326 1.0419 1.1089 1.1172 0.0917 0.5475 0.8568 1.0054 1.0142 0.2235 0.0617 0.0608 0.0601 0.0601 0.06 0.0606 0.061 0.0606 0.0608 0.0612 0.0599 0.0597 0.058
48 27532s 0.065 0.0678 0.0628 0.0638 0.0643 0.063 0.0637 0.0658 0.0638 0.067 0.0634 0.0626 0.0612 0.2451 0.3297 0.2631 0.2284 0.093 0.7054 1.0771 1.1678 1.1453 0.2249 0.0587 0.0629 0.3842 0.4374 0.4229 0.3871 0.0943 0.6998 1.0132 1.1508 1.1086 0.2167 0.0664 0.0604 0.563 0.6346 0.5843 0.6019 0.0964 0.642 1.0143 1.1527 1.1015 0.2175 0.0724 0.0591 0.643 0.842 0.8385 0.843 0.0921 0.6154 1.0209 1.1558 1.0856 0.2179 0.0643 0.0641 0.6835 1.0572 1.1225 1.0796 0.11 0.6091 0.9832 1.1067 1.1047 0.2156 0.0599 0.0607 0.652 1.0729 1.1407 1.1471 0.0917 0.5631 0.887 1.0352 1.0414 0.2237 0.0617 0.0609 0.0602 0.0603 0.06 0.0607 0.0612 0.0607 0.0608 0.0611 0.0601 0.0597 0.0579
49 28172s 0.0652 0.068 0.0626 0.0637 0.0643 0.0634 0.0634 0.0657 0.0636 0.0671 0.0633 0.0622 0.0611 0.246 0.3295 0.2631 0.2286 0.093 0.729 1.1082 1.1916 1.1675 0.225 0.0579 0.0627 0.3856 0.439 0.4233 0.3874 0.094 0.7236 1.0433 1.1764 1.1328 0.2167 0.0658 0.0603 0.5703 0.6365 0.5855 0.6039 0.0963 0.6635 1.0462 1.1804 1.1296 0.2177 0.077 0.0584 0.661 0.8502 0.8413 0.8461 0.0921 0.6364 1.0506 1.1847 1.1169 0.2179 0.0643 0.064 0.7016 1.0867 1.1334 1.0901 0.1135 0.6298 1.0156 1.1359 1.1349 0.2157 0.0591 0.0587 0.6704 1.1029 1.1692 1.18 0.0916 0.5802 0.9176 1.0648 1.073 0.2236 0.0619 0.0606 0.0601 0.0601 0.06 0.0607 0.0611 0.0605 0.0607 0.0607 0.0599 0.0596 0.0575
50 28813s 0.065 0.0678 0.0625 0.0636 0.0642 0.0631 0.0637 0.0657 0.0637 0.067 0.0635 0.0623 0.0611 0.247 0.3303 0.2637 0.2291 0.093 0.7524 1.1362 1.2128 1.1859 0.225 0.0583 0.0616 0.3866 0.4408 0.4249 0.3877 0.0941 0.7472 1.0741 1.201 1.1543 0.2169 0.0655 0.0604 0.578 0.6382 0.5879 0.6046 0.0964 0.6833 1.0776 1.2066 1.1523 0.2178 0.0666 0.0611 0.6787 0.8562 0.8432 0.8498 0.0923 0.6556 1.083 1.2111 1.1457 0.2179 0.0646 0.0641 0.7202 1.114 1.1409 1.0979 0.1181 0.6513 1.0452 1.1653 1.1662 0.216 0.0601 0.0609 0.6896 1.1328 1.1978 1.2083 0.0917 0.597 0.9496 1.0937 1.1015 0.2239 0.062 0.0608 0.0602 0.0603 0.0599 0.0608 0.0612 0.0606 0.0609 0.0605 0.0601 0.06 0.0579
51 29453s 0.0648 0.074 0.0625 0.0638 0.0643 0.0632 0.0635 0.0656 0.0636 0.067 0.0635 0.0625 0.061 0.2479 0.3307 0.2646 0.2298 0.093 0.7762 1.1653 1.2307 1.2026 0.2251 0.0601 0.0628 0.3892 0.4425 0.4252 0.3885 0.0941 0.7712 1.105 1.2251 1.1747 0.2169 0.0649 0.0601 0.5826 0.6392 0.5889 0.6064 0.0963 0.707 1.1088 1.2311 1.1764 0.2177 0.0693 0.06 0.6966 0.8614 0.8446 0.8531 0.0921 0.677 1.1146 1.2371 1.174 0.218 0.0645 0.0641 0.7373 1.1402 1.1482 1.1048 0.1247 0.6719 1.077 1.1939 1.1939 0.2161 0.0587 0.0581 0.7073 1.1604 1.2276 1.2342 0.0918 0.6166 0.9799 1.1224 1.1305 0.2239 0.062 0.0608 0.0603 0.0605 0.0598 0.0608 0.0613 0.0607 0.0609 0.0659 0.0599 0.0599 0.0575
52 30093s 0.0646 0.0674 0.0625 0.0635 0.0643 0.0631 0.0634 0.0656 0.0635 0.0671 0.0635 0.0626 0.0609 0.2486 0.3311 0.265 0.23 0.0928 0.7999 1.1924 1.2466 1.2176 0.2251 0.0602 0.0619 0.3909 0.4441 0.4256 0.3885 0.0941 0.793 1.1347 1.2465 1.1933 0.2171 0.0647 0.0604 0.5869 0.6397 0.5896 0.6077 0.0964 0.7301 1.1379 1.2538 1.1956 0.2179 0.0714 0.0583 0.7109 0.8655 0.8466 0.8554 0.0922 0.6989 1.1442 1.2625 1.1991 0.2181 0.0647 0.064 0.7533 1.1635 1.1533 1.1112 0.1337 0.6932 1.1062 1.2204 1.2213 0.2163 0.0596 0.0595 0.7247 1.1878 1.2535 1.2622 0.0916 0.6351 1.0116 1.1484 1.1579 0.224 0.0622 0.0607 0.0603 0.0606 0.0599 0.0607 0.0614 0.0607 0.0607 0.0611 0.06 0.06 0.0573
53 30733s 0.0649 0.0677 0.0626 0.0638 0.0643 0.0633 0.0635 0.0657 0.0636 0.0669 0.0633 0.0626 0.061 0.2498 0.332 0.2659 0.2309 0.0931 0.8243 1.2194 1.26 1.23 0.2253 0.0585 0.0615 0.3926 0.4446 0.4257 0.3894 0.0941 0.8164 1.1628 1.2651 1.211 0.2171 0.0646 0.0605 0.59 0.6408 0.5898 0.6092 0.0964 0.7526 1.1656 1.2751 1.2145 0.218 0.0696 0.0591 0.7247 0.8682 0.8467 0.8577 0.0923 0.7198 1.173 1.2845 1.2198 0.2182 0.0644 0.0641 0.7689 1.1828 1.1576 1.1167 0.1442 0.7171 1.1364 1.2476 1.2482 0.2166 0.0597 0.0585 0.7398 1.2146 1.2807 1.2875 0.0917 0.656 1.0413 1.1736 1.1838 0.2242 0.062 0.0609 0.0604 0.0606 0.0599 0.0608 0.0615 0.0608 0.0609 0.0615 0.06 0.0602 0.058
54 31373s 0.065 0.0682 0.0627 0.0637 0.0644 0.0634 0.0634 0.0658 0.0639 0.0669 0.0634 0.0624 0.0609 0.2507 0.3328 0.2668 0.2316 0.0931 0.8487 1.2441 1.2708 1.2393 0.2254 0.0598 0.0629 0.3934 0.4454 0.4259 0.3897 0.094 0.8412 1.19 1.2806 1.2264 0.2172 0.0647 0.0605 0.5931 0.6417 0.5903 0.609 0.0963 0.7759 1.1937 1.2939 1.2312 0.2181 0.0775 0.0587 0.7384 0.8712 0.8478 0.8592 0.0921 0.7428 1.2016 1.3057 1.24 0.2183 0.0644 0.0641 0.7839 1.1983 1.161 1.1204 0.157 0.7385 1.1662 1.2729 1.2718 0.2168 0.0591 0.0587 0.7552 1.2396 1.3063 1.3105 0.0915 0.6768 1.0718 1.1998 1.2077 0.2239 0.0623 0.0609 0.0605 0.0605 0.06 0.0608 0.0614 0.061 0.0606 0.0607 0.0598 0.0602 0.0589
55 32014s 0.0649 0.0695 0.0625 0.0636 0.0642 0.0631 0.0634 0.0656 0.0638 0.0669 0.0635 0.0624 0.0606 0.2513 0.3329 0.2671 0.232 0.0929 0.874 1.2685 1.2805 1.2474 0.2254 0.0584 0.0629 0.3945 0.4455 0.4262 0.3901 0.0941 0.8658 1.217 1.2944 1.24 0.2173 0.0646 0.0603 0.5949 0.6428 0.591 0.6104 0.0963 0.8001 1.2203 1.3093 1.2475 0.2181 0.0724 0.0585 0.7496 0.8728 0.8491 0.861 0.0921 0.7674 1.2282 1.3266 1.2584 0.2183 0.0648 0.0642 0.7986 1.2093 1.1633 1.1245 0.1681 0.7609 1.1947 1.2964 1.2928 0.217 0.0594 0.0587 0.7692 1.2626 1.3278 1.3309 0.0917 0.6958 1.1032 1.2249 1.2338 0.2242 0.0621 0.0606 0.0603 0.0606 0.0598 0.0606 0.0614 0.0608 0.0605 0.0614 0.0597 0.06 0.0571
56 32654s 0.0651 0.0674 0.0628 0.0638 0.0645 0.0633 0.0635 0.0656 0.0634 0.0669 0.0634 0.0625 0.061 0.252 0.333 0.2675 0.2323 0.0929 0.8963 1.2913 1.2887 1.255 0.2255 0.0581 0.063 0.3948 0.4458 0.4258 0.3904 0.0941 0.8898 1.2436 1.3057 1.2522 0.2172 0.0653 0.0604 0.5975 0.644 0.5918 0.612 0.0965 0.8238 1.2461 1.3238 1.2609 0.2184 0.0772 0.0603 0.7608 0.8749 0.8503 0.8626 0.0922 0.7896 1.2543 1.3463 1.2786 0.2185 0.0644 0.0639 0.8124 1.2188 1.1653 1.1277 0.1773 0.7836 1.2226 1.3179 1.3132 0.2171 0.0604 0.058 0.7828 1.286 1.3496 1.3488 0.0916 0.7162 1.1318 1.2501 1.2586 0.2243 0.0621 0.0605 0.0603 0.0604 0.0599 0.0607 0.0617 0.0609 0.0608 0.0609 0.0597 0.0601 0.0574
57 33294s 0.065 0.0701 0.0627 0.0637 0.0642 0.0632 0.0632 0.0655 0.0636 0.0668 0.0634 0.0622 0.0608 0.2526 0.3336 0.2684 0.2326 0.0929 0.92 1.311 1.2962 1.2623 0.2256 0.0592 0.0625 0.3956 0.4477 0.427 0.391 0.0941 0.9142 1.266 1.3162 1.2622 0.2174 0.0648 0.0604 0.5988 0.645 0.5922 0.6128 0.0963 0.847 1.2709 1.3355 1.2732 0.2183 0.0646 0.0596 0.7706 0.8766 0.8506 0.8645 0.0921 0.8126 1.2796 1.3629 1.2931 0.2186 0.0638 0.0639 0.8255 1.2261 1.1687 1.1313 0.1863 0.806 1.25 1.3408 1.3325 0.2174 0.0589 0.0608 0.7958 1.3074 1.37 1.3656 0.0917 0.7372 1.1618 1.2722 1.2822 0.2242 0.0624 0.0608 0.0603 0.0606 0.0598 0.0606 0.0616 0.0607 0.0604 0.0606 0.0595 0.0601 0.058
58 33934s 0.065 0.067 0.0626 0.0634 0.0641 0.0632 0.063 0.0656 0.0636 0.0667 0.0635 0.0623 0.0607 0.2531 0.3334 0.2685 0.2328 0.093 0.945 1.3301 1.302 1.2671 0.2258 0.0607 0.0624 0.3954 0.4477 0.4276 0.3918 0.0941 0.9364 1.2895 1.3241 1.2698 0.2175 0.0649 0.0605 0.5998 0.6449 0.5916 0.6137 0.0964 0.8701 1.294 1.3453 1.2838 0.2184 0.0614 0.0586 0.7825 0.8778 0.8519 0.866 0.0922 0.8362 1.3042 1.3767 1.3085 0.2187 0.064 0.0639 0.8362 1.2316 1.1691 1.1342 0.1949 0.8301 1.276 1.3595 1.3484 0.2179 0.06 0.0588 0.8084 1.3291 1.3869 1.3809 0.0918 0.7575 1.1895 1.2954 1.3042 0.2244 0.0635 0.0607 0.0604 0.0603 0.0598 0.0606 0.0615 0.0607 0.0605 0.0619 0.0594 0.0599 0.0573
59 34575s 0.0648 0.0725 0.0627 0.0635 0.0642 0.063 0.0631 0.0656 0.0636 0.0669 0.0634 0.0623 0.0607 0.254 0.3343 0.269 0.2332 0.0931 0.9658 1.3463 1.3062 1.2726 0.2258 0.0582 0.0629 0.3966 0.4484 0.4273 0.3922 0.0941 0.9598 1.3107 1.331 1.277 0.2175 0.0649 0.0601 0.6021 0.6457 0.5925 0.6135 0.0964 0.8946 1.3161 1.3536 1.2934 0.2185 0.0662 0.0588 0.791 0.8791 0.8517 0.8667 0.0922 0.86 1.3266 1.3887 1.3226 0.2187 0.0636 0.0637 0.8495 1.2363 1.1704 1.1357 0.2031 0.8544 1.3014 1.3793 1.3644 0.2183 0.0591 0.0578 0.8199 1.3486 1.4027 1.3937 0.0917 0.778 1.2164 1.3165 1.3264 0.2245 0.0623 0.0609 0.0603 0.0604 0.0596 0.0606 0.0614 0.0606 0.0605 0.0603 0.0592 0.0598 0.0574
60 35215s 0.0651 0.0672 0.0629 0.0637 0.0644 0.0633 0.0632 0.0658 0.064 0.0671 0.0635 0.0625 0.0609 0.255 0.3348 0.2697 0.2339 0.0931 0.9864 1.3597 1.3106 1.2763 0.2261 0.0594 0.0624 0.3975 0.4492 0.4283 0.3931 0.0942 0.9825 1.3307 1.3371 1.2832 0.2177 0.0649 0.0601 0.6024 0.6469 0.5923 0.6146 0.0966 0.9197 1.3375 1.3611 1.2994 0.2186 0.0631 0.0583 0.7991 0.8805 0.8515 0.8676 0.0923 0.8829 1.3492 1.3987 1.3352 0.2187 0.0634 0.0639 0.8598 1.2393 1.171 1.1377 0.2135 0.8776 1.3244 1.3985 1.3782 0.2186 0.0593 0.0593 0.8321 1.3674 1.4175 1.4058 0.0918 0.7995 1.2439 1.3376 1.3466 0.2246 0.0627 0.0605 0.0604 0.0603 0.0597 0.0606 0.0614 0.0606 0.0606 0.0614 0.0593 0.0598 0.0577
61 35855s 0.0648 0.0669 0.0629 0.0636 0.0645 0.0633 0.0634 0.0659 0.0638 0.0669 0.0635 0.0638 0.0608 0.2556 0.3355 0.2701 0.2339 0.0931 1.0077 1.3723 1.3147 1.2808 0.2262 0.061 0.0626 0.3984 0.4497 0.4288 0.3933 0.0943 1.0038 1.3469 1.3411 1.2892 0.2178 0.0649 0.0601 0.6033 0.6465 0.5923 0.6144 0.0965 0.9416 1.3556 1.3658 1.3056 0.2186 0.0647 0.0584 0.8058 0.881 0.8522 0.8686 0.0922 0.9057 1.3694 1.4073 1.3449 0.2189 0.0633 0.0638 0.8699 1.2417 1.1717 1.1389 0.2217 0.8998 1.3473 1.4142 1.3913 0.2191 0.0588 0.0578 0.8415 1.3854 1.4284 1.4162 0.0915 0.8225 1.2698 1.3571 1.3675 0.2247 0.0633 0.0609 0.0604 0.0605 0.0597 0.0606 0.0614 0.0606 0.0605 0.0615 0.0592 0.0598 0.0578
62 36495s 0.0648 0.0745 0.063 0.0636 0.0645 0.0634 0.0647 0.066 0.0638 0.067 0.0635 0.0625 0.0609 0.2565 0.3356 0.2705 0.2344 0.093 1.0275 1.3812 1.3168 1.2844 0.2261 0.0605 0.069 0.3983 0.4497 0.4285 0.3937 0.0941 1.0239 1.3621 1.3457 1.2939 0.2177 0.0648 0.0597 0.6034 0.6464 0.5926 0.615 0.0964 0.9641 1.3739 1.3724 1.3113 0.2187 0.0608 0.0581 0.8111 0.8818 0.8519 0.8696 0.0921 0.9292 1.3894 1.4148 1.3549 0.2189 0.0632 0.0637 0.8797 1.2439 1.1725 1.141 0.2314 0.9223 1.3681 1.4291 1.403 0.2192 0.0609 0.0582 0.8518 1.4007 1.4397 1.4249 0.0917 0.844 1.2934 1.3784 1.3861 0.2247 0.0622 0.0608 0.0602 0.0604 0.0594 0.0604 0.0614 0.0605 0.0605 0.062 0.0592 0.0596 0.0574
63 37135s 0.0646 0.0667 0.063 0.0635 0.0645 0.0631 0.0631 0.0658 0.0635 0.0669 0.0637 0.0625 0.0608 0.2567 0.3359 0.2705 0.2344 0.0932 1.047 1.3901 1.3194 1.2875 0.2262 0.059 0.0623 0.3987 0.4504 0.4294 0.394 0.0943 1.0454 1.3754 1.3484 1.2975 0.2178 0.0652 0.0598 0.6039 0.6474 0.5925 0.6157 0.0964 0.9856 1.3889 1.376 1.3161 0.2189 0.0614 0.0584 0.8158 0.8826 0.8515 0.8701 0.0923 0.9522 1.4075 1.4208 1.3623 0.2191 0.0633 0.0636 0.8895 1.2457 1.1732 1.1424 0.2406 0.9445 1.3898 1.4416 1.4138 0.2197 0.0598 0.0581 0.8612 1.4172 1.4477 1.4319 0.0917 0.865 1.3165 1.3974 1.4046 0.2248 0.0624 0.0607 0.0604 0.0602 0.0596 0.0607 0.0612 0.0606 0.0604 0.0604 0.0591 0.0597 0.0573
64 37776s 0.0646 0.0725 0.0628 0.0633 0.0641 0.0631 0.063 0.0657 0.0636 0.0668 0.0635 0.0624 0.0606 0.2573 0.336 0.2706 0.2345 0.0931 1.0669 1.3979 1.3216 1.29 0.2263 0.0607 0.0624 0.3994 0.4511 0.4296 0.3946 0.0942 1.0652 1.386 1.3518 1.301 0.218 0.0649 0.0598 0.6045 0.6475 0.5928 0.6168 0.0964 1.0077 1.403 1.38 1.3211 0.219 0.0626 0.0588 0.8196 0.883 0.8527 0.871 0.0923 0.9735 1.4253 1.4263 1.3696 0.2191 0.0631 0.0635 0.8993 1.2468 1.1735 1.1444 0.2507 0.9655 1.4096 1.4535 1.4251 0.2202 0.0587 0.0586 0.871 1.4319 1.4545 1.4381 0.0918 0.887 1.338 1.4149 1.4227 0.2264 0.0624 0.0607 0.0602 0.0602 0.0592 0.0603 0.0613 0.0606 0.0602 0.0611 0.059 0.0597 0.0578
65 38417s 0.0646 0.0668 0.0628 0.0633 0.0643 0.0631 0.0631 0.0657 0.0636 0.0669 0.0637 0.0626 0.0608 0.258 0.3366 0.2712 0.2353 0.0931 1.0848 1.4023 1.323 1.2919 0.2264 0.0644 0.0584 0.3994 0.4498 0.4301 0.3951 0.0941 1.0856 1.3957 1.3544 1.305 0.218 0.0648 0.0595 0.6056 0.6476 0.5932 0.6173 0.0964 1.0279 1.4154 1.3826 1.3248 0.2189 0.061 0.0584 0.8217 0.8826 0.8523 0.8721 0.0923 0.9947 1.4398 1.4306 1.3751 0.2192 0.0633 0.0635 0.9081 1.2477 1.1734 1.1453 0.2614 0.987 1.4276 1.4623 1.4321 0.2207 0.0599 0.0581 0.8798 1.4459 1.4605 1.4445 0.0917 0.9061 1.3597 1.4322 1.4385 0.2249 0.0623 0.0606 0.0603 0.0603 0.0594 0.0605 0.0614 0.0606 0.0602 0.06 0.0589 0.0599 0.0572
66 39058s 0.0648 0.0718 0.063 0.0635 0.0645 0.0631 0.0629 0.0657 0.0639 0.0669 0.0636 0.0625 0.0608 0.2583 0.3367 0.2711 0.2353 0.093 1.1023 1.4072 1.3245 1.2948 0.2262 0.0596 0.0613 0.4001 0.451 0.4303 0.3956 0.0943 1.1054 1.4037 1.3571 1.3074 0.218 0.0649 0.0595 0.6055 0.6472 0.5936 0.618 0.0965 1.0471 1.4254 1.3846 1.3273 0.2189 0.0603 0.0583 0.8236 0.8824 0.8522 0.8722 0.0923 1.0145 1.4521 1.434 1.3792 0.2191 0.0631 0.0633 0.916 1.2479 1.1738 1.146 0.2733 1.007 1.444 1.4712 1.4408 0.2211 0.0598 0.0591 0.8885 1.4586 1.4648 1.4494 0.0917 0.9273 1.3793 1.4477 1.4541 0.225 0.0623 0.0607 0.0602 0.0604 0.0593 0.0603 0.0612 0.0605 0.0601 0.0611 0.0588 0.0595 0.0576
67 39698s 0.0645 0.0665 0.0628 0.0634 0.0641 0.063 0.0629 0.0656 0.0634 0.0668 0.0637 0.0623 0.0608 0.2593 0.3373 0.2718 0.2357 0.0931 1.1171 1.4116 1.3255 1.2962 0.2265 0.0596 0.0612 0.4005 0.4525 0.4308 0.3965 0.0943 1.1216 1.4102 1.3582 1.3093 0.2182 0.0646 0.0596 0.6053 0.6489 0.5935 0.6179 0.0965 1.0665 1.4349 1.3872 1.33 0.2191 0.0598 0.0585 0.8258 0.8828 0.8519 0.8729 0.0923 1.0346 1.4644 1.4375 1.384 0.2192 0.0631 0.0633 0.9233 1.2476 1.1732 1.1467 0.2869 1.0263 1.4591 1.4774 1.4466 0.2217 0.0588 0.0593 0.898 1.4715 1.4682 1.4526 0.0919 0.9462 1.3984 1.4638 1.4681 0.2252 0.063 0.0606 0.0602 0.0604 0.0593 0.0605 0.0614 0.0606 0.0601 0.0615 0.0589 0.0595 0.0572
68 40338s 0.0646 0.0741 0.0629 0.0633 0.0645 0.0633 0.0627 0.0658 0.0634 0.0669 0.0635 0.0625 0.0607 0.2601 0.3383 0.2727 0.2364 0.0932 1.131 1.4143 1.3267 1.2979 0.2267 0.0582 0.061 0.4005 0.4521 0.4313 0.3965 0.0942 1.139 1.4162 1.36 1.3122 0.2183 0.0648 0.0594 0.6061 0.6485 0.5942 0.6182 0.0964 1.0857 1.4429 1.3893 1.3332 0.2192 0.061 0.0598 0.8259 0.8831 0.8513 0.8728 0.0924 1.055 1.4748 1.4398 1.3872 0.2194 0.0632 0.0629 0.9306 1.2492 1.1733 1.1481 0.2966 1.0456 1.4746 1.4844 1.4534 0.222 0.0595 0.059 0.9062 1.4831 1.4716 1.4553 0.0918 0.9667 1.417 1.4776 1.482 0.2251 0.0627 0.0608 0.0603 0.0604 0.0593 0.0606 0.0613 0.0604 0.0601 0.0605 0.0588 0.0595 0.0593
69 40978s 0.0648 0.0665 0.0628 0.0634 0.0643 0.0629 0.0629 0.0655 0.0634 0.0668 0.0636 0.0623 0.0607 0.2608 0.3386 0.2729 0.2367 0.0933 1.1438 1.4172 1.3279 1.3001 0.2268 0.0579 0.0614 0.4006 0.4522 0.4315 0.3967 0.0944 1.1557 1.4219 1.3622 1.3142 0.2184 0.0649 0.0596 0.6065 0.6482 0.5941 0.6184 0.0966 1.104 1.4492 1.3914 1.3352 0.2193 0.0608 0.0587 0.8274 0.8837 0.851 0.873 0.0925 1.0731 1.4848 1.442 1.3915 0.2195 0.0634 0.0632 0.9386 1.2501 1.1734 1.1495 0.3075 1.0652 1.4884 1.4897 1.4589 0.2225 0.0589 0.0583 0.9146 1.4935 1.4739 1.4598 0.0918 0.9859 1.4366 1.4936 1.4958 0.2253 0.0632 0.0609 0.0601 0.0604 0.0593 0.0604 0.0613 0.0605 0.06 0.0624 0.0586 0.0595 0.0573
70 41619s 0.0648 0.0734 0.0629 0.0634 0.0643 0.0629 0.0629 0.0654 0.0636 0.0668 0.0636 0.0623 0.0608 0.261 0.3384 0.2727 0.2367 0.0933 1.1553 1.4216 1.3283 1.3015 0.2269 0.0637 0.0621 0.4013 0.4525 0.4316 0.3974 0.0944 1.1703 1.4263 1.3635 1.3167 0.2187 0.0649 0.0595 0.6067 0.649 0.5942 0.6193 0.0966 1.1223 1.454 1.3925 1.3378 0.2194 0.0588 0.0581 0.8278 0.884 0.8509 0.8737 0.0925 1.0939 1.4921 1.4444 1.3937 0.2196 0.0631 0.063 0.9453 1.2508 1.1744 1.1513 0.316 1.0842 1.5025 1.4953 1.465 0.2232 0.0587 0.0581 0.9221 1.503 1.4755 1.4619 0.0918 1.0031 1.4527 1.5069 1.5051 0.2252 0.0628 0.0609 0.0603 0.06 0.0594 0.0604 0.0611 0.0604 0.0599 0.064 0.0588 0.0594 0.0574
71 42259s 0.0646 0.0666 0.0629 0.0634 0.0642 0.0628 0.0629 0.0655 0.0636 0.0669 0.0636 0.0624 0.0608 0.2618 0.3389 0.2731 0.2368 0.0932 1.166 1.424 1.3297 1.3035 0.2271 0.0581 0.0615 0.4012 0.4531 0.4319 0.3978 0.0944 1.1841 1.4293 1.3636 1.3181 0.2185 0.065 0.0594 0.6066 0.6494 0.5944 0.6194 0.0966 1.1401 1.4576 1.3935 1.3396 0.2195 0.0618 0.0583 0.8294 0.8838 0.8513 0.8745 0.0924 1.1109 1.499 1.445 1.3969 0.2196 0.0631 0.063 0.9514 1.2506 1.1744 1.1512 0.3303 1.1021 1.5137 1.4981 1.4688 0.2239 0.0586 0.0583 0.9304 1.5102 1.4766 1.462 0.0919 1.0211 1.4689 1.5182 1.5142 0.2253 0.0626 0.0606 0.0601 0.06 0.0593 0.0603 0.0611 0.0602 0.0598 0.0624 0.0587 0.0595 0.0575
72 42899s 0.0646 0.0738 0.0627 0.0633 0.0641 0.0629 0.0629 0.0652 0.0633 0.0669 0.0637 0.0625 0.0607 0.2624 0.3393 0.2737 0.2373 0.0933 1.1746 1.4258 1.3299 1.3045 0.2271 0.0583 0.0614 0.4024 0.4532 0.4321 0.3984 0.0944 1.1959 1.432 1.3647 1.3201 0.2186 0.0648 0.0595 0.607 0.6484 0.5938 0.62 0.0967 1.1579 1.4619 1.3948 1.3413 0.2195 0.0639 0.0587 0.8301 0.8842 0.8516 0.8752 0.0924 1.1295 1.5044 1.4472 1.4 0.2197 0.0632 0.063 0.9569 1.2511 1.1745 1.1522 0.3433 1.1188 1.5239 1.5019 1.4713 0.225 0.059 0.0581 0.9397 1.5167 1.4767 1.4644 0.092 1.0403 1.4834 1.5296 1.5238 0.2255 0.063 0.0608 0.0601 0.0602 0.0592 0.0604 0.0611 0.0601 0.0598 0.0643 0.0586 0.0593 0.0576
73 43539s 0.0647 0.0668 0.063 0.0635 0.064 0.0628 0.063 0.0653 0.0632 0.067 0.0635 0.0623 0.0608 0.2632 0.34 0.2741 0.2378 0.0934 1.1837 1.427 1.3305 1.3058 0.2273 0.0603 0.0611 0.4026 0.454 0.4332 0.3988 0.0944 1.2068 1.4345 1.365 1.3215 0.2187 0.0648 0.0596 0.6079 0.6479 0.5941 0.6208 0.0966 1.1744 1.4652 1.3955 1.3436 0.2197 0.0596 0.0583 0.8306 0.8843 0.8509 0.8753 0.0926 1.1473 1.5089 1.4481 1.4016 0.2199 0.0633 0.0629 0.9614 1.2515 1.1736 1.1531 0.3551 1.1362 1.5334 1.5046 1.474 0.226 0.0595 0.0579 0.9487 1.5232 1.4779 1.4655 0.0921 1.0571 1.4979 1.5398 1.5329 0.2257 0.0632 0.0606 0.0601 0.0602 0.0592 0.0603 0.061 0.0602 0.0597 0.0615 0.0587 0.0595 0.0577
74 44179s 0.0649 0.0667 0.0627 0.0635 0.0643 0.0627 0.0631 0.0653 0.0634 0.067 0.0635 0.0626 0.061 0.2639 0.3406 0.275 0.2386 0.0935 1.1908 1.4278 1.3299 1.3072 0.2274 0.0583 0.0612 0.4028 0.4537 0.4335 0.3992 0.0945 1.2172 1.4375 1.3652 1.3227 0.219 0.0649 0.0595 0.6083 0.649 0.5942 0.6204 0.0969 1.189 1.4684 1.3963 1.3441 0.2198 0.0636 0.0584 0.8303 0.8844 0.8512 0.8754 0.0926 1.1648 1.5131 1.4488 1.4028 0.2199 0.0634 0.063 0.9663 1.2511 1.1736 1.1538 0.3688 1.1536 1.5402 1.5064 1.4767 0.2271 0.0608 0.0585 0.9556 1.5266 1.477 1.4668 0.092 1.0743 1.5121 1.5501 1.5398 0.2257 0.0634 0.0609 0.0604 0.0604 0.0594 0.0605 0.0613 0.0603 0.06 0.0649 0.0588 0.0595 0.0584
75 44820s 0.0646 0.0738 0.0629 0.0637 0.0643 0.0628 0.063 0.0653 0.0632 0.0668 0.0634 0.0625 0.0609 0.2639 0.3404 0.2746 0.2383 0.0933 1.1985 1.4302 1.3305 1.3086 0.2274 0.0578 0.0616 0.4027 0.4545 0.4331 0.3995 0.0944 1.2258 1.4398 1.3661 1.3236 0.2188 0.0648 0.0594 0.6081 0.6493 0.5941 0.6209 0.0968 1.2033 1.4708 1.3974 1.3448 0.2199 0.0649 0.0583 0.8308 0.8844 0.8507 0.8759 0.0925 1.1813 1.516 1.4505 1.4045 0.22 0.0632 0.0629 0.9715 1.2522 1.1738 1.1542 0.3808 1.1703 1.5477 1.5085 1.4782 0.2279 0.0601 0.0585 0.9641 1.5299 1.4782 1.4681 0.0918 1.0896 1.5262 1.5584 1.5469 0.2257 0.0634 0.0607 0.0601 0.06 0.0593 0.0602 0.061 0.0601 0.0595 0.0618 0.0584 0.0594 0.0578
76 45460s 0.0648 0.0668 0.0629 0.0635 0.0642 0.0628 0.063 0.0651 0.0635 0.0667 0.0634 0.0624 0.0608 0.2645 0.3402 0.2744 0.2384 0.0934 1.2047 1.4315 1.3301 1.3092 0.2275 0.0576 0.0616 0.403 0.4537 0.4331 0.4 0.0944 1.2336 1.44 1.3663 1.324 0.2188 0.0648 0.0595 0.6086 0.6499 0.5952 0.6214 0.0968 1.2155 1.4724 1.3972 1.3467 0.2199 0.0616 0.0593 0.8318 0.8841 0.8508 0.8762 0.0926 1.1983 1.5185 1.4507 1.4059 0.2202 0.0629 0.0628 0.9758 1.2527 1.1733 1.1549 0.3922 1.1878 1.5528 1.5104 1.4811 0.2297 0.0589 0.058 0.9707 1.5324 1.4775 1.4678 0.092 1.1063 1.5368 1.5661 1.5532 0.2258 0.0628 0.0606 0.0601 0.0599 0.0592 0.0602 0.0609 0.06 0.0596 0.0604 0.0585 0.0592 0.0575
77 46100s 0.0649 0.0726 0.0631 0.0637 0.0644 0.0629 0.0629 0.0653 0.0636 0.067 0.0634 0.0626 0.0608 0.2648 0.3408 0.275 0.2387 0.0934 1.2097 1.4324 1.3302 1.3099 0.2276 0.0579 0.0606 0.4037 0.4541 0.4332 0.4003 0.0945 1.2418 1.4417 1.3677 1.3256 0.219 0.0649 0.0594 0.6088 0.6509 0.5953 0.6216 0.0968 1.2262 1.4742 1.3971 1.3471 0.22 0.0614 0.059 0.8326 0.8842 0.8504 0.8765 0.0926 1.2128 1.5216 1.4508 1.4072 0.2202 0.0629 0.063 0.9784 1.2522 1.173 1.156 0.406 1.2034 1.5592 1.5117 1.4827 0.2313 0.06 0.0591 0.9788 1.5338 1.4782 1.4696 0.092 1.1226 1.5472 1.5736 1.5608 0.2258 0.0623 0.0608 0.0601 0.0601 0.0591 0.0604 0.0609 0.0601 0.0597 0.061 0.0586 0.0592 0.0573
78 46740s 0.0646 0.0665 0.0627 0.0635 0.0642 0.0629 0.0632 0.0652 0.0634 0.0668 0.0634 0.0624 0.0607 0.2648 0.3404 0.2746 0.2385 0.0933 1.2158 1.4345 1.3308 1.3109 0.2276 0.0618 0.0614 0.4042 0.4561 0.4344 0.401 0.0945 1.248 1.4426 1.3672 1.3259 0.2192 0.0648 0.0592 0.6094 0.6505 0.5957 0.6218 0.0967 1.2359 1.4756 1.3975 1.3482 0.2201 0.0628 0.0585 0.8329 0.884 0.8508 0.8773 0.0925 1.2292 1.5236 1.4515 1.4088 0.2202 0.0628 0.0626 0.9827 1.2525 1.1732 1.1564 0.42 1.2196 1.5621 1.5122 1.4844 0.2334 0.0592 0.0588 0.9861 1.5362 1.4774 1.4695 0.092 1.1388 1.5593 1.5802 1.5661 0.2259 0.0618 0.0606 0.06 0.0599 0.0592 0.0602 0.0607 0.0601 0.0596 0.0605 0.0584 0.0592 0.0574
79 47380s 0.0649 0.0744 0.0628 0.0636 0.0645 0.0628 0.0631 0.0655 0.0634 0.0671 0.0634 0.0625 0.0609 0.2655 0.3414 0.2755 0.2394 0.0935 1.2207 1.4352 1.3303 1.312 0.2278 0.062 0.0612 0.4045 0.4566 0.4348 0.4016 0.0946 1.2548 1.4444 1.3674 1.327 0.2192 0.0649 0.0595 0.6094 0.6503 0.5958 0.6217 0.0968 1.2463 1.4774 1.3979 1.3489 0.2202 0.0603 0.0585 0.8329 0.884 0.8494 0.8781 0.0927 1.243 1.5253 1.4511 1.4094 0.2204 0.0631 0.0629 0.9865 1.2524 1.1731 1.1571 0.4343 1.2361 1.5658 1.5125 1.4855 0.2358 0.059 0.0585 0.9936 1.5366 1.4779 1.4701 0.0922 1.1569 1.5691 1.5851 1.5716 0.226 0.0619 0.0609 0.06 0.0599 0.0592 0.0605 0.061 0.0603 0.0596 0.0605 0.0587 0.0593 0.0571
80 48021s 0.0648 0.0737 0.0628 0.0634 0.0641 0.0627 0.063 0.0655 0.0632 0.0676 0.0636 0.0625 0.0608 0.2657 0.3413 0.2754 0.2393 0.0934 1.2247 1.436 1.3307 1.3135 0.2277 0.059 0.0613 0.4045 0.4567 0.4348 0.4019 0.0945 1.26 1.4448 1.3671 1.3274 0.2192 0.0648 0.0592 0.6099 0.6502 0.5953 0.6224 0.0967 1.2543 1.4788 1.3975 1.3497 0.2202 0.0629 0.0588 0.8344 0.8842 0.8501 0.8784 0.0925 1.2559 1.5271 1.452 1.4112 0.2202 0.063 0.0626 0.9897 1.2515 1.1721 1.1572 0.4503 1.251 1.5672 1.5132 1.4862 0.2388 0.0588 0.0593 1.0015 1.5381 1.477 1.47 0.092 1.1711 1.5792 1.5908 1.5763 0.2259 0.0615 0.0606 0.06 0.0598 0.0593 0.0602 0.0605 0.0599 0.0596 0.0607 0.0585 0.0592 0.0575
81 48661s 0.0648 0.0666 0.0626 0.0636 0.0643 0.063 0.063 0.0657 0.0631 0.0672 0.0633 0.0625 0.0609 0.2667 0.3423 0.2767 0.2403 0.0935 1.2277 1.4351 1.3301 1.3134 0.228 0.0582 0.0614 0.4048 0.4562 0.435 0.4022 0.0947 1.2647 1.4453 1.3676 1.3291 0.2193 0.0647 0.0594 0.6105 0.6501 0.596 0.6232 0.0969 1.2625 1.4794 1.3977 1.3511 0.2203 0.0619 0.0589 0.8345 0.8837 0.8498 0.8781 0.0926 1.2661 1.5272 1.4512 1.4118 0.2204 0.0632 0.0628 0.9918 1.2521 1.1726 1.1582 0.4622 1.2666 1.5718 1.5143 1.4877 0.2428 0.0598 0.0583 1.0084 1.538 1.4761 1.4701 0.0921 1.1871 1.5871 1.5948 1.58 0.2262 0.0618 0.0608 0.06 0.0597 0.0592 0.0603 0.0607 0.06 0.0596 0.0614 0.0585 0.0593 0.0572
82 49301s 0.0648 0.0742 0.0628 0.0637 0.0644 0.063 0.0631 0.0654 0.0633 0.067 0.0635 0.0626 0.061 0.2672 0.3423 0.2764 0.2406 0.0936 1.2308 1.4368 1.3303 1.3145 0.2281 0.0601 0.0614 0.4052 0.4562 0.4349 0.4025 0.0946 1.2698 1.4463 1.3672 1.3291 0.2194 0.065 0.0594 0.611 0.6505 0.5962 0.6237 0.097 1.2701 1.48 1.3976 1.3513 0.2204 0.0618 0.0593 0.835 0.8842 0.8495 0.8786 0.0928 1.2772 1.5289 1.4516 1.4121 0.2205 0.0632 0.0625 0.994 1.2522 1.1724 1.1586 0.478 1.2799 1.5737 1.5151 1.4886 0.2475 0.0593 0.0582 1.0168 1.5378 1.4757 1.4719 0.0922 1.2027 1.5969 1.5995 1.5839 0.2262 0.0617 0.0609 0.0602 0.0599 0.0592 0.06 0.0606 0.06 0.0596 0.0601 0.0586 0.0593 0.0575
83 49941s 0.0648 0.0669 0.0628 0.0638 0.0643 0.063 0.0629 0.0654 0.063 0.067 0.0637 0.0625 0.0608 0.2673 0.3425 0.2765 0.2404 0.0935 1.2341 1.4374 1.3299 1.3153 0.2281 0.0611 0.0609 0.4054 0.4565 0.435 0.4031 0.0948 1.2738 1.4476 1.3678 1.3301 0.2194 0.0648 0.0594 0.6115 0.6508 0.5969 0.6241 0.0969 1.2763 1.4813 1.3979 1.3523 0.2204 0.0609 0.0588 0.8349 0.8844 0.8494 0.8787 0.0928 1.2863 1.5296 1.4517 1.4133 0.2207 0.0631 0.0625 0.9961 1.253 1.1727 1.1591 0.4943 1.2947 1.5749 1.5151 1.4899 0.2527 0.0588 0.0581 1.0233 1.5385 1.4755 1.4717 0.0922 1.2177 1.6058 1.6031 1.5883 0.2262 0.0617 0.0608 0.0601 0.0597 0.0592 0.0601 0.0606 0.0599 0.0594 0.0618 0.0586 0.0593 0.0577
84 50582s 0.0649 0.0741 0.0629 0.0635 0.0642 0.0629 0.0628 0.0651 0.0629 0.0668 0.0635 0.0623 0.0607 0.2676 0.3427 0.277 0.2409 0.0936 1.2356 1.4367 1.3295 1.316 0.2282 0.0579 0.0615 0.405 0.456 0.4351 0.4036 0.0946 1.276 1.4482 1.3664 1.3304 0.2195 0.0649 0.059 0.6112 0.6514 0.5966 0.6245 0.0969 1.2817 1.4817 1.3978 1.3529 0.2204 0.0611 0.0581 0.836 0.8841 0.8491 0.8795 0.0927 1.2951 1.5309 1.4516 1.4134 0.2206 0.0629 0.0625 0.9984 1.252 1.1719 1.1592 0.5122 1.3065 1.5763 1.5155 1.49 0.2585 0.0596 0.0586 1.0301 1.539 1.4752 1.4721 0.0921 1.2324 1.6136 1.6055 1.5907 0.2262 0.0614 0.0609 0.06 0.0597 0.0591 0.0603 0.0606 0.0599 0.0595 0.0601 0.0585 0.0592 0.058
85 51222s 0.0647 0.0666 0.0627 0.0635 0.0642 0.063 0.0627 0.0655 0.0633 0.0667 0.0631 0.0623 0.0607 0.2682 0.3426 0.2769 0.2409 0.0935 1.2385 1.4395 1.3298 1.3174 0.2283 0.0587 0.0611 0.4061 0.4588 0.4361 0.4045 0.0947 1.279 1.4486 1.3674 1.3311 0.2196 0.0648 0.0592 0.6115 0.6518 0.5969 0.625 0.097 1.2875 1.4822 1.3977 1.353 0.2207 0.063 0.0588 0.8369 0.8843 0.8491 0.8804 0.0928 1.3035 1.5328 1.452 1.4149 0.2207 0.063 0.0625 1.0001 1.253 1.1728 1.1607 0.5289 1.3187 1.5791 1.5162 1.4918 0.2654 0.0587 0.058 1.0368 1.54 1.4753 1.4718 0.0923 1.247 1.6211 1.6085 1.5943 0.2264 0.0616 0.0608 0.0598 0.0597 0.0593 0.06 0.0604 0.0598 0.0594 0.0609 0.0584 0.0591 0.0577
86 51862s 0.065 0.0741 0.0627 0.0636 0.0642 0.0629 0.0629 0.0655 0.0629 0.067 0.0633 0.0627 0.0609 0.2685 0.3429 0.2772 0.2413 0.0934 1.2395 1.4388 1.3298 1.3178 0.2285 0.0591 0.0614 0.406 0.4584 0.436 0.4048 0.0947 1.2809 1.4491 1.3668 1.3312 0.2197 0.0649 0.0593 0.6122 0.6514 0.5969 0.6259 0.0971 1.292 1.4835 1.398 1.3534 0.2207 0.0602 0.0589 0.837 0.8839 0.8496 0.8806 0.0928 1.3108 1.5334 1.4518 1.4157 0.2207 0.063 0.0625 1.0015 1.2528 1.1716 1.1603 0.5478 1.3292 1.5792 1.5153 1.493 0.2731 0.0594 0.0584 1.0447 1.5397 1.4738 1.4723 0.0922 1.2611 1.6278 1.6091 1.5952 0.2264 0.0616 0.0607 0.06 0.0597 0.0593 0.0601 0.0606 0.0597 0.0594 0.0593 0.0583 0.0591 0.0572
87 52502s 0.0647 0.0667 0.0627 0.0635 0.0639 0.0628 0.0628 0.0653 0.063 0.0669 0.0633 0.0625 0.0607 0.2691 0.3432 0.2775 0.2414 0.0936 1.2418 1.4391 1.3292 1.3182 0.2285 0.0579 0.0612 0.4067 0.4581 0.4367 0.4049 0.0946 1.2841 1.4496 1.3671 1.3324 0.2197 0.065 0.0593 0.6124 0.6513 0.597 0.6265 0.0969 1.2951 1.4838 1.3971 1.3541 0.2206 0.0606 0.0583 0.8381 0.884 0.8496 0.881 0.0928 1.3176 1.5331 1.4521 1.4162 0.2208 0.0628 0.0624 1.003 1.2528 1.1716 1.1606 0.566 1.3389 1.5805 1.5155 1.4927 0.2815 0.0598 0.0584 1.0517 1.5394 1.4735 1.4726 0.0921 1.2743 1.6341 1.6105 1.597 0.2265 0.0615 0.0608 0.06 0.0596 0.0592 0.06 0.0605 0.0595 0.0594 0.0593 0.0585 0.0591 0.0575
88 53142s 0.0648 0.0669 0.063 0.0637 0.0641 0.0628 0.0631 0.0652 0.0631 0.0675 0.0636 0.0625 0.0611 0.2702 0.3441 0.2785 0.2423 0.0937 1.2432 1.4396 1.329 1.319 0.2288 0.0596 0.0611 0.407 0.4585 0.4374 0.4056 0.0948 1.2868 1.4513 1.3674 1.3337 0.2199 0.065 0.0595 0.6133 0.6513 0.5969 0.6274 0.0971 1.2993 1.4845 1.3983 1.3556 0.221 0.0603 0.0586 0.8388 0.8839 0.8498 0.8808 0.0929 1.3238 1.5351 1.4525 1.4171 0.221 0.063 0.0626 1.0036 1.2524 1.172 1.1614 0.5869 1.3478 1.582 1.5158 1.4934 0.2937 0.0596 0.058 1.0592 1.54 1.4752 1.4747 0.0922 1.2895 1.6398 1.6135 1.6007 0.2267 0.0617 0.0608 0.06 0.0596 0.059 0.0601 0.0606 0.0598 0.0595 0.0598 0.0585 0.059 0.0572
89 53783s 0.0649 0.0733 0.0628 0.0636 0.0643 0.0629 0.0629 0.0652 0.0631 0.0669 0.0636 0.0625 0.0608 0.2705 0.3441 0.2785 0.2423 0.0936 1.2444 1.4401 1.329 1.3204 0.2287 0.0589 0.0612 0.4069 0.4582 0.4376 0.4057 0.0947 1.288 1.4515 1.3664 1.3334 0.2199 0.0649 0.0593 0.6138 0.652 0.5974 0.6266 0.0971 1.3024 1.4848 1.3977 1.3552 0.2209 0.0601 0.0587 0.8394 0.8841 0.8495 0.8813 0.0929 1.3293 1.5347 1.4528 1.417 0.2209 0.0631 0.0622 1.0046 1.253 1.1718 1.1618 0.6066 1.3551 1.5833 1.5156 1.4946 0.304 0.0599 0.0588 1.0657 1.5403 1.4745 1.4738 0.0923 1.3017 1.6448 1.6142 1.6005 0.2265 0.0613 0.0607 0.0599 0.0596 0.0591 0.06 0.0605 0.0595 0.0593 0.0595 0.0585 0.0591 0.0579
90 54423s 0.0649 0.0667 0.0629 0.0635 0.0642 0.0631 0.0629 0.0654 0.0632 0.0668 0.0633 0.0624 0.0608 0.2713 0.3445 0.2791 0.2431 0.0936 1.2454 1.4392 1.3285 1.3197 0.2289 0.0577 0.061 0.4068 0.4588 0.4373 0.4055 0.0949 1.2895 1.4506 1.3655 1.334 0.2199 0.0648 0.0595 0.6147 0.6515 0.5973 0.6277 0.097 1.3038 1.4837 1.3968 1.3557 0.221 0.0607 0.0581 0.8394 0.8841 0.8495 0.8813 0.0929 1.3331 1.5344 1.4508 1.4177 0.221 0.063 0.0627 1.0048 1.2519 1.1711 1.1612 0.6264 1.3629 1.583 1.5138 1.4939 0.3164 0.0615 0.058 1.073 1.54 1.4736 1.473 0.0921 1.3141 1.6473 1.614 1.6017 0.2267 0.0614 0.0608 0.0599 0.0595 0.0592 0.06 0.0606 0.0594 0.0593 0.0596 0.0585 0.0588 0.0572
91 55063s 0.0651 0.0745 0.0631 0.0638 0.0645 0.063 0.063 0.0654 0.0631 0.0668 0.0634 0.0626 0.0609 0.2713 0.3441 0.2785 0.2426 0.0935 1.2467 1.4416 1.3293 1.3215 0.2291 0.06 0.0609 0.4073 0.459 0.4373 0.4063 0.0949 1.2912 1.4514 1.3669 1.3349 0.22 0.0647 0.0592 0.6151 0.6521 0.5976 0.6273 0.0971 1.3065 1.4851 1.3974 1.3565 0.2212 0.0615 0.0578 0.84 0.8842 0.8497 0.8815 0.093 1.3387 1.5351 1.4517 1.4182 0.2213 0.0631 0.0626 1.0067 1.2536 1.1721 1.1626 0.6473 1.3702 1.5848 1.516 1.4956 0.3282 0.0592 0.0583 1.0804 1.5413 1.4737 1.4749 0.0924 1.3272 1.6542 1.617 1.604 0.2268 0.0614 0.061 0.06 0.0596 0.0591 0.0601 0.0605 0.0596 0.0593 0.0596 0.0584 0.0592 0.058
92 55706s 0.0648 0.0666 0.0628 0.0635 0.0639 0.0627 0.0629 0.0654 0.0631 0.0669 0.0631 0.0624 0.0608 0.2715 0.3443 0.2789 0.243 0.0936 1.247 1.4408 1.3286 1.3221 0.2291 0.0606 0.0613 0.4082 0.4594 0.438 0.4065 0.0948 1.2914 1.4507 1.3657 1.334 0.2201 0.0648 0.0596 0.6155 0.6532 0.5985 0.6277 0.0971 1.3083 1.485 1.3963 1.3552 0.2212 0.0619 0.0579 0.8407 0.884 0.8498 0.8819 0.093 1.3418 1.5353 1.4513 1.4187 0.2213 0.0627 0.0627 1.006 1.253 1.1719 1.1631 0.6682 1.3762 1.5839 1.5148 1.4957 0.3409 0.0593 0.0584 1.0864 1.5399 1.4727 1.4743 0.0924 1.3393 1.6541 1.6154 1.6033 0.2269 0.0615 0.0609 0.06 0.0597 0.0591 0.0601 0.0607 0.0595 0.0593 0.0596 0.0585 0.0591 0.058
93 56346s 0.0648 0.0668 0.0629 0.0636 0.0641 0.0628 0.0627 0.065 0.0629 0.0667 0.0631 0.0622 0.0609 0.272 0.3448 0.2791 0.2432 0.0937 1.2473 1.4411 1.3284 1.3224 0.2293 0.0625 0.06 0.4082 0.4586 0.4378 0.4067 0.0949 1.2934 1.4525 1.366 1.3358 0.2201 0.0647 0.0594 0.616 0.653 0.5986 0.6281 0.0972 1.3104 1.4855 1.3959 1.3574 0.2213 0.0613 0.0588 0.8418 0.8843 0.8495 0.8829 0.093 1.3456 1.5366 1.452 1.4192 0.2212 0.0628 0.0625 1.0062 1.2533 1.1715 1.1635 0.69 1.3825 1.5858 1.5149 1.4961 0.3554 0.0593 0.0588 1.0926 1.5404 1.4734 1.475 0.0923 1.3508 1.6585 1.6179 1.6051 0.2268 0.0614 0.0608 0.06 0.0596 0.059 0.0599 0.0605 0.0593 0.0592 0.0593 0.0585 0.059 0.0577
94 56987s 0.0649 0.0737 0.0628 0.0636 0.0643 0.0629 0.0627 0.065 0.0627 0.0667 0.063 0.0623 0.0609 0.2726 0.345 0.2789 0.2434 0.0937 1.249 1.4412 1.3282 1.3235 0.2295 0.0591 0.0611 0.408 0.46 0.4383 0.4071 0.0949 1.2942 1.4519 1.3657 1.336 0.2202 0.0648 0.0596 0.6159 0.653 0.5982 0.6285 0.0972 1.3125 1.4849 1.3961 1.3574 0.2214 0.0618 0.0583 0.8424 0.8841 0.8497 0.8836 0.093 1.3487 1.5369 1.4517 1.4196 0.2213 0.0628 0.0625 1.0069 1.254 1.1719 1.1638 0.7109 1.3879 1.5852 1.5152 1.4965 0.3683 0.0607 0.0583 1.0978 1.5398 1.4729 1.475 0.0924 1.3628 1.6596 1.6176 1.6063 0.227 0.0614 0.0607 0.0599 0.0596 0.0591 0.06 0.0604 0.0595 0.0593 0.0593 0.0585 0.0589 0.058
95 57627s 0.0649 0.0712 0.0629 0.0636 0.0639 0.0629 0.0626 0.0651 0.0631 0.0669 0.0632 0.0625 0.0609 0.2734 0.3453 0.28 0.2443 0.0938 1.2484 1.4413 1.3281 1.3235 0.2296 0.0624 0.0611 0.4087 0.4606 0.4392 0.4079 0.095 1.2948 1.4518 1.3654 1.3363 0.2204 0.0648 0.0595 0.6168 0.6527 0.5988 0.6292 0.0974 1.3135 1.4857 1.3966 1.358 0.2215 0.0609 0.0582 0.8434 0.8845 0.8498 0.884 0.0931 1.3508 1.5362 1.4512 1.4204 0.2215 0.0628 0.0624 1.0067 1.254 1.1714 1.1639 0.734 1.3921 1.5857 1.5156 1.4962 0.3839 0.059 0.0596 1.1036 1.5395 1.4729 1.4754 0.0924 1.3733 1.663 1.6189 1.6068 0.2271 0.0613 0.0608 0.0599 0.0596 0.0592 0.06 0.0605 0.0594 0.0593 0.0594 0.0585 0.059 0.0579
96 58267s 0.0647 0.0686 0.0629 0.0635 0.0642 0.0629 0.0627 0.0651 0.0629 0.0673 0.0632 0.0624 0.061 0.2739 0.3461 0.2808 0.2448 0.0939 1.2482 1.4409 1.3271 1.3239 0.2299 0.0581 0.0612 0.4084 0.4604 0.4389 0.408 0.095 1.2955 1.453 1.3652 1.337 0.2204 0.0649 0.0596 0.6171 0.6523 0.5993 0.6295 0.0973 1.3149 1.4863 1.3966 1.3597 0.2215 0.0628 0.0594 0.8434 0.8844 0.8501 0.8845 0.0931 1.353 1.5371 1.4512 1.4207 0.2215 0.0626 0.0624 1.0071 1.2538 1.1713 1.1642 0.758 1.3963 1.5857 1.5157 1.4968 0.3997 0.0598 0.0579 1.1099 1.5408 1.4731 1.4758 0.0925 1.3845 1.6644 1.6187 1.6062 0.2271 0.0611 0.0608 0.0599 0.0594 0.059 0.06 0.0604 0.0595 0.0593 0.0595 0.0585 0.059 0.0573
97 58907s 0.0647 0.0668 0.0627 0.0635 0.0641 0.063 0.0629 0.065 0.0631 0.0667 0.063 0.0624 0.061 0.2739 0.3458 0.2804 0.2445 0.0938 1.2488 1.4414 1.3275 1.3246 0.23 0.0577 0.061 0.4079 0.4601 0.4389 0.4078 0.0949 1.2964 1.4523 1.3655 1.3376 0.2204 0.0647 0.0595 0.6171 0.6532 0.5998 0.6287 0.0973 1.3151 1.4858 1.3957 1.359 0.2215 0.0621 0.0586 0.8434 0.8845 0.8497 0.8842 0.0931 1.3541 1.5375 1.451 1.4199 0.2215 0.0625 0.0625 1.0072 1.2537 1.1712 1.1647 0.7801 1.3999 1.5862 1.5147 1.4969 0.417 0.0606 0.0586 1.1149 1.5403 1.4725 1.4767 0.0924 1.3952 1.6645 1.6187 1.6069 0.2271 0.0612 0.0605 0.0598 0.0596 0.0591 0.06 0.0602 0.0592 0.0592 0.0593 0.0584 0.0589 0.0571
98 59547s 0.0652 0.0742 0.063 0.0637 0.0643 0.063 0.0626 0.0653 0.0632 0.0668 0.0633 0.0628 0.0609 0.2746 0.3461 0.2808 0.245 0.0938 1.249 1.441 1.327 1.3257 0.2303 0.0578 0.0616 0.4083 0.4603 0.4392 0.4085 0.095 1.2963 1.4528 1.3656 1.3376 0.2204 0.0649 0.0597 0.6178 0.6539 0.6002 0.6293 0.0972 1.3159 1.4863 1.3965 1.3598 0.2219 0.0618 0.058 0.8448 0.8848 0.8496 0.885 0.0931 1.3566 1.5369 1.4505 1.4216 0.2217 0.0627 0.0623 1.0085 1.2543 1.1719 1.1658 0.8034 1.4038 1.5868 1.5146 1.4981 0.4314 0.0601 0.0578 1.1216 1.5406 1.4723 1.4764 0.0925 1.4052 1.6684 1.6181 1.6091 0.2273 0.0613 0.0607 0.0599 0.0594 0.0589 0.0599 0.0604 0.0594 0.0593 0.0594 0.0585 0.059 0.0578
99 60188s 0.0648 0.0745 0.0628 0.0634 0.0642 0.0628 0.0628 0.0652 0.0629 0.0665 0.063 0.0625 0.0608 0.2748 0.3464 0.2807 0.2452 0.0937 1.2489 1.4413 1.3271 1.326 0.2305 0.0625 0.0607 0.4088 0.4609 0.439 0.4087 0.0949 1.2971 1.4535 1.3651 1.3378 0.2205 0.0647 0.0593 0.6179 0.6542 0.6001 0.6302 0.0973 1.3169 1.4871 1.3952 1.3607 0.2217 0.0621 0.0581 0.8464 0.8848 0.8495 0.8853 0.0933 1.3573 1.5379 1.4505 1.4214 0.2217 0.0624 0.0625 1.0088 1.2542 1.1711 1.1657 0.8278 1.4063 1.5884 1.514 1.4979 0.4485 0.0601 0.0581 1.1277 1.5403 1.4727 1.4773 0.0924 1.4153 1.67 1.6207 1.6094 0.2273 0.0612 0.0609 0.06 0.0595 0.0589 0.06 0.0603 0.0594 0.0592 0.0593 0.0584 0.0591 0.0573
100 60828s 0.0647 0.067 0.0628 0.0635 0.0642 0.0627 0.0626 0.0651 0.063 0.0668 0.0632 0.063 0.0608 0.2749 0.3465 0.2812 0.2455 0.0938 1.2494 1.4414 1.3267 1.3265 0.2306 0.0597 0.0607 0.4088 0.4618 0.4402 0.4095 0.095 1.2969 1.453 1.3651 1.338 0.2207 0.0647 0.0595 0.6182 0.6546 0.6002 0.6305 0.0973 1.3169 1.4866 1.3957 1.3604 0.222 0.0594 0.0584 0.8459 0.8852 0.8497 0.8855 0.0934 1.3581 1.5372 1.45 1.4218 0.2218 0.0625 0.0624 1.0087 1.2545 1.171 1.1663 0.8505 1.4091 1.5882 1.5149 1.4983 0.4658 0.0598 0.0594 1.1336 1.54 1.4722 1.4762 0.0924 1.4243 1.6697 1.6193 1.6086 0.2274 0.0612 0.061 0.06 0.0596 0.059 0.06 0.0604 0.0595 0.0593 0.0594 0.0585 0.059 0.0571
101 61468s 0.0648 0.0743 0.0629 0.0635 0.0643 0.063 0.0626 0.0653 0.063 0.0668 0.0632 0.0624 0.061 0.2752 0.3464 0.2811 0.2456 0.0939 1.2497 1.4425 1.3273 1.3271 0.231 0.0581 0.0613 0.4093 0.463 0.4409 0.4102 0.0951 1.2971 1.453 1.3649 1.3395 0.2209 0.0649 0.0596 0.6183 0.6545 0.6004 0.6311 0.0975 1.3181 1.487 1.3953 1.3615 0.2221 0.0631 0.0584 0.8471 0.8855 0.8497 0.8866 0.0934 1.3596 1.5391 1.4496 1.4227 0.2221 0.0625 0.0627 1.0097 1.2546 1.1722 1.1664 0.8748 1.411 1.5879 1.5149 1.4987 0.4835 0.0599 0.058 1.1404 1.5405 1.4718 1.4775 0.0926 1.4327 1.6713 1.6187 1.6096 0.2276 0.0617 0.061 0.06 0.0595 0.0589 0.0599 0.0602 0.0594 0.0593 0.0595 0.0586 0.0588 0.0575
102 62108s 0.065 0.0667 0.0631 0.0637 0.0644 0.063 0.0626 0.0653 0.0631 0.0669 0.0633 0.0624 0.061 0.2754 0.3465 0.2813 0.2458 0.0939 1.2495 1.4422 1.3272 1.3274 0.2312 0.061 0.0615 0.4093 0.4623 0.441 0.4102 0.0952 1.2971 1.4525 1.3645 1.3395 0.221 0.0652 0.0597 0.6193 0.6548 0.601 0.6319 0.0975 1.318 1.4875 1.3952 1.3616 0.2222 0.0597 0.059 0.8477 0.8854 0.8503 0.8866 0.0936 1.361 1.5385 1.4505 1.4219 0.2222 0.0624 0.0625 1.0097 1.2553 1.1713 1.1669 0.9028 1.4132 1.5875 1.514 1.4994 0.5025 0.0598 0.0597 1.149 1.5403 1.4726 1.4778 0.0926 1.4416 1.6719 1.6205 1.6091 0.2278 0.0616 0.0609 0.0601 0.0594 0.0592 0.0601 0.0603 0.0593 0.0594 0.0595 0.0587 0.059 0.057
103 62749s 0.0651 0.0667 0.063 0.0638 0.0642 0.0627 0.0627 0.0651 0.063 0.0669 0.0634 0.0624 0.061 0.276 0.3473 0.282 0.2465 0.094 1.2489 1.4413 1.3268 1.328 0.2313 0.0605 0.0612 0.41 0.4632 0.4416 0.4108 0.0952 1.2966 1.4531 1.3636 1.3392 0.2211 0.0647 0.0597 0.6194 0.6543 0.6008 0.6324 0.0974 1.319 1.4871 1.395 1.3618 0.222 0.0633 0.058 0.8482 0.8855 0.85 0.8866 0.0932 1.3614 1.5386 1.4502 1.4232 0.2221 0.0626 0.0623 1.0101 1.2546 1.1715 1.1665 0.9276 1.4142 1.5875 1.5139 1.4988 0.5225 0.0593 0.059 1.1547 1.5406 1.4718 1.477 0.0925 1.4491 1.6713 1.6192 1.6092 0.2278 0.0617 0.0607 0.0599 0.0594 0.059 0.0598 0.0601 0.0593 0.0593 0.0595 0.0586 0.0588 0.0573
104 63389s 0.065 0.0738 0.0629 0.0637 0.0642 0.0628 0.0625 0.065 0.0629 0.0673 0.0632 0.0624 0.0609 0.2761 0.3474 0.2823 0.2465 0.0939 1.2498 1.4429 1.3279 1.3289 0.2316 0.0623 0.0614 0.4104 0.4636 0.4421 0.4113 0.0951 1.2974 1.4534 1.365 1.3402 0.2211 0.0647 0.0597 0.6201 0.6549 0.6013 0.6329 0.0976 1.3199 1.4879 1.3948 1.3623 0.2223 0.0606 0.0587 0.8492 0.8854 0.8497 0.8872 0.0934 1.3619 1.5396 1.4499 1.4232 0.2223 0.0624 0.0625 1.0113 1.2549 1.1716 1.1671 0.9557 1.4167 1.5892 1.5138 1.5003 0.5422 0.0585 0.0599 1.1625 1.5416 1.4724 1.4788 0.0926 1.4569 1.6739 1.6206 1.612 0.2281 0.0619 0.0608 0.0599 0.0594 0.059 0.0599 0.0603 0.0593 0.0592 0.0594 0.0587 0.0589 0.0571
105 64029s 0.0648 0.07 0.0627 0.0637 0.064 0.0629 0.0624 0.065 0.0631 0.0666 0.0631 0.0626 0.0609 0.2762 0.3472 0.2821 0.2465 0.0941 1.25 1.4436 1.3266 1.3292 0.2319 0.0639 0.0623 0.4099 0.463 0.4419 0.4111 0.0952 1.2976 1.454 1.3644 1.341 0.2212 0.0647 0.0597 0.6199 0.655 0.6012 0.6335 0.0976 1.3202 1.488 1.3949 1.3625 0.2224 0.0616 0.059 0.8493 0.8852 0.8503 0.8877 0.0935 1.3635 1.5394 1.4502 1.4246 0.2222 0.0623 0.0624 1.0115 1.2551 1.1713 1.1676 0.9818 1.4174 1.5892 1.5135 1.5004 0.5629 0.0591 0.0585 1.1688 1.5411 1.4725 1.4787 0.0926 1.464 1.6745 1.6199 1.6122 0.2282 0.0615 0.0607 0.06 0.0595 0.0591 0.0599 0.0601 0.0591 0.0593 0.0597 0.0585 0.0588 0.0577
106 64669s 0.0651 0.0668 0.063 0.0639 0.0643 0.0628 0.0626 0.0653 0.0631 0.0668 0.0632 0.0626 0.061 0.2768 0.3477 0.2827 0.247 0.094 1.249 1.4417 1.3267 1.3288 0.232 0.0586 0.0611 0.4103 0.4628 0.4417 0.4113 0.0952 1.2967 1.453 1.364 1.3406 0.2213 0.0648 0.0595 0.6207 0.6545 0.6014 0.6335 0.0976 1.3192 1.4874 1.3939 1.3626 0.2224 0.0638 0.0588 0.8497 0.8854 0.8503 0.8875 0.0933 1.3628 1.5375 1.45 1.4232 0.2224 0.0624 0.0623 1.0121 1.2549 1.1717 1.1684 1.0071 1.4186 1.5881 1.5128 1.4994 0.5829 0.0598 0.0578 1.1752 1.5408 1.4724 1.4793 0.0926 1.47 1.674 1.6184 1.6105 0.2284 0.0614 0.0606 0.06 0.0595 0.0589 0.0599 0.06 0.0592 0.0593 0.0594 0.0586 0.0588 0.0574
107 65309s 0.0653 0.0749 0.063 0.0637 0.0641 0.0629 0.0624 0.0652 0.0631 0.0668 0.0632 0.0625 0.0609 0.2772 0.3479 0.2829 0.2472 0.0941 1.2493 1.4422 1.3267 1.3301 0.2322 0.0617 0.0593 0.4103 0.4625 0.4419 0.4116 0.0951 1.2968 1.453 1.3638 1.3408 0.2212 0.0646 0.0596 0.6204 0.6555 0.602 0.6334 0.0976 1.3184 1.4868 1.3936 1.3619 0.2225 0.062 0.0582 0.8495 0.8847 0.8492 0.887 0.0935 1.3625 1.5381 1.4481 1.4226 0.2225 0.0624 0.0622 1.0124 1.2548 1.1714 1.1677 1.0318 1.4187 1.5878 1.5123 1.4993 0.6025 0.0607 0.0585 1.1817 1.5394 1.4715 1.4788 0.0926 1.4764 1.6751 1.6182 1.6102 0.2284 0.0612 0.0609 0.0601 0.0597 0.059 0.0599 0.0602 0.0592 0.0592 0.0595 0.0586 0.059 0.0576
108 65950s 0.0648 0.0669 0.0628 0.0635 0.064 0.0626 0.0624 0.0652 0.0627 0.0666 0.0632 0.0626 0.0608 0.2776 0.3482 0.2833 0.2476 0.094 1.2492 1.4426 1.3269 1.3302 0.2323 0.0587 0.0615 0.4105 0.4637 0.4425 0.4118 0.095 1.2966 1.4532 1.363 1.3406 0.2213 0.0646 0.0593 0.6208 0.6552 0.6017 0.6336 0.0976 1.3191 1.4871 1.3936 1.3625 0.2226 0.0604 0.0582 0.8509 0.8849 0.8484 0.888 0.0934 1.3633 1.5381 1.4489 1.4237 0.2224 0.0623 0.0622 1.0128 1.2547 1.1711 1.1675 1.0584 1.4194 1.588 1.5118 1.4996 0.6239 0.0595 0.0584 1.188 1.5408 1.4706 1.4796 0.0926 1.4821 1.6761 1.6186 1.6111 0.2287 0.0611 0.0607 0.06 0.0595 0.059 0.0599 0.0602 0.0592 0.0593 0.0595 0.0585 0.0589 0.0574
109 66590s 0.0648 0.0669 0.0628 0.0638 0.0641 0.0628 0.0626 0.0651 0.0629 0.0668 0.063 0.0624 0.061 0.2784 0.3486 0.2837 0.2481 0.094 1.2491 1.4415 1.3261 1.3308 0.2324 0.0617 0.0607 0.4106 0.4633 0.4427 0.412 0.0951 1.2973 1.4535 1.3636 1.3413 0.2214 0.0645 0.0595 0.6205 0.6556 0.6014 0.6339 0.0975 1.3191 1.4877 1.3934 1.3624 0.2227 0.0596 0.0584 0.8515 0.8851 0.8491 0.8878 0.0934 1.3639 1.5387 1.449 1.4245 0.2225 0.0622 0.0622 1.0135 1.2552 1.1714 1.1685 1.0835 1.4208 1.5883 1.5125 1.5003 0.6449 0.0604 0.0595 1.1947 1.5412 1.472 1.4796 0.0927 1.4883 1.6771 1.6195 1.6117 0.2289 0.0612 0.0608 0.06 0.0596 0.059 0.0599 0.0603 0.0594 0.0593 0.0595 0.0586 0.059 0.0582
110 67230s 0.0648 0.0672 0.0628 0.0636 0.0642 0.0629 0.0625 0.0653 0.063 0.0668 0.0632 0.0625 0.0608 0.2784 0.3484 0.2836 0.248 0.0941 1.2489 1.4427 1.3263 1.3313 0.2326 0.0625 0.0611 0.4116 0.4655 0.4429 0.4128 0.0951 1.2964 1.4523 1.3625 1.341 0.2216 0.0646 0.0595 0.6213 0.6556 0.6009 0.6342 0.0976 1.3196 1.4874 1.3934 1.3629 0.2228 0.0631 0.0583 0.8514 0.8854 0.8494 0.888 0.0935 1.3637 1.5384 1.4487 1.4237 0.2227 0.0623 0.0622 1.014 1.2549 1.172 1.1681 1.107 1.4211 1.5883 1.5118 1.5002 0.6668 0.059 0.0595 1.1999 1.5403 1.4699 1.4785 0.0928 1.4926 1.6763 1.6186 1.6103 0.2293 0.0613 0.0607 0.06 0.0595 0.0589 0.0598 0.0604 0.0592 0.0594 0.0596 0.0586 0.0588 0.0579
111 67870s 0.0653 0.0668 0.0628 0.0637 0.064 0.0626 0.0624 0.065 0.0629 0.0668 0.0629 0.0625 0.0606 0.2788 0.349 0.2843 0.2485 0.0941 1.2487 1.4413 1.3261 1.3308 0.2328 0.0605 0.0608 0.4118 0.4646 0.443 0.4127 0.0951 1.2962 1.4527 1.363 1.3415 0.2216 0.0644 0.0593 0.6215 0.6554 0.6012 0.6343 0.0976 1.3189 1.4874 1.3933 1.3633 0.2227 0.062 0.0601 0.8522 0.8855 0.8498 0.8886 0.0934 1.3633 1.5384 1.4479 1.4244 0.2227 0.0625 0.0618 1.0142 1.2549 1.1714 1.1687 1.1294 1.4213 1.5883 1.5115 1.501 0.6888 0.0609 0.0577 1.2061 1.5404 1.4707 1.4791 0.0926 1.4986 1.6751 1.618 1.6111 0.2295 0.061 0.0604 0.0597 0.0594 0.0588 0.0596 0.0601 0.0591 0.0592 0.0606 0.0586 0.0586 0.0575
112 68510s 0.0652 0.0744 0.0629 0.0635 0.064 0.0626 0.0625 0.0652 0.0628 0.0668 0.0631 0.0624 0.061 0.2791 0.3491 0.2843 0.2486 0.0942 1.2488 1.4422 1.3266 1.3318 0.2329 0.0609 0.0631 0.412 0.4647 0.4438 0.4131 0.0953 1.2968 1.4539 1.3634 1.3428 0.2217 0.0643 0.0594 0.6218 0.6551 0.6015 0.6355 0.0975 1.3197 1.4879 1.3934 1.3652 0.2229 0.0612 0.0583 0.853 0.8853 0.8496 0.8891 0.0935 1.3642 1.5393 1.4491 1.426 0.2229 0.0622 0.0621 1.0148 1.2554 1.1719 1.169 1.1524 1.4223 1.5883 1.512 1.5015 0.712 0.0591 0.0592 1.2121 1.5415 1.4723 1.481 0.0928 1.5038 1.6779 1.6189 1.6129 0.23 0.061 0.0605 0.0599 0.0597 0.0589 0.0598 0.0599 0.0592 0.0594 0.0601 0.0587 0.0586 0.0574
113 69154s 0.065 0.0669 0.063 0.0638 0.0641 0.0628 0.0625 0.0651 0.063 0.0669 0.0632 0.0625 0.061 0.2796 0.3495 0.2849 0.2493 0.0942 1.2492 1.4419 1.327 1.3317 0.2331 0.058 0.0612 0.4118 0.4653 0.4438 0.4135 0.0954 1.2968 1.4533 1.3632 1.3428 0.2218 0.0645 0.0594 0.6223 0.6562 0.6019 0.6358 0.0977 1.3189 1.4874 1.3931 1.3648 0.2229 0.0616 0.0582 0.8532 0.8856 0.8495 0.889 0.0936 1.3641 1.5387 1.4476 1.4256 0.2229 0.0624 0.0621 1.0152 1.2557 1.1719 1.1695 1.1714 1.4221 1.5884 1.5113 1.5014 0.7346 0.0594 0.0601 1.2174 1.5409 1.4713 1.4801 0.0928 1.5085 1.677 1.6192 1.6121 0.2301 0.061 0.0606 0.0599 0.0595 0.0589 0.0598 0.06 0.0592 0.0593 0.0601 0.0586 0.0589 0.0574
114 69794s 0.0649 0.0747 0.063 0.0637 0.064 0.0627 0.0626 0.0649 0.0631 0.0667 0.0632 0.0625 0.0611 0.2796 0.3496 0.2853 0.2494 0.0944 1.2491 1.4422 1.3263 1.3324 0.233 0.0603 0.0623 0.4122 0.4649 0.444 0.414 0.0953 1.2967 1.4538 1.3639 1.3432 0.2219 0.0644 0.0597 0.6219 0.6563 0.6022 0.6361 0.0977 1.3185 1.4884 1.3933 1.3639 0.2231 0.0619 0.0579 0.8536 0.8855 0.8498 0.8899 0.0937 1.3643 1.5392 1.4486 1.4255 0.223 0.0623 0.062 1.016 1.2559 1.1716 1.1698 1.1873 1.4223 1.589 1.5112 1.5021 0.7575 0.0588 0.0584 1.2238 1.5402 1.4718 1.4809 0.0929 1.512 1.677 1.6185 1.6125 0.2302 0.061 0.0609 0.06 0.0594 0.0591 0.0598 0.0601 0.0594 0.0594 0.0595 0.0585 0.059 0.0586
115 70434s 0.0651 0.0745 0.0629 0.0636 0.0642 0.0627 0.0625 0.0651 0.063 0.0667 0.0631 0.0622 0.0609 0.2797 0.3493 0.285 0.2492 0.0944 1.2492 1.443 1.3265 1.3323 0.2333 0.0592 0.0612 0.412 0.4642 0.4438 0.4141 0.0952 1.2966 1.4548 1.3639 1.3438 0.222 0.0645 0.0594 0.6228 0.6562 0.6022 0.6357 0.0976 1.3186 1.4884 1.3925 1.3646 0.223 0.0615 0.0583 0.8544 0.8857 0.8501 0.89 0.0936 1.3647 1.5389 1.4486 1.4263 0.2231 0.0622 0.0623 1.0165 1.2559 1.1717 1.1699 1.2009 1.4224 1.5901 1.5114 1.5018 0.7798 0.06 0.0582 1.2288 1.5405 1.4717 1.4808 0.0928 1.5149 1.6783 1.6186 1.6129 0.2303 0.0612 0.0606 0.0598 0.0595 0.059 0.06 0.0601 0.0591 0.0593 0.0601 0.0587 0.0588 0.058
116 71074s 0.0649 0.0668 0.0629 0.0636 0.064 0.0627 0.0624 0.0652 0.0629 0.0667 0.0632 0.0623 0.0609 0.28 0.3496 0.2851 0.2497 0.0943 1.2481 1.4421 1.3261 1.3319 0.2333 0.0614 0.0604 0.4121 0.4662 0.4441 0.4149 0.0953 1.2956 1.4521 1.3631 1.3432 0.222 0.0643 0.0596 0.6232 0.657 0.6025 0.6362 0.0977 1.3192 1.4873 1.3926 1.3648 0.2232 0.0617 0.0583 0.8542 0.8855 0.8503 0.8897 0.0935 1.364 1.5383 1.4475 1.4254 0.2231 0.0622 0.0622 1.0166 1.2556 1.1715 1.1699 1.2121 1.422 1.5883 1.51 1.5018 0.8061 0.0603 0.0585 1.2326 1.5414 1.47 1.4804 0.0929 1.5174 1.6764 1.6171 1.611 0.2305 0.0612 0.0607 0.0597 0.0593 0.0589 0.0597 0.0599 0.0591 0.0593 0.0602 0.0587 0.0588 0.0572
117 71714s 0.0649 0.0746 0.0629 0.0637 0.064 0.0625 0.0627 0.0653 0.0629 0.0669 0.0632 0.0626 0.0609 0.2803 0.3499 0.2857 0.2501 0.0943 1.248 1.4414 1.326 1.3325 0.2331 0.0585 0.0603 0.4123 0.4649 0.4438 0.4149 0.0952 1.2963 1.4544 1.3633 1.3438 0.2219 0.0642 0.0594 0.6232 0.6572 0.6019 0.6358 0.0977 1.3184 1.4877 1.3925 1.3649 0.2231 0.061 0.0587 0.8548 0.886 0.8501 0.8902 0.0934 1.3643 1.5389 1.448 1.4266 0.2231 0.0622 0.0623 1.0172 1.2554 1.1713 1.1698 1.2225 1.422 1.5882 1.5099 1.5017 0.829 0.0594 0.0584 1.2377 1.5408 1.4698 1.4812 0.0926 1.5198 1.6784 1.6163 1.6124 0.2305 0.0612 0.0606 0.0597 0.0592 0.0589 0.0596 0.0599 0.0591 0.0593 0.0607 0.0587 0.0587 0.0573
118 72355s 0.0648 0.0668 0.0629 0.0636 0.064 0.0629 0.0626 0.0652 0.0628 0.0667 0.063 0.0625 0.0609 0.2802 0.3497 0.2854 0.2501 0.0942 1.2487 1.4427 1.3269 1.3334 0.2334 0.0593 0.0593 0.4122 0.4653 0.4439 0.415 0.0954 1.2963 1.4542 1.3639 1.3444 0.2221 0.0645 0.0595 0.6233 0.6574 0.6025 0.6362 0.0978 1.3187 1.4875 1.3927 1.3649 0.2233 0.0633 0.0593 0.8558 0.886 0.8501 0.8904 0.0935 1.3642 1.5394 1.4478 1.4259 0.2232 0.0621 0.0625 1.018 1.2561 1.1719 1.1701 1.2305 1.4221 1.5887 1.5107 1.5027 0.8534 0.0606 0.0581 1.242 1.5407 1.4707 1.4812 0.0928 1.5225 1.6773 1.6178 1.6128 0.231 0.061 0.0606 0.0598 0.0592 0.0588 0.0598 0.0599 0.0592 0.0593 0.0603 0.0587 0.0587 0.0578
119 72995s 0.0649 0.0668 0.0627 0.0635 0.0641 0.0627 0.0625 0.0649 0.0628 0.0667 0.0629 0.0625 0.0608 0.281 0.3505 0.2863 0.2508 0.0945 1.2481 1.4418 1.3261 1.3324 0.2334 0.0621 0.0605 0.4129 0.4672 0.4447 0.4156 0.0953 1.296 1.4536 1.3625 1.3435 0.2222 0.0643 0.0593 0.6239 0.6571 0.6021 0.6365 0.0977 1.3178 1.4873 1.392 1.3655 0.2235 0.0631 0.0588 0.8566 0.8861 0.8497 0.8904 0.0935 1.3638 1.5392 1.4476 1.4266 0.2234 0.0621 0.0623 1.0183 1.2563 1.1721 1.171 1.2361 1.4223 1.5896 1.5099 1.5016 0.8759 0.0598 0.0581 1.2458 1.5407 1.4705 1.4815 0.0927 1.5242 1.6778 1.6175 1.6117 0.2311 0.0611 0.0607 0.0598 0.0593 0.0588 0.0597 0.06 0.0591 0.0594 0.0607 0.0586 0.0587 0.0577
120 73635s 0.0652 0.0667 0.0629 0.0636 0.0638 0.0625 0.0625 0.065 0.0629 0.0667 0.0628 0.0622 0.0608 0.2811 0.3505 0.2864 0.2512 0.0945 1.2485 1.4428 1.3273 1.3335 0.2333 0.0618 0.06 0.4129 0.4675 0.4449 0.4161 0.0953 1.2962 1.4534 1.3639 1.3446 0.2223 0.0644 0.0595 0.6243 0.6572 0.6023 0.6374 0.0976 1.3183 1.4886 1.393 1.3661 0.2236 0.0617 0.0585 0.8561 0.8863 0.8502 0.8906 0.0935 1.3643 1.5395 1.4477 1.4269 0.2235 0.0619 0.0624 1.0193 1.257 1.1719 1.1713 1.2418 1.4233 1.589 1.509 1.5028 0.9009 0.0599 0.0581 1.25 1.5409 1.4714 1.4832 0.093 1.5271 1.6786 1.6181 1.6141 0.2311 0.061 0.0607 0.0598 0.0593 0.059 0.0596 0.06 0.0591 0.0593 0.0607 0.0586 0.0587 0.058
121 74275s 0.065 0.0742 0.0627 0.0636 0.064 0.0627 0.0624 0.0653 0.063 0.0669 0.0629 0.0623 0.0609 0.2814 0.3508 0.2869 0.2513 0.0945 1.2484 1.442 1.3274 1.3338 0.2333 0.0627 0.0625 0.413 0.4672 0.4449 0.4162 0.0954 1.2964 1.4534 1.3633 1.345 0.2223 0.0643 0.0592 0.6244 0.6577 0.6025 0.6381 0.0977 1.3175 1.4887 1.3929 1.366 0.2236 0.0617 0.0594 0.8571 0.8864 0.8504 0.8908 0.0936 1.3647 1.5394 1.4484 1.4276 0.2234 0.0618 0.0623 1.0195 1.2566 1.1722 1.1713 1.2464 1.4221 1.5896 1.51 1.503 0.9237 0.0631 0.0587 1.2533 1.5413 1.4692 1.4809 0.0928 1.5283 1.6789 1.6178 1.6125 0.2314 0.061 0.0605 0.0598 0.0594 0.059 0.0595 0.0599 0.0591 0.0593 0.0609 0.0585 0.0586 0.0582
122 74915s 0.0648 0.0747 0.0629 0.0635 0.0641 0.0627 0.0624 0.0651 0.0626 0.0667 0.0631 0.0625 0.0609 0.2823 0.3516 0.2875 0.2522 0.0949 1.2486 1.4423 1.3275 1.3341 0.2335 0.06 0.0609 0.4132 0.4678 0.4455 0.4164 0.0955 1.296 1.4547 1.3637 1.3449 0.2225 0.0645 0.0594 0.6248 0.6569 0.6024 0.6388 0.0977 1.3182 1.4892 1.3937 1.3668 0.2237 0.0621 0.059 0.858 0.8866 0.8501 0.8914 0.0936 1.3639 1.5394 1.4486 1.4275 0.2235 0.0621 0.0626 1.0198 1.2568 1.1716 1.1715 1.2503 1.423 1.5906 1.5098 1.5029 0.9492 0.0602 0.0592 1.2568 1.5421 1.4705 1.4835 0.0929 1.5301 1.6791 1.6167 1.6131 0.2315 0.061 0.0609 0.06 0.0595 0.0589 0.0597 0.0602 0.0593 0.0592 0.0598 0.0586 0.0588 0.0586
123 75556s 0.0652 0.0672 0.0628 0.0636 0.064 0.0628 0.0626 0.0651 0.063 0.0667 0.0632 0.0624 0.061 0.282 0.3511 0.2875 0.252 0.0948 1.249 1.4427 1.3281 1.3341 0.2335 0.0594 0.0614 0.4128 0.4667 0.445 0.4163 0.0954 1.2963 1.4547 1.3642 1.3451 0.2225 0.0648 0.0593 0.6248 0.6579 0.6028 0.6384 0.0979 1.3176 1.4891 1.3923 1.3671 0.2238 0.0617 0.0591 0.8584 0.8867 0.8495 0.8916 0.0937 1.3629 1.5396 1.447 1.4274 0.2236 0.0623 0.0625 1.0202 1.2568 1.1715 1.1713 1.2537 1.4223 1.5879 1.5088 1.5031 0.9736 0.06 0.0594 1.2605 1.5414 1.4707 1.4825 0.0929 1.5307 1.679 1.6181 1.6129 0.2315 0.0611 0.0606 0.0598 0.0595 0.059 0.0597 0.0599 0.0592 0.0592 0.0596 0.0586 0.0587 0.0574
124 76196s 0.0651 0.0669 0.0629 0.0636 0.0642 0.0626 0.0623 0.065 0.0627 0.0666 0.0629 0.0623 0.0608 0.2821 0.3513 0.2873 0.2519 0.0947 1.249 1.4431 1.328 1.3353 0.2335 0.0594 0.0608 0.4135 0.4671 0.445 0.4166 0.0954 1.2961 1.4548 1.3645 1.3451 0.2226 0.0645 0.0594 0.6248 0.6584 0.6035 0.639 0.0978 1.318 1.4886 1.393 1.3673 0.224 0.063 0.0605 0.859 0.8866 0.8504 0.8916 0.0937 1.3632 1.5395 1.4479 1.4279 0.2237 0.0621 0.0623 1.0209 1.2575 1.1721 1.1722 1.2565 1.423 1.5906 1.5093 1.5035 0.9957 0.0607 0.0581 1.2629 1.5411 1.4702 1.4838 0.0929 1.5325 1.679 1.6175 1.613 0.2316 0.0609 0.0606 0.0598 0.0595 0.0589 0.0596 0.0599 0.0592 0.0593 0.06 0.0585 0.0586 0.0573
125 76836s 0.0652 0.0748 0.0629 0.0634 0.0641 0.0625 0.0626 0.0652 0.0628 0.0666 0.063 0.0623 0.0609 0.2828 0.3514 0.288 0.2527 0.0948 1.2486 1.4421 1.3274 1.3347 0.2335 0.0599 0.0604 0.4133 0.4667 0.4453 0.4167 0.0954 1.2958 1.4545 1.3645 1.3462 0.2225 0.0644 0.0594 0.6255 0.6584 0.603 0.639 0.0979 1.3179 1.4883 1.3927 1.3666 0.2239 0.0626 0.0581 0.8589 0.8867 0.85 0.8907 0.0939 1.362 1.5398 1.4478 1.427 0.2239 0.0618 0.0625 1.0214 1.2576 1.1721 1.1718 1.258 1.4221 1.5887 1.5087 1.5033 1.021 0.0615 0.0582 1.2648 1.5409 1.4695 1.4843 0.093 1.5335 1.6797 1.6167 1.6137 0.2319 0.061 0.0606 0.0599 0.0596 0.0589 0.0596 0.0599 0.0591 0.0593 0.0594 0.0586 0.0585 0.0576
126 77476s 0.0649 0.0674 0.0631 0.0636 0.0642 0.0627 0.0627 0.0652 0.0629 0.0669 0.0631 0.0623 0.061 0.2827 0.3515 0.2881 0.2529 0.0949 1.249 1.4424 1.3279 1.3355 0.2336 0.0616 0.0608 0.4136 0.4681 0.4459 0.4173 0.0956 1.2964 1.4538 1.3637 1.3452 0.2228 0.0645 0.0595 0.626 0.6587 0.6034 0.6396 0.0979 1.3172 1.4886 1.3925 1.3669 0.2242 0.0616 0.0586 0.8595 0.887 0.85 0.8916 0.0938 1.363 1.5393 1.4475 1.4268 0.2239 0.0621 0.0624 1.0214 1.2575 1.1717 1.1725 1.2598 1.4215 1.5888 1.5088 1.5035 1.0461 0.0601 0.0584 1.2667 1.5411 1.47 1.4836 0.0931 1.5333 1.6788 1.6166 1.6125 0.2321 0.0611 0.0607 0.0599 0.0595 0.0589 0.0598 0.0599 0.0592 0.0594 0.0607 0.0587 0.0587 0.0578
127 78117s 0.0649 0.0749 0.0628 0.0635 0.064 0.0626 0.0624 0.0651 0.063 0.0667 0.0629 0.0624 0.061 0.283 0.3517 0.2882 0.253 0.0949 1.2485 1.4428 1.3278 1.335 0.2334 0.0577 0.0603 0.4138 0.4683 0.4464 0.4175 0.0954 1.2962 1.4535 1.3647 1.3454 0.2228 0.0642 0.0591 0.6259 0.6583 0.6034 0.6403 0.0979 1.3172 1.4884 1.393 1.3673 0.2241 0.0617 0.0586 0.8608 0.8867 0.8497 0.8918 0.0937 1.3627 1.5398 1.4476 1.4275 0.2239 0.0618 0.0622 1.0221 1.2575 1.1716 1.1728 1.2613 1.422 1.5896 1.5085 1.5039 1.0708 0.0595 0.0579 1.2681 1.5411 1.4695 1.4837 0.093 1.5343 1.6791 1.6161 1.6129 0.2319 0.0608 0.0606 0.0597 0.0594 0.0588 0.0596 0.0599 0.0591 0.0593 0.0603 0.0586 0.0585 0.0581
128 78757s 0.0649 0.0671 0.0628 0.0636 0.0642 0.0626 0.0627 0.0649 0.0628 0.0667 0.0629 0.0625 0.061 0.2835 0.352 0.2881 0.2533 0.0951 1.2489 1.4421 1.3282 1.3356 0.2333 0.0616 0.0611 0.414 0.4688 0.4461 0.4177 0.0956 1.2954 1.4536 1.3649 1.3468 0.223 0.0643 0.0591 0.6263 0.6588 0.6035 0.6397 0.0979 1.3173 1.4882 1.3925 1.3673 0.2242 0.0617 0.0587 0.8607 0.8868 0.8497 0.8924 0.0937 1.3629 1.5397 1.4477 1.4281 0.2239 0.0617 0.0625 1.0222 1.2571 1.1723 1.1729 1.2629 1.4213 1.5884 1.5087 1.5047 1.0942 0.0593 0.0579 1.2711 1.5411 1.4708 1.4835 0.093 1.5353 1.6785 1.6166 1.6137 0.2321 0.0607 0.0606 0.0597 0.0594 0.0588 0.0596 0.0599 0.0591 0.0593 0.0614 0.0587 0.0586 0.0574
129 79397s 0.0652 0.0747 0.0629 0.0635 0.0638 0.0626 0.0626 0.065 0.0629 0.0667 0.0631 0.063 0.0608 0.2833 0.352 0.2881 0.2533 0.0951 1.2488 1.4424 1.3286 1.3362 0.2333 0.0592 0.0602 0.4139 0.4686 0.4464 0.4178 0.0955 1.2952 1.4549 1.3647 1.3459 0.2229 0.0644 0.0595 0.6261 0.6582 0.6042 0.6404 0.0979 1.3178 1.4886 1.393 1.3676 0.2242 0.062 0.0594 0.8615 0.8868 0.8499 0.893 0.0939 1.3628 1.5399 1.4474 1.4288 0.2241 0.0618 0.0624 1.0222 1.2571 1.1718 1.1729 1.2629 1.4213 1.5896 1.5079 1.5039 1.1196 0.0605 0.0583 1.2718 1.5412 1.4696 1.4833 0.093 1.536 1.6777 1.6155 1.6128 0.2322 0.0606 0.0607 0.0597 0.0594 0.0588 0.0595 0.0598 0.0591 0.0593 0.0599 0.0586 0.0587 0.0571
130 80037s 0.0655 0.075 0.063 0.0634 0.064 0.0628 0.0624 0.065 0.0627 0.0668 0.063 0.0625 0.061 0.284 0.3521 0.2889 0.2537 0.0952 1.2494 1.4421 1.3286 1.3367 0.2332 0.065 0.0615 0.4144 0.4693 0.4471 0.4185 0.0956 1.2962 1.4541 1.3651 1.3466 0.2232 0.0643 0.0595 0.626 0.6586 0.604 0.6401 0.098 1.3173 1.4888 1.3941 1.3687 0.2243 0.0644 0.0599 0.8615 0.8869 0.8499 0.8931 0.0938 1.3628 1.5404 1.4482 1.4288 0.2243 0.0615 0.0624 1.0232 1.2579 1.1727 1.1739 1.2654 1.421 1.5907 1.5083 1.5052 1.1443 0.0601 0.059 1.2741 1.5424 1.47 1.4844 0.0932 1.5373 1.681 1.6164 1.6145 0.2322 0.0606 0.0607 0.0599 0.0595 0.0589 0.0597 0.0601 0.0592 0.0594 0.0606 0.0586 0.0585 0.0577
131 80677s 0.0658 0.0706 0.063 0.0639 0.064 0.0628 0.0624 0.0655 0.0629 0.0676 0.0631 0.0627 0.0611 0.2841 0.3522 0.2891 0.2538 0.0954 1.2492 1.4424 1.3294 1.3365 0.2333 0.0591 0.0611 0.4145 0.4697 0.4472 0.4184 0.0956 1.2957 1.4538 1.3651 1.347 0.2232 0.0644 0.0595 0.6267 0.6586 0.604 0.6408 0.0981 1.3172 1.4893 1.3931 1.3681 0.2245 0.0611 0.0587 0.8622 0.8869 0.8498 0.8932 0.094 1.362 1.5402 1.448 1.4286 0.2244 0.0619 0.0625 1.023 1.2572 1.1729 1.1734 1.2657 1.4201 1.5904 1.5076 1.5042 1.1692 0.0598 0.059 1.275 1.5417 1.4696 1.4834 0.0932 1.5367 1.678 1.6172 1.6133 0.2324 0.0608 0.0608 0.0598 0.0597 0.0589 0.0597 0.06 0.0593 0.0594 0.0596 0.0586 0.0587 0.0573
132 81318s 0.065 0.0668 0.0628 0.0636 0.0639 0.0627 0.0624 0.0651 0.0627 0.0668 0.063 0.0625 0.0611 0.2848 0.3531 0.2899 0.2546 0.0954 1.2486 1.4416 1.3287 1.3366 0.2331 0.0629 0.061 0.4148 0.4701 0.4475 0.4191 0.0955 1.2954 1.4537 1.3648 1.3469 0.2232 0.0642 0.0592 0.6267 0.6588 0.6042 0.6419 0.098 1.3173 1.4889 1.394 1.3686 0.2245 0.0606 0.059 0.8622 0.8869 0.8497 0.8934 0.0938 1.3618 1.5394 1.4478 1.4285 0.2245 0.0617 0.0626 1.0235 1.2572 1.1727 1.1736 1.2664 1.4199 1.5884 1.5076 1.5039 1.192 0.0621 0.0582 1.276 1.5424 1.4694 1.4841 0.0931 1.5367 1.6791 1.6158 1.613 0.2324 0.0606 0.0606 0.0597 0.0596 0.0588 0.0595 0.0599 0.0593 0.0592 0.0603 0.0585 0.0586 0.0574
133 81958s 0.065 0.0748 0.0628 0.0635 0.0639 0.0625 0.0624 0.0648 0.0628 0.0665 0.063 0.0626 0.061 0.2849 0.3531 0.29 0.2549 0.0956 1.2491 1.4425 1.3288 1.3375 0.2333 0.0611 0.0608 0.4146 0.4687 0.4472 0.419 0.0956 1.2967 1.4546 1.3664 1.3483 0.2233 0.0643 0.0594 0.6271 0.6591 0.6045 0.6419 0.098 1.3178 1.49 1.3947 1.3695 0.2247 0.0615 0.0622 0.863 0.8873 0.8502 0.8941 0.0938 1.3621 1.5405 1.4482 1.4297 0.2246 0.0617 0.0625 1.0245 1.2578 1.173 1.1741 1.2677 1.4198 1.5902 1.5087 1.5048 1.2161 0.0605 0.0581 1.2781 1.5423 1.4708 1.485 0.0932 1.5389 1.6802 1.6164 1.615 0.2327 0.0606 0.0606 0.0597 0.0595 0.0589 0.0595 0.0598 0.0591 0.0593 0.0603 0.0585 0.0585 0.057
134 82598s 0.065 0.067 0.063 0.0638 0.0641 0.0626 0.0626 0.0651 0.0628 0.0668 0.0634 0.0627 0.061 0.2849 0.3529 0.2901 0.2548 0.0956 1.2497 1.4429 1.3301 1.3375 0.2332 0.0588 0.0611 0.4144 0.4694 0.4471 0.4194 0.0956 1.2966 1.4545 1.3661 1.3486 0.2234 0.0644 0.0595 0.6269 0.6603 0.6048 0.6422 0.0981 1.3169 1.4891 1.3944 1.3692 0.2249 0.0622 0.0582 0.8633 0.8873 0.8502 0.8938 0.0941 1.3614 1.5402 1.4479 1.429 0.2247 0.0618 0.0624 1.0248 1.2583 1.1738 1.1751 1.2672 1.4206 1.5901 1.5077 1.5053 1.238 0.0594 0.0586 1.2786 1.5419 1.4704 1.486 0.0932 1.5394 1.6796 1.6165 1.6133 0.2326 0.0607 0.0608 0.0597 0.0595 0.0591 0.0597 0.06 0.0592 0.0594 0.0606 0.0586 0.0586 0.0577
135 83238s 0.065 0.0672 0.0631 0.0636 0.064 0.0627 0.0627 0.0651 0.063 0.0669 0.0636 0.0628 0.0609 0.2855 0.3533 0.2903 0.2553 0.0957 1.2495 1.4426 1.3299 1.338 0.2331 0.0603 0.0612 0.4148 0.4695 0.4478 0.4196 0.0957 1.2958 1.4548 1.3664 1.3482 0.2235 0.0642 0.0594 0.6275 0.6599 0.6055 0.6428 0.0981 1.3169 1.4886 1.3948 1.3691 0.225 0.0625 0.0584 0.8642 0.8876 0.8501 0.8944 0.0941 1.3618 1.5395 1.4484 1.43 0.2247 0.0618 0.0626 1.0253 1.258 1.1739 1.1751 1.2676 1.4201 1.5897 1.5085 1.5055 1.2615 0.0621 0.0583 1.2793 1.5422 1.4694 1.4843 0.0936 1.539 1.6798 1.6152 1.6132 0.2328 0.0606 0.0608 0.0598 0.0595 0.059 0.0597 0.0601 0.0592 0.0594 0.0602 0.0588 0.0587 0.0581
136 83879s 0.0648 0.0671 0.0631 0.0639 0.0641 0.0628 0.0626 0.065 0.0627 0.0667 0.0632 0.0625 0.061 0.2856 0.3536 0.2908 0.2554 0.0957 1.249 1.442 1.3296 1.3383 0.2331 0.0617 0.0602 0.4151 0.4703 0.4482 0.4195 0.0959 1.2958 1.4552 1.3665 1.3483 0.2236 0.0643 0.0594 0.6278 0.6599 0.6052 0.6427 0.0982 1.3165 1.4897 1.3942 1.3691 0.225 0.06 0.0585 0.8644 0.8875 0.8499 0.8946 0.094 1.3612 1.5399 1.4476 1.4297 0.2248 0.0616 0.0626 1.0249 1.2578 1.1729 1.175 1.2681 1.4196 1.5895 1.5076 1.505 1.2814 0.06 0.0584 1.28 1.5423 1.4689 1.4849 0.0935 1.5391 1.6798 1.6161 1.6137 0.2328 0.0608 0.0608 0.0596 0.0596 0.0589 0.0597 0.0599 0.059 0.0594 0.0599 0.0587 0.0585 0.0577
137 84519s 0.0655 0.075 0.063 0.0637 0.064 0.0625 0.0624 0.0652 0.0629 0.0668 0.0631 0.0627 0.0611 0.2857 0.3536 0.2908 0.2556 0.0958 1.2492 1.4426 1.3295 1.3379 0.2331 0.063 0.0611 0.4152 0.4707 0.448 0.4197 0.0958 1.2957 1.4538 1.3666 1.3487 0.2236 0.0642 0.0593 0.628 0.6592 0.6051 0.6431 0.098 1.3169 1.4897 1.3948 1.3693 0.225 0.06 0.0582 0.8645 0.8878 0.8503 0.8949 0.094 1.3608 1.5394 1.448 1.4298 0.225 0.0616 0.0625 1.0255 1.2579 1.1729 1.175 1.2685 1.4187 1.5882 1.5069 1.5053 1.3019 0.0606 0.0587 1.2805 1.5411 1.4695 1.4851 0.0935 1.5385 1.6798 1.6151 1.6127 0.2327 0.0607 0.0607 0.0598 0.0595 0.0588 0.0596 0.06 0.0591 0.0592 0.0602 0.0587 0.0585 0.0569
138 85159s 0.0647 0.075 0.0629 0.0635 0.0642 0.0625 0.0627 0.065 0.0628 0.0666 0.0627 0.0624 0.0611 0.2861 0.354 0.2915 0.2563 0.0958 1.249 1.4417 1.3309 1.338 0.2332 0.0638 0.0622 0.4152 0.4702 0.448 0.4198 0.0958 1.296 1.4541 1.3673 1.3491 0.2238 0.0644 0.059 0.628 0.66 0.605 0.643 0.0982 1.3166 1.4893 1.3947 1.3691 0.2253 0.0637 0.0589 0.8653 0.888 0.8503 0.8948 0.0941 1.3611 1.5408 1.4484 1.4305 0.2252 0.0614 0.0627 1.0259 1.2581 1.1737 1.175 1.2686 1.4191 1.5891 1.5077 1.5053 1.3231 0.0609 0.0583 1.2809 1.5417 1.4704 1.4855 0.0937 1.5385 1.6788 1.6149 1.6131 0.233 0.0606 0.0609 0.06 0.0595 0.059 0.0597 0.06 0.0592 0.0593 0.0597 0.0586 0.0585 0.058
139 85799s 0.0655 0.0671 0.0632 0.0638 0.0641 0.0629 0.0625 0.0653 0.0631 0.0667 0.063 0.0627 0.061 0.2862 0.3541 0.2914 0.2565 0.0959 1.2495 1.4424 1.3307 1.3389 0.233 0.0592 0.061 0.4148 0.4694 0.4481 0.4195 0.0958 1.2963 1.4548 1.3669 1.349 0.2238 0.0642 0.0592 0.6278 0.6598 0.6047 0.6435 0.0981 1.3169 1.489 1.395 1.3695 0.2253 0.0612 0.0597 0.8651 0.888 0.8498 0.895 0.094 1.3606 1.5396 1.448 1.4295 0.2252 0.0616 0.0625 1.026 1.2581 1.1742 1.1753 1.2687 1.4182 1.5893 1.5073 1.5055 1.3417 0.0608 0.0581 1.2814 1.5418 1.4701 1.4863 0.0938 1.5394 1.6789 1.6147 1.6138 0.2332 0.0605 0.0608 0.0598 0.0595 0.059 0.0595 0.0598 0.0591 0.0593 0.0643 0.0586 0.0585 0.0576
140 Date of measurement: 2010-02-24/Time of measurement: 13:30:10
141 YeastOD595growth30degreesMultireadNoshake_HTMPSversion.mth
142 C:\Users\Public\Documents\Tecan\Magellan\mth\YeastOD595growth30degreesMultireadNoshake_HTMPSversion.mth
143 24022010-SG_Glctests_YPD-AFEXNo1.wsp
144 C:\Users\Public\Documents\Tecan\Magellan\wsp\24022010-SG_Glctests_YPD-AFEXNo1.wsp
145 595nm
146 Unknown user
147 infinite 500
148 Instrument serial number: ##########
149 Plate
150 Plate Description: [NUN96ft] - Nunclon 96 Flat Transparent
151 Plate with Cover: Yes
152 Barcode: No
153 Temperature
154 Mode: On
155 Temperature: 30.0 ᄀC
156 Shaking
157 Duration: 10 sec
158 Mode: Linear
159 Amplitude: 2 mm
160 Frequency: 70.8 rpm
161 Kinetic Cycle
162 Duration: 23:59:59
163 Absorbance
164 Measurement wavelength: 595 nm
165 Measurement bandwidth: 10 nm
166 Number of reads: 10
167 Settle time: 0 ms
168 Label: Label1
169 Incubation
170 Total kinetic run time: 23h 49min 59s

@ -0,0 +1,141 @@
"row" "plate" "well" "media" "strain" "model" "lag.time, hrs" "lag.time.SE, hrs" "inflection.time, hrs" "max.spec.growth.rate, log.OD/hr" "max.spec.growth.rate.SE, log.OD/hr" "baseline, log.OD" "baseline.SE, log.OD" "amplitude, log.OD" "amplitude.SE, log.OD" "plateau, log.OD" "inoc.log.OD" "max.log.OD" "projected.growth, log.OD" "achieved.growth, log.OD" "baseline.OD" "amplitude.OD" "plateau.OD" "inoc.OD" "max.OD" "projected.growth.OD" "achieved.growth.OD" "shape.par" "shape.par.SE" "R.squared" "RSS" "empty" "asymp.not.reached" "tank" "other" "pdf.file" "page.no"
1 "YPDAFEXglucoseTests_2-25-10" "A01" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 2
2 "YPDAFEXglucoseTests_2-25-10" "B01" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 3
3 "YPDAFEXglucoseTests_2-25-10" "C01" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 4
4 "YPDAFEXglucoseTests_2-25-10" "D01" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 5
5 "YPDAFEXglucoseTests_2-25-10" "E01" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 6
6 "YPDAFEXglucoseTests_2-25-10" "F01" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 7
7 "YPDAFEXglucoseTests_2-25-10" "G01" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 8
8 "YPDAFEXglucoseTests_2-25-10" "H01" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 9
9 "YPDAFEXglucoseTests_2-25-10" "A02" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 10
10 "YPDAFEXglucoseTests_2-25-10" "B02" "Unknown Media" "Unknown Strain" "gompertz sigmoid" 0 1.75346968441508 9.00872222222222 0.00387129153696364 0.000169526629036836 0.106012627625114 0.00533333077366909 0.0949774510885174 0.0112054835606438 0.200990078713631 0.112280003072039 0.184252861638202 0.0887100756415919 0.0719728585661627 0.111835916265025 0.0996340592954781 0.222612641873017 0.1188260915329 0.202319805217563 0.103786550340117 0.083493713684663 NA NA 0.955970181896241 0.00271004795972451 "I " "U" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 11
11 "YPDAFEXglucoseTests_2-25-10" "C02" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.40987742434362 0.0533048027754095 4.21822222222222 0.0460029547745148 0.000724535892211916 0.0730406535194956 0.00147448055623566 0.201954494843009 0.00148223223518411 0.274995148362504 0.0732663157203884 0.274994927952796 0.201728832642116 0.201728612232407 0.0757742700360047 0.223792317982719 0.31652428755353 0.0760170590185625 0.316523997378827 0.240507228534967 0.240506938360264 0.265874614443588 0.100707923111372 0.997917404710366 0.00135388203716735 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 12
12 "YPDAFEXglucoseTests_2-25-10" "D02" "Unknown Media" "Unknown Strain" "logistic sigmoid." 3.07823370582446 0.0432348265726729 5.36222222222222 0.0732442032057736 0.000833850358526795 0.0859165025402299 0.00136428307371176 0.336085738207293 0.00149532024021089 0.422002240747523 0.0889959965972815 0.42200220627278 0.333006244150242 0.333006209675498 0.089715336043938 0.399459006773759 0.525011941846182 0.0930762802930187 0.525011889271788 0.431935661553164 0.431935608978769 NA NA 0.99892015420286 0.00211931922664645 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 13
13 "YPDAFEXglucoseTests_2-25-10" "E02" "Unknown Media" "Unknown Strain" "richards sigmoid" 3.31104933734427 0.0428738853375245 6.24405555555555 0.0874988597365696 0.000646229450327621 0.0670789147198683 0.00264084519286054 0.496808439056947 0.00261152547593285 0.563887353776815 0.0759549208448961 0.563886450736804 0.487932432931919 0.487931529891908 0.0693798646573409 0.643467664348464 0.757491228469676 0.0789139365323319 0.757489641385495 0.678577291937345 0.678575704853163 1.2232332690843 0.0913419753453248 0.999523017751576 0.00210815425649168 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 14
14 "YPDAFEXglucoseTests_2-25-10" "F02" "Unknown Media" "Unknown Strain" "richards sigmoid" 3.16160949001608 0.0130132793917631 5.69588888888889 0.0871403273784542 0.000229647034986262 0.0873771888050847 0.000697694045768953 0.569725535280617 0.000706582800205296 0.657102724085702 0.0877050601525881 0.65691395601709 0.569397663933114 0.569208895864502 0.0913082313448255 0.767781791110135 0.929194819859989 0.0916660987091995 0.928830683849576 0.837528721150789 0.837164585140376 0.128377120300513 0.0158490160700108 0.999930578411107 0.000418173571721339 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 15
15 "YPDAFEXglucoseTests_2-25-10" "G02" "Unknown Media" "Unknown Strain" "gompertz sigmoid" 1.97362815105853 0.16021845812197 6.10105555555556 0.0637129441648277 0.000882845698725157 0.0636642130548074 0.00677504484433783 0.715651375245064 0.00877835069042374 0.779315588299871 0.0726054460832097 0.769574984837188 0.706710142216661 0.696969538753978 0.0657344789473957 1.04551864861753 1.17997975116158 0.0753061869379306 1.1588485154191 1.10467356422365 1.08354232848117 NA NA 0.996368548540555 0.0284187363816129 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 16
16 "YPDAFEXglucoseTests_2-25-10" "H02" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 17
17 "YPDAFEXglucoseTests_2-25-10" "A03" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 18
18 "YPDAFEXglucoseTests_2-25-10" "B03" "Unknown Media" "Unknown Strain" "gompertz sigmoid" 0 6.85707463811534 22.1408888888889 0.00240032501380818 0.000622808650861115 0.183471251012776 0.0241038297960887 0.144528358183154 0.243573937919412 0.32799960919593 0.19300839349323 0.240674524266226 0.134991215702699 0.0476661307729958 0.201380426444684 0.155494462222733 0.388188429779618 0.21289297388536 0.272106927985118 0.175295455894257 0.0592139540997572 NA NA 0.790451631963757 0.00713078905920276 "I " "U" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 19
19 "YPDAFEXglucoseTests_2-25-10" "C03" "Unknown Media" "Unknown Strain" "gompertz sigmoid" 1.9906115314917 0.0691975321280808 3.47938888888889 0.049037411407282 0.00113344209515939 0.113611335404073 0.00175358526967256 0.199753898839363 0.00189317967878135 0.313365234243436 0.113618320794987 0.313364980342489 0.199746913448449 0.199746659547502 0.120316612851937 0.221102206508354 0.368021087941464 0.120324438728759 0.36802074059966 0.247696649212706 0.247696301870901 NA NA 0.993990129878449 0.00350258662967145 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 20
20 "YPDAFEXglucoseTests_2-25-10" "D03" "Unknown Media" "Unknown Strain" "logistic sigmoid." 2.74248926505973 0.035437954480672 4.43272222222222 0.0945867703490634 0.00125702159386047 0.120482088812658 0.00134117833543308 0.321778875148931 0.0014434874516871 0.442260963961589 0.122204770400314 0.442260963921188 0.320056193561275 0.320056193520873 0.128040536239446 0.379579682874746 0.556221805255072 0.129985465667426 0.556221805192198 0.426236339587646 0.426236339524771 NA NA 0.998757902847438 0.00205103195615211 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 21
21 "YPDAFEXglucoseTests_2-25-10" "E03" "Unknown Media" "Unknown Strain" "richards sigmoid" 3.06558694902111 0.0312092215590165 5.36222222222222 0.121127558762234 0.000999219508000457 0.0914412473879785 0.00245736134720504 0.492484371503167 0.00245078828605803 0.583925618891146 0.100902026458548 0.583925618815027 0.483023592432598 0.483023592356479 0.0957523964858846 0.636376541441498 0.793063516837805 0.106168261232303 0.793063516701319 0.686895255605501 0.686895255469016 1.8099614528835 0.11749762404479 0.999544726321194 0.00181967924857281 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 22
22 "YPDAFEXglucoseTests_2-25-10" "F03" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.77641828785608 0.0527034560581212 5.62438888888889 0.129882569921262 0.00113584993704318 0.0943645335434394 0.00505890981001432 0.678399516685425 0.00501032094392126 0.772764050228865 0.114848054862814 0.77276399900153 0.657915995366051 0.657915944138716 0.0989602807937964 0.970721100596954 1.16574421407829 0.121702987308433 1.16574410313299 1.04404122676985 1.04404111582455 1.58781631519902 0.131684418310394 0.999371589849353 0.0046402268216646 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 23
23 "YPDAFEXglucoseTests_2-25-10" "G03" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.62155169712258 0.0528519100875045 5.64822222222222 0.120898389380839 0.00085666747705881 0.106939410004678 0.00473823141471648 0.792250605021815 0.00464150388859163 0.899190015026493 0.119165060075358 0.899150108989174 0.780024954951135 0.779985048913817 0.112866823840885 1.20836098585375 1.45761167622119 0.126555852336668 1.45751360463476 1.33105582388452 1.33095775229809 0.651987068135623 0.0715475087316549 0.999508942394936 0.00516491712891765 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 24
24 "YPDAFEXglucoseTests_2-25-10" "H03" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 25
25 "YPDAFEXglucoseTests_2-25-10" "A04" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 26
26 "YPDAFEXglucoseTests_2-25-10" "B04" "Unknown Media" "Unknown Strain" "gompertz sigmoid" 0 5.07805229649163 14.0137222222222 0.00262196440444693 0.000184379038247711 0.128373352119061 0.0113746218267311 0.0999846427550281 0.0508219597027302 0.228357994874089 0.134971142309161 0.189191274790955 0.0933868525649285 0.0542201324817943 0.136977416391989 0.105153945825447 0.256535078040028 0.144503756139199 0.208272042363683 0.11203132190083 0.0637682862244842 NA NA 0.85538308083977 0.00575026814684176 "I " "U" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 27
27 "YPDAFEXglucoseTests_2-25-10" "C04" "Unknown Media" "Unknown Strain" "gompertz sigmoid" 0.891438191034907 0.0875315881492886 2.31155555555556 0.0535113239026645 0.00124573543576505 0.0881434967648596 0.0030430726219828 0.207061852626777 0.00316468237828018 0.295205349391636 0.0894254269730997 0.295205293002666 0.205779922418537 0.205779866029567 0.0921448300342507 0.230058651786557 0.343402197187588 0.0935457812526346 0.343402121434524 0.249856415934954 0.24985634018189 NA NA 0.991724253334925 0.00363563892033064 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 28
28 "YPDAFEXglucoseTests_2-25-10" "D04" "Unknown Media" "Unknown Strain" "logistic sigmoid." 1.64713495094778 0.0412877819867957 3.38405555555556 0.0931935829948414 0.00118142555796191 0.0808528951164181 0.00187894207024751 0.326765479915366 0.00196420645231437 0.407618375031784 0.0874704777516756 0.407618375007183 0.320147897280109 0.320147897255508 0.084211392044496 0.386476282514334 0.503233380301545 0.0914100430890148 0.503233380264563 0.41182333721253 0.411823337175548 NA NA 0.998561073647885 0.00184537988196708 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 29
29 "YPDAFEXglucoseTests_2-25-10" "E04" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.00035125190919 0.0281455448570578 4.31355555555556 0.124952395006035 0.000705710861425023 0.066176309959304 0.00266242496712618 0.497003217265191 0.00264805326268335 0.563179527224495 0.0884800687678949 0.563179527222079 0.4746994584566 0.474699458454184 0.0684150727790216 0.643787807212848 0.756247669676583 0.0925124772737131 0.756247669672339 0.66373519240287 0.663735192398626 2.09745467815794 0.104168282542748 0.999771040591133 0.000720981102550124 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 30
30 "YPDAFEXglucoseTests_2-25-10" "F04" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.04900717766187 0.066224854828332 4.76638888888889 0.133067446429845 0.00129515567063011 0.0751622402050358 0.00684502426879832 0.656973010100056 0.00678618679816553 0.732135250305092 0.103854789208097 0.732135243310908 0.628280461096995 0.628280454102811 0.0780590412170139 0.92894459254016 1.07951615799459 0.109439340652877 1.07951614345007 0.970076817341713 0.970076802797194 1.62672188639015 0.161151123608519 0.999229593966034 0.00459582695233034 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 31
31 "YPDAFEXglucoseTests_2-25-10" "G04" "Unknown Media" "Unknown Strain" "logistic sigmoid." 1.9862918042278 0.0661342206052662 5.19538888888889 0.122957281401382 0.00117607965873161 0.0764858915144976 0.00452433434411634 0.79385835220941 0.00487921872529871 0.870344243723908 0.106676772171339 0.8703364785556 0.763667471552569 0.763659706384262 0.0794869603035999 1.21191432769022 1.38773267405029 0.112574581288131 1.38771413297619 1.27515809276216 1.27513955168806 NA NA 0.998885750680601 0.0103824045406079 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 32
32 "YPDAFEXglucoseTests_2-25-10" "H04" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 33
33 "YPDAFEXglucoseTests_2-25-10" "A05" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 34
34 "YPDAFEXglucoseTests_2-25-10" "B05" "Unknown Media" "Unknown Strain" "gompertz sigmoid" 0 3.37960858365283 11.4873888888889 0.00260114802439224 0.000171113343666121 0.0996380868853665 0.00702344409232819 0.0812678741827026 0.0218737361493502 0.180905961068069 0.105000794280007 0.157379079130282 0.075905166788062 0.0523782848502749 0.104771014596006 0.084661410443271 0.198302486908548 0.110711492571287 0.17043921889605 0.0875909943372608 0.0597277263247633 NA NA 0.906033844889986 0.00328284811832969 "I " "U" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 35
35 "YPDAFEXglucoseTests_2-25-10" "C05" "Unknown Media" "Unknown Strain" "gompertz sigmoid" 0.983948331255506 0.112859781965525 2.47838888888889 0.0501739427160517 0.0014420089652692 0.0661469394856897 0.00364271174491049 0.205919620008399 0.00380546097157685 0.272066559494088 0.0672650611064177 0.272066409690128 0.204801498387671 0.204801348583711 0.0683836933831337 0.22865444079244 0.312674369345416 0.0695789443834065 0.312674172701612 0.24309542496201 0.243095228318206 NA NA 0.987488271024712 0.00577672548033435 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 36
36 "YPDAFEXglucoseTests_2-25-10" "D05" "Unknown Media" "Unknown Strain" "richards sigmoid" 1.86398043856721 0.0558531671153862 3.55088888888889 0.0944346386187149 0.00150539512391036 0.0602064636566113 0.00349724747100135 0.368213530469543 0.00348116509707638 0.428419994126155 0.0619674060244801 0.428419978432962 0.366452588101675 0.366452572408482 0.0620557998346221 0.445150589714197 0.534830565440387 0.0639276665305688 0.534830541353995 0.470902898909819 0.470902874823426 0.412410289167828 0.120556335197892 0.997911612798025 0.0038575229887498 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 37
37 "YPDAFEXglucoseTests_2-25-10" "E05" "Unknown Media" "Unknown Strain" "logistic sigmoid." 1.99006793199662 0.0351079466631901 4.12288888888889 0.121142575318895 0.00106707300014084 0.0644342398512972 0.00208740707850082 0.517632133390329 0.00221049024230705 0.582066373241626 0.0750837824145655 0.582066368204037 0.506982590827061 0.506982585789472 0.0665554390942191 0.67804954426084 0.789732868500974 0.0779744624046204 0.789732859485036 0.711758406096354 0.711758397080416 NA NA 0.999269039916925 0.00268951955610802 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 38
38 "YPDAFEXglucoseTests_2-25-10" "F05" "Unknown Media" "Unknown Strain" "logistic sigmoid." 1.9843141430209 0.0344438897925297 4.48038888888889 0.130673511255828 0.0009102976624566 0.0736708018228489 0.00232986504593521 0.655420765590931 0.00247952512560695 0.72909156741378 0.0914028198920642 0.729091436236412 0.637688747521716 0.637688616344348 0.0764523809998565 0.925952721546378 1.07319639280175 0.0957102902741691 1.07319612084532 0.977486102527583 0.977485830571155 NA NA 0.999493885845309 0.00307265449990921 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 39
39 "YPDAFEXglucoseTests_2-25-10" "G05" "Unknown Media" "Unknown Strain" "logistic sigmoid." 2.10388607337831 0.0485609573830706 5.24305555555556 0.128060724390908 0.000947720098512415 0.0637480626845324 0.00338335492162949 0.806179689300295 0.00365527291991514 0.869927751984827 0.0914242899489073 0.869921741897374 0.77850346203592 0.778497451948466 0.0658238441354071 1.23933666272802 1.38673841018214 0.0957338154889276 1.38672406571867 1.29100459469321 1.29099025022974 NA NA 0.999357534856407 0.00631075803154067 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 40
40 "YPDAFEXglucoseTests_2-25-10" "H05" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 41
41 "YPDAFEXglucoseTests_2-25-10" "A06" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 42
42 "YPDAFEXglucoseTests_2-25-10" "B06" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 43
43 "YPDAFEXglucoseTests_2-25-10" "C06" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 44
44 "YPDAFEXglucoseTests_2-25-10" "D06" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 45
45 "YPDAFEXglucoseTests_2-25-10" "E06" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 46
46 "YPDAFEXglucoseTests_2-25-10" "F06" "Unknown Media" "Unknown Strain" "logistic sigmoid." 9.73707676235984 0.0985970534035122 14.6810555555556 0.0827678160106198 0.00119202041680005 -0.000880352187845948 0.00297599235645004 0.821196181129969 0.00723578636175851 0.820315828942123 0.00130662737972163 0.800169424333775 0.819009201562402 0.798862796954054 -0.000879964791548726 1.27321739161308 1.27121704034493 0.00130748138919312 1.22591802122501 1.26990955895573 1.22461053983581 NA NA 0.997343483064722 0.0337108649740509 "I " "L" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 47
47 "YPDAFEXglucoseTests_2-25-10" "G06" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 48
48 "YPDAFEXglucoseTests_2-25-10" "H06" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 49
49 "YPDAFEXglucoseTests_2-25-10" "A07" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 50
50 "YPDAFEXglucoseTests_2-25-10" "B07" "Unknown Media" "Unknown Strain" "richards sigmoid" 3.77043529571833 0.0360628420623705 7.69788888888889 0.0922143076926756 0.000396448198824364 0.0415079420521979 0.0024939806880155 0.670137254811387 0.00244318035757864 0.711645196863585 0.0610249600071162 0.711620409501757 0.650620236856469 0.650595449494641 0.0423814404664091 0.954505567519456 1.03734032887055 0.0629254444827541 1.03728982920453 0.974414884387793 0.974364384721773 1.4963619113461 0.0645035995742297 0.999821079386736 0.00149128792010239 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 51
51 "YPDAFEXglucoseTests_2-25-10" "C07" "Unknown Media" "Unknown Strain" "richards sigmoid" 3.81401381522114 0.0414172657437824 7.84088888888889 0.0912912499034691 0.000430847219978935 0.0416798125769253 0.00284816950320603 0.691432841148329 0.00278081561800945 0.733112653725254 0.0607785100182575 0.733056393446629 0.672334143706997 0.672277883428372 0.0425606105081318 0.996574258457647 1.08154967782242 0.0626635187959206 1.0814325725518 1.0188861590265 1.01876905375588 1.38211645759186 0.0684414244741087 0.999776277423773 0.00199878407126499 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 52
52 "YPDAFEXglucoseTests_2-25-10" "D07" "Unknown Media" "Unknown Strain" "richards sigmoid" 4.10969518950279 0.0412228728953147 8.43672222222222 0.088704008575966 0.000394405519889003 0.0340862871852733 0.00276975744049372 0.70953425865252 0.00269646155006053 0.743620545837793 0.0553702984483679 0.743521928172232 0.688250247389426 0.688151629723864 0.034673881973359 1.03304416538455 1.10353769882172 0.0569319224716098 1.10333026307303 1.04660577635011 1.04639834060142 1.51337756529933 0.0684110320188058 0.999797902728699 0.00192728932795895 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 53
53 "YPDAFEXglucoseTests_2-25-10" "E07" "Unknown Media" "Unknown Strain" "richards sigmoid" 4.24887938478086 0.0432115804682178 8.81805555555556 0.0859527182536688 0.000375029677532563 0.0356447291331235 0.00283858615006587 0.73054813412698 0.00274599571528213 0.766192863260103 0.0570847530989374 0.765947840867417 0.709108110161166 0.70886308776848 0.0362876182839384 1.07621834195843 1.15155936062553 0.0587455385584554 1.15103224498319 1.09281382206707 1.09228670642473 1.43679374016896 0.0664148624074164 0.999795584571703 0.00207184898977108 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 54
54 "YPDAFEXglucoseTests_2-25-10" "F07" "Unknown Media" "Unknown Strain" "richards sigmoid" 4.18007395312142 0.0466407712716441 8.81805555555556 0.0839684557491972 0.000369759976738274 0.0335662062693272 0.00302321128563783 0.761208315309071 0.00289043060904211 0.794774521578398 0.0523578981772083 0.794000059837111 0.74241662340119 0.741642161659902 0.0341359077403089 1.14086149398729 1.21394174443082 0.0537528112436063 1.2122277950321 1.16018893318721 1.1584749837885 1.13197496403506 0.0608907017398173 0.999775581271097 0.00245341232352347 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 55
55 "YPDAFEXglucoseTests_2-25-10" "G07" "Unknown Media" "Unknown Strain" "richards sigmoid" 4.31631143939288 0.0375067727591517 9.10405555555556 0.0746869165825098 0.000251011197158741 0.0449034108817944 0.00217539445550943 0.811374095379108 0.0020199780410581 0.856277506260903 0.0531730592633562 0.847610695599428 0.803104446997546 0.794437636336071 0.0459268298793891 1.25099894980635 1.35438019563279 0.054612139727737 1.33406339635061 1.29976805590506 1.27945125662287 0.475355220605967 0.03549891791103 0.99984356158066 0.00187490302158906 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 56
56 "YPDAFEXglucoseTests_2-25-10" "H07" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 57
57 "YPDAFEXglucoseTests_2-25-10" "A08" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 58
58 "YPDAFEXglucoseTests_2-25-10" "B08" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.71231715323206 0.0513772236677379 6.24405555555555 0.114869797815563 0.000679522300954349 0.0686814145642472 0.00460568296459795 0.729956501400163 0.00454362083736724 0.79863791596441 0.100996399779546 0.798636815323626 0.697641516184865 0.697640415544081 0.0710949195446084 1.07499034653627 1.22251161827911 0.106272658930799 1.22250917209352 1.11623895934831 1.11623651316272 1.70292228067724 0.101795481685622 0.999686879664103 0.00266681050440395 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 59
59 "YPDAFEXglucoseTests_2-25-10" "C08" "Unknown Media" "Unknown Strain" "richards sigmoid" 3.01070189963687 0.0455540489565291 6.55388888888889 0.115107998390645 0.000641488550406568 0.0614813761638786 0.00401667583803556 0.743382938664491 0.00395687845960871 0.80486431482837 0.088530666535353 0.804861736471092 0.716333648293017 0.716331069935739 0.0634106915579287 1.10303794255036 1.23639303286004 0.0925677573644961 1.23638726664722 1.14382527549554 1.14381950928273 1.57881075668526 0.0887320004643622 0.999717695034928 0.00263054987530886 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 60
60 "YPDAFEXglucoseTests_2-25-10" "D08" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.97864250922658 0.0440943282069485 6.55388888888889 0.114576828300042 0.000592514310191339 0.0574375614416587 0.00388756856149796 0.7604944481012 0.00382450809353859 0.817932009542859 0.0846335573654363 0.817926981782412 0.733298452177423 0.733293424416975 0.059119138718029 1.13933374853871 1.26580931718273 0.0883181874358308 1.2657979252649 1.1774911297469 1.17747973782907 1.48473853768196 0.0802727742184424 0.999751240782926 0.0024285821665204 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 61
61 "YPDAFEXglucoseTests_2-25-10" "E08" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.92985461402822 0.0457749753910733 6.57772222222222 0.113561152700099 0.000574978172033136 0.060472124586291 0.00402516603178239 0.782067831917711 0.00395231332100131 0.842539956504002 0.0880742342619773 0.84252871547194 0.754465722242024 0.754454481209962 0.0623379840467781 1.18598785060288 1.32225792636021 0.0920691879694222 1.32223182193112 1.23018873839079 1.2301626339617 1.37581261172662 0.0764095565221835 0.999754748600533 0.00252958095458288 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 62
62 "YPDAFEXglucoseTests_2-25-10" "F08" "Unknown Media" "Unknown Strain" "richards sigmoid" 3.04342229734717 0.0449382703508806 6.81605555555555 0.111344220804687 0.000532114828111489 0.0556626629934722 0.00387136842702 0.80721451235666 0.00378851479664982 0.862877175350132 0.0817091171508141 0.862843943432654 0.781168058199318 0.78113482628184 0.0572409770684312 1.24165517935791 1.36996971207487 0.0851401152682132 1.3698909547456 1.28482959680665 1.28475083947739 1.25155543832615 0.0687282577051449 0.999773222693453 0.00254586287935125 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 63
63 "YPDAFEXglucoseTests_2-25-10" "G08" "Unknown Media" "Unknown Strain" "richards sigmoid" 3.4098419642861 0.0273360221329334 7.17355555555555 0.104909950287556 0.000320509634067564 0.0670946887166673 0.00214797636037448 0.835221165471032 0.00207744953517517 0.902315854187699 0.0807525020864334 0.901946971291666 0.821563352101265 0.821194469205233 0.0693967331849445 1.30532384994483 1.46530579406434 0.0841025502412753 1.46439655263553 1.38120324382306 1.38029400239426 0.753286735551893 0.0336141513817103 0.999897955876558 0.00130605700907157 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 64
64 "YPDAFEXglucoseTests_2-25-10" "H08" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 65
65 "YPDAFEXglucoseTests_2-25-10" "A09" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 66
66 "YPDAFEXglucoseTests_2-25-10" "B09" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.43102440854542 0.045460599271 5.50522222222222 0.126842367700522 0.00078809068382565 0.0539690230506907 0.00446798151426212 0.690558562302537 0.00442509765211851 0.744527585353228 0.0857310637664198 0.744527554769708 0.658796521586808 0.658796491003288 0.0554519069684636 0.994829458651344 1.10544655621043 0.0895132793033759 1.10544649181846 1.01593327690705 1.01593321251509 1.86325174031776 0.111013994653246 0.999682108231503 0.0022617847845379 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 67
67 "YPDAFEXglucoseTests_2-25-10" "C09" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.48092970936734 0.0462358382066653 5.62438888888889 0.126022327910869 0.000766265150014104 0.0498912361992905 0.00451231718259913 0.714630509324354 0.00446315297026109 0.764521745523645 0.0803254378903323 0.764521612683065 0.684196307633313 0.684196174792733 0.0511567623538203 1.04343151386262 1.14796685420359 0.0836396677044799 1.14796656886645 1.06432718649911 1.06432690116197 1.68924161205464 0.102428342637296 0.999685472160361 0.00245503448373934 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 68
68 "YPDAFEXglucoseTests_2-25-10" "D09" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.4240864159307 0.0532786610411069 5.62438888888889 0.124384377213099 0.000823105141045872 0.0492950122622815 0.00516311817880534 0.727641420786466 0.00510226526603821 0.776936433048748 0.0803276494249522 0.776936115957329 0.696608783623795 0.696608466532377 0.0505302243276007 1.07019213288015 1.17479940575581 0.0836420642137705 1.17479871614569 1.09115734154204 1.09115665193192 1.58714595722847 0.108898702801139 0.999619231516236 0.00307919508939744 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 69
69 "YPDAFEXglucoseTests_2-25-10" "E09" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.35160838405737 0.0596596610215118 5.69588888888889 0.122918277169901 0.000825310470715047 0.0456238028839663 0.00577234379276726 0.757677923379007 0.0056971886786291 0.803301726262973 0.0794802278099073 0.803300765573587 0.723821498453066 0.72382053776368 0.0466805786671931 1.13331673965171 1.23290119953907 0.0827241514900563 1.23289905441561 1.15017704804901 1.15017490292556 1.50943194471365 0.109906081597383 0.999597425228284 0.00351671862436227 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 70
70 "YPDAFEXglucoseTests_2-25-10" "F09" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.52360102190548 0.0587446527958999 5.93422222222222 0.120073445296037 0.00078330497794479 0.0450247442396835 0.00549978755377369 0.786911440525391 0.00540921386567027 0.831936184765074 0.0732958506922422 0.831929765410992 0.758640334072832 0.75863391471875 0.0460537433930304 1.19660160385529 1.29776333045596 0.0760488396214321 1.29774858034688 1.22171449083452 1.22169974072545 1.23976303548348 0.0944772275219821 0.999601760903923 0.003945474202229 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 71
71 "YPDAFEXglucoseTests_2-25-10" "G09" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.58690525353267 0.0503605395754859 6.17255555555556 0.109989495082239 0.000552298605536815 0.0475039668950725 0.00430649430288473 0.830681449075495 0.0041905877903163 0.878185415970567 0.0684271069666917 0.878046704757166 0.809758309003876 0.809619597790474 0.0486503609989841 1.29488205279799 1.40652889311671 0.0708225666010445 1.40619510372456 1.33570632651566 1.33537253712351 0.776030036332651 0.0590321056856611 0.999743045862095 0.00295407387389302 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 72
72 "YPDAFEXglucoseTests_2-25-10" "H09" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 73
73 "YPDAFEXglucoseTests_2-25-10" "A10" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 74
74 "YPDAFEXglucoseTests_2-25-10" "B10" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.17498330293522 0.050279837635597 5.12388888888889 0.122218804745147 0.000784428647033225 0.0435682252869189 0.00476512067527676 0.699692212082884 0.00470444888749683 0.743260437369803 0.0678435113392866 0.743259718768562 0.675416926030517 0.675416207429275 0.0445312553256874 1.0131329940941 1.10278033345866 0.0701978215504209 1.10277882239865 1.03258251190824 1.03258100084823 1.18141836933351 0.0894530547512188 0.999633683586648 0.00265620405353139 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 75
75 "YPDAFEXglucoseTests_2-25-10" "C10" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.51277041012627 0.038507563353684 5.50522222222222 0.124302687021946 0.00066257956155985 0.0363365047244458 0.0036365878373532 0.715682301835976 0.00358889795068784 0.752018806560422 0.0575296221367186 0.752017909485812 0.694489184423703 0.694488287349094 0.0370047447805615 1.04558191051421 1.12127814704052 0.0592166464503368 1.12127624409661 1.06206150059019 1.06205959764628 1.22124195072666 0.0728117489699227 0.999746251949321 0.00205128571327075 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 76
76 "YPDAFEXglucoseTests_2-25-10" "D10" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.53563261500299 0.0376782239481082 5.60055555555556 0.122775491121767 0.000617718902119621 0.0383224027816064 0.00352849521278669 0.723989555733905 0.00348019906626899 0.762311958515511 0.0604113495090868 0.762310653527533 0.701900609006425 0.701899304018446 0.0390661767078291 1.06264585795333 1.14322554552581 0.0622734223356722 1.14322274864406 1.08095212319014 1.08094932630839 1.22916204620621 0.0694532726806568 0.999772141364762 0.00189783824442064 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 77
77 "YPDAFEXglucoseTests_2-25-10" "E10" "Unknown Media" "Unknown Strain" "logistic sigmoid." 2.60565520615734 0.0279148181724273 5.67205555555555 0.122180167584985 0.000572646126517836 0.0367511555402461 0.00173132032241477 0.755101749186329 0.00189799852175128 0.791852904726575 0.0552120643770304 0.791846881053104 0.736640840349544 0.736634816676074 0.0374348288051571 1.12782801711047 1.20748289465781 0.0567646930614347 1.20746959754171 1.15071820159638 1.15070490448028 NA NA 0.999760229166242 0.00222986115644152 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 78
78 "YPDAFEXglucoseTests_2-25-10" "F10" "Unknown Media" "Unknown Strain" "logistic sigmoid." 2.59552092151026 0.0233507553372593 5.79122222222222 0.123112398187359 0.000459924956636787 0.0376321525320693 0.00147723902213235 0.788206013375021 0.0016231663999626 0.825838165907091 0.0581595525580899 0.825828102856854 0.767678613349001 0.767668550298764 0.0383492084922821 1.19944710611067 1.28379416175066 0.059884089438009 1.28377117993091 1.22391007231265 1.2238870904929 NA NA 0.999844012469462 0.00158372380662875 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 79
79 "YPDAFEXglucoseTests_2-25-10" "G10" "Unknown Media" "Unknown Strain" "richards sigmoid" 2.65619332794927 0.0304232773418221 6.00572222222222 0.113927548251521 0.00039401531514436 0.0448535113624544 0.00262903461356949 0.830698452659732 0.00255902384555125 0.875551964022187 0.059612603657046 0.875406838426976 0.815939360365141 0.81579423476993 0.0458746399354508 1.29492107435005 1.40019975231613 0.0614252746181767 1.39985144717306 1.33877447769796 1.33842617255488 0.630436882604844 0.0359660464050951 0.999878122228538 0.00142471670120544 "I " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 80
80 "YPDAFEXglucoseTests_2-25-10" "H10" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 81
81 "YPDAFEXglucoseTests_2-25-10" "A11" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 82
82 "YPDAFEXglucoseTests_2-25-10" "B11" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 83
83 "YPDAFEXglucoseTests_2-25-10" "C11" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 84
84 "YPDAFEXglucoseTests_2-25-10" "D11" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 85
85 "YPDAFEXglucoseTests_2-25-10" "E11" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 86
86 "YPDAFEXglucoseTests_2-25-10" "F11" "Unknown Media" "Unknown Strain" "richards sigmoid" 14.4916170721585 0.0217082788822816 18.6612222222222 0.0889624212709417 0.000433184593667829 0.00193467537358108 0.000448535254389812 0.976169160121559 0.0129779368057855 0.97810383549514 0.00193467537359373 0.752023541644887 0.976169160121546 0.750088866271293 0.0019365480654705 1.65426866265479 1.65940878149869 0.00193654806548316 1.1212881914955 1.65747223343321 1.11935164343002 0.07 0.0304920969087024 0.999799864971328 0.0015636072090697 "I " "U" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 87
87 "YPDAFEXglucoseTests_2-25-10" "G11" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 88
88 "YPDAFEXglucoseTests_2-25-10" "H11" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 89
89 "YPDAFEXglucoseTests_2-25-10" "A12" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 90
90 "YPDAFEXglucoseTests_2-25-10" "B12" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 91
91 "YPDAFEXglucoseTests_2-25-10" "C12" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 92
92 "YPDAFEXglucoseTests_2-25-10" "D12" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 93
93 "YPDAFEXglucoseTests_2-25-10" "E12" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 94
94 "YPDAFEXglucoseTests_2-25-10" "F12" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 95
95 "YPDAFEXglucoseTests_2-25-10" "G12" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 96
96 "YPDAFEXglucoseTests_2-25-10" "H12" "Unknown Media" "Unknown Strain" "<NA>: skipped" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA "! " "-" "-" "" "YPDAFEXglucoseTests_2-25-10_plots_2014-11-14_15.24.29.pdf" 97
# Raw OD values are adjusted and log-transformed before fitting a growth curve as follows: log.OD = log(OD - blank + const) where blank is OD of blank medium and const is specified by the user (1 by default)
# Values are reported on the above 'log.OD' scale unless otherwise specified.
# .SE columns report standard errors of those values that are estimated directly as parameters of global sigmoid models.
# .OD columns report values back-transformed to the linear 'OD - blank' scale.
# -- Explanation of columns --
# - model: Name of the model the well was successfully fit with (if any)
# - lag.time: Lag time estimate inferred from the fitted model
# - inflection.time: inflection time point of the growth curve when drawn on the log scale
# - max.spec.growth.rate: maximum specific growth rate estimate inferred from the fitted model. Estimated as the first derivative of the growth curve at inflection time point
# - baseline: growth curve baseline. Global sigmoid model: baseline is parameter 'b' of the model. LOESS: baseline is the same as the lowest predicted log.OD value
# - amplitude: difference between upper plateau and baseline values. Global sigmoid model: amplitude is parameter 'A' of the model. LOESS: amplitude = max.log.OD - min.log.OD
# - plateau: upper asymptote value of the fitted model. Global sigmoid model: plateau = b + A. LOESS: plateau = max.log.OD
# - inoc.log.OD: log.OD value at inoculation. Estimated value from the fitted model is used, rather than the actual measurement
# - max.log.OD: maximal log.OD value reached during the experiment. Estimated value from the fitted model is used rather than the actual measurement
# - projected.growth: maximal projected growth over inoculation value. Global sigmoid model: projected.growth = plateau - inoc.log.OD. LOESS: not reported
# - achieved.growth: maximal growth over inoculation value actually achieved during the experiment. achieved.growth = max.log.OD - inoc.log.OD
# - shape.par: shape parameter of the Richard equation
# - R.squared: goodness of fit metric. Also known as coefficient of determination. R.squared is usually between 0 and 1. A value close to 1 indicates good fit.
# - RSS: residual sum of squares. Another goodness of fit metric. Smaller values indicate better fits.
# - empty: (Well indicator)
# - an 'E' indicates that the well was empty and no growth was detected.
# - an 'I' indicates that the well was inoculated and growth was detected above the threshold.
# - an 'E*' indicates that the well was empty and growth was detected (possible contamination).
# - an '!' indicates that the well was inoculated and no growth was detected.
# - asymp.not.reached: shows “L” if the bottom asymptote (baseline) was not reached and “U” if the upper asymptote (plateau) was not reached.
# - tank: (Tanking indicator) If a number is present then the growth trend was determined to tank at that timepoint index.
# - other: Additional flag column. Displays information about whether jumps in OD were detected and what was done about them.
# - pdf.file and page.no: location of the figure for this well in the output .pdf files.
#
# -- Source file information--
# YPDAFEXglucoseTests_2-25-10.csv
# analyzed using GCAT v 4.5
# request sent: 2014-11-14 15:24:29
# completed: 2014-11-14 15:24:36
#
# -- Parameters used in current analysis --
# - Constant added to log(OD + n) transformation: 1
# - Blank OD value: First timepoint in well
# - Index of inoculation timepoint 2
# - Minimum growth threshold: 0.05
# - Removed points: 0
# - Jump detection: FALSE

@ -0,0 +1,35 @@
% Generated by roxygen2 (4.0.2): do not edit by hand
\name{fit.model}
\alias{fit.model}
\title{fit.model}
\usage{
fit.model(input.well, growth.model, backup.growth.model = NULL,
fit.if.no.growth = F, use.linear.param = F, use.loess = F, smooth.param,
silent = T)
}
\arguments{
\item{input.well}{The well needed to be fitted with the given model.}
\item{growth.model}{What growth model should be used?}
\item{backup.growth.model}{If \code{gowth.mode} fails, this model will be used.}
\item{fit.if.no.growth}{should the function attempt to fit a well even if there was no growth detected? default is F}
\item{silent}{output back to R console?}
\item{use.linear.param:}{Should an additional linear parameter (c) be used when fitting the data to the model?}
\item{use.loess:}{Should Local Polynomial Regression Fitting (loess function) be used instead of nls?}
\item{smooth.param:}{If loess is used, an optional smoothing parameter. Default is .6}
}
\description{
This function will use the function stored in the "guess" slot of \code{growth.model} to calculate initial guesses
for growth.model parameters, then it will use the "formula" slot with \code{nls} to fit a non-linear least squares
\code{growth.model} or Local Polynomial Regression Fitting to the data. Richards model is first fitted.
If the shape parameter is statisticaly significant then Richards is used. If it is within 2 SE of 1 or Zero than
a simpler model is preferred. If the Richards fit fails, then Logistic is tried. If it fails, Gompertz is tried.
Model fit failure is reported if none of the models can sucessfully fit the data
}

@ -0,0 +1,30 @@
\name{GCAT}
\alias{GCAT}
\title{
Growth Curve Analysis Tool
}
\description{
Mathematical modeling and parameter estimation of high volume microbial growth data.
}
\details{
GCAT utilizes the \code{\link{nls}} function in the R base package to fit logistic and Richards models to
growth curve data. Input is in .csv format and analysis is accessed using \code{\link{gcat.analysis.main}}
or \code{\link{gcat.fit.main}}. Output is in .txt and .pdf format, and is accessed using \code{\link{gcat.analysis.main}}
or \code{\link{gcat.output.main}}.
\tabular{ll}{
Version: \tab 5.0\cr
Depends: \tab pheatmap, gplots\cr
License: \tab LGPL-3\cr
Date: \tab 2014-02-10\cr
}
}
\author{
Jason Shao\cr
Nate DiPiazza\cr
Yury Bukhman\cr
Minh Bui\cr
Maintainer: Yury Bukhman
}

@ -0,0 +1,72 @@
% Generated by roxygen2 (4.0.2): do not edit by hand
\name{gcat.analysis.main}
\alias{gcat.analysis.main}
\title{Analyze screening growth data from the given .csv files.}
\usage{
gcat.analysis.main(file.list, single.plate, layout.file = NULL,
out.dir = getwd(), graphic.dir = paste(out.dir, "/pics", sep = ""),
add.constant = 0.1, blank.value = NULL, start.index = 2,
growth.cutoff = 0.05, use.linear.param = F, use.loess = F,
smooth.param = 0.1, points.to.remove = 0, remove.jumps = F,
time.input = NA, plate.nrow = 8, plate.ncol = 12,
input.skip.lines = 0, multi.column.headers = c("Plate.ID", "Well", "OD",
"Time"), single.column.headers = c("", "A1"),
layout.sheet.headers = c("Strain", "Media Definition"), silent = T,
verbose = F, return.fit = F, overview.jpgs = T)
}
\arguments{
\item{file.list}{A list of full paths to .csv files. all files must be in the same format (see <single.plate>)}
\item{single.plate}{The file in the single plate (wide) format vs. the multi-plate (long) format?}
\item{layout.file}{Full path to a layout file with strain and media definitions (applies to all files in list)}
\item{out.dir}{A directory to output the table of curve parameters to (defaults to working directory)}
\item{graphic.dir}{A directory to output the images of the fitted curves to (defaults to subdirectory "pics" of <out.dir> above)}
\item{add.constant}{A numeric constant that will be added to each curve before the log transform (defaults to 1)}
\item{blank.value}{User can enter a blank OD measurement for uninoculated wells. if NULL, defaults to the value of the first OD measurement of each well.}
\item{start.index}{Which timepoint should be used as the first one after inoculation (defaults to the 2th one)}
\item{growth.cutoff}{Minimum threshold for curve growth.}
\item{use.linear.param}{Whether to use linear parameters or not?}
\item{use.loess}{Whether to use LOESS model or not?}
\item{smooth.param}{Smoothing parameter for LOESS model.}
\item{points.to.remove}{A list of numbers referring to troublesome points that should be removed across all wells.}
\item{remove.jumps}{Should the slope checking function be on the lookout for large jumps in OD?}
\item{time.input}{The time setting in which the current system is running?}
\item{plate.nrow}{The number of rows in a plate.}
\item{plate.ncol}{The number of columns in a plate.}
\item{input.skip.lines}{If specified, this number of lines shall be skipped from the top when reading the input file with read.csv}
\item{multi.column.headers}{The headers of the result tabular data when analyzing multiple plates at once.}
\item{single.column.headers}{The headers of the result tebaular data when analyzaing a single plate.}
\item{layout.sheet.headers}{The headers of the layout file?}
\item{silent}{Shoulde messages be returned to the console?}
\item{verbose}{Should sub-functions return messages to console? (when I say verbose, I mean it!)}
\item{overview.jpgs}{Should GCAT enable an overview image?}
}
\value{
A list of the output files.
}
\description{
Top-level GCAT function
}

@ -0,0 +1,88 @@
% Generated by roxygen2 (4.0.2): do not edit by hand
\name{gcat.fit.main}
\alias{gcat.fit.main}
\title{Main analysis function for GCAT}
\usage{
gcat.fit.main(file.name, input.data = NULL, load.type = "csv",
layout.file = NULL, single.plate = F, blank.value = NULL,
start.index = 2, time.input = NA, normalize.method = "default",
add.constant = 1, use.log = T, points.to.remove = 0,
use.linear.param = F, use.loess = F, smooth.param = 0.1,
fall.cutoff = -0.0025, growth.cutoff = 0.05, remove.jumps = F,
plate.nrow = 8, plate.ncol = 12, input.skip.lines = 0,
multi.column.headers = c("Plate.ID", "Well", "OD", "Time"),
single.column.headers = c("", "A1"), layout.sheet.headers = c("Strain",
"Media Definition"), growth.model = NA, backup.growth.model = NA,
silent = F, verbose = F)
}
\arguments{
\item{file.name}{Complete path and file name of a comma-separated values (.csv) file containing growth curve data
in the multiple-plate (long) format.}
\item{input.data}{A list of tables representing input files read with \code{read.table}. Used to save time in cases
of running multiple analyses on the same dataset. If used, the function will ignore \code{file.name} entirely.}
\item{load.type}{.csv by default.}
\item{layout.file}{Specifies the location of a layout file containing identifying information.}
\item{single.plate}{Whether the GCAT is analyzing a single plate or not.}
\item{blank.value}{Blank OD measurement for uninoculated wells. By default(NULL), the value of the first OD
measurement in each well is used.}
\item{start.index}{Which timepoint should be used as the first one after inoculation?}
\item{time.input}{Either a character describing the format used to convert timestamps in the input to numbers
representing number of seconds (see \code{strptime}), or a factor to divide entries in the Time column by to get the
numbers of hours.}
\item{normalize.method}{Describes the method used by \code{normalize.ODs} to normalize cell density values using blank reads.}
\item{add.constant}{A value for r in the log(OD + r) transformation.}
\item{use.log}{Should the analysis use log on all values.}
\item{points.to.remove}{A vector of integers specifying which timepoints should be removed across all wells.
By default(0) none are marked for removal.}
\item{use.linear.param}{Should the linear parameter be used or not.}
\item{use.loess}{Should the loess model be used or not.}
\item{smooth.param}{If loess model is used, this parameter define the smoothing parameter for the loess model.}
\item{fall.cutoff}{A cutoff used by \code{check.slopes} to decide on thresholds for jumps and tanking.}
\item{growth.cutoff}{A threshold used by check.growth to decide whether a well displays growth.}
\item{remove.jumps}{Should jumps in OD detected by the subfunction \code{check.slopes}?}
\item{plate.nrow}{The number of rows in the input files.}
\item{plate.ncol}{The number of columns in the input files.}
\item{input.skip.lines}{If specified, this number of lines shall be skipped from the top when reading the input file with read.csv}
\item{multi.column.headers}{The headers of the column when analyzing multiple plates.}
\item{single.column.headers}{The headers of the column when analyzing a single plate.}
\item{growth.model}{What growth model should be used?}
\item{backup.growth.model}{If the main growth model fails, the back up model will be used.}
\item{silent}{Surpress all messages.}
\item{verbose}{Display all messages when analyzing each well.}
\item{layour.sheet.headers}{The headers of the layout file.}
}
\value{
An array of well objects
}
\description{
This is the main function that handles all the analyses for data files in both single and multiple plate formats.
It is called by the top level function \code{gcat.analysis.main} along with \code{gcat.output.main}.
}

@ -0,0 +1,57 @@
% Generated by roxygen2 (4.0.2): do not edit by hand
\name{gcat.load.data}
\alias{gcat.load.data}
\title{Load tabular data}
\usage{
gcat.load.data(file.name = NULL, load.type = "csv", input.data = NULL,
single.plate.ID = NULL, plate.layout = NULL, plate.nrow = 8,
plate.ncol = 12, input.skip.lines = 0,
multi.column.headers = c("Plate.ID", "Well", "OD", "Time"),
single.column.headers = c("", "A1"), layout.sheet.headers = c("Strain",
"Media Definition"), blank.value = NULL, start.index = 2,
single.plate = F, silent = T)
}
\arguments{
\item{file.name}{Complete path and file name of a comma-separated values (.csv) file containing growth curve data
in the multiple-plate (long) format.}
\item{load.type}{.csv by default.}
\item{input.data}{A list of tables representing input files read with \code{read.table}. Used to save time in cases
of running multiple analyses on the same dataset. If used, the function will ignore \code{file.name} entirely.}
\item{single.plate.ID}{specifies a plate name for a single-plate read. If NULL, this is derived from the file name.}
\item{plate.nrow}{The number of rows in the input files.}
\item{plate.ncol}{The number of columns in the input files.}
\item{input.skip.lines}{specifies a plate name for a single-plate read. If NULL, this is derived from the file name.}
\item{multi.column.headers}{The headers of the column when analyzing multiple plates.}
\item{single.column.headers}{The headers of the column when analyzing a single plate.}
\item{layout.sheet.headers}{The headers of the layout file.}
\item{blank.value}{Blank OD measurement for uninoculated wells. By default(NULL), the value of the first OD
measurement in each well is used.}
\item{silent}{Surpress all messages.}
\item{plate.laout}{Specifies the layout of the given plate.}
\item{add.constant}{A value for r in the log(OD + r) transformation.}
\item{verbose}{Display all messages when analyzing each well.}
}
\value{
A list of well objects.
}
\description{
This function handles loading data from tabular format (.csv, tab-delimited text or R data frame object)
and returns an array of well objects, each filled with raw Time vs. OD data.
It takes single-plate or multiple-plate format data. For single-plate data,
it calls on the function \code{gcat.reorganize.single.plate.data} to rearrange the table before creating the output object.
}

@ -0,0 +1,51 @@
% Generated by roxygen2 (4.0.2): do not edit by hand
\name{gcat.output.main}
\alias{gcat.output.main}
\title{Output function for generating files from fitted data.}
\usage{
gcat.output.main(fitted.well.array, out.prefix = "", source.file.list,
upload.timestamp = NULL, add.constant, blank.value, start.index,
growth.cutoff, points.to.remove, remove.jumps, out.dir = getwd(),
graphic.dir = paste(out.dir, "/pics", sep = ""), overview.jpgs = T,
use.linear.param = F, use.loess = F, plate.nrow = 8, plate.ncol = 12,
unlog = F, silent = T)
}
\arguments{
\item{fitted.well.array}{A list of fitted well objects.}
\item{out.prefix}{Prefix that is in the name of output files.}
\item{blank.value}{User can enter a blank OD measurement for uninoculated wells.
If NULL, defaults to the value of the first OD measurement of each well.}
\item{start.index}{Which timepoint should be used as the first one after inoculation (defaults to the 2th one)}
\item{growth.cutoff}{Minimum threshold for curve growth.}
\item{points.to.remove}{A list of numbers referring to troublesome points that should be removed across all wells.}
\item{remove.jumps}{Should the slope checking function be on the lookout for large jumps in OD?}
\item{out.dir}{name a directory to output the table of curve parameters to (defaults to working directory)}
\item{graphic.dir}{name a directory to output the images of the fitted curves to
(defaults to subdirectory "pics" of <out.dir> above)}
\item{overview.jpgs}{should jpgs be generated for each plate with the overview graphic?
This is for backwards compatibility with the old web server.}
\item{unlog}{should exported graphics be transformed back to the OD scale?}
\item{silent}{should messages be returned to the console?}
\item{constant.added}{(should be the same value as add.constant above) -
used to readjust for the constant added during the log transform when plotting ODs.}
}
\value{
A list of output files if success.
}
\description{
Handles files and directories, calls \code{table.out}, \code{plate.overview} and \code{view.fit}
to generate output tables and graphics.
}

@ -0,0 +1,53 @@
\name{gcat.set.constants}
\alias{gcat.set.constants}
\title{
Set global constants for GCAT analysis package
}
\description{
Sets global constants, mostly regarding issues in input file format, for GCAT analysis.
}
\usage{
gcat.set.constants(plate.nrow = 8, plate.ncol = 12, input.skip.lines = 0, time.format = "\%Y-\%m-\%d \%H:\%M:\%S",
multi.column.headers = c("Plate ID", "Well", "OD", "Time"), single.column.headers = c("", "A1"),
xlsx.data.headers = c("Plate ID", "Well positions"), xlsx.layout.sheet = "Plate layout",
layout.sheet.headers = c("Strain", "Media Definition"))
}
\arguments{
\item{plate.nrow}{
Number of rows present in each plate of input data. Default 8 (A-H)
}
\item{plate.ncol}{
Number of columns present in each plate of input data. Default 12 (1-12)
}
\item{input.skip.lines}{
Number of lines to skip at the top when reading input data files.
}
\item{time.format}{
Either a character describing the format used to convert timestamps
in the input to numbers representing number of seconds (see \code{\link{strptime}}), or a
factor to divide entries in the \code{Time} column by to get the number of hours.
}
\item{multi.column.headers}{
A character vector describing the names of the columns for
Plate ID, Well ID, Cellular density measurements and Time, respectively, in the multi-plate (long) format.
}
\item{single.column.headers}{
A character vector describing the name of the Time column and the first well data in the single plate (wide) format.
}
\item{xlsx.data.headers}{
For .xlsx data only, a vector describing possible entries in the upper left cell marking worksheets in each
workbook as containing data. .csv files don't have multiple worksheets and are assumed to contain useable data.
}
\item{xlsx.layout.sheet}{
For .xlsx data only, the name of the worksheet containing plate layout information. .csv files use a separate layout file.
}
\item{layout.sheet.headers}{
A character vector describing the name of the Strain and Media definiton columns, respectively, in the plate layout file.
}
}
\value{
NULL
}
\author{
Jason Shao
}

@ -0,0 +1,23 @@
% Generated by roxygen2 (4.0.2): do not edit by hand
\name{model}
\alias{model}
\title{Model}
\usage{
model(name, expression, formula, guess)
}
\arguments{
\item{name}{The name of the model}
\item{expression}{Expression of the model}
\item{formula}{The formula of this model}
\item{guess}{The guess of this model}
}
\value{
The new model
}
\description{
Function to create a new model
}

@ -0,0 +1,28 @@
% Generated by roxygen2 (4.0.2): do not edit by hand
\name{plot.data}
\alias{plot.data}
\title{plot.data}
\usage{
\method{plot}{data}(input.well, view.raw.data = F, unlog = F, scale = 1,
main = paste(plate.name(input.well), well.name(input.well)),
number.points = T, draw.symbols = F, constant.added, ylim, ...)
}
\arguments{
\item{input.well}{The well object that need to be plottedd}
\item{view.raw.data}{should the raw data be plotted? (}
\item{unlog}{should data be plotted on a linear (vs. logarithmic) scale?}
\item{scale}{determines the font scale for the entire graph. all cex values are calculated from this.}
\item{number.points}{should points be labeled with numeric indices?}
\item{draw.symbols}{- should <check.slopes> be called on the well and markings drawn on the graph?}
\item{...}{additional arguments passed to plot()}
}
\description{
Basic function plots time vs. OD from a well object
}

@ -0,0 +1,27 @@
% Generated by roxygen2 (4.0.2): do not edit by hand
\name{transform.ODs}
\alias{transform.ODs}
\title{Transform.Ods}
\usage{
\method{transform}{ODs}(input.well, use.log = T, blank.value = NULL,
start.index = 2, negative.OD.cutoff = 10, constant.added = 1, ...)
}
\arguments{
\item{input.well}{an object of class well}
\item{use.log}{gets added to the "use.log" slot of the well object. this will determine whether the log-transformed data
or raw normalized data is returned using the function \code{data.from}.}
\item{blank.value}{user can enter a blank OD measurement for uninoculated wells. if NULL, defaults to the value of the first OD measurement of each well.}
\item{start.index}{which timepoint should be used as the first one after inoculation (defaults to the 2th one)}
\item{negative.OD.cutoff}{if any ODs below the specified blank value are detected before this index timepoint, the entire well is discarded.}
}
\description{
This function adds a "log.OD" column to the "screen.data" slot of a well object with log-transformed data.
The raw data is kept intact.
It also checks to see if any of the raw OD values (before a certain timepoint) is below the blank OD.
This can be disastrous for the log(OD) transform.
}

@ -0,0 +1,30 @@
# Regression testing script for GCAT.
# Yury V Bukhman, 17 Nov 2014
# This script tests outputs generated from the example dataset "YPDAFEXglucoseTests_2-25-10" with default GCAT settings.
INPUT.DIR = system.file("extdata/YPDAFEXglucoseTests_2-25-10",package="GCAT")
OUTPUT.DIR = paste(INPUT.DIR,"temp",sep="/")
INPUT.FILE = "YPDAFEXglucoseTests_2-25-10.csv"
# Run GCAT
library(GCAT)
setwd(INPUT.DIR)
time.input=1/3600
out = gcat.analysis.main(file.list = INPUT.FILE, single.plate = T, layout.file = NULL,
out.dir = OUTPUT.DIR, graphic.dir = OUTPUT.DIR,
add.constant = 1, blank.value = NULL, start.index = 2, growth.cutoff = 0.05,
use.linear.param=F, use.loess=F, smooth.param=0.1,
points.to.remove = 0, remove.jumps = F, time.input=time.input,
silent = F, verbose = T, return.fit = T, overview.jpgs = T)
# Read in old and new output spreadsheets
old.output.table = read.table("default_output.txt",header=T,sep="\t")
new.output.file = list.files(path=OUTPUT.DIR, pattern = "^output_gcat\\.fit_.+\\.txt$")
new.output.table = read.table(paste("temp",new.output.file,sep="/"),header=T,sep="\t")
# Remove "pdf.file" column
old.output.table = old.output.table[names(old.output.table) != "pdf.file"]
new.output.table = new.output.table[names(new.output.table) != "pdf.file"]
# Verify that output spreadsheets are identical within rounding error
stopifnot(all.equal(new.output.table,old.output.table))

@ -0,0 +1,23 @@
===What's in this package===
R - R code. Sub-folder GCAT contains the GCAT package
Rails - Rails code
Testing - testing code, data and documents, outside of any regression tests that may be incorporated directly into R packages or Rails applications
===Getting started===
First you will need to install Ruby and Ruby on Rails. I suggest using RVM to
install them. Documentation for RVM can be found at: http://rvm.io.
You will need: Ruby version 1.9.3p194 and Rails 3.2.15
The R package is in subfolder R. To install, do the following:
Open a terminal in the R folder
$ sudo R CMD REMOVE GCAT # do this if an older version of GCAT has been installed
$ sudo R CMD INSTALL GCAT
It works with R version 3.0.2 (2013-09-25) -- "Frisbee Sailing".
The rails application is in subfolder Rails. It runs under Rails 3.2.15. To run it locally using the default Rails WEBrick web server do the following:
Open a terminal in the Rails folder
$ bundle install
$ rails s
Open http://0.0.0.0:3000 in a web browser

5
Rails/.gitignore vendored

@ -0,0 +1,5 @@
.bundle
db/*.sqlite3
log/*.log
tmp/
.sass-cache/

@ -0,0 +1,42 @@
source 'http://rubygems.org'
# gem 'rails', '3.1.0' #no longer supporting security updates
gem 'rails', '3.2.15'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'sqlite3'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
#gem 'coffee-rails', "~> 3.1.0"
gem 'uglifier'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer'
end
gem 'jquery-rails'
# Use unicorn as the web server
# gem 'unicorn'
# Deploy with Capistrano
# gem 'capistrano'
# To use debugger
gem 'debugger'
group :test do
# Pretty printed test output
gem 'turn', :require => false
end
gem 'rinruby'
gem 'rubyzip'

@ -0,0 +1,124 @@
GEM
remote: http://rubygems.org/
specs:
actionmailer (3.2.15)
actionpack (= 3.2.15)
mail (~> 2.5.4)
actionpack (3.2.15)
activemodel (= 3.2.15)
activesupport (= 3.2.15)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.4)
rack (~> 1.4.5)
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.2.1)
activemodel (3.2.15)
activesupport (= 3.2.15)
builder (~> 3.0.0)
activerecord (3.2.15)
activemodel (= 3.2.15)
activesupport (= 3.2.15)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.15)
activemodel (= 3.2.15)
activesupport (= 3.2.15)
activesupport (3.2.15)
i18n (~> 0.6, >= 0.6.4)
multi_json (~> 1.0)
ansi (1.4.3)
arel (3.0.3)
builder (3.0.4)
columnize (0.3.6)
debugger (1.6.6)
columnize (>= 0.3.1)
debugger-linecache (~> 1.2.0)
debugger-ruby_core_source (~> 1.3.2)
debugger-linecache (1.2.0)
debugger-ruby_core_source (1.3.2)
erubis (2.7.0)
execjs (2.0.2)
hike (1.2.3)
i18n (0.6.9)
journey (1.0.4)
jquery-rails (3.1.0)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
json (1.8.1)
libv8 (3.16.14.3)
mail (2.5.4)
mime-types (~> 1.16)
treetop (~> 1.4.8)
mime-types (1.25.1)
multi_json (1.9.0)
polyglot (0.3.4)
rack (1.4.5)
rack-cache (1.2)
rack (>= 0.4)
rack-ssl (1.3.3)
rack
rack-test (0.6.2)
rack (>= 1.0)
rails (3.2.15)
actionmailer (= 3.2.15)
actionpack (= 3.2.15)
activerecord (= 3.2.15)
activeresource (= 3.2.15)
activesupport (= 3.2.15)
bundler (~> 1.0)
railties (= 3.2.15)
railties (3.2.15)
actionpack (= 3.2.15)
activesupport (= 3.2.15)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
rake (10.1.1)
rdoc (3.12.2)
json (~> 1.4)
ref (1.0.5)
rinruby (2.0.3)
rubyzip (1.1.0)
sass (3.2.14)
sass-rails (3.2.6)
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
sprockets (2.2.2)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.9)
therubyracer (0.12.1)
libv8 (~> 3.16.14.0)
ref
thor (0.18.1)
tilt (1.4.1)
treetop (1.4.15)
polyglot
polyglot (>= 0.3.1)
turn (0.9.6)
ansi
tzinfo (0.3.38)
uglifier (2.4.0)
execjs (>= 0.3.0)
json (>= 1.8.0)
PLATFORMS
ruby
DEPENDENCIES
debugger
jquery-rails
rails (= 3.2.15)
rinruby
rubyzip
sass-rails (~> 3.2.3)
sqlite3
therubyracer
turn
uglifier

@ -0,0 +1,18 @@
Copyright 2012 The Board of Regents of the University of Wisconsin System.
Contributors: Jason Shao, James McCurdy, Enhai Xie, Adam G.W. Halstead,
Michael H. Whitney, Nathan DiPiazza, Trey K. Sato and Yury V. Bukhman
This file is part of GCAT.
GCAT is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
GCAT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with GCAT. If not, see <http://www.gnu.org/licenses/>.

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save