Counting results
To determine the effectiveness of the Cell Counter, I compared it to two different other counting methods. One of them was manual counting using the Neubauer counting chamber, the other was counting the cells with a Coulter Counter. For that i took a cell suspension with ~1.35 * 10^7 cells and set up a serial dilution by always halving the amount up to 1:16. I took 3 measurements for each timepoint. One measurement for both, the Cell Counter and the manual counting, consists of three seperate images.
Here you can see the result of those measurements:
The Y-error bar represents the standard deviation of the 3 measurements taken at each dilution step.As you can see in this little test, all three methods give comparable results regarding the amount of cells/ml. While the manual counting of cells is a tedious approach, the Cell Counter has it's merits in efficiency compared to the Coulter Counter. All it needs are pictures taken under a microscope, which is easily done, even more so if it is done for more than one culture at once since it is only swapping of objectives then. It is also usefull for the cell counting in bioreactors. Bioreactors have to be monitored constantly for possible infections under the microscope with picture documentation, so one can use those pictures as input for the Cell Counter at the same time.
Experiment Data
For those of you, who want to replicate the experiment, here are the parameters used in the functions and the picture data:
Camera and microscope
- Pixel Size : 6.45x6.45 microns
- Binning : 2x2
- Camera Mount : 2x
- Magnification : 20x
Cells
- Diameter: 9.5 microns
Here are the pictures for the program to analyze.
The corresponding code looks like this:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: |
|
The data for the manual counting can be found here, and the Coulter Counter data is here.
A more in depth explanation how to adapt the functions for your use can be found here
namespace FSharp
--------------------
namespace Microsoft.FSharp
from FSharp.Plotly
type LinearAxis =
inherit DynamicObj
new : unit -> LinearAxis
static member init : ?AxisType:AxisType * ?Title:'a * ?Titlefont:Font * ?Autorange:AutoRange * ?Rangemode:RangeMode * ?Range:Range * ?Fixedrange:'b * ?Tickmode:TickMode * ?nTicks:'c * ?Tick0:'d * ?dTick:'e * ?Tickvals:'f * ?Ticktext:'g * ?Ticks:TickOptions * ?Mirror:Mirror * ?Ticklen:'h * ?Tickwidth:'i * ?Tickcolor:'j * ?Showticklabels:'k * ?Tickfont:Font * ?Tickangle:'l * ?Tickprefix:'m * ?Showtickprefix:ShowTickOption * ?Ticksuffix:'q * ?Showticksuffix:ShowTickOption * ?Showexponent:ShowExponent * ?Exponentformat:ExponentFormat * ?Tickformat:'r * ?Hoverformat:'s * ?Showline:'t * ?Linecolor:'a1 * ?Linewidth:'a2 * ?Showgrid:'a3 * ?Gridcolor:'a4 * ?Gridwidth:'a5 * ?Zeroline:'a6 * ?Zerolinecolor:'a7 * ?Zerolinewidth:'a8 * ?Anchor:AxisAnchorId * ?Side:Side * ?Overlaying:AxisAnchorId * ?Domain:Range * ?Position:float * ?IsSubplotObj:'a9 * ?Tickvalssrc:'a10 * ?Ticktextsrc:'a11 * ?Showspikes:'a12 * ?Spikesides:'a13 * ?Spikethickness:'a14 * ?Spikecolor:'a15 * ?Showbackground:'a16 * ?Backgroundcolor:'a17 * ?Showaxeslabels:'a18 -> LinearAxis
static member style : ?AxisType:AxisType * ?Title:'b * ?Titlefont:Font * ?Autorange:AutoRange * ?Rangemode:RangeMode * ?Range:Range * ?Fixedrange:'c * ?Tickmode:TickMode * ?nTicks:'d * ?Tick0:'e * ?dTick:'f * ?Tickvals:'g * ?Ticktext:'h * ?Ticks:TickOptions * ?Mirror:Mirror * ?Ticklen:'i * ?Tickwidth:'j * ?Tickcolor:'k * ?Showticklabels:'l * ?Tickfont:Font * ?Tickangle:'m * ?Tickprefix:'n * ?Showtickprefix:ShowTickOption * ?Ticksuffix:'o * ?Showticksuffix:ShowTickOption * ?Showexponent:ShowExponent * ?Exponentformat:ExponentFormat * ?Tickformat:'p * ?Hoverformat:'q * ?Showline:'r * ?Linecolor:'s * ?Linewidth:'t * ?Showgrid:'a1 * ?Gridcolor:'a2 * ?Gridwidth:'a3 * ?Zeroline:'a4 * ?Zerolinecolor:'a5 * ?Zerolinewidth:'a6 * ?Anchor:AxisAnchorId * ?Side:Side * ?Overlaying:AxisAnchorId * ?Domain:Range * ?Position:float * ?IsSubplotObj:'a7 * ?Tickvalssrc:'a8 * ?Ticktextsrc:'a9 * ?Showspikes:'a10 * ?Spikesides:'a11 * ?Spikethickness:'a12 * ?Spikecolor:'a13 * ?Showbackground:'a14 * ?Backgroundcolor:'a15 * ?Showaxeslabels:'a16 -> (LinearAxis -> LinearAxis)
--------------------
new : unit -> Axis.LinearAxis
from FSharp.Plotly
| True
| Ticks
| False
| All
| AllTicks
static member convert : (Mirror -> obj)
static member toString : (Mirror -> string)
| Auto
| Linear
| Array
static member convert : (TickMode -> obj)
static member toString : (TickMode -> string)
| Outside
| Inside
| Empty
static member convert : (TickOptions -> obj)
static member toString : (TickOptions -> string)
type Font =
inherit DynamicObj
new : unit -> Font
static member init : ?Family:FontFamily * ?Size:'b * ?Color:'c * ?Familysrc:'d * ?Sizesrc:'e * ?Colorsrc:'f -> Font
static member style : ?Family:FontFamily * ?Size:'a0 * ?Color:'a1 * ?Familysrc:'a2 * ?Sizesrc:'a3 * ?Colorsrc:'a4 -> (Font -> Font)
--------------------
new : unit -> Font
| Arial
| Balto
| Courier_New
| Droid_Sans
| Droid_Serif
| Droid_Sans_Mono
| Gravitas_One
| Old_Standard_TT
| Open_Sans
| Overpass
...
static member convert : (FontFamily -> obj)
static member toString : (FontFamily -> string)
static member Area : xy:seq<#IConvertible * #IConvertible> * ?Name:string * ?ShowMarkers:bool * ?Showlegend:bool * ?MarkerSymbol:Symbol * ?Color:'a2 * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?Dash:DrawingStyle * ?Width:'a4 -> GenericChart
static member Area : x:seq<#IConvertible> * y:seq<#IConvertible> * ?Name:string * ?ShowMarkers:bool * ?Showlegend:bool * ?MarkerSymbol:Symbol * ?Color:'a2 * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?Dash:DrawingStyle * ?Width:'a4 -> GenericChart
static member Bar : keysvalues:seq<#IConvertible * #IConvertible> * ?Name:string * ?Showlegend:bool * ?Color:'a2 * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?Marker:Marker -> GenericChart
static member Bar : keys:seq<#IConvertible> * values:seq<#IConvertible> * ?Name:string * ?Showlegend:bool * ?Color:'a2 * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?Marker:Marker -> GenericChart
static member BoxPlot : xy:seq<'a0 * 'a1> * ?Name:string * ?Showlegend:bool * ?Color:'a2 * ?Fillcolor:'a3 * ?Opacity:float * ?Whiskerwidth:'a4 * ?Boxpoints:Boxpoints * ?Boxmean:BoxMean * ?Jitter:'a5 * ?Pointpos:'a6 * ?Orientation:Orientation -> GenericChart
static member BoxPlot : ?x:'a0 * ?y:'a1 * ?Name:string * ?Showlegend:bool * ?Color:'a2 * ?Fillcolor:'a3 * ?Opacity:float * ?Whiskerwidth:'a4 * ?Boxpoints:Boxpoints * ?Boxmean:BoxMean * ?Jitter:'a5 * ?Pointpos:'a6 * ?Orientation:Orientation -> GenericChart
static member Bubble : xysizes:seq<#IConvertible * #IConvertible * #IConvertible> * ?Name:string * ?Showlegend:bool * ?MarkerSymbol:Symbol * ?Color:'a3 * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font -> GenericChart
static member Bubble : x:seq<#IConvertible> * y:seq<#IConvertible> * sizes:seq<#IConvertible> * ?Name:string * ?Showlegend:bool * ?MarkerSymbol:Symbol * ?Color:'a3 * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font -> GenericChart
static member ChoroplethMap : locations:seq<string> * z:seq<#IConvertible> * ?Text:seq<#IConvertible> * ?Locationmode:LocationFormat * ?Autocolorscale:bool * ?Colorscale:Colorscale * ?Colorbar:'a2 * ?Marker:Marker * ?Zmin:'a3 * ?Zmax:'a4 -> GenericChart
static member Column : keysvalues:seq<#IConvertible * #IConvertible> * ?Name:string * ?Showlegend:bool * ?Color:'a2 * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?Marker:Marker -> GenericChart
...
static member Chart.Line : x:seq<#System.IConvertible> * y:seq<#System.IConvertible> * ?Name:string * ?ShowMarkers:bool * ?Showlegend:bool * ?MarkerSymbol:StyleParam.Symbol * ?Color:'c * ?Opacity:float * ?Labels:seq<#System.IConvertible> * ?TextPosition:StyleParam.TextPosition * ?TextFont:Font * ?Dash:'e * ?Width:'f -> GenericChart.GenericChart
from CounterFunctions
static member CreateDirectory : path:string -> DirectoryInfo
static member Delete : path:string -> unit + 1 overload
static member EnumerateDirectories : path:string -> IEnumerable<string> + 2 overloads
static member EnumerateFileSystemEntries : path:string -> IEnumerable<string> + 2 overloads
static member EnumerateFiles : path:string -> IEnumerable<string> + 2 overloads
static member Exists : path:string -> bool
static member GetCreationTime : path:string -> DateTime
static member GetCreationTimeUtc : path:string -> DateTime
static member GetCurrentDirectory : unit -> string
static member GetDirectories : path:string -> string[] + 2 overloads
...
Directory.GetDirectories(path: string) : string []
Directory.GetDirectories(path: string, searchPattern: string) : string []
Directory.GetDirectories(path: string, searchPattern: string, searchOption: SearchOption) : string []
--------------------
Directory.GetDirectories(path: string) : string []
Directory.GetDirectories(path: string, searchPattern: string) : string []
Directory.GetDirectories(path: string, searchPattern: string, searchOption: SearchOption) : string []
from Microsoft.FSharp.Collections
from CounterFunctions