<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox where print preview displays the noscript content */
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

Also see [[AdvancedOptions]]
+Relatively long reads (~400bp)
-Relatively small throughput (~1Gbp/d)
[img[454|454.png]] ([[Rothberg JM & Leamon JH. Nat Biotech 2008|http://www.nature.com/nbt/journal/v26/n10/full/nbt1485.html]])
##DNA fragmentation and adapter ligation
##Emulsion PCR (emPCR){{div{
Uses primers designed to the adapter sequence so that all fragments are equally amplified. However, all copies of one of the two primers are attached to nano-scale beads and initially, only a single template molecule (on average) is allowed to hybridise to a primer on each bead. Then each bead is enclosed in its own nano-scale bubble by the emulsion. The bubble contains all the other PCR ingredients (copies of the other primer and polymerase). With this setup, PCR leads to clonal amplification of each template with eventually ~10^^7^^ copies of a template covalently bound to each bead.
[img[emPCR schematic|abi-fig2.png]]
[img[emPCR|emPCR.png]] ([[Diehl F et al. Nat Methods 2006|http://www.nature.com/nmeth/journal/v3/n7/full/nmeth898.html]])
##Deposition of a bead each into the ~10^^6^^ wells of a nano-scale fibre-optic honeycomb structure called a micro-titre plate.
##Addition of other sequencing reaction components on smaller beads.
##Electron-microscopic image of micro-titre plate.
##Pyrosequencing aka sequencing-by-synthesis{{div{
As opposed to [[Chain-terminator sequencing]], the synthesis of the template-complementary reverse strand by the polymerase is never terminated. Instead, the dNTPs are cycled through to see which one is incorporated by the polymerase because it is complementary to the next template base or bases in line. In turn, each dNTP is added to and then removed from the reaction. In between, the number of base incorporations by the polymerase is measured: 0 if the dNTP did not match the next template base, >=1 if the dNTP matched the next base or bases. Pyrosequencing has trouble determining the correct length of long homopolymers in the template, e.g., that there are six As in TCGAAAAAATCCT.
*Image analysis and base calling{{div{
[img[Affy GeneChip|affyGeneChip.png]][img[Affy GeneChip scan|affyChip.png]]
The amount of gene expression (number of transcript molecules per gene) is measured using a probe set: multiple pairs of so called perfect match (PM) and mismatch (MM) probes. The PM probes in a //probe set// match the sequence of the gene perfectly, while the MM probes have a mismatch built into the 13^^th^^ base pair position. The idea is to measure signal+noise with a PM probe and the noise only with the paired MM probe so that ~PM-MM is an estimate of the signal without the noise. You can see below (5^^th^^ pair from the right) that this only an ideal scenario since sometimes the measurement for an MM probe exceeds that of its PM mate, for example, because the MM probe is a perfect match to an expressed gene elsewhere in the genome and thus, measures an actual signal produced by the other gene (//cross-hybridisation//). Or perhaps the PM probe is a worse match than the MM probe since the transcript databases used to design the probe sequences contained an error. Or manufacturing of the PM probe failed. All of these and other sources of error are real. Averaging over all pairs in a probe set, while excluding outliers, helps to alleviate the problem. That's essentially what the Affymetrix [[MAS5|http://www.affymetrix.com/support/technical/manuals.affx]] algorithm does, but since its release in 2001, better probe set //summarisation// algorithms have been developed, the most commonly used being RMA ([[Irizarry RA et al. Nucl Acids Res 2003|http://view.ncbi.nlm.nih.gov/pubmed/12582260]]).
[img[Affy probe set|affy1.png]]
[img[Affy scanned probe set|affy2.png]]
[[Gene Expression]]
[[SNP Genotyping]]
[[Array CGH]]
[[DNA Capture]]
Genomic tiling microarrays for comparative genomic hybridisation (CGH) detect genomic regions of size >~10^^4^^bp that are either missing or have been duplicated in an individual relative to a control sample. These, in comparison with ~SNPs, relatively large scale genomic abnormalities can just as much be the cause of disease.
*Probes are more or less regularly spaced throughout the genome (//tile// the genome) and are designed to non-polymorphic sequence (i.e., avoid SNPs and other known sequence polymorphisms.
*Hybridised with two DNA samples: one of the 'patient' and one of a 'normal' control. Dyes of different colour (typically, Cy3=green and Cy5=red) are used to fluorescently label these two DNA samples.
*If the patient DNA was labelled with Cy3, then a green spot on the scanned array image signifies more patient than control DNA, a red spot less patient DNA, and a yellow spot roughly equal amounts of patient and control DNA (the ratio of the green and red signals can be properly quantified):
[img[two colour array|twoColorMA.png]]
Or just called //cloning//: a multi-purpose tool in molecular biology, but often used prior to [[Chain-terminator sequencing]] (Sanger sequencing) to separate and individually (aka clonally) copy (aka amplify) molecules contained in a mix of DNA fragments.
#Ligation reaction: the mix of DNA molecules (size range ~100bp-10Kbp) of which one wants to know the sequences is incubated with a proportionate number of copies of a cloning vector (a genetically engineered, linearised bacterial plasmid) plus ligase. Ligase fuses a single DNA molecule each to the two ends of a vector, generating a circular bacterial plasmid with an insert of unknown sequence.
#Heat shock a batch of laboratory-grade //E. coli// bacteria (to make their membranes porous) and incubate with the generated plasmids. Some bacteria will take up a plasmid and survive the heat shock.
#Spread out bacteria across surface of Petri dish filled with an agarose-broth-antibiotic mix. Bacteria with plasmid are immune to antibiotic since plasmid encodes protein that counteracts antibiotic. They are isolated singletons but will multiply exponentially and form visible circular bacterial colonies. The bacteria in a colony are genetically identical: each carries a copy of the plasmid with the //same insert//.{{div{
[img[E.coli colonies|Ecoli_colonies.png]] ([[Source|http://commons.wikimedia.org/wiki/File:Ecoli_colonies.png]])
#Pick colonies from plate into separate tubes with broth so let bacteria multiply further.
#Extract plasmids from bacteria and/or perform [[Polymerase Chain Reaction]] (typically using the ~SP6 and T7 primers since the insert is flanked by ~SP6 and T7 sequences engineered into the plasmid).
#Use plasmids or PCR product in a [[Chain-terminator sequencing]] reaction.
[<img[./homepage/me4.jpg]] [>img[./homepage/DNAquilting/DNAx2_vsm.png][DNA Quilting]]
@@clear:both;display:block; @@
!Education and Employment
*2012-present Senior Lecturer in Bioinformatics and Epigenomics, Dept. of Medical and Molecular Genetics, King's College London.
*2009-2012 RCUK Research Fellow in Functional Genomics, Dept. of Medical and Molecular Genetics, King's College London.
*2004-8 Bioinformatics post-doctoral researcher, Dept. of Medical and Molecular Genetics, King's College London.
**2007-8 Wellcome Trust VIP award
**2005-7 EMBO long-term fellow
*1999-2004 Computer Science ~PhD program, University of Maryland, College Park, USA.
**~PhD received: Aug 20, 2004.
**~PhD supervisor: James Reggia.
**~PhD thesis title: ~One-Shot ~Multi-Winner ~Self-Organizing Maps.
*1996-9 Diplom Informatik (Computer Science) program, Humboldt Universitaet zu Berlin, Germany.
!Grants and Awards
*KCL Genetics and Molecular Medicine Division ~PhD Studentship.
*Aug 2015 – Aug 2018: MRC Project Grant (co-applicant). Project title: Regulation of ~CD4 T cell and ~HIV-1 gene expression by Sam68.
*Jul 2013 – Aug 2013: Genetics Society Genes and Development Summer Studentship.
*Oct 2012 – Sep 2013: KCL ~PhD Continuation Scholarship.
*Mar 2011 – Feb 2014: MRC Project Grant (co-applicant). Project title: Investigating the role of DNA methylation in human growth disorders.
*Dec 2010 – Mar 2011: BRC Young Investigator award.
*Jan 2009 – Dec 2013: RCUK Research Fellowship in Functional Genomics.
*Oct 2010 – Sep 2013: KCL Graduate School ~PhD Studentship.
*Sep 2008 – Aug 2011: JDRF Project Grant (co-applicant). Project title: Islet-specific T-cell response genes identified by microarray analysis.
*Sep 2008 – Dec 2008: The Wellcome Trust Value in People fellowship.
*Sep 2005 – Aug 2007: EMBO long-term fellowship. Project title: Analysis of microarray-based imprinted gene identification.
*Underlying principle is the same as for [[Gel Electrophoresis]]
*Hair-thin, long capillary assumes role of gel {{div{
[img[capillary electrophoresis|CE_Basic.png]]
*DNA/RNA is fluorescently labelled 
*Measure amount of fluorescence detected at end of capillary over time
*Peaks in fluorescence profile over time correspond to molecules of specific size 
**peak height reflects quantity of molecules of respective size{{div{ 
[img[fluorescence profile|Electropherogram_trace.jpg]]
*+high resolution
*+high sensitivity (little DNA/RNA needed)
*-complex, expensive machinery
Aka Sanger sequencing ([[Frederick Sanger|http://en.wikipedia.org/wiki/Frederick_Sanger]], 1977).
!!Classic version
Uses radioactive labelling and [[Gel Electrophoresis]]. Rarely used these days, but nicely illustrates the principle. Ingredients:
#many (~10^^9^^) copies of the DNA template: a single-stranded DNA molecule.
#many copies of the primer: a short DNA oligonucleotide that is the reverse complement of a known sub-sequence in the template and hence, will hybridize with it.
#many molecules of a ~DNA-dependent DNA polymerase: the enzyme that will extend the primer by successively adding DNA template-complementary nucleotides to its 3' end.
#lots of free nucleotides: d''A''TP, d''T''TP, d''G''TP and d''C''TP (d''N''~TPs).
#a little less of a chain-terminating and radioactively labelled nucleotide: //either// dd''A''TP, dd''C''TP, dd''G''TP or dd''T''TP (dd=dideoxy=lacking the 3' hydroxyl group and hence, preventing addition of further nucleotides by the polymerase). (Alternatively, one can label the primer or the free nucleotides).
This //sequencing reaction// creates many copies of all possible template-complementary primer extensions that terminate with either base A, C, G or T (depending on which ddNTP we used). To completely sequence the template, four reactions are necessary, one for each ddNTP. 
[img[sequencing reaction schematic|seqReactionSchematic.png]]
In parallel, the four reaction products are then separated by size using [[Gel Electrophoresis]] with a single reaction product per well of a polyacrylamide gel. The sooner a primer extension was terminated by the addition of a ddNTP (happens by chance), the shorter the resulting DNA molecule and hence, the faster it travels down the lane from the well. The gel has to run long enough so that a size difference of a single nucleotide between two DNA molecules creates a noticeable (a few mm) difference in their position along the gel. Then photographic film is exposed to the gel: wherever there is a large accumulation of DNA molecules (because they are of the same size and hence, ended up in the same place on the gel), enough energy is released via radioactive decay products (eg, alpha particles) to create a dark band once the film has been developed. Thus, to determine the sequence of the template from 5' to 3' (the 'proper' direction by convention), read the bands on the gel picture from //bottom to top// and for each band, write down the ddNTP that was used in the reaction. That way, you are reading the sequence of the synthesised strand from 5' (shorter and therefore faster prefixes) to 3' (longer, slower prefixes). That sequence then needs to be reverse-complemented to arrive at the sequence of the template molecule. In the gel picture below, which contains 16x4 lanes resulting from the sequencing of 16 different templates, the lanes for the 7^^th^^ template (outlined in pink) are labeled with the base //complementary// to the ddNTP used in the reaction. So, reading those lanes from bottom to top and complementing (to get back to the ddNTP), we get 
TGCTGGAATTCGGCTTAGTCGGGCCCAGGACTGGTGAAGCCTTCGGAGACCCTGTCCCTCACCTGCACTGT... as the sequence of the synthesised strand. Try to extend this //read// to ~100bp and then reverse-complement it as an exercise.
[img[sequencing gel|seqGel.png]]
Now that we have the sequence of the template, we can go to, for example, the [[UCSC genome browser|http://genome.ucsc.edu]] and, using their BLAT alignment tool, find out where in the human (found out using nucleotide [[BLAST|http://blast.ncbi.nlm.nih.gov/Blast.cgi]]) genome the template came from:
[img[BLAT on UCSCl|BLATmatches.png]]
So, the template was a piece of DNA from the distal end of Chr 14. More specifically, except for the last 16 bases (potentially a bit of sequencing vector), the read perfectly matches a bit of DNA that is used by the B cells of the immune system to manufacture antibodies. However, since this region of the genome is highly repetitive, our read also (imperfectly) matches the genome in several other nearby places. That is a common problem with short (~100bp) reads. For a long time, Sanger sequencing has been capable of generating ~1Kbp reads for which this rarely is an issue. But the ambiguity problem associated with short reads has made a big come-back with the arrival of [[Next Generation Sequencing]].
!!Dye-terminator sequencing
Improves on classic chain-terminator sequencing by using ddNTPs labelled with fluorescent dyes (a different color dye for each of the four bases) in a //single// sequencing reaction, followed by [[Capillary Electrophoresis]] to read the sequence. The output is a //trace// that consists of the continuous fluorescence signal for each dye with signal peaks corresponding to the detection of a specific base:
[img[Radio-labeling versus dye-labeling|Radioactive_Fluorescent_Seq.png]]
Still widely used since, due to automation and parallelisation of sequence read generation (driven by the human genome project), it is easy, reliable and can generate long reads (however, throughput in bases per unit of time is orders of magnitudes lower than for [[Next Generation Sequencing]]). Here are example outputs generated by an ABI 3730 96-well matrix capillary sequencer that can read 96 sequencing reaction products in parallel. The fluorescence signal for all wells (some were empty) over time from left to right, illustrating that some templates were shorter than the maximally achievable read length (signal ends abruptly), while toward the end of the longer templates one can see a marked reduction of the signal strength (colours become increasingly faint toward the right) due to a decreased amount of long chain-terminated molecules (depletion of a reaction ingredient and/or increased frequency of polymerase dropping the template before ddNTP-incorporation):
[img[entire plate|capillaryFullPlate.png]]
Looking at the sequence-aligned traces for two reads in detail, we see that single base differences between two templates are easy to spot. Other and/or larger differences (insertions, deletions, duplications, inversions) can also be called (with the right tools). 
[img[two traces|capillary2TracesZoom.png]]
Notice that there is background signal, which is quantified and used for a signal-to-noise ratio calculation and the inference of an error probability //p// for each base call, expressed as the //Phred// base quality score //-10log~~10~~(p)// rounded to the nearest integer.
|Phred score|p|h
What looks like an error/noise can also be due to having started out with two or more templates that differ in sequence, for example, the two  genomes of a human individual. At the position of a single nucleotide polymorphism (SNP) within the human population a normal individual can have one of three //genotypes//, which look like this in a Sanger sequencing trace (example of a C/T SNP):
*~E-Mail: reiner DOT schulz AT kcl DOT ac DOT uk
**I recommend the use of PGP or GPG: [[my public key|./homepage/pub_key]]
*Phone: +44.(0)20.7848.8155
*FAX: +44.(0)20.7188.2585

Department of Medical and Molecular Genetics
King's College London
Guy's Campus, Guy's Hospital
8th floor Tower Wing
Great Maze Pond
London ~SE1 9RT
United Kingdom
Microarrays are used to capture pre-defined regions of the genome for targetted [[Next Generation Sequencing]].
*Sequencing a whole human genome with NGS is still expensive and often not necessary to answer the biological question of interest.
*For example, which gene is specifically mutated in patients with a particular Mendelian-heritable disease? To answer that, it is usually sufficient to sequence just the bits of the genome that correspond to exons. Hence, we use a microarray with probes designed to target all exons and hybridise it with the DNA of a patient. DNA that does not correspond to exons is washed away. Only exonic DNA fragments have hybridised to the probes on the array. We recover those fragments from the array and sequence only them.
[img[exome capture|exomeSeq.PNG]]
''Exhibit A'': A representation of Rosalind Franklin's iconic photo 51 superimposed on an encoding of part of the coding sequence of human ~SIAT9 (aka ~ST3GAL5) with a rare nonsense mutation that causes Infantile-onset Symptomatic Epilepsy Syndrome ([[Simpson MA et al. Nat Genet 2004|http://www.nature.com/ng/journal/v36/n11/abs/ng1460.html]]). The encoding (developed by Beverly St. Clair: http://www.genomequilts.com/) is as follows. Each non-white half-square triangle encodes a nucleotide. Depending on the direction in which the triangle is pointing, the result is a stylised A (bottom right), C (top left), G (bottom left) or T (top right). Nucleotides are in row-wise order from the top left to the bottom right of the quilt.
''Exhibit B'': The genes //~FT1// and //~FT2// regulate seasonal growth in trees, and are expressed in winter and summer, respectively ([[Hsu CY et al. PNAS 2011|http://www.pnas.org/content/108/26/10756.long]]). //~FT2//, represented here, specifically regulates vegetative growth.
The (perfectly healthy!) user community seems to be content.
@@clear:both;display:block; @@
[[Chain-terminator sequencing]] (Sanger sequencing)
[[Next Generation Sequencing]] (NGS)
Sanger sequencing and NGS depend on signal amplification by generating lots of identical copies of the template prior to the actual sequencing reaction. That is achieved with [[Bacterial Cloning]] and/or [[Polymerase Chain Reaction]] in the case of Sanger sequencing, and in the NGS case, by emPCR ([[454/Roche]], [[Solid/ABI]]) or bridge amplification/clustering ([[Solexa/Illumina]]). Subsequently, all template copies are used in the sequencing reaction so that each base incorporation event synchronously happens across millions of template molecules, the sum of the events generating enough of a signal to be detectable. One downside is that copying can fail or, even worse, introduce errors, both of which can depend on the sequence of the template introducing systematic and potentially complex non-biological biases that are hard to identify and remove from the read data. Another downside is that copying is incomplete: DNA modifications like Cytosine methylation are not copied, but being able to read modified bases is essential due to the importance of epigenetics in gene regulation. Therefore, the holy grail of sequencing is [[Single-molecule sequencing]] which promises to achieve NGS throughput while doing away with template copying.
*Purpose: sorting of DNA/RNA molecules according to size
*Nucleic acid molecules are negatively charged
**due to phosphate backbone
*Migrate to positive pole in an electric field
*Speed of migration inversely proportional to size (length) of molecule
**the smaller the molecule the faster it travels
**many properties of a molecule influence its speed {{div{
[img[electrophoresis forces|Electrophoresis.png]]
***for DNA/RNA, size matters most, followed by 2^^nd^^-ary structure
***hardly any 2^^nd^^-ary structure with linear, double-stranded DNA
***2^^nd^^-ary structure formation can be chemically inhibited {{div{ 
[img[tRNA 2^^nd^^-ary structure|TRNA_all2.png]]
[[Gel Electrophoresis]]
[[Capillary Electrophoresis]]
*Electric field generated by current flowing through a gel in a tank with salt solution {{div{ 
[img[agarose gel tank|469px-Gel_electrophoresis_apparatus.png]]
*Gel created by pouring liquid into mould where it solidifies (by cooling or polymerisation)
*DNA/RNA samples are entered into wells at 'top' of gel
*Gel is 1-2.5% Agarose or 4-20% Polyacrylamide in a salt solution
**agarose = polysaccharide extracted from seaweed
***-low resolution
***+large size range (100bp - 20Kbp)
***+easy to prepare
***visualised with UV light after staining with ethidium bromide {{div{ 
[img[agarose gel under UV|AgarosegelUV.jpg]] [img[agarose gel image|Agarosegelphoto.jpg]]
**polyacrylamide = polymer of acrylamide
***-small size range
***-difficult to prepare
***+high resolution
***+works for proteins too {{div{ 
Gene expression microarray measure gene expression transcriptome-wide.
*Probe sequences are designed to target all known gene transcripts of a species (human, mouse, etc.).
*Sample is RNA (most often mRNA) extracted from a cell or tissue sample.
*Enables determination of changes in gene expression between, e.g., diseased and normal samples, or treated and untreated samples.
[img[Affy gene expression|affyGeneExpr.png]] ([[Affymetrix|http://www.affymetrix.com]] gene expression microarray workflow)
Double-stranded DNA or RNA (in solution) 'melts' at high temperatures (~94C), that is, the hydrogen bonds between the two strands are broken and they separate from each other (//denature//). One is left with single-stranded molecules. Reducing the temperature will reverse this process, that is, the strands will re-connect via hydrogen bonds (//hybridise//) and re-form double-stranded DNA or RNA. Hybridisation can also occur between DNA and RNA, resulting in a ~DNA-RNA hybrid double-stranded molecule.

At the right temperature, two single-stranded molecules that are reverse complementary hybridise to form a double-stranded molecule with high sensitivity and specificity. That is, even if many (~10^^9^^) other single-stranded molecules are present that are not (or less) reverse complementary, hybridisation with them will not (or relatively rarely) take place. When biologists talk about hybridisation, they usually mean the sequence-specific hybridisation of two reverse complementary strands.

Interestingly, the principle of hybridisation is analogous to the computer science technique of simulated annealing for training artificial neural networks like, for example, Hopfield networks and Boltzmann machines, to perform partial pattern reconstruction (e.g., completion of partial handwritten digits as an OCR pre-processing step). However, at the time (1970s), computer scientists were inspired by physics (spin glasses), not molecular biology which was still in its infancy.
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|Description|Insert Javascript executable code directly into your tiddler content.|

''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.

''Deferred execution from an 'onClick' link''
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.  You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text

''External script source files:''
You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}).  This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins.  The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.

''Display script source in tiddler output''
By including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.

''Defining javascript functions and libraries:''
Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed.  Thus, you cannot load a library and //immediately// use it's functions within the same tiddler.  However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).

To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened.  For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.

Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines.  Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.

''Creating dynamic tiddler content''
An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.

If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display.  For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.

//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler.  To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//

''Accessing the ~TiddlyWiki DOM''
The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.

Access to this DOM element allows you to create scripts that can:
* vary their actions based upon the specific location in which they are embedded
* access 'tiddler-relative' information (use findContainingTiddler(place))
* perform direct DOM manipulations (when returning wikified text is not enough)
an "alert" message box:
><script show>
	alert('InlineJavascriptPlugin: this is a demonstration message');
dynamic output:
><script show>
	return (new Date()).toString();
wikified dynamic output:
><script show>
	return "link to current user: [["+config.options.txtUserName+"]]";
dynamic output using 'place' to get size information for current tiddler:
><script show>
   if (!window.story) window.story=window;
   var title=story.findContainingTiddler(place).id.substr(7);
   return title+" is using "+store.getTiddlerText(title).length+" bytes";
creating an 'onclick' button/link that runs a script:
><script label="click here" title="clicking this link will show an 'alert' box" show>
   if (!window.story) window.story=window;
   alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}
>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}
><script src="demo.js" show>
	return "loading demo.js..."
><script label="click to execute demo() function" show>
import (or copy/paste) the following tiddlers into your document:
''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)
!!!!!Revision History
''2007.02.19 [1.6.0]'' added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
''2006.10.16 [1.5.2]'' add newline before closing '}' in 'function out_' wrapper.  Fixes error caused when last line of script is a comment.
''2006.06.01 [1.5.1]'' when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output
''2006.01.05 [1.4.0]'' added support 'onclick' scripts.  When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked.  'place' value is set to match the clicked button/link element.
''2005.12.13 [1.3.1]'' when catching eval error in IE, e.description contains the error text, instead of e.toString().  Fixed error reporting so IE shows the correct response text.  Based on a suggestion by UdoBorkowski
''2005.11.09 [1.3.0]'' for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content.  Based on a suggestion by BradleyMeck
''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax
''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access 
''2005.11.08 [1.0.0]'' initial release
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
version.extensions.inlineJavascript= {major: 1, minor: 6, revision: 0, date: new Date(2007,2,19)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",

	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			if (lookaheadMatch[1]) { // load a script library
				// make script tag, set src, add to body to execute, then remove for cleanup
				var script = document.createElement("script"); script.src = lookaheadMatch[1];
				document.body.appendChild(script); document.body.removeChild(script);
			if (lookaheadMatch[5]) { // there is script code
				if (lookaheadMatch[4]) // show inline script code in tiddler output
				if (lookaheadMatch[2]) { // create a link to an 'onclick' script
					// add a link, define click handler, save code in link (pass 'place'), set link attributes
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
					link.code="function _out(place){"+lookaheadMatch[5]+"\n};_out(this);"
				else { // run inline script code
					var code="function _out(place){"+lookaheadMatch[5]+"\n};_out(w.output);"
					try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
} )
None currently available.
 <<tiddler ToggleRightSidebar>>
[[Polymerase Chain Reaction]]
[[Northern and Southern Blots]]
[[Restriction Enzyme Digestion]]
[[DNA Sequencing]]

[[Linear slideshow as PDF|./METH.pdf]]
There are many microarray manufacturers (Affymetrix, Illumina, Agilent, Nimblegen, etc.). Most produce oligonucleotide microarrays where (the many millions of copies of) a particular oligonucleotide probe is put at a defined spot on a glass slide. So, for each probe, the coordinate of its spot within the grid of spots on the slide is always. Consequently, given the coordinate of a spot, we know which probe it corresponds to and hence, can associate the measurement taken by the probe with the target of the probe (e.g., a particular transcript or SNP). The exception are Illumina's [[Randomly Ordered Microarrays]] where the positions of all probes within the grid are completely random and need to be decoded using 'DNA computing'.

The first commercially available large-scale [[Gene Expression]] microarrays were [[Affymetrix GeneChips]], at a time when manufacturing oligonucleotides >25bp was still a cost issue. The measurement of a single 25bp probe per gene is not reliable enough so that Affymetrix summarise the measurements taken by a set of sequence-distinct probes that target the same gene. By now, there are large amounts of Affymetrix gene expression array data in the public domain, and the arrays are still widely used.
Essentially, microarrays are the reverse of [[Northern and Southern Blots]] (and again, [[Ed Southern|http://en.wikipedia.org/wiki/Edwin_Southern]] invented the technique): instead of interrogating a DNA or RNA sample with a single probe, we interrogate 10^^3^^ to 10^^6^^ distinct probes with the molecules in the sample. The probes are attached to a solid surface, for example, a glass slide. More precisely, millions of copies of each probe are attached to the same //spot// on the surface. The molecules in the sample are fragmented into relatively small pieces (by mechanical force or a [[Restriction Enzyme Digestion]]) and fluorescently labelled. The glass slide is then washed with the sample, resulting in [[Hybridisation]] of sample molecules to reverse complementary probes on the slide. What's left over of the sample is washed away. The hybridised slide is scanned with a laser to determine the amount of fluorescence for each spot which, ideally, is proportional to the number of reverse complementary molecules in the sample.
[img[Affy chip|affyChip.png]] ([[Affymetrix|http://www.affymetrix.com]] scanned microarray)
There are many [[Applications of Microarrays]] and technically different [[Microarray Platforms]].
Aka NGS. The principle and challenge is to run, observe and analyse millions of sequencing reactions in parallel to increase the number of sequenced bases per unit of time by orders of magnitudes, while keeping costs low. One often recited goal is to be able to sequence a complete human genome within a few weeks at a cost of <$1,000, but this is just one (and not necessarily the most useful) of many applications of NGS. The three most commonly used NGS platforms are (in order of arrival-to-market):
An in-the-nutshell comparison of the big three NGS platforms:
[img[NGS comparison|NGScomparison.png]] (based on [[Rothberg JM & Leamon JH. Nat Biotech 2008|http://www.nature.com/nbt/journal/v26/n10/full/nbt1485.html]])
No relation with the American civil war. It's just that [[Ed Southern|http://en.wikipedia.org/wiki/Edwin_Southern]] came up with the technique of DNA blots and when people adapted it for RNA, they called it a Northern blot. And yes, there are Western and Eastern (protein) blots too, and even a Southwestern blot.
Purpose: given a known sequence, Northern and Southern blots are a way to probe a size-sorted sample of nucleic acids (e.g., all mRNAs extracted from a sample of cells) to see if it contains molecules that are reverse complementary to the known sequence and if so, to determine their approximate length. Sorting of the sample by size is done using [[Gel Electrophoresis]]. The size-sorted molecules are transferred and anchored to a membrane. This very durable membrane can be repeatedly interrogated by [[Hybridisation]] with a radioactively labelled oligonucleotide probe that will hybridise to reverse complementary molecules on the membrane. After [[Hybridisation]], photographic film is exposed to the membrane so that local accumulations of the radioactive probe will lead to dark bands on the developed film. These bands can be compared to the bands of a //ladder//, that is, a known composition of DNA of discrete and known sizes that has been size-sorted along with the actual sample(s), to determine the size of the molecule corresponding to a band.
Unfortunately, one needs a lot of sample DNA or RNA to make a blot, and the sample often is very precious.
Continuing with the mRNA example, one can ask if a gene, of which we know a part of its sequence, was transcribed in our sample and, if so, how long the transcript or transcripts were (potentially telling us which exons of the gene were spliced together to make these transcripts).
[img[H13 Northern|H13.png]] ([[Wood AJ et al. Genes Dev 2008|http://genesdev.cshlp.org/content/22/9/1141.full]])
<div id='header' class='header'>
<span class='searchBar' macro='search'></span>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div id='contentFooter' refresh='content' tiddler='contentFooter'></div>
<span style='display:none' macro='tiddler SiteStartup'></span>
Aka PCR.
*Purpose: sequence-specific exponential copying of DNA
**Solves the needle-in-a-haystack problem of finding a specific, small (~100bp-10Kbp) piece of DNA in a much larger collection of DNA like the DNA extracted from millions of human cells (10^^6^^ * 2.5Gbp) where perhaps only a handful of cells each contain a single copy of the piece of DNA of interest. 
**Does so by generating a large number of (~10^^9^^) copies of the 'needle' that can be 'seen' easily or even dwarf the haystack.
*Exploits the principle of [[Hybridisation]] and the following facts:
**There is a heat-resistant enzyme (~DNA-dependent DNA polymerase) that, given a single-stranded DNA molecule (the //template//), a short reverse complementary piece of DNA (the oligonucleotide //primer//) and free nucleotides (dNTPs), will extend the primer by adding template-complementary dNTPs to the primer's 5' end.
**Using two primers, we can sequence-specifically 'address' start and end of a consecutive region in the template: the 'forward' primer is the reverse complement of the start (5' end), and the 'reverse' primer is sequence-identical to the (3') end.
*It helps computer scientists to think of DNA as a biochemical implementation of content-addressable memory, that is, given a partial known pattern (a sequence prefix or suffix or a sub-sequence), one can retrieve the potentially partially unknown whole pattern.
**In the case of PCR, we know start and end and 'retrieve' start and end plus the potentially partially unknown bit in the middle.
*Afterward, the copies are isolated from the 'haystack' using [[Gel Electrophoresis]]:{{div{
#[[Gel Electrophoresis]]
#Cut band from gel that has expected size (based on comparison with ladder DNA of known sizes).
#Extract DNA from cut-out gel piece.
#Carry out subsequent experiments that require pure PCR product (e.g., determine full sequence of PCR product using [[DNA Sequencing]]).
*PCR is even more powerful when one observes the reaction in real-time: [[Quantitative Real-Time PCR]].
[[Google Scholar|http://scholar.google.com/citations?user=1k5_GOwAAAAJ]]
[[Researcher ID|http://www.researcherid.com/rid/A-5940-2011]]
[[KCL PURE|https://kclpure.kcl.ac.uk/portal/reiner.schulz.html]]
#Sobolev O, Binda E, O'Farrell S, Lorenc A, Pradines J, Huang Y, Duffner J, __Schulz R__, Cason J, Zambon M, Malim M, Peakman M, Cope A, Capila I, Kaundinya G, Hayday A. Adjuvanted influenza-~H1N1 vaccination reveals lymphoid signatures of age-dependent early responses and of clinical adverse events. //Nature Immunology//. 2016 Feb;17(2):204-13. [[PubMed|http://www.ncbi.nlm.nih.gov/pubmed/26726811]]
#Dand N, __Schulz R__, Weale ME, Southgate L, Oakey RJ, Simpson MA, and Schlitt T. Network-informed gene ranking tackles genetic heterogeneity in exome-sequencing studies of monogenic disease. //Hum Mutation//. 2015 Dec;36(12):1135-44. [[open access|http://onlinelibrary.wiley.com/doi/10.1002/humu.22906/abstract]]
#Apolonia L, __Schulz R__, Curk T, Rocha P, Swanson CM, Schaller T, Ule J, and Malim M. Promiscuous RNA Binding Ensures Effective Encapsidation of ~APOBEC3 Proteins by ~HIV-1. //~PLoS Pathogens//. 2015 Jan 15. [[open access|http://journals.plos.org/plospathogens/article?id=10.1371/journal.ppat.1004609]]
#Prickett AR*, Ishida M*, Boehm S, Frost JM, Puszyk W, ~Abu-Amero S, Stanier P, Moore GE*, Oakey RJ*, and __Schulz R*__. Genome-wide methylation analysis in ~Silver-Russell syndrome patients. //Hum Genet//. 2015 Jan 7. [[open access|http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4568568/]] (*authors contributed equally)
#Saadeh H and __Schulz R__. Protection of ~CpG islands against //de novo// DNA methylation during oogenesis is associated with the recognition site of E2f1 and E2f2. //Epigenetics & Chromatin//. 2014 Oct;7:26. [[open access|http://www.epigeneticsandchromatin.com/content/7/1/26]]
#Underkoffler LA, Carr E, Nelson A, Ryan MJ, __Schulz R__ and Loomes KM. Microarray Data Reveal Relationship between Jag1 and Ddr1 in Mouse Liver. //~PLoS ONE//. 2013 Dec 31;8(12):e84383. [[open access|http://www.plosone.org/article/info:doi/10.1371/journal.pone.0084383]]
#Goujon C, Moncorgé O, Bauby H, Doyle T, Ward CC, Schaller T, Hué S, Barclay WS, __Schulz R__ and Malim MH. Human ~MX2 is an interferon-induced post-entry inhibitor of ~HIV-1 infection. //Nature//. 2013 Oct 24;502(7472):559-62. [[PubMed|http://www.ncbi.nlm.nih.gov/pubmed/24048477]]
#Prickett AR*, Barkas N*, ~McCole RB*, Hughes S, Amante SM, __Schulz R__ and Oakey RJ. Genomewide and parental allele-specific analysis of CTCF and cohesin DNA binding in mouse brain reveals a tissue-specific binding pattern and an association with imprinted differentially methylated regions. //Genome Research//. 2013 Oct;23(10):1624-35. [[PubMed|http://www.ncbi.nlm.nih.gov/pubmed/23804403]] (*authors contributed equally)
#Proudhon C*, Duffie R*, Ajjan S, Cowley M, Iranzo J, Carbajosa G, Saadeh H, Holland ML, Oakey RJ, Rakyan VK, __Schulz R__, Bourc'his D. Protection against de novo methylation is instrumental in maintaining parent-of-origin methylation inherited from the gametes. //Molecular Cell// 2012 Sep 28;47(6):909-20. (*authors contributed equally) [[PubMed|http://www.ncbi.nlm.nih.gov/pubmed/22902559]]
#Cowley M, Wood AJ, Boehm S, __Schulz R__, Oakey RJ. Epigenetic control of alternative polyadenylation at the imprinted Herc3/Nap1l5 locus. //Nucleic Acids Research// 2012 Oct 1;40(18):8917-26. [[open access|http://nar.oxfordjournals.org/content/40/18/8917.long]]
#Wilson GA, Dhami P, Feber A, Cortazar D, Suzuki Y, __Schulz R__, Schaer P, Beck S. Resources for methylome analysis suitable for gene knockout studies of potential epigenome modifiers. //~GigaScience// 2012 1:3. [[open access|http://www.gigasciencejournal.com/content/1/1/3]]
#~Montiel-Equihua CA, Zhang L, Knight S, Saadeh H, Scholz S, Carmo M, ~Alonso-Ferrero ME, Blundell MP, Monkeviciute A, __Schulz R__, Collins M, Takeuchi Y, Schmidt M, Fairbanks L , Antoniou M, Thrasher AJ, Gaspar HB. Sustained systemic transgene delivery in erythrocytes using a lentiviral vector containing the beta-globin locus control region in combination with the ~EF1-beta short promoter. //Molecular Therapy//. 2012 Jul;20(7):1400-9.
#Meaburn E, __Schulz R__. Next generation sequencing in epigenetics: Insights and challenges. //Seminars in Cell and Developmental Biology// 2012 Apr;23(2):192-9. [[manuscript|./homepage/papers/NGSinEpigen.pdf]]
#Cowley M, de Burca A, ~McCole RB, Chahal M, Saadat G, Oakey RJ, __Schulz R__. Short interspersed element (SINE) depletion and long interspersed element (LINE) abundance are not features universally required for imprinting. //~PLoS ONE// 2011 Apr 20;6(4):e18953. [[open access|http://dx.plos.org/10.1371/journal.pone.0018953]]
#Kim EY, __Schulz R__, Swantek P, Kunstman K, Malim M, Wolinsky S. Gold nanoparticle-mediated gene delivery induces widespread changes in the expression of innate immunity genes. //Gene Therapy// 2012 Mar;19(3):347-53. [[manuscript|./homepage/papers/AuNP.pdf]]
#__Schulz R__, Proudhon C, Bestor TH, Woodfine K, Lin CS, Lin SP, Prissette M, Oakey RJ, Bourc’his D. The parental non-equivalence of imprinting control regions during mammalian development and evolution. //~PLoS Genet//. 2010 Nov 18;6(11):e1001214. [[open access|http://www.plosgenetics.org/article/info:doi/10.1371/journal.pgen.1001214]]
#Hernandez MA, __Schulz R__, Chaplin T, Young BD, Perrett D, Champion MP, Taanman JW,  Fensom A, Marinaki A. The diagnosis of inherited metabolic diseases by microarray gene expression profiling. //Orphanet J Rare Dis//. 2010 Dec 1;5:34. [[open access|http://www.ojrd.com/content/5/1/34]]
#Irving MD, Buiting K, Kanber D, Donaghue C, __Schulz R__, Offiah A, Mohammed SN, Oakey RJ. Segmental paternal uniparental disomy (patUPD) of 14q32 with abnormal methylation elicits the characteristic features of complete patUPD14. //Am J Med Genet A//. 2010 Aug;152A(8):1942-50. [[open access|http://www.ncbi.nlm.nih.gov/pubmed/20602488]]
#Tiwari S, Spielman M, __Schulz R__, Oakey RJ, Kelsey G, Salazar A, Zhang K, Pennell R, Scott RJ. Transcriptional profiles underlying parent-of-origin effects in seeds of Arabidopsis thaliana. //BMC Plant Biol//. 2010 Apr 20;10:72. [[open access|http://www.ncbi.nlm.nih.gov/pubmed/20406451]]
#__Schulz R__, ~McCole R, Woodfine K, Wood AJ, Chahal M, Monk D, Moore GE, Oakey RJ. Transcript- and tissue-specific imprinting of a tumour suppressor gene. //Hum Mol Genet//. 2009 Jan 1;18(1):118-27. [[open access|http://www.ncbi.nlm.nih.gov/sites/entrez?cmd=Retrieve&dopt=AbstractPlus&db=PubMed&list_uids=18836209]]
#Tiwari S, __Schulz R__, Ikeda Y, Dytham L, Bravo J, Mathers L, Spielman M, Guzmán P, Oakey RJ, Kinoshita T, Scott RJ. MPC, a novel imprinted gene in Arabidopsis, encodes the conserved C-terminal domain of polyadenylate binding proteins. //Plant Cell//. 2008 Sep;20(9):2387-98. [[PubMed|http://www.ncbi.nlm.nih.gov/sites/entrez?cmd=Retrieve&dopt=AbstractPlus&db=PubMed&list_uids=18796636]]
#Wood AJ, __Schulz R__, Woodfine K, Koltowska K, Beechey CV, Peters J, Bourc'his D, Oakey RJ. Regulation of alternative polyadenylation by genomic imprinting. //Genes Dev//. 2008 May;22(9):1141-6. [[open access|http://www.ncbi.nlm.nih.gov/sites/entrez?cmd=Retrieve&dopt=AbstractPlus&db=PubMed&list_uids=18451104]]
#__Schulz R__, Woodfine K, Menheniott TR, Bourc'his D, Bestor T, Oakey RJ. [[WAMIDEX|https://atlas.genetics.kcl.ac.uk/]]: A web atlas of murine genomic imprinting and differential expression. //Epigenetics//, 2008 Feb;3(2):89-96. [[open access|http://www.landesbioscience.com/journals/epigenetics/article/5900]]
#Wagschal A, Sutherland HG, Woodfine K, Henckel A, Chebli K, __Schulz R__, Oakey RJ, Bickmore WA, Feil R. G9a histone methyltransferase contributes to imprinting in the mouse placenta. //Mol Cell Biol//, 2008 Feb;28(3):1104-13. [[open access|http://mcb.asm.org/cgi/content/full/28/3/1104?view=long&pmid=18039842]]
#Menheniott TR, Woodfine K, __Schulz R__, Wood AJ, Monk D, Giraud AS, Baldwin HS, Moore GE, Oakey RJ. Genomic imprinting of Dopa decarboxylase in heart and reciprocal allelic expression with neighbouring Grb10. //Mol Cell Biol//, 2008 Jan;28(1):386-96. [[open access|http://mcb.asm.org/cgi/content/full/28/1/386?view=long&pmid=17967881]]
#Wood AJ, Roberts RG, Monk D, Moore GE, __Schulz R__, Oakey RJ. A Screen for Retrotransposed Imprinted Genes Reveals an Association between X Chromosome Homology and Maternal ~Germ-Line Methylation. //~PLoS Genet//, 2007 Feb;3(2):e20. [[open access|http://genetics.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pgen.0030020]]
#__Schulz R__, Menheniott T, Woodfine K, Wood AJ, Choi JD, Oakey RJ. Chromosome-wide identification of novel imprinted genes using microarrays and uniparental disomies. //Nucleic Acids Res//, 2006;34(12):e88. [[open access|http://nar.oxfordjournals.org/cgi/content/full/34/12/e88]]
#__Schulz R__, Underkoffler L, Collins J, Oakey RJ. Nondisjunction and transmission ratio distortion of Chromosome 2 in a (2.8) Robertsonian translocation mouse strain. //Mamm Genome//, 2006;17(3):239-47. [[open access|http://www.springerlink.com/content/g4441q0635717766]]
#__Schulz R__, Tiwari S, Scott RJ, Oakey RJ. Imprinted gene detection in Arabidopsis thaliana. In Proc [[Fifth Workshop on Self-Organizing Maps|http://samos.univ-paris1.fr/wsom/wsom05.html]], 2005;147-54. Université Paris 1 ~Panthéon-Sorbonne. [[manuscript|./homepage/papers/wsom05.pdf]]
#__Schulz R__, Reggia J. Mirror symmetric topographic maps arise from Hebbian synaptic changes. //Neural Comput//, 2005;17(5):1-25. [[manuscript|./homepage/papers/nc05.pdf]]
#__Schulz R__. One-shot multi-winner Self-organizing maps. Doctoral dissertation. July 21, 2004. [[manuscript|./homepage/papers/thesis.pdf]] [[slides|./homepage/papers/defense.pdf]]
#__Schulz R__, Reggia J. Temporally asymmetric learning supports sequence processing in multi-winner self-organizing maps. //Neural Comput//, 2004;16(3):535-61. [[manuscript|./homepage/papers/nc04.pdf]]
#__Schulz R__, Reggia J. Predicting nearest agent distances in artificial worlds. //Artif Life//, 2002;8(3):247-64. [[manuscript|./homepage/papers/al02.pdf]]
#Reggia J, __Schulz R__. The role of computational modeling in understanding hemispheric interactions and specialization. //Cogn Syst Res//, 2002;3(1):87-94. [[manuscript|./homepage/papers/csr02.pdf]]
#Reggia J, __Schulz R__, Wilkinson G, Uriagereka J. Conditions enabling the evolution of inter-agent signaling in an artificial world. //Artif Life//, 2001;7(1):3-32. [[manuscript|./homepage/papers/al01.pdf]]
#Reggia J, __Schulz R__, Uriagereka J, Wilkinson G. A Simulation Environment for Evolving Multiagent Communication. [[Technical Report CS-TR-4182|./homepage/papers/CS-TR-4182.pdf]]. September 1, 2000.
!Article and grant reviews
*Journals: BMC Genomics, Epigenetics, Genome Research, Genomics, Nucleic Acids Research, ~PLoS Genetics, ~PLoS ONE, Science
*Funding agencies: Medical Research Council (MRC), Biotechnology and Biological Sciences Research Council (BBSRC)
Aka qRT-PCR.
*Purpose: sequence-specific copying of DNA and simultaneous quantification of the template.
*Principle: make PCR products emit light when excited by a laser
**Measure the amount of emitted light (fluorescence) after each PCR cycle (theoretically, doubles after each cycle).
**Determine the number of cycles //C~~T~~// it takes to reach a fixed threshold //T// of fluorescence (corresponds to a particular number of template copies): //T=B2^^C~~T~~^^// where //B// corresponds to the unknown number of templates in the beginning. So, //B=T2^^-C~~T~~^^//, but exact relationship between fluorescence //T// and number of template copies is unknown and hence, number of original templates corresponding to //B// remains unknown.
**Need to compare //C~~T,L~~// for sample //L// with unknown starting quantity //B~~L~~// of template with //C~~T,K~~// for sample //K// with known starting quantity //B~~K~~//. In theory, //B~~L~~=B~~K~~2^^C~~T,K~~-C~~T,L~~^^//.{{div{
[img[qPCR quantification principle|CT_quantification_basic_principle_reduced.png]]
**So far, have assumed equal PCR efficiency //a// for samples //K// and //L//, but they can be (and often are) different. Taking into account PCR efficiencies leads to: //T=B~~K~~(1+a~~K~~)^^C~~T,K~~^^// versus //T=B~~L~~(1+a~~L~~)^^C~~T,L~~^^// where //a~~K~~// and //a~~L~~// are the PCR efficiencies on a scale from 0% to 100% (100% equals the theoretical doubling after each cycle). Hence, //B~~L~~=B~~K~~(1+a~~K~~)^^C~~T,K~~^^/(1+a~~L~~)^^C~~T,L~~^^//.
**Can estimate efficiency from cycle //X// versus log~~2~~-fluorescence //Y// plot. Theoretically, a straight line. In reality, a sigmoid-like shape consisting of three phases with a linear phase in the middle. Fit a line //f(X)=mX+B// to the data points //(X~~i~~,Y~~i~~)// of the linear phase, that is, find slope //m// and //Y//-axis intercept //B// that minimise the sum of the squared errors //(f(X~~i~~)-Y~~i~~)^^2^^// (linear regression). //a=2^^m^^-1// equals the PCR efficiency. If fluorescence is put on a log~~10~~ scale (and it usually is) then the PCR efficiency is //a=10^^m^^-1=2^^m/log~~10~~(2)^^-1=2^^3.322m^^-1//.
**Often though, not even the order of magnitude of //B~~L~~// is known. Possibly, //B~~L~~// and //B~~K~~// differ by orders of magnitude in terms of concentration (number of templates per unit of volume). Kinetics of the two ~PCRs can then differ unpredictably, making comparisons unreliable, even if we take into account different efficiencies. Solution: serial dilution series for //B~~K~~// so that we sample a large range of concentrations (likely) including //B~~L~~//'s. Line //f// fitted to plot of log~~10~~ of concentrations of //B~~K~~// dilution series versus //C~~T,K~~// data points is called a //standard curve//. Using its inverse //g//, we can compute the concentration of //L//: //B~~L~~=g(C~~T,L~~)//. However, this again assumes equal PCR efficiencies (given slope //m// of a standard curve, the efficiency is //a=10^^-m^^-1//). Need to check that this assumption holds: best to use a dilution series of //L// as well (two or three dilutions usually sufficient) to create a standard curve for //L//. If its slope is significantly different from the slope for //K// then the PCR efficiencies were different.{{div{
[img[standard curve method|PCR_calibration_range_reduced.png]]
The two most commonly used chemistries are [[SYBR Green]] and TaqMan.
Illumina manufactures olignucleotides on the surface of nano-scale beads. To measure, for example, gene expression transcriptome-wide, ~10^^5^^ different types of beads are manufactured, each type of bead carrying a different olignucleotide probe. ~30 beads of each type are mixed and then distributed randomly across the surface of a glass slide with dimples. A single bead of unknown type settles into each dimple. This array of beads is then decoded, that is, the type of each bead is determined //in parallel//. This is done by successive hybridisations of the array with fluorescent colour-labelled bar-code DNA sequences. Each type of bead carries the reverse-complement of a distinct bar-code sequence. So, always the same bar-code sequence will hybridise to a particular type of bead. However, the colour-labels attached to the bar-code sequences change sequence-dependently between hybridisations, essentially implementing the binary search algorithm in the two-colour example below. Assuming we use three colours and have to decode 100,000 bead types, we need to hybridise the array //ceiling(log~~3~~(100,000))=11// times.
[img[Illumina decoding|ilmn1.png]] ([[Gunderson KL et al. Gen Res 2004|http://view.ncbi.nlm.nih.gov/pubmed/15078854]])
**DNA methylation
**Genomic imprinting
*Large-scale biological data analysis
**Next-generation sequencing (NGS)
**microarrays (gene expression, DNA methylation)
*High performance computing in bioinformatics
!Current Projects
*Forest tree epigenomics
** Methylation profiling of DNA extracted from oak (//Quercus spp.//) heartwood
** Searching for traces of historic climate change at the level of the epigenome
*A relational database and GIS approach to organising human genetic variation data
*DNA methylation, gene expression and genetic variant profiling
**of patients with human growth disorders
***in collaboration with Rebecca Oakey (Dept. of Medical & Molecular Genetics) and Gudrun Moore (University College London)
*DNA methylation profiling
**of ~PBMCs of ~HIV-1 patients in response to anti-retroviral treatment
***in collaboration with Hendrik Huthoff (Dept. of Immunology & Infectious Diseases)
*Gene expression profiling
**of ~CD4 T cells in response to ~HIV-1 infection
***in collaboration with Michael Malim (Dept. of Immunology & Infectious Diseases)
**of patients with type-1 diabetes
***in collaboration with Mark Peakman (Dept. of Immunology & Infectious Diseases)
*from Feb 2016: Karin Fleischanderl, University of Applied Sciences Vienna, Austria, ~MSc project student
*from Jan 2016: Federico Rossi, Scuola Superiore Sant’Anna & University of Pisa (~MSc in Plant Biotechnology), Italy, ~PhD student
*Oct 2015 - Dec 2015: Rupert ~Hugh-White, King's Bioscience Institute (KBI) ~PhD rotation student
*May 2015 - Aug 2015: Leo Foerster, TU Dresden, Germany, summer project student
*Mar 2014 - May 2014: Leonie Jahn, Univ. of Munster, Germany, ~MSc project student
*Jul 2013 - Aug 2013: Emily Kay, Univ. of Cambridge, Genetics Society summer project student
*Oct 2010 - Sep 2013: Heba Saadeh, ~MSc (Computer Science, Univ. of Jordan, Jordan), ~PhD student
*Dec 2008 - May 2009: Anna de Burca, MD, Clinical research fellow
*[[UCSC custom track definition|./HumanHT-12_TopHat2_hg38.txt]] for [[TopHat2 alignments of Illumina Human HT-12 v4 gene expression microarray probes to the GRCh38/hg38 assembly|./HumanHT-12_TopHat2_hg38.bam]]
*Lecture [[Epigenetics and Cancer|./homepage/EpigeneticsCancer4MSc.html]] (~MSc in Genomic Medicine)
*Lecture [[Epigenetics: an introduction|./homepage/Epigenetics4MSc.html]] (~MSc in Genomic Medicine)
*Lecture [[Making sense of genes using genome browsers|./MakingSenseOfGenesUsingGenomeBrowsers]] (Marie Curie workshop in genetics, Birkbeck College, London, Sep 9-10 2013)
*Lecture [[Methods in Molecular Biology to Study Nucleic Acids]] (~MSc in Bioinformatics)
*[[WAMIDEX|https://atlas.genetics.kcl.ac.uk/]]: A web atlas of murine genomic imprinting and differential expression.
*[[A CUDA/CUBLAS implementation of the dot-product Self-organizing map (SOM)|./homepage/SOM.tar.gz]] [[README|./homepage/SOM_README.txt]]. See Self-organizing maps by Teuvo Kohonen, 3rd ed., Springer. [[Google Book|http://books.google.co.uk/books?id=e4igHzyfO78C&lpg=PA115&vq=dot-product&dq=Kohonen%3A%20Self-Organizing%20Maps&pg=PA115#v=onepage&q=&f=false]]
*[[A Matlab implementation of NSGA-II|./homepage/NSGA_II.tar.gz]], a multi-objective genetic algorithm. The implementation includes simulated binary crossover (SBX) and polynomial mutation operators. Other implementations are available from the [[Kanpur Genetic Algorithm Lab|http://www.iitk.ac.in/kangal/soft.htm]]. The relevant references are:
**[[A fast and elitist multiobjective genetic algorithm: NSGA-II|http://citeseerx.ist.psu.edu/viewdoc/summary?doi=]]. Deb, K.; Pratap, A.; Agarwal, S.; Meyarivan, T. Evolutionary Computation, IEEE Transactions on, Vol.6, Iss.2, pp.182-197, Apr 2002
**[[Self-Adaptive Genetic Algorithms with Simulated Binary Crossover|http://citeseerx.ist.psu.edu/viewdoc/summary?doi=]]. Kalyanmoy Deb, ~Hans-Georg Beyer. Technical report no. ~CI-61/99, University of Dortmund, Department of Computer Science/~LS11, 1999.
**[[A Combined Genetic Adaptive Search (GeneAS) for Engineering Design|http://citeseerx.ist.psu.edu/viewdoc/summary?doi=]]. Kalyanmoy Deb and Mayank Goyal. Computer Science and Informatics, 26(4):30-45, 1996.
*Purpose: sequence-specific cutting of DNA/RNA.
*Exploits that bacteria have evolved protein-based defence against foreign DNA/RNA (eg, phage DNA).
**Endonucleases that recognise and bind to a specific DNA/RNA sequence and then cut the sugar-phosphate backbone.
**//Restrict// the success of an 'invader' by cutting up its genome.
*In most cases, the substrate is double-stranded DNA.
*//~HindII// was first restriction enzyme (RE) purified from bacteria (in 1970).
**Recognition sequence is GTY^RAC where ^ indicates where the enzyme cuts, and Y=C/T and R=A/G are ambiguous nucleotide codes.
**//~HindII// is a blunt end cutter: ^ is in the centre of recognition sequence and hence, the reverse strand is cut at the same position.{{div{
**In contrast, //~EcoRI// is a sticky end cutter: G^AATTC, meaning that the reverse strand is cut between the complements of T and C.{{div{
**Most ~REs have a palindromic recognition sequence, that is, the sequence is of length //2k// and the //i//^^th^^ base to the left of the centre is the complement of the //i//^^th^^ base to the right of the centre. In other words, the first //k// bases are the reverse complement of the last //k// bases and vice versa, implying that the recognition sequence is the same for the reverse strand (as usual, read from 5' to 3').
**Nobel Prize awarded in 1978 to H.O. Smith, K.W. Wilcox, and T.J. Kelley with Johns Hopkins University.
*Wide-ranging applications, e.g., genotyping:
**Applicable when a known sequence polymorphism either destroys or creates a restriction site and thus, after digestion, results in a Restriction Fragment Length Polymorphism (RFLP). 
**Example: a G/A single nucleotide polymorphism (SNP) at the start of an //~EcoRI// site (see above) in the genome. We want to find out the genotype of an individual at the site of the SNP, i.e., is the individual heterozygous (carries both the G and A alleles), or homozygous for G (carries two copies of the G allele), or homozygous for A (carries two copies of the A allele). {{div{
#Digest sample DNA using appropriate RE or ~REs (e.g., //~EcoRI//).
#Size-sort digested DNA using [[Gel Electrophoresis]].
#Make a Southern blot from the gel (as described in [[Northern and Southern Blots]]).
#Probe the Southern blot using a bit of known sequence of the RFLP DNA fragment whose size will differ depending of whether //~EcoRI// was able to cut.
[img[RFLP genotyping|RFLP_genotyping.gif]]
**With a lot less work and sample DNA, the same is achievable using [[Polymerase Chain Reaction]]:{{div{
#Amplify the DNA fragment containing the SNP.
#Digest the PCR product.
#Run the digestion product on a gel.
#Stain and image the gel directly.
*Many ~REs are methylation-sensitive, that is, cut only either methylated or unmethylated DNA.
**Bacteria often have genomes where Adenines and/or Cytosines are methylated to distinguish between native and foreign DNA (methyl group added to N6 position of Adenine or C5 position of Cytosine).
**DNA methylation of Cytosines in plants and mammals is a crucial epigenetic mechanism of gene regulation.
***Methylation-sensitive ~REs are an often used tool in Epigenetics.
Single nucleotide polymorphism (SNP) microarrays determine the genotype of an individual at up to ~10^^6^^ ~SNPs.
*Probes overlap single nucleotide sites in the genome where it is known that individual genomes within a population differ in the base at that position. Usually, there are only two different bases (//alleles//) commonly present in the population, for example, C and T at the position of a C/T SNP. One probe is designed for each of the two alleles.
*Sample is the DNA extracted from a cell of tissue sample of an individual.
*Latest generation human SNP microarrays measure the genotype of an individual at ~10^^6^^ ~SNPs (average distance of only ~2.5Kbp between one SNP and the next).
*Has enabled large-scale ~Genome-Wide genotype-phenotype Association Studies (GWAS) that compare the genotype of, e.g., patients suffering from a disease with healthy controls to find alleles (usually, alleles of specific genes) associated with the disease. Works equally well for animals and plants (what alleles make a dog small or large, or a cow give lots or little milk, or a cereal produce a large or small crop etc.)
[img[Affy SNP|AffySNP.png]] ([[Affymetrix|http://www.affymetrix.com]] SNP microarray workflow)
SYBR Green is the trade name of an intercalating green fluorescent dye.
*Dye emits light when excited by laser AND it has bound to double-stranded DNA.
*Not just PCR products form double-stranded DNA, but also primers (primer dimers) and non-specific PCR products.
*Fluorescence depends on size of template, making comparisons between templates of different sizes difficult.
[img[SYBR Green|PCR_with_SYBR_green.jpg]]
|Author|Eric Shulman|
|Description|set tiddler background and font color CSS attributes|

	<<tiddler SetTiddlerBackground with: bgstyle fgstyle matchtag class>>
	'bgstyle' and 'fgstyle' (optional, but specify at least one)
		are CSS background style attributes (most often color values, e.g., #rgb or #rrggbb)
	'matchtag' (optional)
		is a tag value that allows selective control of tiddler background/foreground colors
	'class' (optional)
		is the class of the tiddler element to which the fgstyle/bgstyle will be applied (default is "viewer").
		Use "title" to set the background of the tiddler's 'title' area instead of its 'viewer' area.

The bgstyle and fgstyle assignments are only performed if the tiddler has the matching tag (or if no matchtag value is specfied).  In addition, to set just the background or the foreground color (but not both), you can use a dash ("-") as a placeholder value for whichever value you do NOT want to set.  For example:
	<<tiddler SetTiddlerBackground with: #F00 - urgent>>
sets the background color (but NOT the foreground color) to RED for only those tiddlers tagged with "urgent".  Also, note that in that instead of using #RGB color definitions, you can also use CSS color keywords (i.e., "red", "yellow", "green") or *any* other valid CSS value that can be applied to the 'background' style attribute.  For example, to use a background image for any tiddler tagged with "wallpaper", you can write:
        <<tiddler SetTiddlerBackground with: url(images/bg.jpg) - wallpaper>>

You can use this script several times in a row to define a set of tag-to-color mappings, stored in a *single* convenient tiddler... first, create a tiddler (e.g. [[BackgroundColors]]) containing something like this:
	<<tiddler SetTiddlerBackground with: red - urgent>>
	<<tiddler SetTiddlerBackground with: yellow - active>>
	<<tiddler SetTiddlerBackground with: green - done>>

To apply tag-based color mapping to any specific tiddler, just embed:
	<<tiddler BackgroundColors>>
directly in that tiddler's content and set the appropriate tag to select the desired background color.

To apply tag-based color mapping to ALL tiddlers in your document without having to embed the <<tiddler BackgroundColors>> macro into each 'colorized' tiddler, add:
        <span macro="tiddler BackgroundColors" style="display:none"></span>
in your [[ViewTemplate]].  Then, anytime you want to add another tag-to-color mapping, all you have to do is just edit the [[BackgroundColors]] tiddler and then start tagging the desired tiddlers accordingly.

	if ("$1"!="$"+"1" && "$1"!="-") var bg="$1";
	if ("$2"!="$"+"2" && "$2"!="-") var fg="$2";
	if ("$3"!="$"+"3" && "$3"!="-") var tag="$3";
	if ("$4"!="$"+"4" && "$4"!="-") var c="$4"; else var c="viewer";
	var here=story.findContainingTiddler(place); if (!here) return;
	var tiddler=store.getTiddler(here.getAttribute("tiddler"));
	if (tag && (!tiddler||!tiddler.isTagged(tag))) return;
	if (c=="tiddler") target=here;
	else {
		var children=here.getElementsByTagName("*");
		for (var i=0; i<children.length; i++)
			if (hasClass(children[i],c)) { var target=children[i]; break; }
	if (!target) return;
	if (bg) target.style.background=bg;
	if (fg) target.style.color=fg;
|Author|Eric Shulman|
|Description|use CSS3 "-moz-column-count" to set single or multi-column tiddler layout|

usage: <<tiddler SetTiddlerColumns with: columncount>>

where 'columncount' is an *optional* param to override the current value (if any)

credits: Much thanks to "maki" (www.makiaea.org) for pointing out the -moz-column-* attributes.
Important note: these CSS3 features are not supported in InternetExplorer.

	// if removeCookie() function is not defined by TW core, define it here.
	if (window.removeCookie===undefined) {
		window.removeCookie=function(name) {
			document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	if (config.options.txtTiddlerColumns==undefined) config.options.txtTiddlerColumns="1";
	if ('$'+'1'!='$1') config.options.txtStoryHeight='$1';
	window.setTiddlerColumns=function() {
		// set tiddler columns
		var opt="txtTiddlerColumns";
		var cols=config.options[opt]; if (!cols.length) cols='1';
		var td=document.getElementById("tiddlerDisplay");
		if (config.options[opt]=="1") removeCookie(opt);
		else config.macros.option.propagateOption(opt,"value",config.options[opt],"input");
	setTimeout('window.setTiddlerColumns()',1); // initialize height
	if (window.addEventListener) window.addEventListener("resize",window.setTiddlerColumns,false);
</script>tiddler columns: {{smallform{<<option txtTiddlerColumns>><script>
	var t=place.lastChild
	t.title="enter height using CSS dimensions (px, em, in, cm, %) or 'auto'";
	if (config.browser.isIE) {
		t.title="Sorry, multiple column tiddler display is not supported in Internet Explorer";
	// hijack onchange for this field so CSS can be updated on the fly
	t.onchange=function() {
		// call original core onchange handler
		if (this.coreOnChange) this.coreOnChange();
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
!!Oxford Nanopore
Measures changes in electrical potential across nanoscale holes (protein pores) while single DNA molecules pass through them. Each nucleotide elicits a characteristic change. Can detect the difference between methylated and unmethylated Cytosine ([[Clarke J et al. Nat Nanotech 2009|http://view.ncbi.nlm.nih.gov/pubmed/19350039]]).
!!Pacific Biosciences
Observes the DNA polymerase at work in real-time. A single polymerase each is anchored to the glass bottom of nanoscale light-trapping holes (light can only exit through the glass bottom). Free nucleotides are fluorescently labelled. When polymerase incorporates a nucleotide, it remains in position for a few 100ms, giving off a steady light emission close to the glass bottom that exceeds the background scatter of the free nucleotides in solution. Video camera is filming ~10^^4^^ holes, and video is turned into sequence data in real-time. ~PacBio claim that nucleotide modifications like methylation can be inferred from the video signal since modified bases 'stall' the polymerase for time periods that are characteristic of the modification.
This tiddler is included in the PageTemplate as a ''hidden SPAN''.  You can use it include macros or inline scripts that are automatically invoked whenever the document is loaded.
sets the number of tiddler columns to display using the -moz-column-count, -moz-column-width, and -moz-column-gap CSS attributes (currently supported by Firefox only).
{{{<<tiddler SetTiddlerColumns>>}}}
<<tiddler SetTiddlerColumns>>
sets the visibility (//display:none// or //display:block//) of the SiteTitle/SiteSubtitle display area ('page titles', DOM ID=//header//)
{{{<<tiddler ToggleSiteTitles>>}}}
<<tiddler ToggleSiteTitles>>
sets the visibility (//display:none// or //display:block//) of the SiteMenu display area ('menubar', DOM ID=//siteMenu//).
<script show>
// show site menu by default
if (config.options.chkHideSiteMenu==undefined)
</script>{{{<<tiddler ToggleSiteMenu>>}}}
<<tiddler ToggleSiteMenu>>
tracks and displays a quick reminder of how many times you have viewed this document as well as the date and time of your last visit.  This information is stored privately in your browser using cookies (txtVisitCount and txtLastVisit), and are //never// accessible to any other parties.
{{{<<tiddler VisitCounter with: TiddlyTools>>}}}
<<tiddler VisitCounter with: TiddlyTools>>
!!!!![[ToggleLeftSidebar]], [[ToggleRightSidebar]] 
set the visibility (//display:none// or //display:block//) of the MainMenu ('left sidebar', DOM ID=//mainMenu//) and SideBarOptions ('right sidebar', DOM ID=//sidebar//) displays.
<script show>
	// default sidebar visibility
	if (config.options.chkShowLeftSidebar==undefined)
	if (config.options.chkShowRightSidebar==undefined)
|{{{<<tiddler ToggleLeftSidebar>>}}} |<<tiddler ToggleLeftSidebar>> |
|{{{<<tiddler ToggleRightSidebar>>}}} |<<tiddler ToggleRightSidebar>> |
sets 'position:fixed' for the sidebars, so that they remain fixed in place (aka, "hover") when the rest of the page content is scrolled.
{{{<<tiddler ToggleScrollingSidebars>>}}}
<<tiddler ToggleScrollingSidebars>>
Senior Lecturer in Bioinformatics and Epigenomics [[Department of Medical and Molecular Genetics|http://www.kcl.ac.uk/medicine/research/divisions/gmm/Departments/mmg/index.aspx]]
[img[./homepage/kings_logo_v3.gif]] Reiner Schulz, ~PhD
+Higher throughput (~6.5-20Gbp/d)
-Shorter read length (~150bp)
Fragmentation and adapter ligation similar to 454. Achieves clonal amplification of each template by first hybridising the templates to a nano-scale lawn of adapter-complementary oligonucleotides and then bridge-~PCR-amplifying each template in place (cluster generation). Reads template clusters by a //combination of [[Chain-terminator sequencing]] and sequencing-by-synthesis (see [[454/Roche]])//: fluorescently labelled chain-terminating dNTPs are used that, after each imaging cycle, are chemically returned to being proper dNTPs (overcomes the homopolymer problem faced by [[454/Roche]]).
[img[Illumina 1-6|ilmn-step1-6.png]]
[img[Illumina 1-6|ilmn-step7-12.png]]
+Higher throughput (~10-15Gbp/d)
-Shorter read length (~100bp)
DNA is fragmented, adapters are ligated to the ends of the fragments, and each of these templates is clonally amplified using emPCR on beads (see [[454/Roche]] for details). The beads are deposited on a glass slide for subsequent //sequencing-by-ligation//:
So, every two successive bases (dinucleotide) of the template give a signal. ABI uses four colours, meaning that there are four distinct dinucleotides encoded by each colour, and only the one-base overlap between successive dinucleotides allows an unambiguous decoding:
[img[colour space encoding|abi-fig5.png]]
Alignment of the reads to a reference is done in //colour-space//, that is, the reference is colour-coded and then the colour sequences are aligned (as opposed to the base sequences). That makes it easier to detect actual differences between a read and the reference versus sequencing errors:
[img[colour space encoding|abi-fig7.jpg]]
/*Adapted by rschulz*/
/*Haemoglobin Theme for TiddlyWiki*/
/*Design and CSS by Saq Imtiaz*/
/*Version 1.0*/

#sidebarTabs {font-family:arial,helvetica;}


#contentWrapper {
	font-family: Verdana, Arial, Tahoma, Sans-Serif; font-size: 1.1em;
	color: #000000;
margin: 1em 1em 0em 1em;}

#header {background:#fefefe;}

.headerShadow {	padding: 1.4em 0em 0.5em 1em; }

.siteTitle {
			font-family: 'Trebuchet MS' sans-serif;
			font-weight: bold;
			font-size: 36px;
			color: #BF2323;
			background-color: #FFF;

.siteSubtitle {
	font-size: 1.0em;
        display: block;
        margin: .5em 1em; color: #999;

.clearAll {clear:both;}
.tagClear {clear:none;}
#sidebar {position:relative; float:right; display:inline; right:0;}

text-decoration: none; font-weight:normal;

background-color: #fefefe;
border-bottom:1px solid #BF2323;

.viewer .button, .editorFooter .button{
color: #555;
border: 1px solid #BF2323;

.viewer .button:hover,
.editorFooter .button:hover{
color: #fff;
background: #BF2323;
border-color: #BF2323;

.viewer .button:active, .viewer .highlight,.editorFooter .button:active, .editorFooter .highlight{color:#fff; background:#9F1313;border-color:#9F1313;}

#topMenu br {display:none;}

#topMenu {padding:0.45em 1em; background:#BF2323;}

#topMenu a, #topMenu .tiddlyLink, #topMenu .button {color:#f1f1f1; padding:0.3em 0.45em; margin:0 4px;font-size:120%;font-weight:normal;font-variant: small-caps; border:none; background:#BF2323; text-decoration:none; }

#topMenu a:hover, #topMenu .tiddlyLink:hover, #topMenu .button:hover, #topMenu .button:active, #topMenu .highlight {color:#fff;text-decoration:none; background:#9F1313; }

#displayArea{margin:0 17em 2em 0.5em;}

.tiddler {padding-left:0;}

.title {color:#BF2323; border-bottom:1px solid#BF2323; }
.subtitle, .subtitle a { color: #999999; font-size: 1.0em;margin:0.2em;}
.shadow .title{color:#999;}

.toolbar {font-size:85%;}
.selected .toolbar a {color:#999999;}
.selected .toolbar a:hover {color:#333; background:transparent;border:1px solid #fff;}

.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active{color:#333; background:transparent;border:1px solid #fff;}

    *  html .viewer pre {

margin-left: 0em;

    * html .editor textarea, * html .editor input {

width: 98%;

#sidebar {position:relative;float:right; line-height: 1.4em; border-left:0px solid#000; display:inline; background:#fefefe; right:0; margin-bottom:2em !important; margin-bottom:1em;
width: 16em;}

#sidebarOptions {padding-left:0.5em; padding-top:2em;}

#sidebarOptions a {
			text-decoration: none;}

#sidebarOptions	a:hover, #sidebarOptions a:active {
			background-color:#f5f5f5;border:1px solid #f5f5f5;

#sidebarOptions input {border:1px solid #999; }

 .listTitle {color:#888;}

#sidebarTabs .tabContents {background:#fefefe;}
#sidebarTabs .tabContents .tiddlyLink, #sidebarTabs .tabContents .button{color:#999;}
#sidebarTabs .tabContents .tiddlyLink:hover,#sidebarTabs .tabContents .button:hover{color:#CC0000;background:#fefefe; text-decoration:none;border:none;}

#sidebarTabs .tabContents .button:hover, #sidebarTabs .tabContents .highlight, #sidebarTabs .tabContents .marked, #sidebarTabs .tabContents a.button:active{color:#CC0000;background:#fefefe}

.tabSelected{color:#fefefe; background:#999;}

 .tabSelected, .tabSelected:hover {
 color: #555;
 background: #fefefe;
 border: solid 1px #ccc;


#sidebarTabs .tabUnselected:hover { border-bottom: none;padding-bottom:3px;color:#999;}

 .tabUnselected {
 color: #999;
 background: #eee;
 border: solid 1px #ccc;


.tabUnselected:hover {text-decoration:none; border:1px solid #ccc;}

#sidebarTabs .tabUnselected { border-bottom: none;padding-bottom:3px;}
#sidebarTabs .tabSelected{padding-bottom:3px;}

#sidebarOptions .sliderPanel {
	background: #eee; border:1px solid#ccc;
	font-size: .9em;

#sidebarOptions .sliderPanel input {border:1px solid #999;}
#sidebarOptions .sliderPanel .txtOptionInput {border:1px solid #999;width:9em;}

#sidebarOptions .sliderPanel a {font-weight:normal; color:#555;background-color: #eee; border-bottom:1px dotted #333;}

#sidebarOptions .sliderPanel a:hover {
background-color: #eee;
border-bottom:1px dotted #111;

.tabContents {background:#fefefe;}

.tagging, .tagged {
border: 1px solid #eee;
background-color: #F7F7F7;

.selected .tagging, .selected .tagged {
background-color: #f7f7f7;
border: 1px solid #ccc;

.tagging .listTitle, .tagged .listTitle {
color: #bbb;

.selected .tagging .listTitle, .selected .tagged .listTitle {
color: #666;

.tagging .button, .tagged .button {
.selected .tagging .button, .selected .tagged .button {

.highlight, .marked {background:transparent; color:#111; border:none; text-decoration:underline;}

.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {
border: none; background:transparent; text-decoration:underline; color:#333;

.popup {
background: #BF2323;
border: 1px solid #BF2323;

.popup li.disabled {
color: #000;

.popup li a, .popup li a:visited {
color: #eee;
border: none;

.popup li a:hover {
background: #bf1717;
color: #fff;
border: none;

   #messageArea {

border: 4px solid #BF2323;
background: #fefefe;
color: #555;

   #messageArea a:hover { background:#f5f5f5; border:none;}

   #messageArea .button{
color: #666;
border: 1px solid #BF2323;

   #messageArea .button:hover {
color: #fff;
background: #BF2323;
border-color: #BF2323;

   #contentFooter {background:#BF2323; color:#DF7D7D; clear: both; padding: 0.5em 1em; }

#contentFooter a {
color: #DF7D7D;
border-bottom: 1px dotted #DF7D7D; font-weight:normal;text-decoration:none;

#contentFooter a:hover {
color: #FFFFFF;
border-bottom: 1px dotted #fff; text-decoration:none;

.searchBar {float:right;font-size: 1.0em;position:relative; margin-top:1.3em;}
.searchBar .button {color:#999;display:block;}
.searchBar .button:hover {border:1px solid #fefefe;color:#4F4B45;}
.searchBar input {			
                        background-color: #fefefe;
			color: #999999;
			border: 1px solid #CCC;		margin-right:3px;

.tiddler {padding-bottom:10px;}

#.viewer {font-family: Verdana, Arial, Tahoma, Sans-Serif; font-size: 14px;}

.viewer blockquote {
border-left: 5px solid #BF2323;

.viewer table, .viewer td {
border: 1px solid #BF2323;

.viewer th, thead td {
background: #BF2323;
border: 1px solid #BF2323;
color: #fff;
.viewer pre {
	border: 1px solid #ccc;
	background: #f5f5f5;

.viewer code {
color: #111; background:#f5f5f5;

.viewer hr {
border-top: dashed 1px #555;

.editor input {
border: 1px solid #888; margin-top:5px;

.editor textarea {
border: 1px solid #888;

h1,h2,h3,h4,h5 { color: #BF2323; background: transparent; padding-bottom:2px; font-family: Arial, Helvetica, sans-serif; }
h1 {font-size:18px;}
h2 {font-size:16px;}
h3 {font-size: 14px;}
~TaqMan is the trade name of ABI's hydrolysis probe technique.
*Involves a 3rd template-specific oligonucleotide (probe) that carries a fluorescent dye molecule at its 5' end as well as a light sink at its 3' end (quencher) for light emitted by the dye, that is, the oligo does NOT fluoresce when excited by a laser while it is intact.
*Probe is complementary to sequence of the template in between the primers, leading to increased specificity compared to SYBR Green.
*When the DNA polymerase reaches the beginning (5' end) of the probe, the fluorescent dye is cut off and floats away from the quencher so that the emitted light is no longer quenched (neutralised).
|Author|Eric Shulman|
|Description|show/hide right sidebar (MainMenu)|

Usage: <<tiddler ToggleRightSidebar with: "label">>

Config settings:
	config.options.chkShowRightSidebar (true)
	config.options.txtToggleRightSideBarLabelShow (►)
	config.options.txtToggleRightSideBarLabelHide (◄)

%/<script label="$1" title="show/hide right sidebar content">
	var co=config.options;
	if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
	var sb=document.getElementById('sidebar'); if (!sb) return;
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
	if (typeof(place)!='undefined' && '$1'=='$'+'1') {
		place.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
	var sm=document.getElementById('storyMenu'); if (sm) config.refreshers.content(sm);
	var co=config.options;
	if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
	var sb=document.getElementById('sidebar'); if (!sb) return;
	if ('$1'=='$'+'1') {
		var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
		var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
		place.lastChild.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
|Author|Eric Shulman|
|Description|enable/disable 'fixed' positioning of left and right sidebars|
	if (config.options.chkScrollSidebars==undefined)
	if (!config.options.txtOuterTabHeight||!config.options.txtOuterTabHeight.length)
	if (!config.options.txtInnerTabHeight||!config.options.txtInnerTabHeight.length)

	window.ToggleScrollingSidebars_setscroll = function() {
		var scroll=config.options.chkScrollSidebars?'':'fixed';
		var outer=config.options.txtOuterTabHeight;
		if (config.options.chkScrollSidebars) outer="auto";
		var inner=config.options.txtInnerTabHeight;
		if (config.options.chkScrollSidebars) inner="auto";
		var css='#sidebarTabs .tabContents { height:'+outer+'; overflow:'+(outer!='auto'?'auto':'visible')+'; width:92.5%; }';
		css+='#sidebarTabs .tabContents .tabContents { height:'+inner+' !important; }';
</script><<option chkScrollSidebars>><script>
	place.lastChild.onchange=function() {
</script> sidebars scroll with page
|Author|Eric Shulman|
|Description|show/hide low-profile horizontal SiteMenu using checkbox or double-click on background|

Usage: <<tiddler ToggleSiteMenu>>

%/<<option chkHideSiteMenu>><script>

	// show/hide site menu based on saved cookie (initial default=show menu)
	if (config.options.chkHideSiteMenu==undefined) config.options.chkHideSiteMenu=false;
	var show=!config.options.chkHideSiteMenu;
	var m=document.getElementById('siteMenu'); if (!m) return;

	// set checkbox state and add onclick side-effect handler
	var chk=place.lastChild;
	chk.checked=!show; // checked=show menu
	chk.onclick=function(event) { 
		if (this.old_onclick) this.old_onclick.apply(this,arguments);

	// add double-click trigger to page background
	// HIDE THIS FOR NOW: document.body.title="DOUBLE-CLICK on page background to "+(show?"HIDE":"SHOW")+" MENUBAR";
		if (!event) event=window.event; // IE fixup
		var target=resolveTarget(event);
		// ignore double-clicks that bubble through from input fields and listboxes
		if (target.nodeName.toUpperCase()=="TEXTAREA") return true;
		if (target.nodeName.toUpperCase()=="SELECT") return true;
		if (target.nodeName.toUpperCase()=="INPUT"&&target.type.toUpperCase()=="TEXT") return true;
		// consume the event
		if (event) { event.cancelBubble=true; if (event.stopPropagation) event.stopPropagation(); }
		return false;

	// onclick side-effect: show/hide site menu and sync checkboxes for this option
	window.toggleSiteMenu=function() {
		var opt="chkHideSiteMenu";
		var m=document.getElementById('siteMenu'); if (!m) return true;
		var show=m.style.display=="none";
		document.body.title="DOUBLE-CLICK on page background to "+(show?"HIDE":"SHOW")+" MENUBAR";
		config.macros.option.propagateOption(opt,"checked", config.options[opt],"input");

</script> show site menubar
|Author|Eric Shulman|
|Description|show/hide document 'header' area (containing SiteTitle and SiteSubtitle content)|

	<<tiddler ToggleSiteTitles>> OR
	<<tiddler ToggleSiteTitles with: label tip>>

<<option chkHideSiteTitles>><<tiddler {{
	var chk=place.lastChild;
	if (!chk.coreOnChange) { // only once
		chk.onchange=function() {
			if (this.coreOnChange) this.coreOnChange.apply(this,arguments);
			var h=jQuery('#contentWrapper .header')[0];
			var opt=this.getAttribute('option');
			if (h) h.style.display=config.options[opt]?'none':'block';
'';}}>> $1

%/<<tiddler ToggleSiteTitles##show with:
{{"$1"=="$"+"1"?"hide site titles":"$1"}}
{{"$2"=="$"+"2"?"toggle site title display":"$2"}}
{{	// init header display
	var opt='chkHideSiteTitles';
	if (config.options[opt]==undefined) config.options[opt]=false;
	var h=jQuery('#contentWrapper .header')[0];
	if (h) h.style.display=config.options[opt]?'none':'block';
|Author|Eric Shulman|
|Description|use cookies to track/show private, personal visit counter and timestamp of last visit|

This script tracks and displays a personal, private counter and the timestamps for your first visit, your most recent visit, and the total number of times you have visited a document.  This information is stored in local cookies, and is ONLY available for display in YOUR browser.  This data is not NOT tracked or aggregated across users, nor relayed or reported to anyone other than yourself, EVER.

{{{<<tiddler VisitCounter with: counterID firsttimegreeting>>}}}
* counterID (optional) - specifies a suffix to add to the visit tracking cookies for this document (enables tracking of multiple documents on a single domain, such as file://).  
* firsttimegreeting (optional) - message to display upon first visit to the document.  Subsequent visits report last visit timestamp and total visit count.

Cookies used to track your visit information:
	txtFirstVisit+id, txtLastVisit+id, txtVisitCount+id

The script also defines global config values that may be referenced later by other scripts:
	config.firstVisit, config.lastVisit, config.visitCount

2008.07.01 [2.1.0] simplified to inline script
2007.07.26 [2.0.0] re-written as plugin
2007.05.02 [1.0.0] initial release (as inline script, VisitCounter)
!end revisions

This is your <html><hide linebreaks><a href="javascript:;"
	title="Reset personal visit counter"
	onclick="if (!confirm('Are you sure you want to reset your personal visit counter?')) return false;
		config.firstVisit=config.options['txtFirstVisit%0']=new Date();
		config.lastVisit=config.options['txtLastVisit%0']=new Date();
		var t=story.findContainingTiddler(this);
	">''%1 visit''</a></html> since %2. Your last visit was on %3.
!end outputFormat

	var out="";
	var id="";
	if ("$1"!="$"+"1") id="_$1";
	var greeting="";
	if ("$2"!="$"+"2") greeting="$2";

	if (config.firstVisit==undefined) { // only do this once per session
		// create the 'first visit' timestamp cookie
		if (!config.options["txtFirstVisit"+id] || !config.options["txtFirstVisit"+id].length) {
			config.options["txtFirstVisit"+id]=new Date();

	if (config.lastVisit==undefined) { // only do this once per session
		if (config.lastVisit==undefined) config.lastVisit="";
		config.options["txtLastVisit"+id]=new Date();
		var c=config.options["txtVisitCount"+id]?parseInt(config.options["txtVisitCount"+id]):0;

	// get and format # of visits
	var count=config.options["txtVisitCount"+id]; if (!count) count=1;
	var wordmap=['---','first','second','third','fourth','fifth','sixth','seventh','eighth','ninth'];
	var suffixmap=['th','st','nd','rd','th','th','th','th','th','th'];
	var digits=count.toString().substr(count.toString().length-2,2);
	if (count<10) count=wordmap[count];
	else if (digits>=10&&digits<=13) count=count+'th';
	else count=count+suffixmap[digits.substr(1,1)];

	var out=greeting; // initial greeting for first visit only
	if (config.lastVisit.length) {
		var first=new Date(config.firstVisit).formatString("MMM DDth YYYY");
		var last=new Date(config.lastVisit).formatString("MMM DDth YYYY at 0hh12:0mm:0ss am");

	return out;
<<tiddler VisitCounter with: TiddlyTools>> copyright [[Reiner Schulz|http://atlas.genetics.kcl.ac.uk/~rschulz]]