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]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	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]];}

#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:ground:[[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]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	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]];}

#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]];}

table {border:2px solid [[ColorPalette::TertiaryDark]];}
th, thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
td, 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 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 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:0em 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 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

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

#messageArea {position:absolute; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:200;}
*[id='messageArea'] {position:fixed !important; z-index:200;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 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 0em;}
.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 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 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 0em 14em;}

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

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

.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:0em 0.25em; padding:0em 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;}

table {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer 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 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 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 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:50; 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 use a logographic writing system and 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;}

.htmlarea .toolbarHA table {border:1px solid ButtonFace; margin:0em 0em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<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>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<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>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></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 +saveTiddler -cancelTiddler deleteTiddler'></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'></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
!!! Day 1:

      - Prewarm 180 mL of D10 to room temperature.

      - In a 50 mL conical tube, prepare the following mixture:
      o 160 ug of lentivirus plasmid (e.g. pLECYT, pFCK-hChR2-mCherry)
      o 240 ug of pCMVdeltaR8.74 (contains GAG, POL)
      o 80 ug of pMD2.G (contains VSVg)
      At this point mix thoroughly
      o Add 1 mL of 2.5 M CaCl2 solution
      o Bring the volume to 10 mL total with distilled H2O
      o Mix thoroughly.

      - Add 10 mL of [[2X HBS-m]] to the DNA/CaCl2 mix.
      o Mix thoroughly and quickly (aerate with pipette to mix). Then pour directly into 280 mL of prewarmed D10

      - Remove the old media from the CellFactory. Add 200mls of transfection mix to the CellFactory

      - Put the plates back into the incubator o/n 5%CO2

!!! Day 2:

      - Pewarm D10 media to 37C

      - 15 to 16 hours after initial transfection, remove the transfection media from the plates and add 300mls of fresh D10-Complete

      - Put cells back into incubator for 8 hours

      8 hours later

      - Prewarm 200 mL of CDMEM10

      - 24 hours post transfection, replace the old media with 200mLs of CDMEM10 containing 5 mM Sodium Butyrate (add 2mls 500mM NaButyrate)

      - Put cells back into the incubator. Cells are very easy to detach at this time so be very gentle.


!!! Day 4:

      - 64 hours post transfection, collect the virus containing supernatant into Filter flask (through 0.22um filter membrane)

      - Divide the filtered virus-containing supernant among the six centrifuge tubes.

      - To the bottom of each centrifuge tube, add 2 mL of 20% Sucrose Solution.

      - Centrifuge in a Beckman SW-32Ti rotor for 2 hours at 22200 rpm, 4oC.

      - Gently carry the centrifuge tubes back to the tissue culture hood and pour out the supernatant. There should be a tiny semi-transparent pellet at the bottom of each centrifuge tube, looks like a contact lens.

      - Dry the side of each tube with Kimwipe.

      - Add 400 ul of RT HBSS to the first tube and resuspend the pellet by swirling and gentle pipetting.

      - Repeat for the 5 additional tubes.

      - Split the 2.4mls into 2 TLS55 rotor tubes containing 1ml of 20%Sucrose in PBS (or HBSS)

      - Add 400ul to the six tubes (sequentially) to pick up remaining virus and split this among the 2 tubes to bring the volume to fill (save remainder for in vitro experiments)

      - Spin in ultracentrifuge TLS55 rotor at 24K for 2hrs at 4C.
      - suck out supernatant and add 200ul HBSS to each tube and resuspend pellet overnight at 4C.
Day 5

      - Aliquot supernatant (after gentle pipetting to respend pellet) and proceed with titering and freeze remainder for later use at -80C (Do not snap freeze)

Incubate _ _DNA w _ _ ul EC cells (_ _ _ ) on ice
Pulse (1.8kV _ _ _)  (200Ohms) (25uF) 
In 1mm cuvette   (time constant @4-5.3msec)
Add _ _ _ ul  (250ul) 2XYT/SOC/LB _ _ _ _ _
Incubate at 32/37 for _ _ _ (1hr)
Plate on selective media _ _ _ _ _ _
Incubate _ _ (2ul) DNA with _ _ _ (30ul) HSC cells (_ _ _ _ _) on ice for 30min
Heat shock at 42C for _ _ _ (30) seconds
Add _ _ _ (250ul) SOC/2XYT/LB and incubate at 32/37 for _ _ _ _ (1hr)
Plate on selective media _ _ _ _ _ _ _ _
This refers to my -80C freezer space in the freezer corridor by the Meyer lab tissue culture room.  It's marked with my name and the space is next to Tyler's allocation on the second row of the second freezer from the exit door on the left hand side.
![[Rationale]]:

!<<tag Stocks>>:
[[pRNATinH1.4/LentiTomatoLV]]
[[pk2shRNA2LV]]

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Mating setup for CD-1 litter

![[Results]]:
New litter for mating cage 8 today


![[Discussion]]:
Will use mating cage 8 litter on Sunday for dye injections.
![[Rationale]]:
execute plan for detecting conditional knockout ES clones (11 to screen) would like to choose enzymes for 3 different strategies (internal, 3' and 5' probes to confirm targeting events)

![[Stocks]]:

![[Methods]] ([[Protocols]]):


![[Results]]:
We used Sequencher extensively to recreate the genomic locus when targeted with our Vangl1cko targeting vector and compared this (by restriction enzyme positions) to wild-type sequence in order to develop a more comprehensive strategy for RFLP analysis of putatively targeted ES cell clones.

Wild-Type Vangl1 sequence cut sites:
ApaI (12) 355, 680, 10724, 11185, 11783, 23159, 30434, 33915, 39746, 39932, 43338, 46608
ApaLI (18) 3247, 8698, 8706, 11644, 17425, 18029, 19661, 28248, 32624, 33815, 35618, 36238, 43698, 43835, 45059, 45394, 46098, 47411
BamHI (11) 4988, 13329, 19498, 22918, 23981, 29939, 32402, 35105, 37343, 42172, 49026
ClaI (4) 3622, 46631, 48956, 48992
EcoRI (18) 57, 1540, 10058, 10108, 10578, 18546, 18606, 20056, 22115, 24701, 25878, 31290, 32923, 36058, 37188, 38058, 44816, 49803
EcoRV (6) 4666, 14445, 15135, 23961, 26989, 41892
HindIII (11) 1258, 2900, 5377, 6077, 8198, 12441, 17064, 29002, 36526, 37835, 47893
KpnI (7) 8743, 22177, 26014, 29096, 29926, 30339, 35085
NdeI (11) 2552, 3318, 3480, 6723, 17880, 19634, 21840, 21853, 24010, 34893, 40413
NheI (5) 393, 23616, 29978, 44042, 47606
NotI (1) 381
SalI (1) 47203
ScaI (17) 2167, 3850, 10324, 18906, 19215, 21509, 22792, 28446, 32754, 33058, 34440, 35657, 39447, 43899, 48233, 48726, 48756
SmaI (11) 512, 572, 751, 953, 1030, 9068, 11261, 14969, 28014, 35845, 49386
StuI (14) 1036, 4261, 8136, 13547, 16495, 18366, 20237, 28746, 29499, 30056, 34913, 35073, 40267, 42318
XbaI (8) 3861, 9013, 26475, 30072, 31395, 32919, 33558, 42321
XhoI (2) 603, 45756
Mapping all cutsites.
Non-Cutters : AscI & MluI

52kb of vangl1 genomic locus after correct V1cko targeting by homologous recombination:
ApaI (12) 355, 680, 10724, 11185, 11783, 24972, 32247, 35728, 41559, 41745, 45151, 48421
ApaLI (18) 3247, 8698, 8706, 11644, 17425, 18029, 19661, 30061, 34437, 35628, 37431, 38051, 45511, 45648, 46872, 47207, 47911, 49224
BamHI (13) 4988, 13329, 19498, 20148, 23986, 24731, 25794, 31752, 34215, 36918, 39156, 43985, 50839
ClaI (4) 3622, 48444, 50769, 50805
EcoRI (18) 57, 1540, 10058, 10108, 10578, 18546, 18606, 20056, 22094, 26514, 27691, 33103, 34736, 37871, 39001, 39871, 46629, 51616
EcoRV (7) 4666, 14445, 15135, 20156, 25774, 28802, 43705
HindIII (11) 1258, 2900, 5377, 6077, 8198, 12441, 17064, 30815, 38339, 39648, 49706
KpnI (6) 8743, 27827, 30909, 31739, 32152, 36898
NdeI (11) 2552, 3318, 3480, 6723, 17880, 19634, 21819, 21832, 25823, 36706, 42226
NheI (6) 393, 22165, 25429, 31791, 45855, 49419
NotI (1) 381
ScaI (17) 2167, 3850, 10324, 18906, 19215, 21488, 24605, 30259, 34567, 34871, 36253, 37470, 41260, 45712, 50046, 50539, 50569
SmaI (11) 512, 572, 751, 953, 1030, 9068, 11261, 14969, 29827, 37658, 51199
StuI (15) 1036, 4261, 8136, 13547, 16495, 18366, 20216, 22492, 30559, 31312, 31869, 36726, 36886, 42080, 44131
XbaI (11) 3861, 9013, 22114, 23591, 23908, 28288, 31885, 33208, 34732, 35371, 44134
XhoI (3) 603, 20141, 47569
Mapping all cutsites.
Non-Cutters : AscI, MluI & SalI


![[Discussion]]:
![[Rationale]]:
lentiviral maxiprep continued
![[Stocks]]:
cGFPLV050107
tomatoLV050107
pk2shRNA1050107
pk2shRNA2050107
pk2shRNA3050107
control no virus
all in LVTCFridge
![[Methods]] ([[Protocols]]):
Changed medium for maxiprep viral production on 15cm plates
completed [[LentiMiniprep-v1.0]] on cGFP,tomato, pk2shRNA1,2,3 (generated in stocks)
MixedCerebellarCulture carried out on 4 P10 pups today plated 50ul and 20ul per well in two 24-well dishes (out of total volume of 10mls) 
![[Results]]:



![[Discussion]]:
We anticipate infection of the cerebellar cultures tomorrow or the next day and will assess for knockdown of Pk2 by Western.
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Agarose Gel for pk1 genomic probe production:

Gel Imaging of vangl1ckoFlp clones as well a pk1cko clones for Southern



![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:
[[pk2shRNA2LV]] 11 7ul aliquots of 1st resuspension in HBSS.
7-8 40ul aliquots of 2nd resuspension in HBSS. stored at [[-80Space1]]
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Lentiviral isolation by centrifugation:  [[pk2shRNA2LV]] purified from CellFactory Prep 200mls collection volume was filtered through 0.22um GPS Express Millipore filtration unit and then the eluate was divided into 6 centrifuge tubes and spun at 22k for 2hrs at 4C in SW32Ti rotor.  Supernatant was aspirated away and the pellets were air dried briefly and then collectively resuspended in 150ul HBSS (transferring from tube to tube) with a final collection of about 90ul.  A second round of collections was performed with 400ul HBSS and final collection was around 330ul.  Both collections were spun at 7K for 10minutes and the supernatants were aliquoted (7ul for 1st eluate, 40ul for 2nd eluate) and frozen at -80C.


![[Results]] and <<tag ImageS>>:
1ul and 2ul of [[pRNATinH1.4/LentiTomatoLV]] gives a good infection of 24well confluent


![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):


![[Results]]:
Today we organized the mouse colony record keeping into a Tiddlywiki hosted at ashmousestocks.tiddlyspot.com. This should ease the burden of keeping track of 


![[Discussion]]:
![[Rationale]]:

![[Stocks]]:
[[pCAGGS-Flpe]]
[[pRNATinH1.4/LentiTomato]]
[[pk2shRNA3]]
[[pMDL]] [[pRSV-Rev]] and [[pCMV-VSVg]]
![[Methods]] ([[Protocols]]):


![[Results]]:



![[Discussion]]:
![[Rationale]]:
Southern Blot of ES cell clones (putative vangl1 cko clones) for verification
![[Stocks]]:

![[Methods]] ([[Protocols]]):
AgaroseGel

![[Results]]:
We began the run of 36 samples (ApaLI, KpnI, and EcorV) digested DNA from 12 ES clones (vangl1 cko) Note loading difference: ApaLI digests were loaded 
1A3,1A5,1A6,1B4,1B8,1G7,1H4,2A6,2C6,2E6,2E12,-control
Kpn1 loaded: (12th clone loaded first)
-cont,1A3,1A5,1A6,1B4,1B8,1G7,1H4,2A6,2C6,2E6,2E12
EcorV digests loaded:
1A3,1A5,1A6,1B4,1B8,1G7,1H4,2A6,2C6,2E6,2E12,-control


![[Discussion]]:
![[Rationale]]:
will pass 293T's for later use for [[LentiviralMaxiPrep-v1.0]] and commencement of cloning celsr2shRNA as a positive control for effects on Purkinje cell morphology in the cerebellum. 
![[Stocks]]:
[[celsr2shRNAfor]]
[[celsr2shRNArev]]
![[Methods]] ([[Protocols]]):
OligoAnneal of celsr2shRNAfor/rev
[[Ligation]] of dsoligo above and [[pRNATinH1.4/LentiTomato]]

![[Results]]:
cerebellar cultures from [[01 May 2007]] appear ok with a good amount of cell debris but process extension is happening on both the 20ul and 50ul plates.
HeLa cells infected with lentiviral miniprep from [[01 May 2007]] appear to have NO fluorescence at 24 hours.  We will continue to grow these and recheck tomorrow.


![[Discussion]]:
It is somewhat disappointing that there is no fluorescence in the HeLa plates.  This may be due to insufficient time to expression or may reflect lack of viral production.  This latter result may be secondary to problems with the packaging constructs.  The SIN vector is certainly expressing GFP and tomato adequately so likely these plasmids should be ok but we will check them all by restriction digestion.
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Using 10mls of [[ESLysisBuffer]] I added 250ul to each well of the 2 24 well plates containing expanded ES cell clones to screen for the vangl1cko Flp expression allele.

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Gigaprep of TomatoWT construct and [[pk2shRNA2]] stopped at QN elution for later prep.
293Ts split 1:25 for prep of lentivirus (Sunday or Monday depending on plate density)

![[Results]]:



![[Discussion]]:
![[Rationale]]:
injection of P3 pup cerebellums with lentivirus, restart production of [[TLV]]
!
!<<tag Stocks>>:

!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
<<slider "120307PupInjection" "120307PupInjection" "120307PupInjection" >>

<<slider "120307LentiXFect" "120307LentiXFect" "120307LentiXFect">>
!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
![[Rationale]]:

![[Stocks]]:
[[pMDL]] [[pRSV-Rev]] and [[pCMV-VSVg]]
[[pk2shRNA3]]
[[pRNATinH1.4/LentiTomato]]
[[pCAGGS-Flpe]]
![[Methods]] ([[Protocols]]):
Completion of endo-free maxiprep
Thaw of 293T/17 cells for viral preparation

![[Results]]:



![[Discussion]]:
![[Rationale]]:
Lentiviral infections, cko Vangl1 analysis
![[Stocks]]:
cGFPLV050107
tomatoLV050307
pk2shRNA1050307
pk2shRNA2050307
pk2shRNA3050307
All in LVTCFridge in cryovials (most used up today but a few microliters of each remain)
![[Methods]] ([[Protocols]]):
Completion of [[LentiviralMaxiPrep-v1.0]]
LentiviralInfection of mixed cerebellar cultures, infection of HeLa cells.
EthanolPrecipitation of Celsr2shRNA ligations (resuspension in 5ul H~~2~~0)
![[Results]]:
We analyzed Southern Blots from Plate 1,2 (1/24/07) Vangl1 cko ES cell clones digested with XbaI and probed with [[V1SPR3'-2]] and we have established a standard curve fitting migration distance versus fragment size to correlate to the bands we see on the blot  (This is particularly for plate 2 top half gel but is approximate for the others).  That is given below in the image:

[img[Southern Standard Curve for Plate 2|http://ashvin-imac.stanford.edu/TWLabNotebook/SouthernStandardCurve.jpg]]


![[Discussion]]:
Reinfection of HeLa's and infection of cerebellar cultures was performed for testing of the concentrated virus from [[LentiviralMaxiPrep-v1.0]] protocol completed today.  Because the miniprep seems unsuccessful we will pursue examining the integrity of the packaging constructs (as well as the 2nd generation constructs provided by Eszter Vladar) and continue based on which packaging construct looks right.  Also reprepping of endo-free shRNA constructs is also warranted at this time.
![[Rationale]]:
Confirm screening for vangl1cko ES clones (after Flp expression), confirm pk1cko homologous recombinant clones (H1 and H2) and attempt to examine lentiviral injection efficacy of in vivo transduction.
 
!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
<<slider PCRRxn1 PCR110307-1 "PCR110307-1>>

!!!Southern Blot Hybridization
Vangl1Exon4 purified insert used to random prime generate a 32P probe for hybridization using RTGbeads and G30SpinColumns
per protocol (rxn went about 40 minutes)
Blot that was transferred last week was


!!!Dissection:
dissected 10 mouse brains from 10/22 injection in PBS to look at fluorescence from lentiviral transduced neurons in the cerebellum.


![[Results]] and <<tag ImageS>>:
Dissection of mouse brains from lentiviral injection reveals no fluorescence.  These were discarded.  


![[Discussion]]:
We continue to be unable to obtain any modicum of fluorescence in injected pup brains.  This will be controlled by ordering a known high titer lentivirus for injection side by side with our constructs.  Also we may have to target the midbrain as it is an easier target to hit initially before we go back to cerebellar injections.  Given the approval of our injection apparatus we will be able to set up a consistent apparatus for injection of lentivirus for our own.  We are fortunate that at least the conditional knockout can proceed 
!Linked Entries:
!Rationale:

!Methods ([[Protocols]]):

!Results:

!Discussion:

![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
ES Cell lysis on Pk1cko ES clones commenced.

![[Results]]:



![[Discussion]]:
!@@font-size:18pt;''[[Rationale]]:''@@

!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@
development of Southern Blot for Pk1cko
!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@
appears that by Southern the pk13LP probe gives the correct 14kb and 9kb bands that would be expected for this targeting event.

This entry was redone as the original was lost in a file-saving cache overwrite.

!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:
Southern Blotting of vangl1 ES clones			
![[Stocks]]:

![[Methods]] ([[Protocols]]):
Washes done 20minutes low stringency (first with rinse)
then 2X high stringence washing
placed on film for 2 day exposure.

![[Results]]:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Transformation of celsr2 ligation. (used both electrocompetent STBL4 as well as self-prepped EC STBL3)


![[Results]]:
 Vangl1 conditional knockout generation:
ES cell clones identified as likely positives after careful examination of film.
From Plate 1 (1/24/07 ES Cell electroporation experiment with Vangl1cko construct - XbaI digested and [[V1SPR3'-2]] probe)
A5, B4,  Also candidates A3,A6,B8, G7 and H4

From Plate 2 (also handled as Plate 1):
A6, C6, E6, E12

 Lentiviral production:
  primary mixed cerebellar cultures appear to show NO transduction by viral aliquots and HeLa cells also had NO fluorescence to indicate transduction by lentivirus.  
 
![[Discussion]]: 
  Given the disappointing lentiviral production (or lack thereof)  We have to back up and check packaging constructs as well as transfection conditions (though the fluorescence of transfected 293Ts is impressive at least with Lipofectamine 2000)  We will also produce endo-free maxipreps of the [[pCMV-delR8.74]] and pMD2 constructs 
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
# <<slider LentiviralTransfection 110407LentiXFect "Lentiviral Transfection">>
# Agarose gel run of [[PCR110307-1]] samples
# Lentiviral infection to check titers of stocks

|  |1 |2 |3 |4 |
|A |[[TLV]] new 1ul |[[TLV]] old 1ul  |[[pk2shRNA2LV]] 1ul  | [[pk2shRNA2LV]] 2nd sup 1ul |
|B | [[TLV]] new 10ul | [[TLV]] old 10ul  |[[pk2shRNA2LV]] 10ul  | [[pk2shRNA2LV]] 2nd sup 10ul |
|C |100ul  | 100ul  | 100ul  |  [[pk2shRNA2LV]] 2nd sup 100ul |



![[Results]] and <<tag ImageS>>:
 No PCR products were visible for the pk1 probe PCRs.  


![[Discussion]]:
Due to the failure of 2 sets of PCR primers to amplify the desired pk1 genomic probes we must reorder oligos for a new probe generation scheme.
We will proceed with 
!Linked/Related Labnotebook Entries:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
restriction digest of 3 clones of V1cko ES cells s/p Flp expression (for Neo cassette removal in allele)

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:
 We are producing virus species containing shRNAs to mprickle2 today.  
![[Methods]] ([[Protocols]]):
[[96well-AgaroseGel]]
LentivirusTransfectionL2000
CellLinePassage
EndoFreeMaxiPrep with modification to use cell strainer to strain lysis debris prior to loading in QiaFilter cartridge (actually after loading but emptied and reintroduced into Qiafilter cartridge)  This modification works extremely well to prevent clogging of the filter and subsequent potential clogging of the qiatip.


![[Results]]:
EndoFreeMaxiPrep was carried out on pellets containing PL452, pk2shRNA1, pk2shRNA3, [[pRNATinH1.4/LentiTomato]], [[pRNATinH1.4/LenticGFP]] plasmids (total of 5)
We obtained nicely confluent >90% NIH293T cells in 12X15cm plates.  These were changed into serum-free medium with 12.5uM Forskolin and then transfected with packaging constructs and our desired expression vectors according to the LentivirusTransfectionL2000 instance
![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Restriction Digest of Tomato vector (old stock and new)
Qiaquick cleanup of above
Ligation with celsr2 dsOligo

![[Results]]:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
PCR amplification of internal Vangl1 exon4 fragment (to serve as internal probe of Southern blots determining targeting of vangl1 locus)

![[Results]]:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:
HeLaCells frozen down as 1/2 10cm plate per cryovial (4)
placed in freezing chamber in my -80^^o^^C freezer until tomorrow (then to transfer to LiqN~~2~~) tank.

![[Methods]] ([[Protocols]]):
CellCultureCryo preservation of HeLa cells.

![[Results]]:



![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
#<<slider Lentiviraltransfection 110507LentiXFect "pk2shRNA2 Lentiviral Transfection continued">>
#<<slider SouthernBlotWashes 110507SouthernBlotWash "Washes of Southern blot of vangl1ckoFlp expressed clone BamHI digested genomic DNA">>


![[Results]], <<tag ImageS>>, and [[Discussion]]::
95% transfection efficiency achieved as witnessed by 15cm tranfection.  So Cell Factory was assumed to be the same (given inability to visualize) and proceeded with requisite media changes as above.




!Linked/Related Labnotebook Entries:
![[Rationale]]:
titering of virus and continued attempts at production of lentivirus for in vivo injection experiments
!<<tag Stocks>>:
[[2X HBS-m]] 1L prep made and pH to 7.05, filtered and aliquoted to 50mls conicals.
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Transfection for Tomato lentiviral production
65ul [[pRNATinH1.4/LentiTomato]] (@250ug), with 34ul [[pCMVdeltaR8.74]] = @ 265ug, [[pMD2.VSVg]] 18ul = @ 122ug
used to mix into final volume of 4.5mls ddH20,  500ul 2.5M CaCl2 added and then 5mls of 2X HBS-m (Eszter's aliquot) added under bubbling.  
Allowed to precipitate for 10minutes and added to 190mls of CDMEM10 medium containing 25uM chloroquine.
Medium from a cell factory was drained and replaced with the transfection medium and incubated at 37C 5%CO2 o/n

70% confluent dish was split 1:20 and 1:40 onto new 15cm plates to propagate cells.
500ul of the 20ml resuspension was plated into each of 9 wells of a 24-Well dish for titration of virus

Viral Titer dishes:
prior plated 24 Well dish at 70-80% confluence was infected as follows:



|YFP 1ul|[[pk2shRNA2LV]] 1-2 1ul|[[pRNATinH1.4/LentiTomatoLV]] 1-5 1ul| [[pk2shRNA2LV]] 1-11(old) 1ul|
|YFP .1ul|[[pk2shRNA2LV]] 1-2 .1ul|[[pRNATinH1.4/LentiTomatoLV]] 1-5 .1ul| [[pk2shRNA2LV]] 1-11(old) .1ul|
|YFP .2ul|[[pk2shRNA2LV]] 2-2 1ul|[[pk2shRNA2LV]] 2-2 10ul| [[pk2shRNA2LV]] 2-2 20ul|

Newly seeded plate (500ul from split plate described above) was infected as follows with 25-30minutes of seeding (alternate protocol for titering virus)
|YFP 1ul|[[pk2shRNA2LV]] 1-2 1ul|[[pRNATinH1.4/LentiTomatoLV]] 1-5 1ul| [[pk2shRNA2LV]] 1-11(old) 1ul|
|YFP .1ul|[[pk2shRNA2LV]] 1-2 .1ul|[[pRNATinH1.4/LentiTomatoLV]] 1-5 .1ul| [[pk2shRNA2LV]] 1-11(old) .1ul|
|YFP .2ul||| |


![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:

![[Methods]] ([[Protocols]]):

![[Results]]:

![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
!!Transfection protocol (Day 1)

Using 3 15 cm plates per virus (each transfection refers to amounts for 1 plate).  

   1. 293T Cells are about 75% confluent at the time of transfection.
   3. Mix DNA with cell culture grade water, quickly vortex at low setting.
|!Lenti in 15 cm dish| 16 ug transfer vector|  12 ug packaging vector | 3 ug envelope vector | water to 893 ul|
[[pRNATinH1.4/LentiTomato]] and [[pk2shRNA2]] used to transfect cells.

   Use Falcon2058 (FACS) tubes for 10 cm; Falcon2059 or regular 15 ml Falcon tubes for 15 cm plates.

   4. Proceed with each transfection mix individually: add 100 ul of 2.5M CaCl2, vortex gently.
   5. Add 0.5ml of 2X HBS to the mixtures (10 cm plates) or 1 ml (15 cm plates) with constant bubbling.  Bubbles are being constantly delivered to the bottom of the tubes with a pasteur pipette in an automatic pipet aid.
   6. Add chloroquine to each plate to a final concentration of 25 uM (make a 50 mM stock, store at -20C), gently swirl plate,
   7. Add transfection mixture to plate dropwise, gently swirl around. Microscopic examination should reveal very fine black particles.
   8. Incubate plates at 37oC, 5% CO2 for 12-16 hours, then fresh media will be exchanged.

![[Results]]:



![[Discussion]]:
!@@font-size:18pt;''[[Rationale]]:''@@
lentiviral production (tomato reporter wild-type virus) and cerebellar culture for infection
!
!@@font-size:18pt;''<<tag Stocks>>:''@@
[[TLV]] 12/06
!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@
Supernatant filtered through .22um Express Plus Filter and 30mls aliquoted to each of 6 centrifuge tubes cushioned with 2mls 20% Sucrose in PBS and topped with CDMEM10 and spun 22K, 2hrs, 4C.
Supernatant discarded and pellets resuspended in 400ul PBS.
5 minute 7K spin of resuspension and supernatant placed on 1ml 20%sucrosee in TLS55 tubes and spun at 4C 24K,2hrs.
Pellets resuspended overnight in HBSS at 4C.


<<slider "CerebellarSliceCulture120607" "CerebellarSliceCulture120607" "CerebellarSliceCulture120607">>

!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
EthanolPrecipitation of Celsr2shRNA [[Ligation]]
[[X-GalStaining]] of Vgl1GT het pup heads (P5) (1/2 fixed for 20minutes in 4%Para then stained and other 1/2 fixed o/n for later Ab staining)
Cell culture:
 6-Well culture started (100ul of trypsinized Large plate resuspended in 10mls media) for mini lentiviral prep
 6- Large (15cm) plates passed (1ml of tryp large plate) for large lentivirus prep
 2- medium (10cm) plates passed (100ul of tryp large plate) for propagation of culture


![[Results]]:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Collection of P4 pup brains for immunohistochemistry [[BrainCollectionInstance]]
Ran Agarose gel of vangl1Exon4 amplification
Maxiprep EF of packaging plasmids


![[Results]]:
Expected 608 bp band was visualized on gel for vangl1exon4 fragment.  2 clones are clearly positive by EcorV digest (1B8 and 2C6) So we will proceed with preparing Flpe for transfection for Neo cassette removal. Further characterization of the clones will follow as well.


![[Discussion]]:
![[Rationale]]:
amplification of new Southern probes for pk1cko genomic southern confirmation
!
!<<tag Stocks>>:

!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
<<slider pcr110607 PCR110607-1 "PCR of Pk1 genomic probes with new primers">>
!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Medium changed with CDMEM10 with 5mM Butyrate this AM at 11PM on Tomato lentiviral production cell factory.
Dissected mouse brains with pk2shRNA2LV injection performed 9/27/07 on L0032 (BC009) from the 15CM X 5 isolate (9/25/07 isolate)


![[Results]] and <<tag ImageS>>:
No fluorescence detected with the pk2shRNA2LV injected 9/27.  


![[Discussion]]:
The litters coming in the next two days could be used to inject the latest cell factory preps of pk2shRNA2LV and pRNATinH1.4/LentiTomatoLV.  We are currently titering these and will cross our fingers that the titers work for in vivo injection.
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
[[SouthernBlot]] Day 2 protocols performed today
[[
![[Results]] and <<tag ImageS>>:
<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/090607AG001.jpg" width="180" height="240" /></a></html>


![[Discussion]]:
![[Rationale]]:

![[Methods]] ([[Protocols]]):

![[Results]]:

![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
media changed on tranfection at about 20hr mark
Injected 15 pups @ P4 with Alexa dye for technique improvement. Images taken and HeliconFocus applied to generate in focus images of each mouse injection for later correlation with stereotactic position and brain fluorescence images (tomorrow)
293T/17 cells thawed for new aliquot use for Lentiviral preparation

![[Results]]:
Only a few cells are brightly fluorescent red but we have changed media and will continue to observe the cultures going forward.
Stereotactic positions of injection sites (position from Bregma)
|Mouse-Injection ID|Xpos|Ypos|Zpos|Notes|Raw images|Composite Helicon Focus Img| Fluorescence Image of Brain| Fluorescence Image of Cerebellum|
|1-1|-|-|-|No coordinates rec|DSC_0651-665|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M1-1.jpg" width="240" height="160" /></a></html>|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707002.jpg" width="240" height="160" /></a></html> | <html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707002.1.jpg" width="240" height="160" /></a></html> |
|1-2|-|-|-|No coordinates rec|DSC_0666-678|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M1-2.jpg" width="240" height="160" /></a></html>| | |
|2-1|-|-|-|No coordinates rec|DSC_0679-691|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M2-1.jpg" width="240" height="160" /></a></html>|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707003.jpg" width="240" height="160" /></a></html> | <html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707003.1.jpg" width="240" height="160" /></a></html> |
|2-2|-|-|-|No coordinates rec|DSC_0692-706|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M2-2.jpg" width="240" height="160" /></a></html>| |  |
|3-1|.13|4.62|.48||DSC_0707-723|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M3-1.jpg" width="240" height="160" /></a></html>|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707004.jpg" width="240" height="160" /></a></html> | <html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707004.1.jpg" width="240" height="160" /></a></html> |
|4-1|-.61|4.02|3.27||DSC_0724-735|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M4-1.jpg" width="240" height="160" /></a></html>|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707005.jpg" width="240" height="160" /></a></html> | <html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707005.1.jpg" width="240" height="160" /></a></html> |
|4-2|1.49|4.02|4.12||DSC_0736-746|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M4-2.jpg" width="240" height="160" /></a></html>|||
|5-1|-1.02|3.31|2.52||DSC_0747-761|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M5-1.jpg" width="240" height="160" /></a></html>|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707007.jpg" width="240" height="160" /></a></html> | <html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707007.1.jpg" width="240" height="160" /></a></html> |
|6-1|-.79|3.56|1.8||DSC_0762-778|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M6-1.jpg" width="240" height="160" /></a></html>|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707008.jpg" width="240" height="160" /></a></html> | <html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707008.1.jpg" width="240" height="160" /></a></html> |
|6-2|1.33|4.85|3.13||DSC_0779-796|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M6-2.jpg" width="240" height="160" /></a></html>|||
|7-1|.94|3.98|4.43||DSC_0797-812|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M7-1.jpg" width="240" height="160" /></a></html>|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707009.jpg" width="240" height="160" /></a></html> | <html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707009.1.jpg" width="240" height="160" /></a></html> |
|7-2|-.67|3.08|4.75||DSC_0813-830|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M7-2.jpg" width="240" height="160" /></a></html>|||
|8-1|-.04|3.36|1.61||DSC_0831-845|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M8-1.jpg" width="240" height="160" /></a></html>|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707010.jpg" width="240" height="160" /></a></html> | <html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/P5CD1080707010.1.jpg" width="240" height="160" /></a></html> |
|8-2|1.1|4.43|2.2||DSC_0846-856|<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/IVImages080707/080707M8-2.jpg" width="240" height="160" /></a></html>|||

![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Transformation of Celsr2shRNA ligations
200ul of Transformations (400ul total volume) plated on LB-Amp to grow at 30C o/n
LB-Amp cultures started for [[pMDL]] and [[pRSV-Rev]]
![[Results]]:
Upon viewing of the cell cultures it is clear that they will reach @80% confluence by Monday morning. LacZ Staining of putative heterozygous Vgl1gt P5 pup brains reveals that both pups are indeed positive for the knockin.

![[Discussion]]:
We will continue to test by lacZ staining the remaining 5 pups from the Vgl1gt homozygote female with CD-1 (all should be hets) as well as to determine a developmental time course for the onset of vgl1 expression in the developing brain.
![[Rationale]]:

![[Stocks]]:
[[pMD2.VSVg]]
[[pCMVdeltaR8.74]]
![[Methods]] ([[Protocols]]):


![[Results]]:



![[Discussion]]:
![[Rationale]]:

!
!<<tag Stocks>>:

!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
ran out gel of [[PCR110607-1]] and spun purified the PCR product.  
ready to go labelling with 11/2/07 32P DCTP for labeling probe pk13LP
Hybridization of H1, H2 Southern blot started after a 5 day prehybridization
Lentiviral supernatant from pk2shRNA2LV packaging experiement were collected by filtration and stored at 4C for 2 days.  Medium was replaced for an additional 2 day collection

!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
[[SouthernBlot]] protocol probe making, hybridization done Vangl1Exon4 probe used as internal probe (continuation of protocol for screening EScells with Flp recombinase expression for neo excision)
 

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:

![[Methods]] ([[Protocols]]):

![[Results]]:

![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Fluorescence imaging of Alexa-injected litter from 8/7 (see [[07 August 2007]] for these results)


![[Results]]:
Appears that there is decent cerebellar fluorescence (will organize the composite image for analysis)


![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Started cultures of celsr2 Transformations (9 colonies + 1 of T3 SLigation control)
spun down pGalK, pMDL, and pRSV-Rev for miniprep and started 400ml cultures in LB-Amp with 30ul starter inoculum
Checked cell culture

![[Results]]:
Anticipate commencement of CaCl2 transfection tomorrow (both 6 well and 15cm plate cultures)



![[Discussion]]:
![[Rationale]]:
 injections of P4 mouse pups
![[Stocks]]:

![[Methods]] ([[Protocols]]):
MousePupCerebellarInjection

![[Results]]:
Upon visualization of Alexa 594 dye injected P4 pup brains under RFP filter on the dissecting fluorescence scope, it is clear that we are able to hit the area near the cerebellum reliably (n=2 but my first two pups).  See image:

[img[__|http://ashvin-imac.stanford.edu/TWLabNotebook/AlexaInvert.jpg]]
[img[__|http://ashvin-imac.stanford.edu/TWLabNotebook/Alexa594.jpg]]

![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
acrylic molds of P3 and P4 mice were made using online instructions (mix of monomer and activator solution until smooth and poured into 4% agarose negative mold
!! NeurofectTransfection of mixed cerebellar cultures with plasmid DNA
6 Well Plate:
|tomato 2ug 8ulNF| tomato 4ug 16ulNF| tomato 6ug 24ulNF|
|pk2shRNA2 2ug 8ulNF| pk2shRNA2  4ug 16ulNF| pk2shRNA2  6ug 24ulNF|

12 Well Plate: 
|tomato 1ug 8ugNF| tomato 1ug 4ugNF| pk2shRNA2 1ug 8ugNF| pk2shRNA2 1ug 4ugNF|
|tomato 2ug 16ugNF| tomato 2ug 8ugNF| pk2shRNA2 2ug 16ugNF| pk2shRNA2 2ug 8ugNF|
|tomato 4ug 32ugNF| tomato 4ug 16ugNF| pk2shRNA2 4ug 32ugNF| pk2shRNA2 4ug 16ugNF|

!!LentiviralInfection of mixed cerebellar cultures undertaken as well
6 Well Plate ([[pRNATinH1.4/LentiTomatoLV]])
|tomato CalcPhos 1ul| 2ul| 3ul|
|tomato LF2K 1ul| 2ul| 3ul|
6 Well Plate ([[pk2shRNA2LV]])
|[[pk2shRNA2LV]] CalcPhos 1ul| 2ul| 3ul|
|[[pk2shRNA2LV]] LF2K 1ul| 2ul| 3ul|
!!PupCerebellarInjection with [[pk2shRNA2LV]] and [[pRNATinH1.4/LentiTomatoLV]] Calcium Phosphate aliquots (11 pups injected- 8-9 survived  4 tomato, 5 pk2shRNA2 injected mice)  Left toe clip indicates pk2shRNA2LV injection and right toe clip indicates tomato wild type.

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
Southern Blot allowed to hybridize an additional 24 hours.
![[Rationale]]:

![[Methods]] ([[Protocols]]):

![[Results]]:

![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:
TomatoLV (supernatant), pk2shRNA2LV
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
293T cells thawed Tues were passed 1:20 onto 10 15cm plates for growth to tranfect with packaging constructs on Saturday.
293Ts plated (100ul per well) into 24 well plate for titering of virus tomorrow
HeLa cells passed onto 10cm plate (1:20) and onto 24 well plates (equivalent of about 1:2) for viral titer tomorrow
Lentiviral supnt spun @ 20k for 2hrs and pellets resuspended overnight in HBSS

![[Results]]:
Looking at the transfection plates the edges are decently transfected. The middle is not. However we proceeded to spin these supernatants and obtained smallish white pellets (resuspending overnight)


![[Discussion]]:
We will titer the viral pellets tomorrow to assess for production efficiency and incorporate Dragana's tips regarding rocking the transfections q15min for 2hours post transfection before adding larger volume of medium for the overnight step. Then the next day we can change out to larger volumes and proceed. This coupled with chlorquine use should yield a better viral titer.
![[Rationale]]:

![[Stocks]]:
[[pMDL]] EF Maxiprep
[[pRSV-Rev]] EF Maxiprep
[[pGalK]] EF Maxiprep
Minipreps of Celsr2shRNA putative positive clones (qiaprep8 in 8-strip tubes)

![[Methods]] ([[Protocols]]):
Qiagen Endofree Maxiprep
Qiagen8 miniprep
restriction digest
LentiviralMiniprep-v1.0
LentiviralMaxiprep-v1.0


![[Results]]:
None of the Celsr2shRNA clones were positive (all resembled wild-type tomato vector upon Kpn-EcorV digest)



![[Discussion]]:
![[Rationale]]:
cloning of celsr2 shRNA for positive control phenotype in cerebellar cells.
![[Stocks]]:

![[Methods]] ([[Protocols]]):
Ligation of annealed celsr2 shRNA dsoligos ([[celsr2shRNAfor]] and [[celsr2shRNArev]]) with [[pRNATinH1.4/LentiTomato]] - see paper instance for details.

![[Results]]:



![[Discussion]]:
![[Rationale]]:

!
!<<tag Stocks>>:
[[pk2shRNA2LV]]
!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Southern washes using LSB and HSB (rinse, 20minutes in LSB, 30minX2 in HSB) and exposed to film22/9/07--

22K spin of viral supernatant yields big pellets that suggest good lentiviral yields.
then 24K spin in the ultrafuge that yielded 2 pellets each resuspended in 80ul HBSS

2nd collection supernatant obtained by filtration and spun but no significant pellets seen so this was abandoned.


!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Washing day for [[SouthernBlot]] protocol
 

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:

![[Methods]] ([[Protocols]]):
Southern Blot:
	Washes of 4 blots today.  Layed down on film for 1 week exposure.
Lentiviral prep:
	Spin down of 2nd and 3rd viral collections

![[Results]]:

![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Dissected pups from P2,3,4,6,7 and P9 for immunohistochemistry (fixed in 4% Formaldehyde o/n)

![[Results]]:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
fixation of P9 mouse pup brains for lacZstaining and later histology
Cell culture:
changed medium on lentiviral prep plates (10uM forskolin supplemented complete DMEM) @ 24 hr mark ( will harvest at 72 hrs)
passed 293Ts 1:10 for propagation
Thawed HeLa cells for viral titer (1/2 10cm plate onto 1 10cm plate)
![[Results]]:
There is very nice tomato fluorescence throughout in the 6well cluster as well as the 5 15cm plates (green fluorescence in the other)

![[Discussion]]:
We anticipate that the presence of ubiquitous fluorescence is and indicator of good viral production.  We have changed media at the 22 hour mark and added forskolin and incubated at a higher CO2 percentage (8%) to boost viral production.  We have thawed Hela cells in anticipation of viral titering .  We will monitor the mouse colony for CD-1 pups (due soon in 2-3 cages) to use for injection of virus if obtained. 
![[Rationale]]:
to inject mouse pups to determine conditions favorable for overall survival
![[Stocks]]:
[[pCAGGS-Flpe]]
![[Methods]] ([[Protocols]]):
MousePupInjectionDLabProtocol

![[Results]]:



![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):


![[Results]] and <<tag ImageS>>:
After examining the fluorescence in the lentiviral infected cerebellar cultures and transfected cultures, there were many granule neurons lit up with tomato expression however as a percentage of total it was maybe 0.1-1%. 


![[Discussion]]:
We have decided to leave these cultures incubating for 2-3 more days to examine infection/transfection of the cultures at this later point.
|  |1_ |2_ |3_ |4_ |5_ |6_ |7_ |8_ |9_ |10  |
|A |   |   |   |   |   |   |   |   |   |    |
|B |   |   |   |   |   |   |   |   |   |    |
|C |   |   |   |   |   |   |   |   |   |    |
|D |   |   |   |   |   |   |   |   |   |    |
|E |   |   |   |   |   |   |   |   |   |    |
|F |   |   |   |   |   |   |   |   |   |    |
|G |   |   |   |   |   |   |   |   |   |    |
|H |   |   |   |   |   |   |   |   |   |    |
|I |   |   |   |   |   |   |   |   |   |    |
|J |   |   |   |   |   |   |   |   |   |    |
Phosphate buffered saline, recipe from Harlow and Lane.
To make up 1 liter 

NaCl                                      80 g
KCl                                        2 g
Na2HPO4                                 14.4 g
KH2PO4                                   2.4 g
 Dissolve in 800 ml dH2O
 Adjust pH to 7.4 with HCl
 Bring volume to 1 liter, autoclave
For 1 Liter:
          * 108g Tris base.
          * 55g Boric acid
          * 9.3g EDTA (or 50mls 0.5M EDTA pH 8)
![[Rationale]]:
	We are freezing down cells in anticipation of leaving town.  HEK 293T/17 cells to be frozen down for stock reinforcement.  Mixed cerebellar cultures 
![[Methods]] ([[Protocols]]):
Cell Culture:
	Freezing stocks of 
![[Results]]:

![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
#Complete fixation of developmental brain timecourse for immunohistochemistry (PBS washes)
#Viral infection of HeLa cells and 293T cells for titer determination

#


![[Results]]:



![[Discussion]]:
!Transfection of Lentiviral packaging Plasmids into host HEK293T/17 cells for Lentiviral particle production

|250ug of [[pk2shRNA2]]|240ug of [[pCMVdeltaR8.74]]|80ug of [[pMD2.VSVg]]|

mixed into 9mls of distilled H20 with 1ml of 2.5M CaCl2

10mls of [[2X HBS-m]] was added and vigorously mixed ( with bubbling).

18mls of this was added to 200mls of fresh [[dMEM-Complete]] and then exchanged into the cell Factory.

Incubation was carried out overnight under 5% C02.


#Media changed after @ 16hr transfection with 300mls of [[dMEM-Complete]]
#Media changed after 8 more hours with 200mls [[dMEM-Complete]] + 5mM Na-Butyrate.
#Quick rinse in LowStringencySBWash
#30minutes at 60C in LowStringencySBWash
#30minutesX2 at 60C in HighStringencySBWash
#Layed blot down on Saran backed with moist Whatman and exposed to film at-80C for several days 

!@@font-size:18pt;''[[Rationale]]:''@@
start stains of cerebellar slice to examine celltype specificity of virus
!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@

<<slider "121207ImmunoStaining" "121207ImmunoStaining" "121207ImmunoStaining">>

!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@
Having been able to visibly see infection of cerebellar slice with both a [[TLV]] and [[Pk2shRNA2LV]] lentiviral vector, we now are turning our attention to ascertaining the cell-types that are being infected in this paradigm and transitioning to in vivo injections for assay of function of pk2. We are working out immunostaining protocols and injection protocols to optimize the hit rate for the cerebellum and the imaging of the targeted regions once successful.  We will start immunostains with calbindin and S-100 to identify if our tomato lentivirus has hit Purkinje cells and maturing Bergmann glia respectively.  If either is the case we can use these antibodies in our assay for morphologic, organizational differences of these cells in the context of pk2 knockdown.  Even if these cell types don't appear to be infected, we can ask if cell types that are infectible can have non-autonomous effects on these 2 well-organized cell types.


!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:

![[Stocks]]:
[[pk2shRNA1LV]]
[[pk2shRNA2LV]]
[[pk2shRNA3LV]]
[[pRNATinH1.4/LentiLV]]
[[pRNATinH1.4/LentiTomatoLV]]
![[Methods]] ([[Protocols]]):
collection of lentivirus-- (maxi and minipreps)

infection of Hela cells for titer-- 1ul and 10ul of miniprep supernatant (after filtration) used and 1,10ul of concentrated 15cm viral preps (resuspended in 100ul HBSS) used for infection (no polybrene)



![[Results]]:



![[Discussion]]:

!Transfection of Lentiviral packaging Plasmids into host HEK293T/17 cells for Lentiviral particle production

|160ug of [[pRNATinH1.4/LentiTomato]]|240ug of [[pCMVdeltaR8.74]]|80ug of [[pMD2.VSVg]]|

mixed into 9mls of distilled H20 with 1ml of 2.5M CaCl2

10mls of [[2X HBS-m]] was added and vigorously mixed ( with bubbling).

18mls of this was added to 180mls of fresh [[dMEM-Complete]] and then exchanged into the cell Factory.

2mls of this was added to 8mls of fresh [[dMEM-Complete]] and added to a near confluent 15cm dish of HEK293T/17 cells.

Incubation was carried out overnight under 5% C02.


!Injection Protocol
#anesthetize pups individually by keeping under ice for 90sec-2 minutes 
#Tape the pup to stage with head inserted into the mold so that posterior fossa is parallel to the floor (for orthogonal injection)
#Using the micromanipulator or stereoctaxis control introduce the pipette into a midline portion of the would be cerebellum at a depth of 2-3mm.  
#Inject solution at 0.2ul/min for a total volume of 0.4ul
#Choose 1 site of injection for each pup (midline cerebellum targeted)
#Warm by returning pup to mother's cage (roll pup in bedding before mother sniffs the pup)
BC009- L0060 injected (3 pups @ P3 A B C), BC002-L0061 6 pups P0 injected (1-6)
|Mouse ID|Injection coordinates (X_y_Z (surface Z)|Vector| Notes_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|1|2.28_0_2.18 (3.18 surface)|Dye|1mm depth CSF leak 4th ventricle likely, 1.27g mouse|
|!2|3.34_0_2.11 (3.24 surface)|" |good target good depth 1.89gram mouse|
|3|2.7_0_2.18 (3.9)| "|tip barely through skull high target, deep, 1.87gram mouse|
|4|2.2_0_2.02 (3.22)|"|Bad target, high, 1.72g mouse|
|!5|3.4_0_1.98 (2.65)|"|GOOD Target, Good depth 1.83g mouse |
|!6|2.85_0_2.67 (3.44)|"|good target good depth (very slightly high) 1.78g mouse|
|A|2.86_0_1.65||all cerebellar but 4th ventricle too|
|B|2.86_0_1.65 (1.57 deep)||"|
|C|2.86_0_1.65(1.75 deep)||"|
# Dissected out P1 cerebellums from 2 CD-1 mouse pups using clean technique.
# Add 3X volume (150ul) of <<slider "RIPA Buffer" "RIPA Buffer" "RIPA Buffer">> w/ Protease inhibitors and phosphatase inhibitors I and II.
# Homogenize with epi tube pestles (blue- found at Kaye's bench)
# Spin for 4 minutes at 14K in tabletop centrifuge
# Transfer the supernatant to a new tube
# Snap freeze in liquid Nitrogen
# Store in -80C until ready to quantitate and/or run Western gel
!Rationale of immunostaining experiment:
Identification of cell types that were infected in cerebellar slices by [[TLV]] lentivirus
!Samples
[[TLV]] dilution 1, [[TLV]] 10ul 2, [[TLV]] 10ul 3
to be immunostained with calbindin (mouse monoclonal) and S-100 (Rabbit antibody) each 1:250 antibodies

!Primary Antibody Incubation
1. Remove selected sections carefully using a Moria 1121B spatula and brush
2. Block in 250ul <<slider PBSPlusSlider "PBSPlus" "PBSPlus" >> overnight at 4C
3. Incubate sections in  primary antibody (see dilutions below) in [[PBSPlus]] at 4C overnight (until 12/17)
4. Rinse 4 times for 10 minutes each with PBS (performed 12/17)

!Secondary Antibody Incubation
5. Incubate in secondary antibody _ _ _ _ _ (eg Alexa594-goat anti-rabbit IgG, 1:500 multiple 2nd if double) in [[PBSPlus]] for 1 hour at room temperature in the dark
6. Rinse 4 times for 10 minutes each with PBS
7. Counterstain with with a DNA dye (Hoescht, DAPI etc) for 30 minutes at room temperature (1:1000 - PBS + 0.1% Triton-X100)
8. Rinse 5 minutes in PBS
9. Coverslip using Fluormount and store at 4C protected from light

 
!Prepare
Bucket of ice
thawed dye or lentivirus for experiment (spin 5minutes tabletop centrifuge to get rid of debris)
pulled microinjection pipettes (PullingProgram here)
!Setup
#attach microinjection pipette to tubing and pump (eliminate bubbles and fill with paraffin oil)
#Backfill pipette with 6ul of lentivirus ([[pk2shRNA2LV]] 11/14 batch)
#Wipe off pipette with q-tip
#Cage of pups is brought to InjectionSetup
!Injection Protocol
#anesthetize pups by keeping under ice for 90sec-2 minutes
#Tape the pup to stage with head inserted into the mold so that posterior fossa is parallel to the floor (for orthogonal injection)
#Using the micromanipulator or stereoctaxis control introduce the pipette into a midline portion of the would be cerebellum at a depth of 2-3mm.  
#Inject solution at 0.2ul/min for a total volume of 0.5ul
#Choose 2 sites of injection for each pup
#Warm by returning pup to mother's cage (roll pup in bedding before mother sniffs the pup)

|Mouse ID|Mark| Injection coordinates|Vector| Notes_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|1|R pinky clip|2.91 0 2.38-2.5(3.63)|[[pk2shRNA2LV]]| |
|2|R 4th digit +R ear|2.92 0 3.52-3.72 (4.65)|"| |
|3|R mid digit +R ear|3.6 0 2.02-2.26(3.17)|"||
|4|R sec digit +R ear|3.1 0 2.69-3.16(4.35)|"||
|5|R thumb +R ear|3.32 0 2.12-2.52(3.43)|"||
|6|R ear + L 5th|3.57 0 2.58-2.87(3.94)|"||
|7|L ear + L 4th|3.52 0 2.04-2.45(2.97)|"||
|8|L ear + L mid|3.04 0 2.47-2.87(3.75)|"||
|9|L ear + L 2nd|4.15 0 2.03-2.32(3.08)|"||
|10|L ear + L thumb|3.46 0 3.38-4.01(4.67)|"||
|11|R hind pinky (5th)|3.36 0 2.38-2.55(@3.6)|"||
|12|R hind 4th (or L hind pinky?)|3.4 0 1.86-2.17(3.2)|"||
|13|no mark|no injection||
# Dissected out P3 cerebellums from 2 CD-1 mouse pups using clean technique.
# Add 3X volume (150ul) of <<slider "RIPA Buffer" "RIPA Buffer" "RIPA Buffer">> w/ Protease inhibitors and phosphatase inhibitors I and II.
# Homogenize with epi tube pestles (blue- found at Kaye's bench)
# Spin for 4 minutes at 14K in tabletop centrifuge
# Transfer the supernatant to a new tube
# Snap freeze in liquid Nitrogen
# Store in -80C until ready to quantitate and/or run Western gel
# Dissected out P5 cerebellums from 2 CD-1 mouse pups using clean technique.
# Add 3X volume (200ul) of <<slider "RIPA Buffer" "RIPA Buffer" "RIPA Buffer">> w/ Protease inhibitors and phosphatase inhibitors I and II.
# Homogenize with epi tube pestles (blue- found at Kaye's bench)
# Spin for 4 minutes at 14K in tabletop centrifuge
# Transfer the supernatant to a new tube
# Snap freeze in liquid Nitrogen
# Store in -80C until ready to quantitate and/or run Western gel
# Dissected P7 cerebellar tissue out from 2 mouse pups at P7 using clean technique.
# Add 3X volume (100ul) of <<slider "RIPA Buffer" "RIPA Buffer" "RIPA Buffer">>
# Homogenize with epi tube pestles (blue- found at Kaye's bench)
# Spin for 4 minutes at 14K in tabletop centrifuge
# Transfer the supernatant to a new tube
# Snap freeze in liquid Nitrogen
# Store in -80C until ready to quantitate and/or run Western gel

<<slider "BrainCollectionInstance" "BrainCollectionInstance" "BrainCollectionInstance">>

Dissected the cerebellums from 121007PupInjection and 121307PupCerebellarInjection for Tomato epifluorescence evaluation.  No fluorescence seen (May try to section these tissue and examine the slices).
# Dissected outthe P9 cerebellums from 2 pups using clean technique.
# Add 3X volume (200ul) of <<slider "RIPA Buffer" "RIPA Buffer" "RIPA Buffer">> with added protease inhibitors A,B and phosphatase inhibitors.
# Homogenize with epi tube pestles (blue- found at Kaye's bench)
# Spin for 4 minutes at 14K in tabletop centrifuge
# Transfer the supernatant to a new tube
# Froze at -80C (no liquid nitrogen available)
# Store in -80C until ready to quantitate and/or run Western gel

# Dissected out 2 P11 CD-1 pup cerebellums  using clean technique.
# Add 3X volume of <<slider "RIPA Buffer" "RIPA Buffer" "RIPA Buffer">> w/ Protease inhibitors and phosphatase inhibitors 1 and II.
# Homogenize with epi tube pestles (blue- found at Kaye's bench)
# Spin for 4 minutes at 14K in tabletop centrifuge
# Transfer the supernatant to a new tube
# Snap freeze in liquid Nitrogen
# Store in -80C until ready to quantitate and/or run Western gel
!Purpose of this PCR is to amplify GalkPk2 homology fragment for initial targeting of the Pk2 BAC.

|<<tiddler ./ReactionTemplate>> | <<tiddler ./PCRConditions>>|
Notes:  mix for 4 reactions started and then split for use of buffer with and without Mg++.  2 reactions with Mg were used to amplify pGalK template (@2ng/ul). Of the 2 reactions without Mg, one was used to amplify template the other remained a negative control for the PCR

<<tiddler 122807AgaroseGelInstance>>

<part ReactionTemplate hidden>
|>|!Reaction Template|
|Primer 1 Pk2Galk5 (100uM) 	|(0.5ul)	  	2|
|Primer 2 GalKlinkPk2 (100uM)	|(0.5ul)		2|
|>||
|DNTPs   (10mM)|(1ul)		4|
|10X PCR Buffer	|(5ul)		10ul 10ul|
|>||
|Expand HighFidelity	|(0.5ul)		1 1|
|>||
|DdH20		|(41.5ul) 	83 83|
|>||
|pGalK plasmid (1:10)     1ul each well|
|			|(50ul) 		1ul|
|Number of reactions _ 4 _|
</part>

<part PCRConditions hidden>
|>|!PCR Conditions|
|94C |2minutes denat|
|>|35X|
|  94C |30 sec denat|
|  59C |30 sec anneal|
|  72C |90 sec extend|
|>||
|72C   |7 min extension|
|>|4 C hold|
</part>

Agarose Gel run:
1XTBE 0.8%Agarose run at 60V for 1hr then 80V for 1hr then 100V for 1hr

Samples:
|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|
|100bp ladder||pk2GalK PCR|pk2GalK PCR|pk2GalK PCR||||pk2GalK PCR w/o Mg|pk2GalK PCR w/o Mg||||- control|

<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/122807AG001.jpg" width="240" height="160" /></a></html>

No bands for PCR without Mg or negative control.  1.3kb band very prominent in the w/ Mg PCR Reaction.
These 3 bands were cut out and stored for gel purification.
!BAC minipreps (Recombineering Protocol)
3 colonies from RPCI-23-326K4 and 2 colonies from RPCI-24-138B22 BAC clones were grown up and miniprepped as follows:

#For BAC minipreps (1-1.5 mg) we use the following protocol: 5 ml overnight LB culture with chloramphenicol (15 ml Falcon tube) is pelleted for 7 min. at 6,000 RPM (3000g) (aliquoted 1.6mls per epi tube in a tabletop centrifuge)
#supernatant removed and pellet dissolved in 250 ml buffer P1 (miniprep kit, Qiagen) 
#250 ml P2 buffer is added, followed by mixing by inversion and incubation for <5 min at room temperature. 
#Add 250 ml N3 buffer, followed by mixing and incubation on ice for 5 min. 
#The supernatant is cleared by two rounds of centrifugation at 13,200 RPM for 5 min. in a tabletop centrifuge. Each time the supernatant is transferred to a new tube. 
#DNA is precipitated by adding 750 ml isopropanol mixing and incubating on ice for 10 min.
#Centrifuged for 10 min. at 14K RPM to collect DNA pellet
#The pellet is washed once in 70% ethanol (500ul and respun 5 minutes 14K) and the airdried pellet
is dissolved in 50 ul TE. 


40 ul (approximately 1 ug) can be used for restriction
analysis in a 50 ul reaction, and 1 ul can be used as template for PCR
analysis or for transformation of electrocompetent bacteria.
Cut out gel and weight gel slice (380mg)
Add 3X volume QG buffer (1140ul)
Incubate at 50C for 10 minutes (vortexing every 2-3 minutes)
Optional (Add 1X volume isopropanol (for >4kb fragments or <500bp))
Apply solution to Qiagen Spin column (750ul at a time)
Spin 1 minute 14K
discard supn't
Apply 750ul PE to column, allow to stand 1 minute
Spin 1 minute 14k
Empty eluate and spin again
Added 40ul ddH20 to column, let stand 1 minute and spin 1 minute 14K
Quantitate yield -- 56ng/ul
|  |1 |2 |3 |4 |
|A |  |  |  |  |
|B |  |  |  |  |
|C |  |  |  |  |
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Restriction Digest of 8/6 Gigapreps of [[pMD2.VSVg]] with EcorI and KpnI,and  [[pCMVdeltaR8.74]] with EcorI KpnI to determine plasmid integrity
Transfection of [[pk2shRNA2]] and [[pRNATinH1.4/LentiTomato]] using Calcium phosphate and lipofectamine in 8 large 15cm plates (2 for each construct in each condition)

!!transfection for lentiviral production via Lipofectamine
Add 50ul Lipofectamine to 450ul OptiMEM allow to complex for 5-20 minutes (Tube A)
Mix:
##|Tube B| 16 ug transfer vector + 12 ug packaging vector + 3 ug envelope vector + OptiMEM to 500 ul |
and complex  Tube A with Tube B for 25 minutes at RT
##Add 3mls medium and add mixture along with chloroquine to final concentration of 25uM dropwise to the plates (remove medium first)
## Criss-Cross Agitate the plates every 15 minutes for 1-2 hours and then add medium up to 16mls (enough to barely cover the plate)
## Change medium at 6-12hrs post transfection.


#transfection for lentiviral production via Calcium Phosphate

Use 2 X 15 cm plate per virus [[pRNATinH1.4/LentiTomato]] and [[pk2shRNA2]].  

## For 15 cm plates, seed 6.0 x 106 cells in 20 ml 18-24 hrs before transfection. Cells should be about 75% confluent at the time of transfection.
## Reduce volume of plates by pipetting off all media from the plates.
## Mix DNA with cell culture grade water, quickly vortex at low setting.
       
|Lenti in 15 cm dish: 16 ug transfer vector + 12 ug packaging vector + 3 ug envelope vector + water to 900 ul |

   Use polypropylene 15 ml Falcon tubes for 15 cm plates to mix reagents.

## Proceed with each transfection mix individually: add 50 ul(100ul CaCl2) of 2.5M CaCl2, vortex gently.
## Add 500 ul of 2X HBS to the mixtures (10 cm plates) or 1 ml (15 cm plates) with constant bubbling.  Bubbles are being constantly delivered to the bottom of the tubes with a pasteur pipette in an automatic pipet aid.
## Double the volume of the tube with medium to 4ml
## Add chloroquine to each tube to a final concentration of 25 uM (make a 50 mM stock, store at -20C), gently swirl plate,
## Add transfection mixture to plate dropwise, gently swirl around. Microscopic examination should reveal very fine black particles.
## Criss-Cross Agitate the plates every 15 minutes for 1-2 hours and then add medium up to 16mls (enough to barely cover the plate)
## Change medium at 6-12hrs post transfection.

![[Results]] and <<tag ImageS "Image">>:

!!081307AG1 Gel:
|Lane 1|2|3|4|5|6|7|8|
|1kb+|Uncut [[pMD2.VSVg]]| KpnI cut pMD2| EcorI cut pMD2| Uncut [[pCMVdeltaR8.74]]|KpnI cut delR| EcorI cut delR| 1kb+|
<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/081307AG1.jpg" width="240" height="160" /></a></html>

![[Discussion]]:
The plasmids from the Giga prep appear intact and give the right bands (pMD2 expected bands would be 1.61 and 1.68kb fragments from KpnI or EcorI cutting (2 sites each in the plasmid as well as a higher band near 4kb)) ([[pCMVdeltaR8.74]] - linearizes with either enzyme indicating a single site and a size greater than 10kb)
!@@font-size:18pt;''[[Rationale]]:''@@

!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@

continued immunostaining: (Primary antibody incubation started today)
<<slider "121207ImmunoStaining" "121207ImmunoStaining" "121207ImmunoStaining">>

injected P3 pups (litter L0065 and L0066 (combined into 1 litter with BC010)) 12 injected with pk2shRNA2LV 11/14 batch
<<slider "121307PupCerebellarInjection" "121307PupCerebellarInjection" "121307PupCerebellarInjection">>

also isolated cerebellar tissue for protein from P3 pups.
<<slider "121307TissueProteinExtraction" "121307TissueProteinExtraction" "121307TissueProteinExtraction">>

!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
ImmunoStainingInstance commenced with CD-1 P0-P14 sections with overnight block 4C 

![[Results]]:
There is clear tomato fluorescence of HeLa cells infected with 10ul of concentrated virus.  However there is not fluorescence with 1ul of concentrated virus or 1,10ul of miniprep supernatant.  Unfortunately due to lack of camera in the lentiviral room, we cannot document the fluorescence from these experiments.  

![[Discussion]]:
We will tomorrow lightly fix the cultured HeLas to image under the dissecting scope to view flourescence and capture images of the infection (and give additional time for infection to result in expression of reporter tdtomato.
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Thaw 293T's for lentiviral transfection (one vial 1/3large plate into 2 large plates)
MixedCerebellarCulture of P9 pup cerebella (3 CD-1's used)


![[Results]]:



![[Discussion]]:
We have plated out P9 cerebella (mixed cell culture) in order to assess PCP protein presence after 2 days in culture.  If this indeed works we can examine by immunohistochemistry and Western blot, localization and quantitation of shRNA knockdown of the various components.  We will run the Western blot after sample collection on Friday.
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Media changed on lipofectamine and calcium phosphate transfection plates for lentiviral production (started yesterday)

![[Results]]:

Fluorescence on the calcium phosphate plates was much better than previously seen (likely secondary to the low volume initial transfection)


![[Discussion]]:
!@@font-size:18pt;''[[Rationale]]:''@@

!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@
immunostaining washes and secondary incubation was postponed due to the lack of Alexa 697
!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Cerebellar culture (P9 from Eunice) infection with 15ul of maxiprepped Lentivirus (X4)
Primary antibody incubation of P0-P14 pup brain section time course:
VanglCterm (1:200) + Calbindin (1:300)
Prickle1 (1:500) + Calbindin (1:300)
Prickle2 (1:500) + Gamma-Tubulin (1:300)

Passed HeLa cells and 293T 1:12 for propagation


![[Results]]:



![[Discussion]]:
![[Rationale]]:
prep of plasmids for lentiviral construct, collection of p10 p12 brains for immunohisto experiments and prep of plasmid for FRT recombination of ES cell clones.
![[Stocks]]:

![[Methods]] ([[Protocols]]):
transformation of [[pCAGGS-Flpe]], 
[[pRNATinH1.4/Lenti]]
[[pRNATinH1.4/LentiTomato]]
[[pk2shRNA1]]
[[pk2shRNA2]]
[[pk2shRNA3]]
for glycerol stock and growth and prep for transfections

also streaked plates with 
[[pCMVdeltaR8.74]]
[[pMD2.VSVg]]
and [[pMDL]] [[pRSV-Rev]] and [[pCMV-VSVg]]

![[Results]]:



![[Discussion]]:
We are reprepping plasmids for lentiviral construction to generate large amounts of pure plasmid for transfection.  
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):


![[Results]]:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Protein Lysis of MCC P9
Passed 293T/17 cells 1:15
Started 11 plasmid cultures for mini/maxi prep tomorrow

![[Results]]:



![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Southern Blot gel from yesterday taken down and 
Acid nicked 10 minutes 
NaOH denatured 30minutes X 2
Transferred to Hybond membrane o/n


![[Results]]:
Enzyme cutting of the genomic DNA from Vangl1 ES clones after Flp expression was poor:
<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/081607AG1.jpg" width="480" height="320" /></a></html>


![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Completion of secondary incubation with 2nd antibodies and mount and coverslipping of slides. (see table)
Harvest of cerebellar granule culture secondary to lentiviral infection (for protein analysis)
|Slide Label|Primary Antibody's|Secondary Antibody|
|A1-29|R-Vg1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|A2-28|R-Vg1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|A3-21|R-Vg1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|B1-27|R-Vg1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|B2-21|R-Vg1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|B3-22|R-Vg1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|A1-30|R-Pk1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|A2-27|R-Pk1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|A3-22|R-Pk1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|B1-28|R-Pk1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|B2-22|R-Pk1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|B3-21|R-Pk1, Mcalb|Alexa-488@M, Alexa-594@R, Hoescht|
|A1-28|R-Pk2, MG-Tub|Alexa-488@M, Alexa-594@R, Hoescht|
|A2-29|R-Pk2, MG-Tub|Alexa-488@M, Alexa-594@R, Hoescht|
|A3-20|R-Pk2, MG-Tub|Alexa-488@M, Alexa-594@R, Hoescht|
|B1-26|R-Pk2, MG-Tub|Alexa-488@M, Alexa-594@R, Hoescht|
|B2-20|R-Pk2, MG-Tub|Alexa-488@M, Alexa-594@R, Hoescht|
|B3-23|R-Pk2, MG-Tub|Alexa-488@M, Alexa-594@R, Hoescht|
![[Results]]:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
inoculation of 300ml cultures (in 2X YT) for growth and maxiprep of DNA. used 20ul of o/n 5ml culture from yesterday to start cultures of following plasmids:
[[pCAGGS-Flpe]], 
[[pRNATinH1.4/Lenti]]
[[pRNATinH1.4/LentiTomato]]
[[pk2shRNA1]]
[[pk2shRNA2]]
[[pk2shRNA3]]
[[pCMVdeltaR8.74]]
[[pMD2.VSVg]]
and [[pMDL]] [[pRSV-Rev]] and [[pCMV-VSVg]]
growth allowed for 13hrs at 30C then spun at 6300rpm 5minutes to pellet bacteria (sup drained and pellets frozen at -80C until we are able to prep DNA)

![[Results]]:



![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Probe generation of exon4 Vangl1 internal probe (RTG beads, w/ G30 Spin Columns) (used 4ul of gel purified fragment as template: see gel below)
Viral spin 20000rpm, 2hr20min to collect pellet.
Resuspended in 50ul HBSS o/n X2


![[Results]] and <<tag ImageS>>:
100bp ladder and 8ul of gel purified PCR of Vangl1Exon4.
<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/081707AG001.jpg" width="80" height="120" /></a></html>



![[Discussion]]:
!@@font-size:18pt;''[[Rationale]]:''@@

!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@
!!!<<slider "121207ImmunoStaining" "121207ImmunoStaining" "121207ImmunoStaining">>
!!!<<slider "121707TissueProteinExtraction" "121707TissueProteinExtraction" "121707TissueProteinExtraction">>
!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:
We are undertaking the first (of probably many) mouse pup injections with maxiprepped lentivirus to determine the effects of PCP component knockdown.
![[Stocks]]:

![[Methods]] ([[Protocols]]):
PupCerebellarInjection--  Injected P3 Pups with lentivirus with Tomato reporter-WTshRNA control (4 pups- marked with red permanent marker), and Tomato reporter- mPk2shRNA2 (10 pups- marked with black permanent marker), 0.5ul per injection site at a rate of 0.2ul/min (2.5 minutes per injection site)  Many were done with 2 injection sites.

![[Results]]:
Priming of the tubing and capillary and syringe was best accomplished using a 27gauge needle loaded with paraffin oil. Unfortunately we rewarmed the tomato injected pups for too long (greater than 10minutes each) and they likely died because of this.


![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
PupCerebellarInjection Round 2

![[Results]]:
Acute survival of the pups was much improved.  my iPhoto library has pictures of the last 7 pups that were injected (2 with pk2shRNA2- marked in black and 5 with tdtomato WT virus-marked red) taken with the microscopic lens on the lab digital camera.


![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:
[[pk2shRNA2LV]] [[pRNATinH1.4/LentiTomatoLV]]

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Washed Southern Blots 
Rinse with low stringency wash (LSB 150mM NaPhosphate pH7.2,0.1% SDS)
Wash 20min LSB 60C
Wash 20min X 2 60C HSB (HSB- 30mM NaPhosphate pH7.2, 0.1%SDS)
!! Cell Culture
3 15cm plates at 80% confluence trypsinized and plated onto 13 15cm plates (1ml of 30mls total plated onto each plate: @ 1:10 dilution, 13th plate plated at 1:30 dilution for propagation)
These will be used to generate a larger batch of lentivirus (wild-type and pk2shRNA2) for testing in vivo
Also from prior batch of lentivirus

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
!@@font-size:18pt;''[[Rationale]]:''@@

!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@
<<slider "121907TissueProteinExtraction" "121907TissueProteinExtraction" "121907TissueProteinExtraction">>

<<slider "121907InjectedCerebellumDissection" "121907InjectedCerebellumDissection" "121907InjectedCerebellumDissection">>

!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:

!
!<<tag Stocks>>:

!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
RandomPrimeLabeling of [[pk1Ex45G]] and hybridization to pk1cko putative positive ES clone Southern blot (AflII-BamHI digest).
[[SouthernBlot]] from Day 3 prehybridization. 2.5 hour prehybridization followed by 7PM-- o/n hybridization with 50ul radiolabelled [[pk1Ex45G]] probe in 25mls of SouthernBlotHybridizationSolution
!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
!2.5 M CaCl2: 

3.68 g CaCl2 (MW = 147.02)

dH20 to 10 ml
Filter sterilize into 15ml conical tube. Store at -20C
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
PupCerebellarInjection with [[pRNATinH1.4/LentiTomatoLV]] and [[pk2shRNA2LV]]


![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Split HeLa and 293T cells 1:20 
Analyzed P10 cerebellum IHC from Pk1-Calbindin-HoeschtDye (some Pk1 purkinje cell staining detected)


![[Results]]:



![[Discussion]]:
![[Rationale]]:
pk1cko Southern Blot continuation
!
!<<tag Stocks>>:

!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Southern Blot washes (day 4) performed and blot was opposed to film for exposure and imaging.
!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
All tiddlers (entries) for the year 2007
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
#transfection for lentiviral production via Calcium Phosphate

Use 2 X 15 cm plate per virus [[pRNATinH1.4/LentiTomato]] and [[pk2shRNA2]].  

## For 15 cm plates, seed 6.0 x 106 cells in 20 ml 18-24 hrs before transfection. Cells should be about 75% confluent at the time of transfection.
## Reduce volume of plates by pipetting off all media from the plates.
## Mix DNA with cell culture grade water, quickly vortex at low setting.
       
|Lenti in 15 cm dish: 16 ug transfer vector + 12 ug packaging vector + 3 ug envelope vector + water to 900 ul |

   Use polypropylene 15 ml Falcon tubes for 15 cm plates to mix reagents.

## Proceed with each transfection mix individually: add 50 ul(100ul CaCl2) of 2.5M CaCl2, vortex gently.
## Add 500 ul of 2X HBS to the mixtures (10 cm plates) or 1 ml (15 cm plates) with constant bubbling.  Bubbles are being constantly delivered to the bottom of the tubes with a pasteur pipette in an automatic pipet aid.
## Double the volume of the tube with medium to 4ml
## Add chloroquine to each tube to a final concentration of 25 uM (make a 50 mM stock, store at -20C), gently swirl plate,
## Add transfection mixture to plate dropwise, gently swirl around. Microscopic examination should reveal very fine black particles.
## Criss-Cross Agitate the plates every 15 minutes for 1-2 hours and then add medium up to 16mls (enough to barely cover the plate)
## Change medium at 6-12hrs post transfection.

Matings for Dragana set up today in the morning.

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:
restart lentiviral production
![[Stocks]]:

![[Methods]] ([[Protocols]]):
Thawed one vial of [[HEK293T/17]] cells onto 2 10cm plates and incubated o/n

![[Results]]:
Amazingly, 9 live @P14 mouse pups were in the injected cage performed 5/10/07.  I only injected 8 and one seemed just about dead and wasn't warming well but I left him in the cage anyway.  Today when I look 8 look like @P14 pups (expected age) and one looks like a major runt.  It may be the half-dead one was the runt or the mom had an additional pup later (this is difficult to determine)



![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):

!!Transfection protocol (Day 1)

Using 5 15 cm plates (each transfection refers to amounts for 1 plate).  

   1. 293T Cells are about 85% confluent at the time of transfection.
   3. Mix DNA with cell culture grade water, quickly vortex at low setting.
|!Lenti in 15 cm dish| 16 ug transfer vector|  12 ug packaging vector | 3 ug envelope vector | water to 893 ul|
 [[pk2shRNA2]] used to transfect cells.

   Use Falcon2058 (FACS) tubes for 10 cm; Falcon2059 or regular 15 ml Falcon tubes for 15 cm plates.

   4. Proceed with each transfection mix individually: add 100 ul of 2.5M CaCl2, vortex gently.
   5. Add 0.5ml of 2X HBS to the mixtures (10 cm plates) or 1 ml (15 cm plates) with constant bubbling.  Bubbles are being constantly delivered to the bottom of the tubes with a pasteur pipette in an automatic pipet aid.
   6. Add chloroquine to each plate to a final concentration of 25 uM (make a 50 mM stock, store at -20C), gently swirl plate,
   7. Add transfection mixture to plate dropwise, gently swirl around. Microscopic examination should reveal very fine black particles.
   8. Incubate plates at 37oC, 5% CO2 for 12-16 hours, then fresh media with 5mM Na-butyrate will be exchanged.

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:
Restart of cultures for viral prep and titer checking

![[Methods]] ([[Protocols]]):
Thawed one vial of HEK 293T/17 cells (1/3 10cm plate) onto 2 10cm plates
Streaked two pk2 BAC clones onto LB Chloramp plates for growth and prep
![[Results]]:

![[Discussion]]:
We have many litters of CD-1 pups for injection, cerebellar culture preparation, and for brain collection for IHC.  We are in the process of planning this resource allocation for upcoming experiments
![[Rationale]]:

![[Stocks]]:
frozen cells for 11 putative positive ES cell clones for vangl1 cko in [[BenchFreezer]]

![[Methods]] ([[Protocols]]):
EthanolPrecipitation of repeat ligation of celsr2 shRNA into [[pRNATinH1.4/LentiTomato]]
Transformation by both Heat shock (Stbl3 cells) and electroporation (Stbl4 cells)of the ligation performed 
![[Results]]:



![[Discussion]]:
![[Rationale]]:
 Today we restart cultures of 293Ts to commence viral preparation (LentiVirus) for infection of cerebellar neurons
![[Stocks]]:

![[Methods]] ([[Protocols]]):
Thawed 1/3rd of small 10cm plate frozen stock yesterday and today we monitored these cells for growth and attachment
We transformed [[pCMVdelR8.74]] and [[pMD2-VSVg]] into STBL3 cells for propagation and growth/prep

![[Results]]:
Growth of K4 and B22 prickle2 BACs was initiated (two clones each) into 5mls LB-chlor 12.5ug/ml o/n at 30C for miniprep and large scale prep.
transformation for pMD2-VSVg and pCMVdelR8.74 went fine. 


![[Discussion]]:
![[Rationale]]:
continue lentiviral building
![[Stocks]]:

![[Methods]] ([[Protocols]]):
LigationInstance

![[Results]]:
Once again no colonies on the celsr2 shRNA ligation into the tomato lentiviral vector. Both using Stbl3 and Stbl4 electrocompetent cells no  colonies appear on the plate.  This likely means we must repurify BamHI-XhoI cut [[pRNATinH1.4/LentiTomato]] vector for religation of celsr2 dsoligos


![[Discussion]]:
![[Rationale]]:
prep pk2 BAC for manipulation in SW105 cells

![[Stocks]]:
Prickle2 genomic BACs
RP23-326K4
RP24-138B22
![[Methods]] ([[Protocols]]):
BAC miniprep of above BACs
glycerol stocks of above BACs
P0 mouse injections (trypan blue dye only for practice)
LB-Amp culture growth ([[pMD2-VSVg]]) and [[pCMV-delR8.74]]
Passage of HEK293T/17 cells (1:10)
![[Results]]:
pMD2-VSVg transformation plate was grossly overgrown thus we replated 5ul (instead of 50ul) 
Thawed aliquot of HEK293T/17 cells were examined (two plates).  One plate was contaminated with fungal growth and was discarded.  The second plate was passed 1:10 onto 4 new 10cm plates with fresh medium and allowed to grow at 37C 5% CO2

![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Passed 293T 1:25 onto large 15cm plates (6) for later transfection
Passed Hela cells 1:10 for later use to determine viral titers.
![[Results]]:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Restriction

![[Results]]:
I've made several modifications to the TiddlyWiki notebook (this one) today to make it more functional (automatic template opening for New Labbook Entry and incorporating Orchestrate into an iframe to embed here for task management). 


![[Discussion]]:
The TiddlyWiki is INCREDIBLY versatile and deserves a careful look by everyone looking to keep track of data.
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Using cell factory (4X 632 cm2= @2500cm2) plates to produce  [[pRNATinH1.4/LentiTomato]]   

   1. 293T Cells are about 75-90% confluent at the time of transfection (visual confirmation only).
   3. Mix DNA with cell culture grade water, quickly vortex at low setting.
|!Lenti in 15 cm dish| 250 ug transfer vector|  200 ug packaging vector | 50 ug envelope vector | water to 9mls|
[[pRNATinH1.4/LentiTomato]]  used to transfect cells.

   Use Falcon2058 (FACS) tubes for 10 cm; Falcon2059 or regular 50 ml conical tube for Cell Factory.

   4. Proceed with each transfection mix individually: add 1ml of 2.5M CaCl2, vortex gently.
   5. Add 10mls of 2X HBS  with constant bubbling.  Bubbles are being constantly delivered to the bottom of the tubes with a pasteur pipette in an automatic pipet aid.
   6. Add 100ul 50mM chloroquine to 180mls of dMEM complete to give a final concentration of 25 uM (make a 50 mM stock, store at -20C)
   7. Add transfection mixture to media dropwise, swirling container. Add 200mls of transfection medium to cell factory.
   8. Incubate plates at 37oC, 5% CO2 for 12-16 hours, then fresh media will be exchanged.

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
|  |1 |2 |3 |4 |5 |6 |
|A |  |  |  |  |  |  |
|B |  |  |  |  |  |  |
|C |  |  |  |  |  |  |
|D |  |  |  |  |  |  |
![[Rationale]]:
continue lentiviral preparation planning 
![[Stocks]]:
glycerol stocks:
[[pCMV-delR8.74]]
[[pMD2-VSVg]]
minipreps:
[[pCMV-delR8.74]]
[[pMD2-VSVg]]

![[Methods]] ([[Protocols]]):


![[Results]]:



![[Discussion]]:
![[Rationale]]:
Isolating DNA from ES clones to determine the Flp recombined alleles. Assessing lentiviral injection pups for presence of tomato fluorescence.
![[Stocks]]:

![[Methods]] ([[Protocols]]):
ES Cell Lysis of new Flp expressed ES clones for Vangl1 knockout
Dissection of 2 P10 pups (s/p lenti injection from Experiment 2 7/18/07)
![[Results]]:
Both brains injected with lentivirus appear to show NO fluorescence under the dissecting scope.


![[Discussion]]:
While disappointing the viral result is to be expected given the likely low titer of the first large batch isolated.  We plan to reisolated virus in order to repeat these experiments.  Plates should be ready to transfect Saturday most likely (possibly Friday) We will monitor these cultures to determine optimal transfection time (70-80% confluent)
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
cryostat section of P2, P6, P10, P14 pup cerebellums (10um sections 48 slides per set)  

![[Results]]:
B2 completed today


![[Discussion]]:
![[Rationale]]:
run gel of plasmid restriction digest test/verification
![[Stocks]]:

![[Methods]] ([[Protocols]]):
passed 293T/17 cells for later transfection
[[ESCellLysis]] on 11 6-well plate expansion colonies (Vangl1 cko ES cell targeting clones)

![[Results]]:
Row 1 of the gel:
|!1 1kb|2 pk2BAC K4-1 <br>EcorI|3 pMDL <br>EcorI|4 pk2BAC K4-1<br>StuI|5 [[pRNATinH1.4/Lenti]] <br> StuI|6 pk2BAC K4-1 <br> uncut|7 pMDL <br> uncut|8 [[pRNATinH1.4/Lenti]] <br> uncut|-|
|-|9  pk2BAC K4-1 <br>EcorI|10 pRSV-Rev <br>EcorI|11  pk2BAC K4-1 <br>StuI|12 [[pRNATinH1.4/LentiTomato]] <br> StuI|13 pk2BAC K4-1 <br> uncut|14 pRSV-Rev <br> uncut|15 [[pRNATinH1.4/LentiTomato]] <br>uncut|-|
|-|16  pk2BAC K4-2 <br>EcorI|17 pCMV-VSVg <br>EcorI|18  pk2BAC K4-2 <br>StuI|19 [[pRNATinH1.4/LentiTomato]] EF <br> StuI|20 pk2BAC K4-2 <br> uncut|21 pCMV-VSVg <br> uncut|22 [[pRNATinH1.4/LentiTomato]] EF <br>uncut|!23 1kb|

Row 2 of the gel:
|!1 1kb|2 pk2BAC K4-2 <br>EcorI|3 [[pMD2.VSVg]]-1 <br>EcorI|4 pk2BAC K4-2<br>StuI|5 [[pk2shRNA1]] <br> StuI|6 pk2BAC K4-2 <br> uncut|7 [[pMD2.VSVg]]-1 uncut|8 [[pk2shRNA1]] <br> uncut|-|-|-|
|-|9  pk2BAC B22-1 <br>EcorI|10 [[pMD2.VSVg]]-1 <br>EcorI|11  pk2BAC B22-1 <br>StuI|12 [[pk2shRNA2]] <br> StuI|13 pk2BAC B22-1 <br> uncut|14 [[pMD2.VSVg]]-1 <br> uncut|15 [[pk2shRNA2]] <br>uncut|-|-|-|
|-|16  pk2BAC B22-2 <br>EcorI|17 [[pCMVdeltaR8.74]]-1 <br>EcorI|18  pk2BAC B22-2 <br>StuI|19 [[pk2shRNA3]] <br> StuI|20 pk2BAC B22-2 <br> uncut|21 [[pCMVdeltaR8.74]]-1 <br> uncut|22 [[pk2shRNA3]] <br>uncut|23 [[pCMVdeltaR8.74]]-2 <br>EcorI|24 [[pCMVdeltaR8.74]]-2 <br>Uncut|!25 1kb|

[img[__|http://ashvin-imac.stanford.edu/TWLabNotebook/070525AG1.jpg]]

![[Discussion]]:

Based on the above gel we can proceed with EF maxi prep of [[pCMVdeltaR8.74]] and [[pMD2.VSVg]] for use in packaging lentivirus.  Since we are running out of pk2shRNA1-3 Vectors (especially pk2shRNA2) we must retransform these plasmids for growth and DNA EF prep.  
![[Rationale]]:

!<<tag Stocks>>:
[[pk2shRNA2LV]]
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
viral supernatant spun down for collection 22200rpm 2hrs 4C after sup spun at 1000k 5min to collect cells and debris, 0.45um filtered and then ultracentrifuged with 2ml 20% sucrose cushion at the bottom (3 tubes @ 33mls each for 100mls of sup)
293T cells passed onto 12well 40ul and 6 well 40ul, and 1ml to a new 15cm (1:20) and rest to Cell Factory in 300ml volume.

media changed on CellFactory production of [[pRNATinH1.4/LentiTomatoLV]] with 300mls of DMEM-Complete + 5mM Na Butyrate

![[Results]] and <<tag ImageS>>:
Ubiquitous fluorescence seen on 5X15cm plates for [[pk2shRNA2LV]] so viral concentration was continued.



![[Discussion]]:
Will collect virus from CellFactory production of [[pRNATinH1.4/LentiTomatoLV]] on the 27th early.
![[Rationale]]:
attempting to hone protocols for mixed cerebellar cultures (to develop shRNA target validation assays)
![[Stocks]]:
made up OvoMucoid

![[Methods]] ([[Protocols]]):
MixedCerebellarCulture
	Plated 200ul of P1 cells and 100ul of P5,P7,P8, and P11 mixed cerebellar cell preps on 300ul NeurobasalSupplementedMedia.  
![[Results]]:



![[Discussion]]:
	We are prepping cerebellar cell culture from various timepoints in a 24-well format to test whether Western blots (for at least Prickle2) can be performed in this format.  The prep took quite a long time (because there were 6 animals of P1, 5 P5, 5 P7, 4P8 and 4 P11 animals for a total of 24 animals to be sac'ed and cerebellums isolated.  Thus a 6 hour prep ensued.  We should be able to trim this down when we perform it with fewer animals per time point and are able to do it more rapidly.
!@@font-size:18pt;''[[Rationale]]:''@@

!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@
Thawed pk2BAC K4 and B22 clones ontoi LB-Cloramphenicol plates (5ul on each plate added before streaking colonies)

<<slider "122607PCRInstance" "122607PCRInstance" "122607PCRInstance">>
!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Dissect pup brains to examine for fluorescence at the injection site.
Continue DNA isolation from ES cell clones.

![[Results]]:



![[Discussion]]:
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Prepared ES cell DNA from lysis of 11 vangl1 cko clones.  Allowed resuspension to proceed overnight

![[Results]]:



![[Discussion]]:
![[Rationale]]:

!
!<<tag Stocks>>:

!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):

!Primary Antibody Incubation (Immunostaining of cerebellum developmental timecourse with pk2,pk1,vangl antibodies)
1. Remove selected slides with desired sections on them and allow to equilibrate to room temperature.  Remove slides from holder and place in AntibodyAmplifier  
2. Block in <<slider PBSPlusSlider "PBSPlus" "PBSPlus" >> for 1 hour at room temperature 3mls per slide.
3. Incubate sections in _ _ _ _ _ _ _ _  primary antibody (_ _ _ dilution 1:500-1:1000) in [[PBSPlus]] at 4C overnight
4. Rinse 4 times for 10 minutes each with PBS
VanglCterm (1:2000) + Calbindin (1:4000)
Prickle1 (1:5000) + Calbindin (1:4000)
Prickle2 (1:5000) + Calbindin (1:4000)


!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
[[LentiviralInfection]] using newly isolated [[pk2shRNA2LV]] to titer on 293T in 12Well and 6Well formats.
12Well Infection scheme:
|400ul M+PB 10^^-2^^ 10ul|400ul M+PB 10^^-3^^ 10ul|400ul M+PB10^^-4^^ 10ul|400ul M+PB 10^^-5^^ 10ul|
|200ul M+PB+dNTPs 10^^-2^^ 10ul|200ul M+PB+dNTPs 10^^-3^^ 10ul|200ul M+PB+dNTPs 10^^-4^^ 10ul|200ul M+PB+dNTPs 10^^-5^^ 10ul|
|400ul M+PB+dNTPs 10^^-2^^ 10ul|400ul M+PB+dNTPs 10^^-3^^ 10ul|400ul M+PB+dNTPs 10^^-4^^ 10ul|400ul M+PB+dNTPs 10^^-5^^ 10ul|

6Well Infection Scheme:
|500ul M+PB 10^^-2^^ 10ul|500ul M+PB10^^-4^^ 10ul|500ul M+PB 10^^-5^^ 10ul|
|500ul M+PB 10^^-3^^ 10ul|500ul M+PB+dNTPs 10^^-4^^ 10ul|500ul M+PB+dNTPs 10^^-5^^ 10ul|
![[Results]] and <<tag ImageS>>:

![[Discussion]]:
Logic of infection schemes above were to test the enhancing capacity of dNTPs for transduction of 293T cells (and thus enhancing titer).  Also 4 dilutions 10fold each were used for determination of titer.  Optimally we might expect 50-100 cells infected with the 10^^-5^^ dilutions for 10^^10^^ TU/ml high titer virus.  We will see.
![[Rationale]]:
Preparations today for lentiviral production.

![[Stocks]]:

![[Methods]] ([[Protocols]]):
split Hela cells
split HEK 293T cells

![[Results]]:
Cerebellar preps appear viable though there is some cell debris.  We will 


![[Discussion]]:
!@@font-size:18pt;''[[Rationale]]:''@@

!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@
Inoculated cultures for B22 and K4 clones
!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Complete isolation of DNA from ES cell clones ESCellLysis
Thick section fixed brains to observe for tomato fluorescence
HeLa cells and 293T cells passed 1:40 for propagation
![[Results]]:
No fluorescence was noted on examination of thick (400um sections).



![[Discussion]]:
We will require production of lentivirus again for testing in vivo as likely the prior isolate was of low titer.
![[Rationale]]:

!
!<<tag Stocks>>:

!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Agarose Gel run of pk1cko clones H1 and H2 (XhoI-AflII) (1kb ladder, WT, pk1ckoH1, pk1ckoH2) repeated in duplicate
run overnight at 22V
!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
![[Rationale]]:

!<<tag Stocks>>:
[[pRNATinH1.4/LentiTomatoLV]] 1-1,1-2,1-3,1-4,1-5,1-6,1-7 (7ul aliquots of first resuspension) 1-A, 1-B, 1-C, 1-D (80ul aliquots of second resuspension in PBS).
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Viral Injection in vivo in L0032 litter of [[pk2shRNA2LV]] generated 9/25/07
Cerebellar mixed cultures P9 for later infection
Viral Isolation of [[pRNATinH1.4/LentiTomatoLV]]  (Centrifuge spins of 200mls of 300 total and resuspension in 2 batches- 100ul first then 400ul PBS)
![[Results]] and <<tag ImageS>>:
Injection sites for the 8 animals in L0032:
|Mouse #| y | z | weight |
|1|4.25|0.75|2.12g|
|2|3.75|0.3|2.62g|
|3|3.3|-.12|1.8g|
|4|3.7|0.31|2.25g|
|5|3.9|0.57|1.96g|
|6|3.65|0.99|2.35g|
|7|3.25|0.6|2.23g|
|8|3.65|2.3**|2.57g|
** unclear of exact position
0.3ul used for injection volume.  Target was cerebellar vermis. Tagging scheme  of mice: 1 2 3 4 (R forepaw pinky to pointer) 5 6 7 8 (L forepaw pinky to pointer)


![[Discussion]]:
![[Rationale]]:
Commencing Lentiviral miniprep for test on Hela cells, then cerebellar cultures
![[Stocks]]:

![[Methods]] ([[Protocols]]):
[[LentiMiniprep-v1.0]]
[[ESCellLysis]]

![[Results]]:
Transfection went uneventfully. See instance for details.  We will use the lentiminiprep virus to titer first on HeLa cells and then to infect mixed cerebellar cultures.  HeLa cells are growing nicely near 50% confluence now.  Will split onto 24 well plate likely tomorrow for prep for titer experiment.  15cm dishes with 293Ts are also growing nicely @ 25% confluence.  



![[Discussion]]:
Possibly Monday we can use the 293Ts to generate a larger scale prep of lentiviral particles for the pk2 shRNAs (+controls). Tomorrow we will isolate DNA from the ES Cell plates that are undergoing lysis overnight tonight.
!@@font-size:18pt;''[[Rationale]]:''@@
begin Pk2BAC targeting with GFP knocked in to create a fusion.  Transformation of pk2BACs into recombinogenic host strain SW105 and 106
!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@
<<slider "122807AgaroseGelInstance" "122807AgaroseGelInstance" "122807AgaroseGelInstance">>

<<slider "122807BACMiniprepInstance" "122807BACMiniprepInstance" "122807BACMiniprepInstance">>


!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Trial of CaPO4 transfection of 293Ts for lentiviral production LentiviralPrepLSEV
6 15cm plates transfected with:
3 with [[pRNATinH1.4/Lenti-tomato]] (2 with 3 packaging system - [[pMDL-VSVg]] [[
Streaked [[pCMVdeltaR8.74]] and [[pMD2.VSVg]] glycerol stocks for later growth and gigaprep (w/ Eric)
![[Results]]:



![[Discussion]]:
![[Rationale]]:
prep of DNA constructs for lentiviral isolation
![[Stocks]]:
[[pRNATinH1.4/Lenti]]
[[pk2shRNA1]]
[[pk2shRNA2]]
[[pCMVdeltaR8.74]]
[[pMD2.VSVg]]
![[Methods]] ([[Protocols]]):
CD-1 Mating setup
sectioned by cryostat A-1 set of blocks (P0,P4,P8,P12) with Eunice
finished maxipreps of plasmids

![[Results]]:



![[Discussion]]:
![[Rationale]]:
Southern Blot of pk1cko clones H1 H2 for confirmation of homologous recombination
!
!<<tag Stocks>>:

!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
SouthernBlot of pk1cko ES clones for confirmation of homologous recombination
Day 2: 
Take a picture of the gel with metric visible in the picture for later scaling back to determine positions of expected bands
Rinse in 0.25M HCl for 10minutes (dye will change to dark purple)
Rinse in ddH20
Rinse in 0.4N NaOH for 20minutes X 2 (with ddH20 rinse between)
Stack Gel with Hybond membrane (rinse in 2X SSC 1min first) then 4 layers Whatmann paper and then paper towels.
Add weight and transfer for @8hrs.

Remove stack, labeled blot (split into 2 identical blots) and rinsed membrane briefly in 2XSSC. 
Cross linked using autocrosslink feature on Stratalinker Crosslinker.

Prehybridization:
<<slider  "Prehybe" "Southern Blot Hybridization Solution -- High Stringency (Joyner Lab)" "">>
Add blot to bottle after rinse in 2XSSC using 25ml stripette to roll and unroll blot
Add prehybe buffer 25mls each bottle (same as hybe solution above without probe) and incubate at 60C for 1hr - o/n.
!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Isolation of viral particles for additional 65mls of supernatant [[pRNATinH1.4/LentiTomatoLV]] (spin and resuspened)
Split 293Ts for infection with [[pRNATinH1.4/LentiTomatoLV]] from 9/27 isolate and titering
Transfection of CellFactory with [[pk2shRNA2]].


![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:
continuing lentiviral prep
![[Stocks]]:
2ml supernatants from 6-well 293T transfection were saved today in LVTCFridge
cGFPLV042907
tomatoLV042907
pk2shRNA1LV042907
pk2shRNA2LV042907
pk2shRNA3LV042907
control042907

![[Methods]] ([[Protocols]]):
Cell passage of HeLa's (1:10, 1:20 onto 10cm plates and also 1:5 onto 24 well plate for titering)
Cerebellar culture protein lysate freezing (emptied wells and added 30ul PBS and 10ul 4X E-PAGE loading dye and froze at -80C)
Continued LentiMiniprep-v1.0 according to protocol (changed medium today at 24hrs post-transfection)
Continued ESCellLysis according to protocol with precipitation occuring now o/n

![[Results]]:
The 6 well clusters have nice fluorescence indicating nearly 100% transfection efficiency (finally!).  

![[Discussion]]:
Thus we changed media and anticipate performing a titer experiment and possibly infecting cerebellar cultures Tuesday
!@@font-size:18pt;''[[Rationale]]:''@@

!
!@@font-size:18pt;''<<tag Stocks>>:''@@
HAGalKPk2HAFrag
!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@
Gel purified GalKPk2HA fragment
<<slider "122907GelPurificationInstance" "122907GelPurificationInstance" "122907GelPurificationInstance">>
Made up 5X M63 and 5X M9 media
Innoculated RPCI-24-K4 BAC clone (in SW105 and SW106) into LB-chloramph and grown overnight
!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
Finished cutting second A block for immunohistochemistry (P0,P4,P8,P12)
Maxiprep in progress for shRNA clones and packaging vectors
![[Results]]:



![[Discussion]]:
![[Rationale]]:
attempt to define a modified developmental timecourse for vangl1, pk2, pk1 in mixed cerebellar cultures (by Western)
![[Stocks]]:
[[Anti-Pk2-new]]
[[Anti-pk1-old]]
[[Anti-pk1-new]]
[[Anti-Vangl1C-old]]

![[Methods]] ([[Protocols]]):
[[ePAGEgel]]-[[iBlot]]-[[WesternBreeze]]



![[Results]]:
The primary antibody incubation occurs overnight so results will be forthcoming tomorrow.


![[Discussion]]:

Today was lab meeting day for me.  I presented on the topic of the electronic laboratory notebook and use of TiddlyWikis to subserve this purpose.  Well-received I believe though my examples could have been a bit more concrete with use and definitions of tiddlers covered as well as 
![[Rationale]]:
!
!<<tag Stocks>>:
!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Southern Blot Continuation
Make probe: [[RadiolabeledRandomPrimeProbe]] using 5ul of pk1Ex45G and pk13LP each with one random primed labeling reaction (37C for 40minutes) Column purified per protocol and then added 50ul to 25mls of hyb solution replacing prehybe from last night.
Incubate at 60C o/n to hybridize

Secondary Antibody Incubation
4. Wash primary incubation with PBS for 10minutes X 4.
5. Incubate in secondary antibody (Alexa594-goat anti-rabbit IgG (pk1,pk2) Alexa 594-GantiRat (vgl1), 1:2000 Alexa-488 antiMouse 1:2000 (calbindin) in [[PBSPlus]] for 1 hour at room temperature in the dark
6. Rinse 4 times for 10 minutes each with PBSPlus
7. Counterstain with with a DNA dye (Hoescht 33342, DAPI etc) for 5 minutes at room temperature (1:1000 in PBSPlus)
8. Rinse 5 minutes in PBSPlus
9. Coverslip using Fluormount and store at 4C protected from light

Passed 80% confluent 293T (2 15cm confluent plates) 1:40 and 1:80 to new plates and the remainder of the 2 plates passed to CellFactory for additional viral preps (either Tomato or cGFP wild-type virus TBD later)

!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
infection of mixed cerebellar cultured cells with [[pRNATinH1.4/LentiTomatoLV]]


Infection of 293T cells for Titer.


![[Results]] and <<tag ImageS>>:



![[Discussion]]:
1.6g NaCl
76mg KCl
20mg Na~~2~~HP0~~4~~
1g HEPES  (Sigma-Aldrich H7006)
0.2g Glucose
ddH~~2~~0 to 100mls
bring pH to 7.05
filter through 0.22uM filter and aliquot and store at -80C
The quality of HEPES and pH of the solution are critical for good transfection efficiency
|Reagents     |                       mM [final]      |                        grams|
|Hepes, Na salt*                    |               50         |                              13|
|KCl                                             |         10       |                                0.76|
|Dextrose                                   |           12                            |           2.16|
|NaCl            |                                        280      |                              16.36|
|Na2HPO4x7H20                           |        1.5        |                              0.4 |

         1. Mix reagents in 900 ml MilliQ H2O using stir bar.
         2. Adjust pH to exactly 7.05 using concentrated HCl.
         3. Raise volume to 1 liter.
         4. Measure pH again, adjust to exactly 7.05 if necessary.
         5. Filter through 0.22 micron filter.
         6. Prepare 10-50 ml aliquots for storage at -20 or -80C, working stock can be stored at 4C for a few weeks.

-Hepes, free acid can also be used, just adjust amount to 50 mM final concentration, the pH will need to be adjusted with concentrated NaOH. 

![[Rationale]]:

![[Stocks]]:

![[Methods]] ([[Protocols]]):
15cm plate transfection of lentiviral constructs into 293T cells. (see instance LentiMaxiPrep-v1.0)
split 293T 1:10 and 1:5 for propagation of cells

![[Results]]:
293T on 15cm plates are nearly 80-90% confluent and look nice and healthy.  Thus we proceeded to transfection.  We used less pk2shRNA2 in the transfection


![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
PupCerebellarInjection - testing with Alexa 594 dye for cerebellar targeting
Inoculated 5ml starter LB cultures with 
[[pMD2.VSVg]] 
[[pCMVdeltaR8.74]]X2 
[[pk2shRNA2]] 
[[pRNATinH1.4/Lenti]] 
[[pRNATinH1.4/LentiTomato]] 
for later large culture inoculation for gigaprep

![[Results]]:



![[Discussion]]:
![[Rationale]]:

!
!<<tag Stocks>>:

!
![[Methods]] (<<tag Protocols>> <<tag Instances>>):
Southern Blot Washes:
rinse in LowStringencySBWash, then 60C for 30minutes
wash X 2 in HighStringencySBWash 60C for 30minutes each
Placed in apposition to film at -80C for exposure

!
![[Results]], <<tag ImageS>> and [[Discussion]]:



!
!Linked/Related Labnotebook Entries:
![[Rationale]]:
Southern digests for determination of recombinant ES cell clones for Prickle1 and Vangl1.
!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
[[RestrictionDigestInstance]] for digestion of clones.


![[Results]] and <<tag ImageS>>:



![[Discussion]]:
![[Rationale]]:

!<<tag Stocks>>:

![[Methods]] (<<tag Protocols>> <<tag Instances>>):
PCR of pk1cko template with primers to generate 

|<<slider pcrrxnmix1 PCRRxnMix-1-103107 "PCR Mix for 5' pk1 probe"  >>|<<slider pcrrxnmix2 PCRRxnMix-2-103107 "PCR Mix for 3' pk1 probe" >>|<<slider pcrcond PCRCond-103107 "PCR conditions for both reactions" >>|

Cell Culture:
293Ts from 10/25 passed 1:40 was passed again today from 20mls 0.5 and 1ml was passed to 15cm plates. 100ul was passed to each well of 12well plates and the remainder 16.5mls passed to a cell factory for later viral production.

Restriction digest of vangl1cko clones from yesterday were augmented with 0.5ul BamHI for further digestion (to run later tonight)
AflII was added (0.5ul) to the H1,H2 Pk1cko clones for later gel electrophoresis.

Gel Electrophoresis:
2 0.8% agarose gels were run with the following samples:
Gel A
|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|
|1kb|A1|A1-2|A2|A2-2|A3|A3-2|A4|A4-2|A5|A5-2|A6|A7|A8|A9|A9-2|A11|A11-2|A12|B1|B1-2|1kb|

Gel B
|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|
|1kb|B3|B3-2|B4|B5|B7|B8|B8-2|B10|C1|C3|C4|1-A6*|1kb|||1kb|H1-AflII-Bam|H2-AflII-Bam|1kb|
run overnight at 34V.

![[Results]] and <<tag ImageS>>:



![[Discussion]]:
Today we in earnest resume the lab notebook entry via Tiddlywiki after an interruption secondary to a hard drive malfunction.  This is now being kept on tiddlyspot to facilitate backup and universal access.
|  |1_ |2_ |3_ |4_ |5_ |6_ |7_ |8_ |9_ |10|
|A | | | | | | | | | |  |
|B | | | | | | | | | |  |
|C | | | | | | | | | |  |
|D | | | | | | | | | |  |
|E | | | | | | | | | |  |
For 50mls:
add 35mls 100% EtOH
to 15mls ddH20
|  |1_ |2_ |3_ |4_ |5_ |6_ |7_ |8_ |9_ |10|11|12|
|A | | | | | | | | | |  |  |  |
|B | | | | | | | | | |  |  |  |
|C | | | | | | | | | |  |  |  |
|D | | | | | | | | | |  |  |  |
|E | | | | | | | | | |  |  |  |
|F | | | | | | | | | |  |  |  |
|G | | | | | | | | | |  |  |  |
|H | | | | | | | | | |  |  |  |
Agarose Gel run:
1XTBE 0.8%Agarose run at 60V for 1hr then 80V for 1hr then 100V for 1hr

Samples:
|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|
|100bp ladder||pk2GalK PCR|pk2GalK PCR|pk2GalK PCR||||pk2GalK PCR w/o Mg|pk2GalK PCR w/o Mg||||- control|

<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/081307AG1.jpg" width="240" height="160" /></a></html>
ACCGGTATGGTGAGCAAGGGCGAGGAGG
TTTACCGGTATGGTGAGCAAGGGCGAGGAGG
rabbit antibody to use at 1:500 initially.
rabbit antibody to use at 1:500 initially.
rabbit antibody to use at 1:500 initially.  Elution 6,7,8 combination from Kay's 5/17/07 purification (1ul left currently)
rabbit antibody to use at 1:500 initially.
Stocks of Antibodies 
!BAC minipreps (Recombineering Protocol)
#For BAC minipreps (1-1.5 mg) we use the following protocol: 5 ml overnight LB culture with chloramphenicol (15 ml Falcon tube) is pelleted for 7 min. at 6,000 RPM (3000g) (aliquoted 1.6mls per epi tube in a tabletop centrifuge)
#supernatant removed and pellet dissolved in 250 ml buffer P1 (miniprep kit, Qiagen) 
#250 ml P2 buffer is added, followed by mixing by inversion and incubation for <5 min at room temperature. 
#Add 250 ml N3 buffer, followed by mixing and incubation on ice for 5 min. 
#The supernatant is cleared by two rounds of centrifugation at 13,200 RPM for 5 min. in a tabletop centrifuge. Each time the supernatant is transferred to a new tube. 
#DNA is precipitated by adding 750 ml isopropanol mixing and incubating on ice for 10 min.
#Centrifuged for 10 min. at 14K RPM to collect DNA pellet
#The pellet is washed once in 70% ethanol (500ul and respun 5 minutes 14K) and the airdried pellet is dissolved in 50 ul TE. 


40 ul (approximately 1 ug) can be used for restriction
analysis in a 50 ul reaction, and 1 ul can be used as template for PCR
analysis or for transformation of electrocompetent bacteria.
|FatherID:|CD-1 generic |MotherID1:|CD-1 generic |
|MotherID2:|_ _ _ _ _ _ _ |MotherID3:|_ _ _ _ _ _ _ |

!Date of Mating pair setup:
|Litter Date|Litter Size|
|4/21/2007 |9+ |

!potential uses: 
mixed cerebellar culture preparation
This is the freezer under my bench.  Tags and items here refer to contents of the freezer for ease of identification.
This macro allows you to define custom environments with a title that are auto-numbered along a tiddler. Each environment can be styled by defining two classes in your CSS, one for the all environment and another for the title. For this example check the BoxesStyleSheet.

<<box Theorem 'Given the integer //n//>2, the equation //x//^^n^^+//y//^^n^^=//z//^^n^^ has no positive integer solutions.'>>
<<box Example 'Let //X// and //Y// be random variables that . . .'>>
<<box Exercise 'Show that, if //X// and //Y// are independent random variables, then:
# ...
## ...
## ...
# ...'>>
<<box Theorem 'P(A or B)=P(A)+P(B)-P(A and B)'>>
The auto-numbering can be replaced by a label.

<<box Example 'Sorry, I have no space here for the demonstration...' '1 (//cont.//)'>>
Or you can simply skip the auto-numbering.

<<box Question 'Do you like these colorful boxes?' ' '>>
At last, the title can also be removed in the stylesheet.

<<box Frame 'Hey, where is my title? And why did you put me in this dark corner?'>>
/***
|''Name:''|BoxesPlugin|
|''Description:''|Creates custom numbered environments|
|''Version:''|1.1.0|
|''Date:''|Sep 18, 2006|
|''Source:''|http://www.math.ist.utl.pt/~psoares/addons.html|
|''Author:''|Paulo Soares (psoares (at) math (dot) ist (dot) utl (dot) pt)|
|''License:''|[[BSD open source license]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
***/
//{{{
config.macros.box = {counter: {}};

config.macros.box.handler= function(place,macroName,params) {
 if(params.length<2){return;}
 var number;
 if(!place.getAttribute('counting')) config.macros.box.counter={};
 place.setAttribute('counting',true);
 var env=params[0];
 var text=params[1];
 if(params.length==3) number=params[2];
 var p = createTiddlyElement(place,"div",null,env);
 var header = createTiddlyElement(p,"div",null,env+" envHeader");
 if(!number){
 if(!config.macros.box.counter[env]){
 config.macros.box.counter[env]=0;
 }
 number=++config.macros.box.counter[env];
 }
 wikify( env+" "+number, header);
 wikify( text, p);
}
//}}}
.hilite {
 font-weight: bold;
 background: #ffffcc;
 padding: 0.2em;
}

.Definição {
background: #fafafa;
border: 3px #999999 dashed;
padding: 0.5em;
width: 80%;
margin-left: auto;
margin-right: auto;
}

.Definição .envHeader{
border: none;
color: blue;
margin: 0 0 0.25em 0;
padding: 0;
font-family: arial;
font-size: 1.2em;
font-weight: bold;
width: 99%;
}

.Teorema {
border: 1px #666 dashed;
padding: 0.5em;
width: 55%;
margin-left: auto;
margin-right: auto;
}

.Teorema .envHeader{
background: none;
border: none;
color: blue;
margin: 0 0 0.25em 0;
padding: 0;
font-family: arial;
font-size: 1.5em;
font-weight: bold;
width: 100%;
}

.Theorem {
border: 1px #666 dashed;
padding: 0.5em;
width: 55%;
margin-left: auto;
margin-right: auto;
}

.Theorem .envHeader{
background: none;
border: none;
color: blue;
margin: 0 0 0.25em 0;
padding: 0;
font-family: arial;
font-size: 1.5em;
font-weight: bold;
width: 100%;
}

.Example {
background: #ffffcc;
padding: 0.5em;
}

.Example .envHeader{
background: none;
color: orange;
margin: 0 0 0.25em 0;
padding: 0;
font-family: arial;
font-size: 1.5em;
font-weight: bold;
}

.Exercise {
background: #e8ffd2;
padding: 0.5em 0.5em 0.5em 0.6em;
 border-top:solid #e8ffd2 1px;
 border-left:solid #e8ffd2 1px;
 border-bottom:solid green 2px;
 border-right:solid green 2px;
 -moz-border-radius: 1.0em;
width: 20em;
}

.Exercise .envHeader{
background: none;
border: none;
color: green;
margin: 0 0 0.25em 0;
padding: 0;
font-family: arial;
font-size: 1.5em;
font-weight: bold;
width: 100%;
}

.Frame {
background: #000000;
color: #ffffff;
padding: 0.5em 0.5em 0.5em 0.6em;
width: 20em;
margin-left: auto;
margin-right: 0;
}

.Frame .envHeader{
display: none;
}

.Question {
padding: 0.5em 0.5em 0.5em 0.5em;
background: #ffffcc;
font-size: 1.5em;
}

.Question .envHeader{
margin-bottom: 0.25em;
color: red;
font-family: arial;
font-size: 1.5em;
font-weight: bold;
border: 2px red solid;
text-align: right;
}
Pups of appropriate age are transported to the dissection room in a covered container (an empty P1000 pipet-tip box works great for this with dividers composed of cut rackliners/guides)
Pups are decapitated quickly and cerebellum/brains are dissected as follows:
a. Hold nose with large forceps and insert the tip of the small scissors into the foramen magnum.
b. Cut along base of the skull to the ear, make a right turn across the top of the skull to the other ear and return to the foramen magnum.
c. Remove the flap of skin and skull and remove the brain with forceps gently.
d. Deposit in fresh 4% Paraformaldehyde in PBS.
incubate 8hrs - o/n (short end for P0-P4, longer for P6-adult brains)
This technique is to evenly distribute cells in cell culture to prevent overgrowth at the periphery.  Basically you rock the dish(es) back and forth 6 times (keep the diameter of the dish at the edge of the incubator shelf as you do this for ease of rocking) then rotate the dish(es) 90^^o^^ and repeat.  This yields a nice even distribution of cells.  Make sure not to swirl the dish as this results in peripheral accumulation.
outbred mouse line useful for expression studies, practice injections, breeding for post-natal cerebellar culture preparation etc.
DMEM with GlutaMax + Glucose + Sodium Pyruvate (Invitrogen/Gibco Catalog#: )
Add 5mls Pen/Strep
Add 50mls Fetal Bovine Serum
Add 5mls Non-Essential Amino Acids (NEAA)

Store at 4C
Track FBS lot number used
			
Samples:

0) Prepare DMSOFreezingMedium (need 1.5mls per plate)
1) remove medium from culture dishes and wash with 10mls (for 10cm plate) RT PBS
2) add 3mls pre-warmed trypsin and incubate at 37^^o^^C for 5 minutes
3) Add 10mls pre-warmed medium and collect in 15ml conical tube
4) Spin 1500rpm for 10 minutes
5) resuspend in 1.5mls DMSOFreezingMedium and aliquot into cryovials (either 0.5mls or 0.75mls per vial depending on how concentrated you want the stock
6) Place in a slow freezing isopropanol chamber at -80^^o^^C o/n
7) transfer to LiqN~~2~~ chamber and note placement of stocks here and in log.
In the Freezer corridor across from Meyer lab TC also labeled as Scott Lab Freezer #4.
These are cell culture stocks for lentiviral production and general use.  For the most part they can be found in the Scott lab Liquid nitrogen tank, wedge 1 at the very bottom.  I will note otherwise if they are elsewhere.
A dsoligo created by [[OligoAnneal]] of [[celsr2shRNAfor]] and [[celsr2shRNArev]]
!Setup:
Need bucket of ice
6cm dishes with PBS on ice
Instruments for brain dissection (BrainDissectionInstruments)
Pups at appropriate postnatal age (P10-P14)
blade and guillotine setup
carcass container
6 well dishes with millicell (Millipore cat# PICM03050) inserts

!Procedure:
# sacrifice pup by decapitation
# extract cerebellum in usual manner (see MixedCerebellarCulture for details)
# chill for 30-45 seconds in 6cm dish of PBS on ice
# load onto glass fiber circle immobilized with tape and wetted with PBS in the spot where the cerebellum will sit
# make 300um sections through the entire cerebellum working quickly but steadily (let the guillotine blade drop onto the cerebellum each time and lift swiftly)
# remove "cut loaf" of cerebellar tissue to dissecting scope in flow hood and separate slices
# transfer using curved spatula (Moria cat # 1121B) to 6 well inserts prefilled with 1ml NeurobasalSupplementedMedia around the outside of the insert.
# Take to the hood and top with  about 50ul medium per slice to create a shallow pool of media on top of the slice (allows air-medium interface to form at junction of slice.
# cover and incubate at 37C 5%CO2 until the desired manipulation is carried out

/***
| Name|CloseOnCancelPlugin|
| Description|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
| Version|3.0 ($Rev: 1845 $)|
| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.commands.cancelTiddler,{

	handler_orig_closeUnsaved: config.commands.cancelTiddler.handler,

	handler: function(event,src,title) {
		this.handler_orig_closeUnsaved(event,src,title);
		if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))
			story.closeTiddler(title,true);
	 	return false;
	}

});

//}}}

Name: Green
Background: #fff
Foreground: #000
PrimaryPale: #9b9
PrimaryLight: #385
PrimaryMid: #031
PrimaryDark: #020
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

//{{{
config.options.chkHttpReadOnly = false; // means web visitors can experiment with your site by clicking edit
config.options.chkInsertTabs = true;    // tab inserts a tab when editing a tiddler
config.views.wikified.defaultText = ""; // don't need message when a tiddler doesn't exist
config.views.editor.defaultText = "";   // don't need message when creating a new tiddler 
//}}}
|Date of isolation|Method|Concentration|Storage|
| | EF Maxiprep | ng/ul | [[BenchFreezer]] |
| | EF Maxiprep | ng/ul | [[BenchFreezer]] |
Usual stocks of DNaseI are made @ 12500U/ml
Dissolve the entire vial of DNaseI (U/bottle varies slightly) into appropriate volume of EBSS (Ca/Mg free, +phenolred) PBS is ok, filter and aliquot 200ul per tube

use 200ul aliquot for 10mls final solution
!@@font-size:18pt;''[[Rationale]]:''@@

!
!@@font-size:18pt;''<<tag Stocks>>:''@@

!
!@@font-size:18pt;''[[Methods]] (<<tag Protocols>> <<tag Instances>>):''@@

!
!@@font-size:18pt;''[[Results]], <<tag ImageS>> and [[Discussion]]:''@@



!
!@@font-size:18pt;''Linked/Related Labnotebook Entries:''@@
[[Welcome]]
[[Organizational Site]]
[[Instances]]
[[Protocols]]
[[Recipes]]
GoogleScholar
DefaultTiddlers
GettingStarted
This section is devoted to examining and interpreting results.  In particular, evaluation of the value of our currently entertained hypotheses in light of various results will be presented in this section.  It gives the experimenter (and those who are reading) a way to reflect on the significance of findings and arrive at the conclusions of our research in a logical manner.
Samples:

Make up enough <<slider esLB "ESLysisBuffer" "ES Cell Lysis Buffer" "Lysis Buffer recipe">> (5mls/96well plate) in a tray
Remove 96-Well plates from –20C freezer. Spin down 3minute 1500RPM to collect cells and droplets.
Add 50ul lysis buffer to each well
Tape over top with sealing tape
Place inside Tupperware container on a platform with water inside.
Incubate at 56C o/n (may go as little as 3 hrs)  ____.
To Precipitate DNA add 100ul of mixture of 100ul EtOH + 5ul 3M NaOAc
Sit 15-30minutes at RT (DNA should become visible)
Spin plates 10 minute 2000RPM  _ _ _ _ _  _ _ _ _ _
Dump out Ethanol and wash 3 times with 100ul 70% EtOH
Air Dry tilted upside down for 20 minutes _ _ _ _
Resuspend each well in 30ul TE.  Incubate _ _ _ _ (2hrs in 37C) incubator to resuspend
!Lysis Buffer
|Final concentration|for 10mls add:|
|10mM Tris (ph 7.5) |100ul 1M stock|
|10mM EDTA |200ul 0.5M stock|
|10mM NaCl |20ul 5M stock|
|0.5% (w:v) SDS |250ul 20% stock|
|100ug/ml Proteinase K (add before use)  (1:100 dilution)|100ul 10mg/ml stock|
|ddH20 to 10mls| 9.33mls H~~2~~0|
/***
|Location|http://visualtw.ouvaton.org/VisualTW.html|
|Version|1.1.1|
|Requires|~TW2.1.x|
|Browsers|Firefox 2.0.x, IE 6.0+, others|
!Description
Lite and extensible Wysiwyg editor for TiddlyWiki.
!Demo
*On the plugin [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], see [[EasyEdit demo]] and use the {{{write}}} button.
*Loot at easyEdit [[in a standard tiddlywiki|http://visualtw.ouvaton.org/easyEditOnly.html]].
!Installation
#import the plugin
#save and reload
#add {{{easyEdit}}} command in ViewTemplate toolbar
! Useful Addons
*[[Font buttons|EasyEditPlugin-FontButtons]]
*[[Link button|EasyEditPlugin-LinkButton]]
*[[HTMLFormattingPlugin|http://www.tiddlytools.com/#HTMLFormattingPlugin]] from TiddlyTools
!Configuration
*EasyEditor default height : <<option txtEasyEditorHeight>>
*Stylesheet applied to the edited richtext : [[EasyEditDocStyleSheet]]
!Customization 
Template called by the {{{write}}} button : [[EasyEditTemplate]]
!How to extend EasyEditor
To add other buttons : 
*see [[Font buttons|EasyEditPlugin-FontButtons]] or [[Link button|EasyEditPlugin-LinkButton]] examples 
*see the documentation of the [[Gecko built-in rich text editor|http://developer.mozilla.org/en/docs/Midas]] or the [[IE command identifiers|http://msdn2.microsoft.com/en-us/library/ms533049.aspx]]
!Code
***/

//{{{

var geckoEditor={};
var IEeditor={};

config.options.txtEasyEditorHeight = config.options.txtEasyEditorHeight ? config.options.txtEasyEditorHeight : "500px";

// TW2.1.x compatibility
config.browser.isGecko = config.browser.isGecko ? config.browser.isGecko : (config.userAgent.indexOf("gecko") != -1); 
config.macros.annotations = config.macros.annotations ? config.macros.annotations : {handler : function() {}}


// EASYEDITOR MACRO

config.macros.easyEdit = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		var field = params[0];
		var height = params[1] ? params[1] : config.options.txtEasyEditorHeight;
		var editor = field ? new easyEditor(tiddler,field,place,height) : null;
	},
	gather: function(element){
		var iframes = element.getElementsByTagName("iframe");
		if (iframes.length!=1) return null
		var text = "<html>"+iframes[0].contentWindow.document.body.innerHTML+"</html>";
		text = config.browser.isGecko ? geckoEditor.postProcessor(text) : (config.browser.isIE ? IEeditor.postProcessor(text) : text);
		return text;
	}
}

// EASYEDITOR CLASS

function easyEditor(tiddler,field,place,height) {
	this.tiddler = tiddler;
	this.field = field;
	this.browser = config.browser.isGecko ? geckoEditor : (config.browser.isIE ? IEeditor : null);
	this.wrapper = createTiddlyElement(place,"div",null,"easyEditor");
	this.wrapper.setAttribute("easyEdit",this.field);
	this.iframe = createTiddlyElement(null,"iframe");
	this.browser.setupFrame(this.iframe,height,contextualCallback(this,this.onload));
	this.wrapper.appendChild(this.iframe);
}

easyEditor.prototype.onload = function(){
	this.editor = this.iframe.contentWindow;
	this.doc = this.editor.document;
	if (!this.browser.isDocReady(this.doc)) return null;
	
	if (!this.tiddler.isReadOnly() && this.doc.designMode.toLowerCase()!="on") {
		this.doc.designMode = "on";
		if (this.browser.reloadOnDesignMode) return false;	// IE fire readystatechange after designMode change
	}
	
	var internalCSS = store.getTiddlerText("EasyEditDocStyleSheet");
	setStylesheet(internalCSS,"EasyEditDocStyleSheet",this.doc);
	this.browser.initContent(this.doc,store.getValue(this.tiddler,this.field));

	var barElement=createTiddlyElement(null,"div",null,"easyEditorToolBar");
	this.wrapper.insertBefore(barElement,this.wrapper.firstChild);
	this.toolbar = new EditorToolbar(this.doc,barElement,this.editor);

	this.browser.plugEvents(this.doc,contextualCallback(this,this.scheduleUpdate));
	this.editor.focus();
}

easyEditor.SimplePreProcessoror = function(text) {
	var re = /^<html>(.*)<\/html>$/m;
	var htmlValue = re.exec(text);
	var value = (htmlValue && (htmlValue.length>0)) ? htmlValue[1] : text;
	return value;
}

easyEditor.prototype.scheduleUpdate=function() {
	if (this.nextUpdate) window.clearTimeout(this.nextUpdate);
	this.nextUpdate = window.setTimeout(contextualCallback(this.toolbar,EditorToolbar.onUpdateButton),easyEditor.buttonDelay);
}

easyEditor.buttonDelay = 100;

// TOOLBAR CLASS

function EditorToolbar(target,parent,window){
	this.target = target;
	this.window=window;
	this.elements={};
	var row = createTiddlyElement(createTiddlyElement(createTiddlyElement(parent,"table"),"tbody"),"tr");
	for(var b in EditorToolbar.buttons){
		var button = EditorToolbar.buttons[b];
		var cell=createTiddlyElement(row,"td",null,button.classLabel);
		if (button.onCreate) button.onCreate.call(this, cell, b);
	}
}

EditorToolbar.createFontButton = function(place,name){
	this.elements[name] = createTiddlyButton(place,EditorToolbar.labels[name].label,EditorToolbar.labels[name].toolTip,contextualCallback(this,EditorToolbar.onFontCommand(name)),"button");
}

EditorToolbar.onFontCommand = function(button){
	return function(){
		this.target.execCommand(button, false, null);
		EditorToolbar.onUpdateButton.call(this,button);
		return false;
	}
}

EditorToolbar.createParagraphButton = function(place,name){
	this.elements[name] = createTiddlyButton(place,EditorToolbar.labels[name].label,EditorToolbar.labels[name].toolTip,contextualCallback(this,EditorToolbar.onParagraphCommand(name)),"button");
}

EditorToolbar.onParagraphCommand = function(name){
	return function(){
		this.target.execCommand(name, false, null);
		EditorToolbar.onUpdateButton.call(this);
		return false;
	}
}

EditorToolbar.createSeparator = function(place){
	place.innerHTML+="&nbsp;";
}

EditorToolbar.onUpdateButton = function(name){
	if (name && EditorToolbar.buttons[name].onRefresh) EditorToolbar.buttons[name].onRefresh.call(this,name);
	else for (b in this.elements) if (EditorToolbar.buttons[b].onRefresh) EditorToolbar.buttons[b].onRefresh.call(this,b);
}

EditorToolbar.onRefreshCommandButton = function (name){
	if (this.target.queryCommandState(name)) addClass(this.elements[name].parentNode,"buttonON");
	else removeClass(this.elements[name].parentNode,"buttonON");
	this.window.focus();
}

EditorToolbar.buttons = {
	bold : {onCreate : EditorToolbar.createFontButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"boldButton"},
	italic : {onCreate : EditorToolbar.createFontButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"italicButton"},
	underline : {onCreate : EditorToolbar.createFontButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"underlineButton"},
	strikethrough : {onCreate : EditorToolbar.createFontButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"strikeButton"},
	fontCommandsSeparator : {onCreate : EditorToolbar.createSeparator, classLabel:"separator"},
	insertunorderedlist : {onCreate : EditorToolbar.createParagraphButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"unorderedListButton"},
	insertorderedlist : {onCreate : EditorToolbar.createParagraphButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"orderedListButton"},
	listCommandsSeparator : {onCreate : EditorToolbar.createSeparator, classLabel:"separator"},
	justifyleft : {onCreate : EditorToolbar.createParagraphButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"justifyleftButton"},
	justifyright : {onCreate : EditorToolbar.createParagraphButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"justifyrightButton"},
	justifycenter : {onCreate : EditorToolbar.createParagraphButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"justifycenterButton"},
	justifyfull : {onCreate : EditorToolbar.createParagraphButton, onRefresh : EditorToolbar.onRefreshCommandButton, classLabel:"justifyfullButton"},
	paragraphCommandsSeparator : {onCreate : EditorToolbar.createSeparator, classLabel:"separator"},
	removeformat : {onCreate : EditorToolbar.createParagraphButton, classLabel:"removeformatButton"}
}

EditorToolbar.labels = {
	bold: {label:"B", toolTip : "Bold"},
	italic : {label:"I", toolTip : "Italic"},
	underline : {label:"U", toolTip : "Underline"},
	strikethrough : {label:"S", toolTip : "Strikethrough"},
	insertunorderedlist : {label:"\u25CF", toolTip : "Unordered list"},
	insertorderedlist : {label:"1.", toolTip : "Ordered list"},
	justifyleft : {label:"[\u2261", toolTip : "Align left"},
	justifyright : {label:"\u2261]", toolTip : "Align right"},
	justifycenter : {label:"\u2261", toolTip : "Align center"},
	justifyfull : {label:"[\u2261]", toolTip : "Justify"},
	removeformat : {label:"\u00F8", toolTip : "Remove format"}
}

// GECKO (FIREFOX, ...) BROWSER SPECIFIC METHODS

geckoEditor.setupFrame = function(iframe,height,callback) {
	iframe.setAttribute("style","width: 100%; height:" + height);
	iframe.addEventListener("load",callback,true);
}

geckoEditor.plugEvents = function(doc,onchange){
	doc.addEventListener("keyup", onchange, true);
	doc.addEventListener("keydown", onchange, true);
	doc.addEventListener("click", onchange, true);
}

geckoEditor.postProcessor = function(text){return text};

geckoEditor.preProcessor = function(text){return easyEditor.SimplePreProcessoror(text)}

geckoEditor.isDocReady = function() {return true;}

geckoEditor.reloadOnDesignMode=false;

geckoEditor.initContent = function(doc,content){
	doc.execCommand("insertHTML",false,geckoEditor.preProcessor(content));
}

// INTERNET EXPLORER BROWSER SPECIFIC METHODS
	
IEeditor.setupFrame = function(iframe,height,callback) {
	iframe.width="99%";  //IE displays the iframe at the bottom if 100%. CSS layout problem ? I don't know. To be studied...
	iframe.height=height.toString();
	iframe.attachEvent("onreadystatechange",callback);
}

IEeditor.plugEvents = function(doc,onchange){
	doc.attachEvent("onkeyup", onchange);
	doc.attachEvent("onkeydown", onchange);
	doc.attachEvent("onclick", onchange);
}

IEeditor.isDocReady = function(doc){
	if (doc.readyState!="complete") return false;
	if (!doc.body) return false;
	return (doc && doc.getElementsByTagName && doc.getElementsByTagName("head") && doc.getElementsByTagName("head").length>0);
}

IEeditor.postProcessor = function(text){return text};

IEeditor.preProcessor = function(text){return easyEditor.SimplePreProcessoror(text)}

IEeditor.reloadOnDesignMode=true;

IEeditor.initContent = function(doc,content){
	doc.body.innerHTML=IEeditor.preProcessor(content);
}
	
function contextualCallback(obj,func){
    return function(){return func.call(obj)}
}
	
Story.prototype.previousGatherSaveEasyEdit = Story.prototype.previousGatherSaveEasyEdit ? Story.prototype.previousGatherSaveEasyEdit : Story.prototype.gatherSaveFields; // to avoid looping if this line is called several times
Story.prototype.gatherSaveFields = function(e,fields){
	if(e && e.getAttribute) {
		var f = e.getAttribute("easyEdit");
		if(f){
			var newVal = config.macros.easyEdit.gather(e);
			if (newVal) fields[f] = newVal;
		}
		this.previousGatherSaveEasyEdit(e, fields);
	}
}

config.commands.easyEdit={
	text: "write",
	tooltip: "Edit this tiddler in wysiwyg mode",
	readOnlyText: "view",
	readOnlyTooltip: "View the source of this tiddler",
	handler : function(event,src,title) {
		clearMessage();
		var tiddlerElem = document.getElementById(story.idPrefix + title);
		var fields = tiddlerElem.getAttribute("tiddlyFields");
		story.displayTiddler(null,title,"EasyEditTemplate",false,null,fields);
		return false;
	}
}

config.shadowTiddlers.EasyEditTemplate = "<!--{{{-->\n<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>\n<div class='title' macro='view title'></div>\n<div class='editor' macro='edit title'></div>\n<div macro='annotations'></div>\n<div class='editor' macro='easyEdit text'></div>\n<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n<!--}}}-->"

config.shadowTiddlers.EasyEditToolBarStyleSheet = "/*{{{*/\n";
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar {font-size:0.8em}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".editor iframe {border:1px solid #DDD}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar td{border:1px solid #888; padding:2px 1px 2px 1px; vertical-align:middle}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar td.separator{border:0}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .button{border:0;color:#444}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .buttonON{background-color:#EEE}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar {margin:0.25em 0}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .boldButton {font-weight:bold}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .italicButton .button {font-style:italic;padding-right:0.65em}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .underlineButton .button {text-decoration:underline}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .strikeButton .button {text-decoration:line-through}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .unorderedListButton {margin-left:0.7em}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .justifyleftButton .button {padding-left:0.1em}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .justifyrightButton .button {padding-right:0.1em}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .justifyfullButton .button {padding-left:0.1em;padding-right:0.1em}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet +="/*}}}*/";

store.addNotification("EasyEditToolBarStyleSheet", refreshStyles); 

config.shadowTiddlers.EasyEditDocStyleSheet = "/*{{{*/\n \n/*}}}*/";
if (config.annotations) config.annotations.EasyEditDocStyleSheet = "This stylesheet is applied when editing a text with the wysiwyg easyEditor";

//}}}
/***
|Location|http://visualtw.ouvaton.org/VisualTW.html|
|Version|1.1.0|
|Requires|~TW2.2.x EasyEditPlugin|
|Browsers|Firefox 2.0.x, IE 6.0+, others|
!Description:
Adds some fonts button to EasyEdit wysiwyg editor
!Demo:
On the plugin [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], see and edit [[EasyEdit demo]].
***/

//{{{
EditorToolbar.buttons.fontsizeSeparator = {onCreate : EditorToolbar.createSeparator, classLabel:"separator"};

if (config.browser.isGecko) {
	EditorToolbar.buttons.increasefontsize = {onCreate : EditorToolbar.createFontButton, classLabel:"increasefontsizeButton"};
	EditorToolbar.labels.increasefontsize = {label:"A", toolTip : "Increase font size"};
	EditorToolbar.buttons.decreasefontsize = {onCreate : EditorToolbar.createFontButton, classLabel:"decreasefontsizeButton"};
	EditorToolbar.labels.decreasefontsize = {label:"A", toolTip : "Decrease font size"};
}

EditorToolbar.createInputButton = function(place,name) {
	this.elements[name] = createTiddlyButton(place,EditorToolbar.labels[name].label,EditorToolbar.labels[name].toolTip,contextualCallback(this,EditorToolbar.onInputCommand(name)),"button");
}

EditorToolbar.onInputCommand = function(name) {
	return function(){
		var value = this.target.queryCommandValue(name);
		value = prompt(EditorToolbar.labels[name].prompt,value);
		if (value) {
			this.target.execCommand(name, false, value);
			EditorToolbar.onUpdateButton.call(this);
		}
		return false;
	}
}

EditorToolbar.buttons.fontsize = {onCreate : EditorToolbar.createInputButton, classLabel:"fontsizeButton"};
EditorToolbar.labels.fontsize = {label:"\u00B1", toolTip : "Set font size", prompt: "Enter font size"};

EditorToolbar.buttons.forecolor = {onCreate : EditorToolbar.createInputButton, classLabel:"forecolorButton"};
EditorToolbar.labels.forecolor = {label:"C", toolTip : "Set font color", prompt: "Enter font color"};

EditorToolbar.buttons.fontname = {onCreate : EditorToolbar.createInputButton, classLabel:"fontnameButton"};
EditorToolbar.labels.fontname = {label:"F", toolTip : "Set font name", prompt: "Enter font name"};

config.shadowTiddlers.EasyEditToolBarStyleSheet += "\n/*{{{*/\n";
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .increasefontsizeButton .button {padding-left:0.15em;padding-right:0.15em; font-size:1.3em; line-height:0.75em}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .decreasefontsizeButton .button {padding-left:0.4em;padding-right:0.4em; font-size:0.8em;}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .forecolorButton .button {color:red;}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet += ".easyEditorToolBar .fontnameButton .button {font-family:serif}\n" ;
config.shadowTiddlers.EasyEditToolBarStyleSheet +="/*}}}*/";


//}}}
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='easyEdit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
[[MptwEditTemplate]]

bring volume of sample to at least 100ul
Optional: (If amounts are less than 100ng add 1ug glycogen (1ug/ul stock) to aid as carrier)
add 1/10th volume 3M NaOAc pH 5.2
Add 2 original volumes of 100% EtOH (@-20^^o^^C)
Incubate on dry ice until liquid becomes viscous (@10-30minutes)
Spin 4C for 15 minutes
Discard supernatant and add 500ul 70% EtOH
Spin again at 4C for 10minutes
Discard supernatant and air dry for 10 minutes
Resuspend in an appropriate volume of EB, H~~2~~0, TE or PBS etc
/***
| Name:|ExtentTagButtonPlugin|
| Description:|Adds a New tiddler button in the tag drop down|
| Version:|3.0 ($Rev: 1845 $)|
| Date:|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{

// can't hijack a click handler. must redefine this entirely.
// would be good to refactor in the core...
// this version copied from 2.1.3 core

// Event handler for clicking on a tiddler tag
function onClickTag(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	var popup = Popup.create(this);
	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	if(popup && tag)
		{
		var tagged = store.getTaggedTiddlers(tag);
		var titles = [];
		var li,r;
		for(r=0;r<tagged.length;r++)
			if(tagged[r].title != title)
				titles.push(tagged[r].title);
		var lingo = config.views.wikified.tag;

		wikify("<<newTiddler label:'New tiddler' tag:"+tag+">>",createTiddlyElement(popup,"li")); // <---- the only modification

		if(titles.length > 0)
			{
			var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll);
			openAll.setAttribute("tag",tag);
			createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
			for(r=0; r<titles.length; r++)
				{
				createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
				}
			}
		else
			createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));
		createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
		var h = createTiddlyLink(createTiddlyElement(popup,"li"),tag,false);
		createTiddlyText(h,lingo.openTag.format([tag]));
		}
	Popup.show(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}

//}}}

LabNotebookEntries
LentiviralConstructs
LentiVirus
[[Instances]]
[[Recipes]]
FW 410.5 g/mole
Dissolve 10mg vial into 250ul 80%EtOH

May use in transfection experiments 1:1000 to give 10uM final concentration

Cut out gel and weight gel slice
Add 3X volume QG buffer 
Incubate at 50C for 10 minutes (vortexing every 2-3 minutes)
Optional (Add 1X volume isopropanol (for >4kb fragments or <500bp))
Apply solution to Qiagen Spin column (750ul at a time)
Spin 1 minute 14K
discard supn't
Apply 750ul PE to column, allow to stand 1 minute
Spin 1 minute 14k
Empty eluate and spin again
Add 30-50ul ddH20 or EB to column, let stand 1 minute and spin 1 minute 14K
Quantitate yield and store at -20C until used
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 (in this case on the top)
* 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>>

See also MonkeyPirateTiddlyWiki.
mix 
250ul of o/n culture with
250ul sterile 80%glycerol
Freeze at -80C
(may snap freeze in liquid nitrogen first if desired but this is not necessary)
<html>
<body>

<iframe 
src ="http://www.google.com/notebook/fullpage#b=BDQ0HIwoQjOvK9f4h"
width = "100%"
height = "1000">
</iframe>

</body>
</html>
<html>
<body>

<iframe 
src ="http://scholar.google.com/schhp?tab=ws&hl=en"
width = "100%"
height = "300">
</iframe>

</body>
</html>
the targeting fragment for introduction of GalK into the pk2 BAC clones by recombineering
These cells were frozen down from expanded vial directly from ATCC (2 passages after starting with passage ~17 cells) 
10 15cm large plates were frozen down 1/3 into each vial
Generally one can thaw one vial onto 2 10cm plates and achieve nice density (passable after 2-3 days)
<html>
<body>

<iframe 
src ="http://www.giffmex.org/twfortherestofus.html"
width = "100%"
height = "600">
</iframe>

</body>
</html>


/***
| Name|HideWhenPlugin|
| Description|Allows conditional inclusion/exclusion in templates|
| Version|3.0 ($Rev: 1845 $)|
| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source|http://mptw.tiddlyspot.com/#HideWhenPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.removeElementWhen = function(test,place) {
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};

merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}}

});

//}}}

30mM Na Phosphate (30mls [[1M NaP]])
0.1% SDS (5mls 20% SDS)
965mls ddH20
to make 1 liter of wash
Otherwise known as HHMI.

http://www.hhmi.org/

<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/081307AG1.jpg" width="240" height="160" /></a></html>
!Rationale of immunostaining experiment:

!Samples

!Primary Antibody Incubation
1. Remove selected slides with desired sections on them and allow to equilibrate to room temperature.  Remove slides from holder and using the Pap pen make hydrophobic borders around each section.  
2. Block in <<slider PBSPlusSlider "PBSPlus" "PBSPlus" >> overnight at 4C
3. Incubate sections in  primary antibody (see dilutions below) in [[PBSPlus]] at 4C overnight
4. Rinse 4 times for 10 minutes each with PBS

!Secondary Antibody Incubation
5. Incubate in secondary antibody _ _ _ _ _ (eg Alexa594-goat anti-rabbit IgG, 1:500 multiple 2nd if double) in [[PBSPlus]] for 1 hour at room temperature in the dark
6. Rinse 4 times for 10 minutes each with PBS
7. Counterstain with with a DNA dye (Hoescht, DAPI etc) for 30 minutes at room temperature
8. Rinse 5 minutes in PBS
9. Coverslip using Fluormount and store at 4C protected from light

 
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Version|1.6.0|
|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/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|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.
!!!!!Usage
<<<
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)
<<<
!!!!!Examples
<<<
an "alert" message box:
><script show>
	alert('InlineJavascriptPlugin: this is a demonstration message');
</script>
dynamic output:
><script show>
	return (new Date()).toString();
</script>
wikified dynamic output:
><script show>
	return "link to current user: [["+config.options.txtUserName+"]]";
</script>
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";
</script>
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)+"'");
</script>
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>
><script label="click to execute demo() function" show>
	demo()
</script>
<<<
!!!!!Installation
<<<
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
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
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
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.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.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
					link.code="function _out(place){"+lookaheadMatch[5]+"\n};_out(this);"
					link.setAttribute("title",lookaheadMatch[3]?lookaheadMatch[3]:"");
					link.setAttribute("href","javascript:;");
					link.style.cursor="pointer";
				}
				else { // run inline script code
					var code="function _out(place){"+lookaheadMatch[5]+"\n};_out(w.output);"
					code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
					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;
		}
	}
} )
//}}}
These are worksheet form-based versions of full protocols for use when performing a particular experiment.  Useful to keep track of details for that particular run and as a short-form reminder of the steps in a particular protocol.  Good to use during an actual experiment.  If you want full-length detailed descriptions behind these Instances see [[Protocols]].
/***
|''Name:''|IntelliTaggerPlugin|
|''Version:''|1.0.2 (2007-07-25)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[IntelliTaggerPlugin Documentation]]|
|''~SourceCode:''|[[IntelliTaggerPlugin SourceCode]]|
|''Licence:''|[[BSD open source license (abego Software)]]|
|''~CoreVersion:''|2.0.8|
|''Browser:''|Firefox 1.5.0.2 or better|
***/
/***
!Version History
* 1.0.2 (2007-07-25): 
** Feature: "Return" key may be used to accept first tag suggestion (beside "Alt-1")
** Bugfix: Keyboard shortcuts (Alt+3 etc.) shifted
* 1.0.1 (2007-05-18): Improvement: Speedup when using TiddlyWikis with many tags
* 1.0.0 (2006-04-26): Initial release
***/
/***
!Source Code
***/
//{{{
// Ensure the Plugin is only installed once.
//
if (!version.extensions.IntelliTaggerPlugin) {

// Ensure the global abego namespace is set up.
if (!window.abego) window.abego = {};
if (!abego.internal) abego.internal = {};

// Opens an alert with the given string and throws an exception 
// with the same string after the alert is closed.
//
abego.alertAndThrow = function(s) {
	alert(s);
	throw s;
};

if (version.major < 2) {
	abego.alertAndThrow("Use TiddlyWiki 2.0.8 or better to run the IntelliTagger Plugin.");
}

version.extensions.IntelliTaggerPlugin = {
	major: 1, minor: 0, revision: 2,
	date: new Date(2007, 6, 25),
	type: 'plugin',
	source: "http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin",
	documentation: "[[IntelliTaggerPlugin Documentation]]",
	sourcecode: "[[IntelliTaggerPlugin SourceCode]]",
	author: "Udo Borkowski (ub [at] abego-software [dot] de)",
	licence: "[[BSD open source license (abego Software)]]",
	tiddlywiki: "Version 2.0.8 or better",
	browser: "Firefox 1.5.0.2 or better"
};
//}}}
//#startOf: MainCode
//{{{
// ========================================================================
// Utilities ==============================================================
// ========================================================================

// ========================================================================
// Popup 
// 
// A Popup is an HTML element floating on top of the main HTML page. 
// 
// The HTML element (typically a "div" element) is added as a direct child 
// of the document.body.
//
// A Popup element should respect the following style conventions:
//
//		position = "absolute";	// required.
//		left = aDimension;		// required. E.g. "10px"
//								// When not defined the Popup is not displayed.
//		top = aDimension;		// required. E.g. "10px"
//								// When not defined the Popup is not displayed.
// 		background = aColor; 	// optional. E.g. "white"
//								// When not defined the Popup is transparent.
// 		border = aBorderSpec;	// optional. E.g. "1px solid DarkGray"
//		width = aDimension;		// optional. E.g. "200px"
//								// When not defined the width is calculated 
//								// automatically.
//		height = aDimension;	// optional. E.g. "200px"
//								// When not defined the height is calculated 
//								// automatically.
// ========================================================================


abego.createEllipsis = function(place) {
	var e = createTiddlyElement(place,"span");
	e.innerHTML = "&hellip;";
};

// Returns true iff the given element is "opened as a popup", 
// i.e. a direct child of the document.body.
//
// @param element [may be null/undefined] 
//				an HTML element
//
abego.isPopupOpen = function(element) {
	return element && element.parentNode == document.body;
};

// Opens the given element as a popup.
// 
// @param element 
//				an HTML element
//
abego.openAsPopup = function(element) {
	if (element.parentNode != document.body)
		document.body.appendChild(element);
};


// Closes the given popup.
// Does nothing when the element is not a popup or not open.
//
// @param element [may be null/undefined] 
//				an HTML element
//
abego.closePopup = function(element) {
	if (abego.isPopupOpen(element)) 
		document.body.removeChild(element);
};

// Returns the rectangle of the (browser) window
//
// @return {left,top,height,width}
// 
abego.getWindowRect = function() {
	return {
		left: findScrollX(),
		top: findScrollY(),
		height: findWindowHeight(),
		width: findWindowWidth()
	};
};

// Moves the given element to the given position (in pixel).
//
abego.moveElement = function(element, left, top) {
	element.style.left = left + "px";
	element.style.top = top + "px";
};

// Centers the given element on the window.
//
// The element must have absolute position
// 
abego.centerOnWindow = function(element) {
	if (element.style.position != "absolute") 
		throw "abego.centerOnWindow: element must have absolute position"; 
		
	var winRect = abego.getWindowRect();

	abego.moveElement(
			element,
			winRect.left + (winRect.width - element.offsetWidth) / 2,
			winRect.top + (winRect.height - element.offsetHeight) / 2);
};

// Returns true if e is either self or a descendant (child, grandchild,...) of self.
//
// @param self DOM:Element
// @param e DOM:Element [may be null]
//
abego.isDescendantOrSelf = function(self, e) {
	while (e) {
		if (self == e) return true;
		e = e.parentNode;
	}
	return false;
};

// Returns a set containing the items of the array. 
// 
// It is an object that has a property for every item of the array.
// The name of the property is the "toString" representation of 
// the item. The value of the property is "true".
//
// Duplicate items are removed.
//
abego.toSet = function(array) {
	var result = {};
	for (var i = 0; i < array.length; i++)
		result[array[i]] = true;
	return result;
};

// Returns an array with all strings from strings that match the filterRE.
//
// @param maxCount [optional] if defined at most maxCount strings are returned.
abego.filterStrings = function(strings, filterRE, maxCount) {
	var result =[];
	for (var i = 0; i < strings.length && (maxCount === undefined || result.length < maxCount); i++) {
		var s = strings[i];
		if (s.match(filterRE)) 
			result.push(s);
	}
	return result;
};

// @param a [may be null/undefined] Object[] 
// @param b [may be null/undefined] Object[] 
abego.arraysAreEqual = function(a,b) {
	if (!a)
		return !b;
	if (!b)
		return false;
		
	var n = a.length;
	if (n != b.length) 
		return false;
	for (var i = 0; i < n; i++) 
		if (a[i] != b[i])
			return false;
	return true;
};

// Adjusts the element's position to appear below the anchorElement, 
// and ensures the element fits into the window.
//
abego.moveBelowAndClip = function(element, anchorElement) {
	if (!anchorElement) 
		return;
	
    // Position the result below the anchor and resize it if necessary.
	var anchorLeft = findPosX(anchorElement);
	var anchorTop = findPosY(anchorElement);
	var anchorHeight = anchorElement.offsetHeight;
	var elementLeft = anchorLeft;
	var elementTop = anchorTop + anchorHeight;

	// Make sure the result is not wider than the window
	var winWidth = findWindowWidth();
	if (winWidth < element.offsetWidth) {
		element.style.width = (winWidth - 100)+"px";
	}

	// Ensure that the left and right of the result are not
	// clipped by the window. Move it to the left or right, if necessary.	
	var elementWidth = element.offsetWidth;
	if(elementLeft + elementWidth > winWidth)
		elementLeft = winWidth - elementWidth-30;
	if (elementLeft < 0) 
		elementLeft = 0;
	
	// Do the actual moving
	element.style.left = elementLeft + "px";
	element.style.top = elementTop + "px";
	element.style.display = "block";
};

abego.compareStrings = function(a, b) {
	return (a == b) ? 0 : (a < b) ? -1 : 1;
};

// Sorts the given array alphabetically, ignoring the case.
//
abego.sortIgnoreCase = function(arr) {
	var result =[];
	
	// To avoid toLowerCase to be called twice for every comparison
	// we convert the strings once and sort the lowercase.
	// After sorting we replace them with the cased ones.
	//
	// Benchmarks have shown that this is significantly faster 
	// than the ad hoc solution, even for small arrays 
	// (like 5 Strings (10 chars each))
	
	var n = arr.length;
	for (var i = 0; i < n; i++) {
		var s = arr[i];
		result.push([s.toString().toLowerCase(),s]);
	}
	result.sort(function(a,b) {
		return (a[0] == b[0]) ? 0 : (a[0] < b[0]) ? -1 : 1;
	});
	
	for (i = 0; i < n; i++) 
		arr[i] = result[i][1];
};

// Returns the specified field (input or textarea element), otherwise the first edit field it finds 
// or null if it found no edit field at all
//
abego.getTiddlerField = function(story,title,field) {
	var tiddler = document.getElementById(story.idPrefix + title);
	var e = null;
	if (tiddler != null)	{
		var children = tiddler.getElementsByTagName("*");
		for (var t=0; t<children.length; t++) {
			var c = children[t];
			if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea")	{
				if(!e)
					e = c;
				if(c.getAttribute("edit") == field)
					e = c;
					// break; // adding this break would not be 100% compatible to <= TW 2.0.9. when a 
			}
		}
	}
	return e;
};

abego.setRange = function(element, start, end) {
// adapted from TaskMacroPlugin by LukeBlanshard. 
// http://labwiki.sourceforge.net/#CopyrightAndLicense.
	if (element.setSelectionRange) { // Mozilla
		element.setSelectionRange(start, end);
		// Damn mozilla doesn't scroll to visible.  Approximate.
		var max = 0.0 + element.scrollHeight;
		var len = element.textLength;
		var top = max*start/len, bot = max*end/len;
		element.scrollTop = Math.min(top, (bot+top-element.clientHeight)/2);
	} else if (element.createTextRange != undefined) { // IE
		var range = element.createTextRange();
		range.collapse();
		range.moveEnd("character", end);
		range.moveStart("character", start);
		range.select();
	} else // Other? Too bad, just select the whole thing.
		element.select();
};
				
				
// TiddlerSet: an object with one property per tiddler in the set. 
// The name of the property corresponds to the tiddler name, 
// the value is "not false" (e.g. true or a non-zero number).
//
// TagMap<X>: an object that maps a tag to an object of type X (access through properties)
//
abego.internal.TagManager = function() {
	var tagReferences = null; // TagMap<{count: natural, tiddlers: TiddlerSet}>

	var ensureTagsAreLoaded = function() {
		if (tagReferences)
			return;
			
		tagReferences = {};
		store.forEachTiddler(function(title,tiddler) {
			for(var i=0; i<tiddler.tags.length; i++) {
				var tag = tiddler.tags[i];
				var refedBy = tagReferences[tag];
				if (!refedBy) {
					refedBy = tagReferences[tag] = {count:0, tiddlers: {}};
				}
				refedBy.tiddlers[tiddler.title] = true;
				refedBy.count += 1;
			}
		});
	};
	
	// When any tags are changed reset the TagManager.
	// 
	var oldTiddlyWikiSaveTiddler = TiddlyWiki.prototype.saveTiddler;
	TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {
		var tiddler = this.fetchTiddler(title);
		var oldTags = tiddler ? tiddler.tags : [];
		var newTags = (typeof tags == "string") ? tags.readBracketedList() : tags;

		oldTiddlyWikiSaveTiddler.apply(this, arguments);
		
		if (!abego.arraysAreEqual(oldTags, newTags))
			abego.internal.getTagManager().reset();
	};

	// When a tiddler is removed that had tags reset the TagManager.
	//
	var oldTiddlyWikiRemoveTiddler = TiddlyWiki.prototype.removeTiddler;
	TiddlyWiki.prototype.removeTiddler = function(title) {
		var tiddler = this.fetchTiddler(title);
		var resetTagManager = tiddler && tiddler.tags.length > 0;
		
		oldTiddlyWikiRemoveTiddler.apply(this, arguments);
		
		if (resetTagManager) 
			abego.internal.getTagManager().reset();
	};

	// Resets the TagManager, thus ensures that cached tagging 
	// information is discarded and the most recent tag state is used.
	// 
	this.reset = function () {
		tagReferences = null;
	};
	
	
	// Returns a TiddlerSet with all tiddlers that have the given tag, 
	// or null when the tag is not used in any tiddler.
	//
	// @return [may be null]
	//
	this.getTiddlersWithTag = function(tag) {
		ensureTagsAreLoaded();

		var tagInfo = tagReferences[tag];
		return tagInfo ? tagInfo.tiddlers : null;
	};
	
	// Returns an array with the names of all tags defined 
	// plus the (optional) extraTags. 
	//
	// The tags are sorted alphabetically (caseinsensitive).
	//
	// @params [optional] an array of tags to be added to the list
	//
	//
	this.getAllTags = function(extraTags) {
		ensureTagsAreLoaded();
			
		var result =[];
		for (var i in tagReferences) 
			result.push(i);
			
		for (i = 0; extraTags && i < extraTags.length; i++) 
			result.pushUnique(extraTags[i], true);
			
		abego.sortIgnoreCase(result);
		
		return result;
	};
	
	// An array with two items per tag
	// result[i][0] : the tag name
	// result[i][1] : TiddlerSet, with tiddlers that are tagged with that tag
	// 
	this.getTagInfos = function() {
		ensureTagsAreLoaded();
	
		var result = [];
		for (var tiddler in tagReferences) {
			result.push([tiddler, tagReferences[tiddler]]);
		}
		return result;
	};
	
	var compareTiddlerCountAndTagName = function(a,b) {
			var a1 = a[1];
			var b1 = b[1];
			var d = b[1].count - a[1].count;
			return d != 0 ? d : abego.compareStrings(a[0].toLowerCase(), b[0].toLowerCase());
	};
	
	this.getSortedTagInfos = function() {
		ensureTagsAreLoaded();

		var result = this.getTagInfos();
		
		result.sort(compareTiddlerCountAndTagName);
		
		return result;
	};
	
	// @return an array of the tags that "partner" the activeTags,
	// sorted by the number of conjoint occurances.
	//
	this.getPartnerRankedTags = function(activeTags) {
		var partnerTagCounts = {};
		for (var i = 0; i < activeTags.length; i++) {
			var tiddlersWithTag = this.getTiddlersWithTag(activeTags[i]);
			for (var name in tiddlersWithTag) {
				var tiddler = store.getTiddler(name);
				// It may happen that a tiddler is "gone" in the meantime
				if (!(tiddler instanceof Tiddler)) 
					continue;
					
				for(var j=0; j<tiddler.tags.length; j++) {
					var tag = tiddler.tags[j];
					var c = partnerTagCounts[tag];
					partnerTagCounts[tag] = c ? c+1 : 1;
				}
			}
		}
		var currentTagSet = abego.toSet(activeTags);
		var result = [];
		for (var n in partnerTagCounts) {
			if (!currentTagSet[n])
				result.push(n);
		}
		// Sort the tags by their partner tag count, then alphabetically
		result.sort(function (a,b) {
			var d = partnerTagCounts[b] - partnerTagCounts[a];
			return d != 0 ? d : abego.compareStrings(a.toLowerCase(), b.toLowerCase());
		});

		return result;
	};
}; // of abego.internal.TagManager

abego.internal.getTagManager = function() {
	if (!abego.internal.gTagManager) abego.internal.gTagManager = new abego.internal.TagManager();
	return abego.internal.gTagManager;
};

// ========================================================================
// IntelliTagger ==========================================================
// ========================================================================


(function(){
	var PADDING = 2;
	var BORDERWIDTH = 1;
	var MAX_FAVORITE_TAGS = 30;

	var	fSuggestionPopup; // DOM:Element
	var	fAnchorElement; // DOM:Element
	var fOnTagSelected; // function(e) {...}
	var	fSuggestedTags; // [Tag]
	var	fActiveTagSet; // TagSet
	var	fFavoriteTags; // array of Tags, [optional]
	
	if (!abego.IntelliTagger) abego.IntelliTagger = {};

	var getAnchorElement = function() {
		return fAnchorElement;
	};
	
	var isCurrentTag = function(tag) {
		return fActiveTagSet[tag];
	};
	
	var removeLastWord = function(s) {
		var i = s.lastIndexOf(" ");
		return (i >= 0) ? s.substr(0,i) : "";
	};
	
	var lastWordIsFilter = function(inputField) {
		var s = inputField.value;
		var len = s.length;		
		return (len > 0 && s[len-1] != ' ');
	};

	var ensureFieldEndsWithSpace = function(field) {
		var s = field.value;
		var len = s.length;
		if (len > 0 && s[len-1] != ' ') {
			field.value += ' ';
		}
	};
	
	var updateTag = function(tag, inputField, tiddler) {
		if (lastWordIsFilter(inputField)) 
			inputField.value = removeLastWord(inputField.value);
			
		story.setTiddlerTag (tiddler.title,tag,0);
		ensureFieldEndsWithSpace(inputField);
		
		abego.IntelliTagger.assistTagging(inputField, tiddler);
	};
	
	// returns the n-th suggestion, first counting the favorites, then the normal suggestions
	//
	// @param n zero-based.
	// @return [may be null]
	var getNthSuggestion = function(n) {
		if (fFavoriteTags && fFavoriteTags.length > n)
			return fFavoriteTags[n];
		
		return (fSuggestedTags && fSuggestedTags.length > n)
				? fSuggestedTags[n] 
				: null;
	};

	var useNthSuggestion = function(n, inputField, tiddler) {
		var suggestion = getNthSuggestion(n);
		if (suggestion)
			updateTag(suggestion, inputField, tiddler);
	};


	var getFilter = function(inputField) {
		var pos = inputField.value.lastIndexOf(" ");
		var filter = (pos >= 0) ? inputField.value.substr(++pos,inputField.value.length) : inputField.value;
		return new RegExp(filter.escapeRegExp(),"i");
	};


	var countExpectedTags = function(tags, expectedTagsAsProperties) {
		var result = 0;
		for (var i = 0; i<tags.length;i++) 
			if (expectedTagsAsProperties[tags[i]])
				result++;
		return result;
	};
	
	// Returns the number tags that have the same count of tiddlers
	// as the index-th tagInfo. 
	// 
	// The index-th tag is included in the returned number.
	// 
	// @param sortedTagInfo Array of TagInfos, sorted by count of tiddlers.
	//
	var getNumberOfTagsWithSameCount = function(sortedTagInfos, index, filterRE) {
		var result = 1;
		var c = sortedTagInfos[index];
		for (var i = index+1; i < sortedTagInfos.length; i++) 
			if (sortedTagInfos[i][1].count == c) {
				if (sortedTagInfos[i][0].match(filterRE))
					result++;
			} else
				break;
		return result;
	};
	
	var getInitialTagSuggestions = function(filterRE, maxCount) {
		var tagInfos = abego.internal.getTagManager().getSortedTagInfos();
		var result =[];
		var lastCount = 0;
		for (var i = 0; i < tagInfos.length; i++) {
			var c = tagInfos[i][1].count;
			
			// Stop adding tags to the result if not all tags with that count of tiddlers would fit into the result.
			if (c != lastCount) {
				if (maxCount && (result.length + getNumberOfTagsWithSameCount(tagInfos, i, filterRE) > maxCount)) 
					break;
				lastCount = c;
			}
			// Don't add tags that are only used in one tiddler.
			if (c == 1) 
				break;
			var s = tagInfos[i][0];
			if (s.match(filterRE))
				result.push(s);
		}
		return result;
	};
	
	var getAllFilteredTags = function(filterRE, extraTags) {
		return abego.filterStrings(
				abego.internal.getTagManager().getAllTags(extraTags),
				filterRE);
	};

	// Refreshes the tagSuggestions window
	//
	var refreshPopup = function() {
		if (!fSuggestionPopup) 
			return;
	
		// Load the template for the YourSearchResult
		var html = store.getTiddlerText("IntelliTaggerMainTemplate");
		if (!html) 
			html = "<b>Tiddler IntelliTaggerMainTemplate not found</b>";
		fSuggestionPopup.innerHTML = html;
	
		// Expand the template macros etc.
		applyHtmlMacros(fSuggestionPopup,null);
		refreshElements(fSuggestionPopup,null);
	};
	
	var onTagClicked = function(e) {	
		if (!e) var e = window.event;
		var tag = this.getAttribute("tag");
		if (fOnTagSelected)
			fOnTagSelected.call(this,tag, e);
			
		return false;
	};

	var addSeparator = function(place) {
		createTiddlyElement(place,"span",null,"tagSeparator", " | ");
	};
	
	var appendTags = function(place, tags, suggestionIndex, excludeTags, maxCount) {
		if (!tags)
			return;
			
		var excludeTagSet = excludeTags ? abego.toSet(excludeTags) : {};
		var n = tags.length;
		var c = 0;
		for (var i = 0; i < n; i++) {
			var tag = tags[i];
			if (excludeTagSet[tag])
				continue;
				
			if (c > 0) 
				addSeparator(place);
				
			if (maxCount && c >= maxCount) {
				abego.createEllipsis(place);
				break;
			}
			c++;
			
			var shortcutText = "";
			var placeForButton = place;
			if (suggestionIndex < 10) {
				// create a wrapping span that ensures the number and the text are not linebreaked.
				placeForButton = createTiddlyElement(place,"span",null,"numberedSuggestion");
				
				suggestionIndex++;
				var key = suggestionIndex < 10 ? ""+(suggestionIndex) : "0";
				createTiddlyElement(placeForButton,"span",null,"suggestionNumber", key+") ");
				var fastKeyText = suggestionIndex == 1 ? "Return or " : "";
				shortcutText = " (Shortcut: %1Alt-%0)".format([key, fastKeyText]);
			}

			var shiftClickToolTip = config.views.wikified.tag.tooltip.format([tag]);
			var normalClickToolTip = (isCurrentTag(tag) ? "Remove tag '%0'%1" : "Add tag '%0'%1").format([tag,shortcutText]);
			var tooltip = "%0; Shift-Click: %1".format([normalClickToolTip, shiftClickToolTip]);
			var btn = createTiddlyButton(
					placeForButton,
					tag,
					tooltip, 
					onTagClicked, 
					isCurrentTag(tag) ? "currentTag" : null);
			btn.setAttribute("tag",tag);
		}
	};
	
	var scrollVisible = function() {
		// Scroll the window to make the fSuggestionPopup page (and the anchorElement) visible.
		if (fSuggestionPopup) window.scrollTo(0,ensureVisible(fSuggestionPopup));
		if (getAnchorElement()) window.scrollTo(0,ensureVisible(getAnchorElement()));
	};

	// Close the suggestions window when the user clicks on the document
	// (and not into the getAnchorElement or in the suggestions window)
	//
	var onDocumentClick = function(e) {
		if (!e) var e = window.event;
		if (!fSuggestionPopup) 
			return;
		
		var target = resolveTarget(e);
		if (target == getAnchorElement()) return; 
		if (abego.isDescendantOrSelf(fSuggestionPopup, target)) return; 
		
		abego.IntelliTagger.close();
	};
	addEvent(document,"click",onDocumentClick);
	
	// We added a space to the tags edit field. To avoid that the 
	// tiddler is marked as "changed" just because of that we trim
	// the field value
	//
	var oldGatherSaveFields = Story.prototype.gatherSaveFields;
	Story.prototype.gatherSaveFields = function(e,fields) {
		oldGatherSaveFields.apply(this, arguments);
		var tags = fields.tags;
		if (tags) 
			fields.tags = tags.trim();
	};
	

	var focusTagsField = function(title) {
		story.focusTiddler(title,"tags");
		var tags = abego.getTiddlerField(story, title, "tags");
		if (tags) {
			var len = tags.value.length;
			abego.setRange(tags, len, len);
			window.scrollTo(0,ensureVisible(tags));
		}
	};
	

	// Attach the assistTagging to the "tags" edit field.
	//
	var oldEditHandler = config.macros.edit.handler;
	config.macros.edit.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
		oldEditHandler.apply(this, arguments);
		var field = params[0];
		if((tiddler instanceof Tiddler) && field == "tags") {
			// Just added the "edit tags" field. 
			// Attach it to the "Tag Suggestions" feature.
			var inputField = place.lastChild;
			inputField.onfocus = function(e) {
				abego.IntelliTagger.assistTagging(inputField, tiddler);
				setTimeout(
						function() {
							focusTagsField(tiddler.title);
						}, 100);

			};
			inputField.onkeyup = function(e) {
				if (!e) var e = window.event;
				if (e.altKey && !e.ctrlKey && !e.metaKey && (e.keyCode >= 48 && e.keyCode <= 57)) {
					useNthSuggestion(e.keyCode == 48 ? 9 : e.keyCode-49, inputField, tiddler);
 				} else if (e.ctrlKey && e.keyCode == 32) {
					useNthSuggestion(0, inputField, tiddler);
				} if (!e.ctrlKey && (e.keyCode == 13 || e.keyCode == 10)) {
					useNthSuggestion(0, inputField, tiddler);
				}
 
				setTimeout(
					function() {
						abego.IntelliTagger.assistTagging(inputField, tiddler);
					}, 100);
				return false;
			};
			
			// ensure that the tags text ends with a space 
			// (otherwise the last word is used as a filter when the field gets the focus)
			ensureFieldEndsWithSpace(inputField);
		}
	};
	
	var onEditTags = function(e) {
		if (!e) var e = window.event;
		var target = resolveTarget(e);
		
		var title = target.getAttribute("tiddler");
		if (title) {
			story.displayTiddler(target,title,"IntelliTaggerEditTagsTemplate", false);
			focusTagsField(title);
		}
		return false;
	};
	
	// Add an "[edit]" button to the "tags" field that is displayed with the tiddler in the ViewTemplate.
	// Pressing the button allows editing the tags only, with the text still being displayed in wikified form.
	//
	var oldTagsHandler = config.macros.tags.handler;
	config.macros.tags.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
		oldTagsHandler.apply(this, arguments);

		abego.IntelliTagger.createEditTagsButton(tiddler, createTiddlyElement(place.lastChild,"li"));
	};
	
	// close the Suggestion Window when the tiddler is no longer edited
	// (i.e. the tag edit inputfield is gone.)
	// 
	// (Note: we must poll this condition since onblur on the input field 
	// cannot be used since every click into the suggestion window results
	// in a lost focus/blur)
	//
	var closeIfAnchorElementIsHidden = function() {
		if (fSuggestionPopup && fAnchorElement && !abego.isDescendantOrSelf(document, fAnchorElement)) 
			abego.IntelliTagger.close();
	};
	setInterval(closeIfAnchorElementIsHidden, 100);
	
//----------------------------------------------------------------------------
// The public API
//----------------------------------------------------------------------------
	
	// @param suggestedTags 
	//				array of strings representing the tags to be suggested.
	//
	// @param activeTags 
	//				array of strings representing the tags currently "active".
	//
	// @param favoriteTags [optional] 
	//				a subset of the suggested tags that are "favorites". 
	//				I.e. They should be presented first etc.
	//
	// @param anchorElement [optional]
	//				when defined the suggestions are displayed "close" to the anchorElement. 
	//				The page is scrolled to make the anchorElement visible.
	//				When the anchorElement is not defined the suggestions are displayed in the
	//				center of the window.
	//
	// @param onTagSelected [optional]
	// 				function(tag, e) to be called when a tag is selected.
	//
	abego.IntelliTagger.displayTagSuggestions = function(suggestedTags, activeTags, favoriteTags, anchorElement, onTagSelected) {
		fSuggestedTags = suggestedTags;
		fActiveTagSet = abego.toSet(activeTags);
		fFavoriteTags = favoriteTags;
		fAnchorElement = anchorElement;
		fOnTagSelected = onTagSelected;
	
		if (!fSuggestionPopup) {
			fSuggestionPopup = createTiddlyElement(document.body,"div",null,"intelliTaggerSuggestions");
			fSuggestionPopup.style.position = "absolute";
		}
	
		refreshPopup();
		abego.openAsPopup(fSuggestionPopup);
		
		if (getAnchorElement()) {
			var w = getAnchorElement().offsetWidth;
			if (fSuggestionPopup.offsetWidth < w) {
				fSuggestionPopup.style.width = (w-2*(PADDING+BORDERWIDTH)) + "px";
			}
			abego.moveBelowAndClip(fSuggestionPopup, getAnchorElement());
		} else {
			abego.centerOnWindow(fSuggestionPopup);
		}

		scrollVisible();
	};
	
	// Shows the Tag Suggestion Popup for the given tiddler, below the specified inputField.
	//
	abego.IntelliTagger.assistTagging = function(inputField, tiddler) {
		var filterRE = getFilter(inputField);
		var s = inputField.value;
		if (lastWordIsFilter(inputField)) 
			s = removeLastWord(s);
		var activeTags = s.readBracketedList();
		var favoriteTags = activeTags.length > 0 
				? abego.filterStrings(abego.internal.getTagManager().getPartnerRankedTags(activeTags), filterRE, MAX_FAVORITE_TAGS)
				: getInitialTagSuggestions(filterRE, MAX_FAVORITE_TAGS);
		abego.IntelliTagger.displayTagSuggestions(
				getAllFilteredTags(filterRE,activeTags), 
				activeTags,
				favoriteTags, 
				inputField,
				function(tag, e) {
					if (e.shiftKey) {
						onClickTag.call(this,e);
					} else
						updateTag(tag, inputField, tiddler);
				});
	};
	
	// Closes the Tag Suggestions Popup
	//
	abego.IntelliTagger.close = function() {
		abego.closePopup(fSuggestionPopup);
		fSuggestionPopup = null;
		return false;
	};

	// Creates an TiddlyButton at the given place to edit the tags of the given tiddler.
	//
	abego.IntelliTagger.createEditTagsButton = function(tiddler, place, text, tooltip, className, id, accessKey) {
		if (!text) text = "[edit]";
		if (!tooltip) tooltip = "Edit the tags";
		if (!className) className = "editTags";
		
		var editButton = createTiddlyButton(place,text,tooltip, onEditTags, className, id, accessKey);
		editButton.setAttribute("tiddler", (tiddler instanceof Tiddler) ? tiddler.title : String(tiddler));
		
		return editButton;
	};

	abego.IntelliTagger.getSuggestionTagsMaxCount = function() {
		return 100;
	};
//----------------------------------------------------------------------------
// Macros
//----------------------------------------------------------------------------

// ====Macro intelliTagger ================================================

	config.macros.intelliTagger = {
		// Standard Properties
		label: "intelliTagger",

		handler : function(place,macroName,params,wikifier,paramString,tiddler) {
						var namesAndValues = paramString.parseParams("list",null, true);
						var actions = namesAndValues[0]["action"];
						for (var i = 0; actions && i < actions.length; i++) {
							var actionName = actions[i];
							var action = config.macros.intelliTagger.subhandlers[actionName];
								
							if (!action) 
								abego.alertAndThrow("Unsupported action '%0'".format([actionName]));
								
							action(place,macroName,params,wikifier,paramString,tiddler);
						}
					},
			
		subhandlers: {
			
			showTags : function(place,macroName,params,wikifier,paramString,tiddler) {
						appendTags(place, fSuggestedTags, fFavoriteTags ? fFavoriteTags.length : 0, fFavoriteTags,abego.IntelliTagger.getSuggestionTagsMaxCount());
					},
			
			showFavorites : function(place,macroName,params,wikifier,paramString,tiddler) {
						appendTags(place, fFavoriteTags, 0);
					},
			
			closeButton : function(place,macroName,params,wikifier,paramString,tiddler) {
						var button = createTiddlyButton(place, "close", "Close the suggestions", abego.IntelliTagger.close);
					},

			version : function(place) {
						var t = "IntelliTagger %0.%1.%2".format(
								[version.extensions.IntelliTaggerPlugin.major, 
								 version.extensions.IntelliTaggerPlugin.minor, 
								 version.extensions.IntelliTaggerPlugin.revision]);
						var e = createTiddlyElement(place, "a");
						e.setAttribute("href", "http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin");
						e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">'+t+'<font>';
					},

			copyright : function(place) {
						var e = createTiddlyElement(place, "a");
						e.setAttribute("href", "http://tiddlywiki.abego-software.de");
						e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">&copy; 2006-2007 <b><font color="red">abego</font></b> Software<font>';
					}
		}
	};
	
})();
//}}}

//#endOf: MainCode
//{{{
config.shadowTiddlers["IntelliTaggerStyleSheet"] = 
			"/***\n"+
			"!~IntelliTagger Stylesheet\n"+
			"***/\n"+
			"/*{{{*/\n"+
			".intelliTaggerSuggestions {\n"+
			"\tposition: absolute;\n"+
			"\twidth: 600px;\n"+
			"\n"+
			"\tpadding: 2px;\n"+
			"\tlist-style: none;\n"+
			"\tmargin: 0;\n"+
			"\n"+
			"\tbackground: #eeeeee;\n"+
			"\tborder: 1px solid DarkGray;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .currentTag   {\n"+
			"\tfont-weight: bold;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .suggestionNumber {\n"+
			"\tcolor: #808080;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .numberedSuggestion{\n"+
			"\twhite-space: nowrap;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .intelliTaggerFooter {\n"+
			"\tmargin-top: 4px;\n"+
			"\tborder-top-width: thin;\n"+
			"\tborder-top-style: solid;\n"+
			"\tborder-top-color: #999999;\n"+
			"}\n"+
			".intelliTaggerSuggestions .favorites {\n"+
			"\tborder-bottom-width: thin;\n"+
			"\tborder-bottom-style: solid;\n"+
			"\tborder-bottom-color: #999999;\n"+
			"\tpadding-bottom: 2px;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .normalTags {\n"+
			"\tpadding-top: 2px;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .intelliTaggerFooter .button {\n"+
			"\tfont-size: 10px;\n"+
			"\n"+
			"\tpadding-left: 0.3em;\n"+
			"\tpadding-right: 0.3em;\n"+
			"}\n"+
			"\n"+
			"/*}}}*/\n";

config.shadowTiddlers["IntelliTaggerMainTemplate"] = 
			"<!--\n"+
			"{{{\n"+
			"-->\n"+
			"<div class=\"favorites\" macro=\"intelliTagger action: showFavorites\"></div>\n"+
			"<div class=\"normalTags\" macro=\"intelliTagger action: showTags\"></div>\n"+
			"<!-- The Footer (with the Navigation) ============================================ -->\n"+
			"<table class=\"intelliTaggerFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n"+
			"  <tr>\n"+
			"\t<td align=\"left\">\n"+
			"\t\t<span macro=\"intelliTagger action: closeButton\"></span>\n"+
			"\t</td>\n"+
			"\t<td align=\"right\">\n"+
			"\t\t<span macro=\"intelliTagger action: version\"></span>, <span macro=\"intelliTagger action: copyright \"></span>\n"+
			"\t</td>\n"+
			"  </tr>\n"+
			"</tbody></table>\n"+
			"<!--\n"+
			"}}}\n"+
			"-->\n";
			
config.shadowTiddlers["IntelliTaggerEditTagsTemplate"] = 
			"<!--\n"+
			"{{{\n"+
			"-->\n"+
			"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+
			"<div class='title' macro='view title'></div>\n"+
			"<div class='tagged' macro='tags'></div>\n"+
			"<div class='viewer' macro='view text wikified'></div>\n"+
			"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+
			"<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n"+
			"<!--\n"+
			"}}}\n"+
			"-->\n";
			
config.shadowTiddlers["BSD open source license (abego Software)"] = "See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";
config.shadowTiddlers["IntelliTaggerPlugin Documentation"] = "[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/doc/IntelliTagger.pdf]].";
config.shadowTiddlers["IntelliTaggerPlugin SourceCode"] = "[[Plugin source code on abego Software website|http://tiddlywiki.abego-software.de/archive/IntelliTaggerPlugin/Plugin-IntelliTagger-src.1.0.2.js]]\n";
			
			
//}}}

//{{{
(function() {
	var oldRestart = restart;
	restart = function() {
setStylesheet(store.getTiddlerText('IntelliTaggerStyleSheet'),'IntelliTaggerStyleSheet');
		oldRestart.apply(this,arguments);
	}
})();

//}}}
			
//{{{
} // of single install
//}}}

Entries within the month of June (any year)
This is a tag to identify the key experimental results from my work.  This way you can easily navigate to these results via this tiddler.
This tag is to delineate the key findings that I generate so that they are immediately accessible for examination.  We will set up a automated new entry with KeyFinding tag and structure (Image, Explanation, link to journal entry for full details etc)
Not intended as the first place to store data but rather to link together the big findings that tell our story.
This is the tissue culture 4C fridge in the lentivirus tissue culture room (also known as BSL-2 TC).

Current Stocks:
cGFPLV050107
tomatoLV050107
pk2shRNA1050107
pk2shRNA2050107
pk2shRNA3050107
These are "protocols" if you will for the tasks to keep the lab running.  Think of these as the chores of the lab that go along with using various modalities
These are all the daily entries that provide an outline for the day's work.  These are not meant to contain all of the details of a particular protocol done that day.  For this look at [[Instances]] that are referenced in the particular entry. These [[Instances]] are printed and used as templates for carrying out the protocols.  The daily entry really keeps track of which protocols were carried out that day and importantly the results obtained that day and interpretation (discussion) of these results.  These latter two pieces allow a thread to be formed from one entry to the next regarding amassed results and their meaning as we proceed.  The idea is that this should facilitate writing a paper once we get to a "publishable unit" of data.  Of course, the searchable nature of this TiddlyWiki makes it easier to find details of what we are doing very easily and this is a huge advantage over paper notebooks.
Starting with desired tissue, fix lightly in 4% paraformaldehyde for 20minutes with gentle rocking
[Optional: After fixation you may need to permeabilize the tissue by incubation in
<<slider PermSolution "Permeabilization Solution" "Permeabilization Solution" "inserts permeabilization solution recipe">>
for 10minutes.]

Wash 3 times in PBS 5 minutes each
Transfer to 
<<slider X-GalReactionMix "X-gal reaction mixture" "X-gal reaction mixture" "inserts X-gal reaction mix recipe">>
and incubate overnight to 2 days at RT (in dark)
Need stocks of 
0.2M NH4FeCN3 (ferrous cyanide)
0.2M NH4FeCN4 (ferric cyanide)
MgCl2
Tris-HCl pH 6.8 (250 mM) 	.3 g
40% (v/v) Glycerol 	4 ml
5% (p/v) SDS 	.5 g
0.005% (p/v) Bromophenol Blue 	.5 mg
!Lentivirus Production Protocol
  	  	 
  	

    * Supplies:

      - 293FT Cells (Invitrogen: R700-07)
      - T-225 tissue culture flasks (Nunc: 159934)
      - T-75 tissue culture flasks (Nunc: 156499)
      - 500 cm2 tissue culture plates (Nunc: 166508)
      - Ultracentrifuge tubes (Beckman Coulter): 344058)
      - DMEM (Cambrex: 12-604Q)
      - UltraCULTURE (Cambrex: 12-725F)
      - Penicillin/Steptomycin w/ L-Glutamine (Cambrex: 17-718R)
      - Sodium Pyruvate Solution (Cambrex: 13-115E)
      - Sodium Bicarbonate Solution (Cambrex: 17-613E)
      - Phosphate Buffered Saline w/o Ca2+ and Mg2+ (Cambrex: 17-516F)
      - Defined Fetal Bovine Serum (HyClone: SH30070.03)
      - Sodium Butyrate (Sigma: 19364-1G)
      - HEPES (Sigma: 54457-50G-F)
      - Sodium Phosphate Dibasic (Sigma: 71636-250G)
      - Sodium Chloride (Sigma: 71376-1KG)
      - Hexadimethrine bromide (Sigma: 107689-10G)
      - Sodium Hydroxide (Sigma: 71689-500G)
      - Distilled H2O (Quality Biological: 118-162-101)
      - Calcium Chloride 2 M solution (Quality Biological: 351-130-061)
      - 0.45 um Low-protein binding filter flask (Millipore: SCHVU02RE)

  	  	 
  	
!Solutions:

!!!D10 Cell Maintenance Media (per 500 mL)

          - 500 mL DMEM
          - 50 mL FBS (10% w/v)
          - 5 mL Pen/Strep/L-Glu (1% w/v)
          - 5 mL Sodium Pyruvate (1% w/v)
          - 5 mL Sodium Bicarbonate (1% w/v)

!!!Virus Production Media (per 500 mL)

          - 500 mL UltraCULTURE
          - 5 mL Pen/Strep/L-Glu (1% w/v)
          - 5 mL Sodium Pyruvate (1% w/v)
          - 5 mL Sodium Bicarbonate (1% w/v)

!!!20% Sucrose Solution (per 50 mL)

          - 10 g sucrose
          - Bring the volume to 50 mL using PBS w/o Ca2+ or Mg2+
          - Filter with 0.22 um filter

!!!2X HBS Buffer (per 500 mL)

          - Add to 450 mL of distilled H2O
          5.96 g HEPES (50 mM, MW 238.3)
          0.106 g Na2HPO4 (1.5 mM, MW 141.96)
          8.18 g NaCl (280 mM, MW 58.44)
          Note: the pH should be around 5.9 at this point. Titrate with NaOH to 7.05 (use 5 M first then switch to 1 M)
          - Fill the volume to 500 mL
          - Filter with 0.22 um filter
          - This solution is stable at room temperature for 6 months

	
  	 
  	

!! Protocol:

      Note: It is important to use low passage 293FT cells for the production of viruses. To make sure the cell is always in the fastest growth phase, never let the cells grow to 100% confluence.

!!! Day 0:

      - Split 4 T-225 flasks of 95% confluent 293FT cells into 4 500 cm2 plates. For each plate, use 100 mL of D10 media.

      - Rock the plate gently to evenly distribute the cells.

      - Incubate the plates at 37oC overnight. The cells should reach 90% confluence in 24 hours.

!!! Day 1:

      - Prewarm 330 mL of D10 to room temperature.

      - In a 50 mL conical tube, prepare the following mixture:
      o 550 ug of lentivirus plasmid (e.g. pLECYT, pFCK-hChR2-mCherry)
      o 550 ug of pCMVdeltaR8.74 (contains GAG, POL)
      o 360 ug of pMD2.G (contains VSVg)
      At this point mix thoroughly
      o Add 4.55 mL of 2 M CaCl2 solution
      o Bring the volume to 19 mL total with distilled H2O
      o Mix thoroughly.

      - Add 19 mL of 2X HBS to the DNA/CaCl2 mix.
      o Mix thoroughly and quickly. Then pour directly into 330 mL of prewarmed D10

      - Remove the old media from the plates. Add 90 mL of the D10-containing transfection mix to each plate
      o Be careful to not tilt the plate too much. Cells may detach easily.

      - Put the plates back into the incubator

!!! Day 2:

      - Pewarm D10 media to room temperature

      - 15 to 16 hours after initial transfection, remove the transfection media from the plates and wash each plate with 50 mL of fresh D10. Then add 90 mL of fresh D10 to each plate

      - Put cells back into incubator for 8 hours

      8 hours later

      - Prewarm 200 mL of Virus Production Media

      - 24 hours post transfection, replace the old media with 50 mL of Virus Production Media containing 5 mM Sodium Butyrate

      - Put cells back into the incubator. Cells are very easy to detach at this time so be very gentle.


!!! Day 3:

      - Sterilize 6 ultracentrifuge tubes by spraying with EtOH and the let them air dry in the tissue culture hood.

      - 48 hours post transfection, collect the virus containing supernatant into four 50 mL conical tubes and centrifuge for 5 minutes at 1000 rpm.

      - Prefilter a low-protein binding 0.45 um filter flask with 30 mL of D10 media.

      - Filter the virus-containing supernatant through the 0.45 um filter flask.

      - Divide the filtered virus-containing supernant among the six centrifuge tubes.

      - To the bottom of each centrifuge tube, add 2 mL of 20% Sucrose Solution.

      - Centrifuge in a Beckman SW-28 rotor for 2 hours at 25,000 rpm, 4oC.

      - Gently carry the centrifuge tubes back to the tissue culture hood and pour out the supernatant. There should be a tiny semi-transparent pellet at the bottom of each centrifuge tube, looks like a contact lens.

      - Dry the side of each tube with Kimwipe.

      - Add 100 ul of cold PBS to the first tube and resuspend the pellet by swirling and gentle pipetting. Do NOT pipet too much because it will degrade the virus.

      - Transfer the media from the first centrifuge tube into the next to resuspend the second pellet. Repeat for the 4 additional tubes.

      - After resuspending all 6 centrifuge tubes, pipet the virus solution into an Eppendorf tube and spin at 7k for 5 minutes. This step is used to remove the unsuspended virus debris.

      - Aliquot the supernatant and store at –80oC.
 1. The day before split 5x10^^5^^ cells/well of 293T cells in 2 ml into each well of a 6-well plate.
!!!Transfection (at 50-80% confluency)
 2. For each of the six wells complex enough Lipofectamine:
    10ul +250ul OptiMEM per reaction X 6 = in one epi tube add 60ul Lipofectamine and 1.5mls optimem
 3. Incubate for 5 minutes RT
 4. In the meantime, dilute DNA into total volume of 250ul OptiMEM:
|SIN Transfer Vector| 1ug||
|packaging pMDL|0.66ug|X6= 4ug|
|Rev pRSV-Rev|0.33ug|X6= 2ug|
|envelope pCMV-VSVg|0.33ug|X6= 2ug|
	(Can add the pMDL, Rev, and PCMV-VSVg plasmids in 6X quantity to 1.5ml OptiMEM, aliquot to six tubes and then add transfer vector individually to save pipetting steps.)
   5. Add Lipofectamine complex 260ul to DNA and incubate at RT for 15 mins.
   6. Add to cells dropwise, [[criss-cross agitate|CCAgitate]] dish to distribute.
   7. Incubate at 37C for 24 h
   8. Change media to 1 ml pre-warmed DMEM, high glucose + 10% FBS + 1% pen/strep (collect viral supernatant in 50% of normal culture volume to increase titer).
   9. If transfer vector has a fluorescent marker (eg. GFP), look for transformants by microscopy. Transformation efficiency of >95% is desired for high titer virus. Cells take on a blistered, jagged appearance as they are releasing virus – they may also detach from the plate (but still produce virus if they detach).
  10. Collect medium (viral supernatant) once 60-72 h after transfection.
  11. Spin 5 mins, 2,500 rpm to clear supernatant.
  12. Filter viral supernatant through a low protein binding 0.45 m filter – to prevent loss of titer, wet filter first by filtering some media.
  13. It is best to use the viral supernatant immediately, but it may be stored at 4C overnight if VSV-G was used for viral envelope. For long term storage virus should be aliquoted and frozen at –80C (do not snap freeze).

[img[6Well|http://ashvin-imac.stanford.edu/TWLabNotebook/6Well.jpg]]
!Lentivirus preparation  (modified from Eszter Vladar, Stearns Lab, Stanford University, 2007)

!!!293T producing cells
- 293T cells are grown in DMEM, high glucose + 10% FBS + 1% pen/strep (ex. Gibco 11995-065). Never allow cells to get above 80% confluency. Split 1:6 every other day – monitor cells closely for constant growth characteristics and morphology. If producing virus continuously, start with a fresh batch of cells every 2-3 months.

- Always count cells with hemacytometer, exact cell count is important.

- 293T cells are barely adherent – even the gentlest stream of liquid can dislodge them from the plate, especially when producing virus. Avoid rinsing cells with PBS whenever possible, except before trypsinization. Always trypsinize cells, don’t just “blast” them off plate with medium!
Pilot prep (HIV-based vector system with Lipofectamine2000)
 

   1. The day before split 5x10^^5^^ cells/well of 293T cells in 2 ml into a 6-well plate.
   2. Transfect cells at ~50% confluency.
   3. To transfect:

            to tube A add: 133 ul optimem (no additives, warmed to RT)

                                 5 ul of Lipofectamine2000 ()

                              - tap to mix

            to tube B add: 1.5 ug envelope vector (ex. [[pMD2.VSVg]])

             1 ug packaging vector (ex. [[pCMVdeltaR8.74]])

                          1 ug transfer vector

                        - maxiprep DNA from single colony, verify by restriction digest, 500 ng/ul minimum concentration

   4. Add tube A to tube B dropwise, tap to mix.
   5. Incubate at RT for 15 mins.
   6. Add to cells dropwise, swirl dish to distribute.
   7. Incubate at 37C for 24 h
   8. Change media to 1 ml pre-warmed DMEM, high glucose + 10% FBS + 1% pen/strep (collect viral supernatant in 50% of normal culture volume to increase titer).
   9. If transfer vector has a fluorescent marker (eg. GFP), look for transformants by microscopy. Transformation efficiency of >95% is desired for high titer virus. Cells take on a blistered, jagged appearance as they are releasing virus – they may also detach from the plate (but still produce virus if they detach).
  10. Collect medium (viral supernatant) once 60-72 h after transfection.
  11. Spin 5 mins, 2,500 rpm to clear supernatant.
  12. Filter viral supernatant through a low protein binding 0.45 m filter – to prevent loss of titer, wet filter first by filtering some media.
  13. It is best to use the viral supernatant immediately, but it may be stored at 4C overnight if VSV-G was used for viral envelope. For long term storage virus should be aliquoted and frozen at –80C (do not snap freeze).

Titering the virus
 

- lenti is generally titered on HeLa or NIH/3T3 cells.  

   1. The day before split 0.5X105 cells for a 24-well plate or 1X105 cells for a 12-well plate.
   2. Infect cells at ≤ 50% confluency.
   3. To infect, aspirate media from cells.
   4. Add desired amount of virus and media to cells to total of 300 ul for 24-well plate, 600 ul for 12-well plate (60% of normal culture volume - use smallest possible amount of liquid above cells to increase concentration of viral particles).

      ex) 300 ul media + 0 ul virus

            250 ul media + 50 ul virus

            200 ul media + 100 ul virus

            100 ul media + 200 ul virus

            - want to try at least 3 different MOI’s along with no virus control

   5. Add 5 mg/ml Polybrene (Sigma-Aldrich) to 5 ug/ml final concentration.
   6. Gently swirl to distribute.
   7. Incubate at 37C for 24 h. If the virus is marked with GFP, etc., GFP+ cells should be visible at this point.
   8. Change media to fresh DMEM + 10% FBS + 1% pen/strep.
   9. FACS sort cells to quantitate titer, also can validate lenti construct in titering cells before moving onto target cells (test for knockdown if using shRNA transfer vector, etc.)

 

 

!Large scale calcium phosphate lenti/retro prep
 
(Eszter Vladar, Stanford University, 2007)
Virus producing cells
- 293T (for lenti or retro with VSV-G) and FNX-A (for retro) cells are grown in DMEM, high glucose + 10% FBS + 1% pen/strep (ex. Gibco 11995-065). Never allow cells to get above 80% confluency. Split 1:6 every other day – monitor cells closely for constant growth characteristics and morphology. If producing virus continuously, start with a fresh batch of cells every 2-3 months.

- Always count cells with hemacytometer, exact cell count is important.

- These cells are barely adherent – even the gentlest stream of liquid can dislodge them from the plate, especially when producing virus. Avoid rinsing cells with PBS whenever possible, except before trypsinization. Always trypsinize cells, don’t just “blast” them off plate with medium! 

Preparation of solutions 

1. <<slider "2X HBS-m" "2X HBS-m" "2X HBS-m">>


2. 2M CaCl2 (MW 147.01) 

Mix 29.4 g with 100 ml MilliQ H2O using stir bar, filter through 0.22 micron filter and prepare 10 ml aliquots for storage at -20C, working stock can be stored at 4C for a few weeks. 

 

!Transfection protocol  

Use two 10 cm plates or one 15 cm plate per virus.  

   1. For 10 cm plates, seed 2.5-3.0 x 106 293T cells and 3.0 x 106 FNX-A cells in 10 ml; for 15 cm plates, seed 6.0 x 106 cells in 20 ml 18-24 hrs before transfection. Cells should be about 75% confluent at the time of transfection.
   2. Remove 1 ml of media from 10 cm dish or 2 ml of media from 15 cm dish to accommodate transfection mixture.
   3. Mix DNA with cell culture grade water, quickly vortex at low setting.

       Retro in 10 cm dish: 10 ug DNA + water to 439 ul
       Retro in 15 cm dish: 30 ug DNA + water to 878 ul 
       Lenti in 10 cm dish: 5 ug transfer vector + 3.5 ug packaging vector + 1.5 ug envelope vector + water to 439 ul
!!!Lenti in 15 cm dish: 16 ug transfer vector + 12 ug packaging vector + 3 ug envelope vector + water to 878 ul 

   Use Falcon2058 (FACS) tubes for 10 cm; Falcon2059 or regular 15 ml Falcon tubes for 15 cm plates.

   4. Proceed with each transfection mix individually: add 61 ul of 2M CaCl2, vortex gently.
   5. Add 500 ul of 2X HBS to the mixtures (10 cm plates) or 1 ml (15 cm plates) with constant bubbling.  Bubbles are being constantly delivered to the bottom of the tubes with a pasteur pipette in an automatic pipet aid.
   6. Add chloroquine to each plate to a final concentration of 25 mM (make a 50 mM stock, store at -20C), gently swirl plate,
   7. Add transfection mixture to plate dropwise, gently swirl around. Microscopic examination should reveal very fine black particles.
   8. Incubate plates at 37oC, 5% CO2 for 5-6 hours, then add fresh media.
   9. Harvest viral supernatant 48 hrs later. Centrifuge the supernatants at 2,000 rpm for 5’ to remove any cellular debris, then filter through a 0.45 micron filter. 
  10. Concentrate by spinning at 50,000 x g for 2:20 hrs at 20C in ultracentrifuge.
  11. Decant supernatant and invert tube on kimwipe to let pellet dry for ~10 mins. Do this in the hood – place a piece of Saran Wrap under kimwipes to catch liquid.
  12. Pipet desired amount of PBS over pellet to concentrate 100-500X.
  13. Allow to resuspend at 4C overnight, gently pipet up and down, transfer to eppendorf tube.
  14. Spin 5 mins at 2,600 rpm in table top centrifuge to pellet unresuspended debris.
  15. Make 15-20 ul aliquots, store at -80C.

This tag is to denote work done, protocols, other related items to lentiviral experiments.
This is a blue box.  Contains working plasmids related to building lentiviruses.  Some major stocks are in PlasmidDNABoxA.

|  |1_ |2_ |3_ |4_ |5_ |6_ |7_ |8_ |9_ |10  |
|A |   |   |   |   |   |   |   |   |   |    |
|B |   |   |   |   |   |   |   |   |   |    |
|C |   |   |   |   |   |   |   |   |   |    |
|D |   |   |   |   |   |   |   |   |   |    |
|E |   |   |   |   |   |   |   |   |   |    |
|F |   |   |   |   |   |   |   |   |   |    |
|G |   |   |   |   |   |   |   |   |   |    |
|H |   |   |   |   |   |   |   |   |   |    |
|I |   |   |   |   |   |   |   |   |   |    |
|J |   |   |   |   |   |   |   |   |   |    |
samples:

Starting with the cell-type of interest plated near 50-90% confluent,
Change medium to include _ _ _ (3-6ug/ml) of [[Polybrene Stock (Hexadimethrine)]]
May dilute virus in serial dilutions to achieve a set of dilutions for measuring titer.
Use _ _ _ ul of virus in each of the wells
Incubate in 37^^o^^C incubator with 5% CO~~2~~ overnight.
Examine the cells in the AM for signs of infection (eg. fluorescence from cGFP, tdtomato etc)
!Samples:

 1. Two days before split an 80% confluent 10cm plate of 293T cells 1:10 with 25 ml fresh BasicMedium (DMEM +10%FBS +1% Pen/Strep) in each 15cm plate.
!!!Transfection (at 50-80% confluency)
 2. For each of the plates complex enough Lipofectamine:
    60ul +1.5ml OptiMEM per reaction 
 3. Incubate for 5 minutes RT
 4. In the meantime, dilute DNA into total volume of 250ul OptiMEM:
|SIN Transfer Vector| 10ug||
|packaging pMDL|6.6ug|X5= 33ug|
|Rev pRSV-Rev|3.3ug|X5= 17ug|
|envelope pCMV-VSVg|3.3ug|X5= 17ug|
	(Can add the pMDL, Rev, and PCMV-VSVg plasmids in 5X quantity to 7.5ml OptiMEM, aliquot to six tubes and then add transfer vector individually to save pipetting steps.)
   5. Add Lipofectamine complex 1.5ml to DNA 1.5mls in 6ml polypropylene tube, mix and incubate at RT for 15 mins.
   6. Add to cells dropwise, [[criss-cross agitate|CCAgitate]] dish to distribute.
   7. Incubate at 37C for 12-16 h
   8. Change media to 25 ml pre-warmed DMEM, high glucose + 10% FBS + 1% pen/strep (collect viral supernatant in 50% of normal culture volume to increase titer).
   9. If transfer vector has a fluorescent marker (eg. GFP), look for transformants by microscopy. Transformation efficiency of >95% is desired for high titer virus. Cells take on a blistered, jagged appearance as they are releasing virus – they may also detach from the plate (but still produce virus if they detach).
  10. Collect medium (viral supernatant) once 60-72 h after transfection.
  11. Spin 5 mins, 2,500 rpm to clear supernatant from cell debris.
  12. Filter viral supernatant through a low protein binding 0.45 m filter – to prevent loss of titer, wet filter first by filtering some media.
  13. It is best to use the viral supernatant immediately, but it may be stored at 4^^o^^C overnight if VSV-G was used for viral envelope. One can use 50ul unconcentrated virus to transduce neurons. 
  14. For high concentration virus spin in SW32Ti rotor using Beckman Ultracentrifuge tubes (#344058) capacity 37mls. Fill with PBS and spin at 55000g for 2hours (19000rpm 4^^o^^C)
For long term storage virus should be aliquoted and frozen at –80^^o^^C (do not snap freeze).

|Date of isolation|Method|Titer|Storage|
| |  LentiviralMaxiprep-v1.0 | U/ml| [[LVTCFridge]] |
| |  LentiMiniprep-v1.0 |  U/ml | [[LVTCFridge]] |
Lentivirus preparation (HIV-based vector system with CaPO4) adapted from Eszter Vladar, Stearns Lab, Stanford University 2007
 

   1. The day before split 2.5-3X106 293T cells in 10 mls each onto 2 10 cm tissue culture plates per viral construct.
   2. Transfect cells at 70-80% confluency.
   3. To transfect, mix in a 5 ml FACS tube (Falcon 352058 or similar):

   20 ug transfer vector

   15 ug packaging vector [[pCMVdeltaR8.74]]

    6 ug envelope vector [[pMD2.VSVg]]

   4. Add dH20 to 500 ul, vortex.
   5. Add 500 ul 2X HBS, vortex.
   6. Add 50 ul 2.5 M CaCl2, vortex.
   7. Incubate at room temperature for 25 mins to form precipitate. If more than one plate is to be transfected, the mixture can be combined for all plates; however, individual precipitate formation for each plate is advised as it results in maximum transfection efficiency.
   8. Add the mixture to the cells dropwise. High magnification microscopy of the cells should reveal very small granules of the precipitated plasmid DNA, initially above the cell monolayer, and after incubation, on the bottom of the plate and in the large spaces between the cells.
   9. Incubate at 37C for 8 h.
  10. Change medium to 10 ml fresh, pre-warmed DMEM, high glucose + 10% FBS + 1% pen/strep.
  11. Collect media (viral supernatant) 48 h after medium change.
  12. Spin 5 mins, 2500 rpm to clear supernatant.
  13. Filter viral supernatant through a low protein binding 0.45 m filter – to prevent loss of titer, wet filter first by filtering some media.
  14. Viral supernatant may now be concentrated or titered as is. If it is not to be concentrated, then aliquot and freeze at –80C.

 

Concentrating lentiviral supernatant  

   1. Harvest, spin and filter viral supernatant as above.
   2. Transfer supernatant to sterile ultracentrifuge tubes, make sure to fill to the rim with extra medium. (see below).
   3. Spin at 50,000 x g for 2:20 hrs at 20C in ultracentrifuge.
   4. Decant supernatant and invert tube on kimwipe to let pellet dry for ~10 mins. Do this in the hood – place a piece of Saran Wrap under kimwipes to catch liquid.
   5. Pipet desired amount of PBS over pellet to concentrate 100-500X.
   6. Allow to resuspend at 4C overnight, gently pipet up and down, transfer to eppendorf tube.
   7. Spin 5 mins at 2,600 rpm in table top centrifuge to pellet unresuspended debris.
   8. Titer, aliquot and freeze virus as above.
All the tiddlers used to construct the LigationInstance and related items for performing ligations
(_) o/n 16C
(_) 1hr RT (25C)
(_) other _ _ _ _ _ _ 
(_) uncut vector +cntl
(_) cut vector no ligase
(_) cut vector + ligase
(_) cut vector CIP GP +ligase
Rationale for Experiment:

Samples:
|_ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _|
|_ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _|

Reaction setup worksheet:
<<slider ligrxninstrow "LigationReactionTemplateRow" "Ligation Reaction Template Row" "inserts another ligation reaction template row">> 
<<slider ligrxninstrow "LigationReactionTemplateRow" "Ligation Reaction Template Row" "inserts another ligation reaction template row">> 
<<slider ligrxninstrow "LigationReactionTemplateRow" "Ligation Reaction Template Row" "inserts another ligation reaction template row">> 
!!!!!To promote circle formation, useful in transformation, a lower total DNA concentration should be used.  The overall concen tration of vector + insert should be between 1-10ng/ul for efficient ligation.  Insert:vector molar ratios between 2 and 6 are optimal for single insertions.  Ratios below 2:1 result in lower ligation efficiency.  Ratios above 6:1 promote multiple inserts.  If unsure of concentrations, perform ligations with varying ratios
|<<slider Ligcond "LigationConditions" "Ligation Conditions">> |<<slider LigCont "LigationControls" "Ligation Controls">> |<<slider RTligRecs "RTLigationRecs" "Ligation Recs">> |
Transformation conditions: (performed on _ _ _ _ _ _  )
|<<slider EPBrief "(_) Electroporation" "(_) Electroporation">>|<<slider HSBrief "(_) Heat Shock" "(_) Heat Shock">>|
Vector _ _ _ _ _ _ (_)_ _ul
Insert _ _ _ _ _ _ _(_)_ _ul
10XLigbuffer _ _ _(_)_ _ul
T4 DNA Ligase_ _(_)_ _ul
ddH~~2~~0_ _ _ _ _ _ _(_)_ _ul
Total_ _ _ _ _ _ _(_)_ _ul
|<<slider ligrxninst "LigationReactionTemplate" "Ligation Reaction Template" "inserts another reaction template">> |<<slider ligrxninst "LigationReactionTemplate" "Ligation Reaction Template" "inserts another reaction template">> |<<slider ligrxninst "LigationReactionTemplate" "Ligation Reaction Template" "inserts another reaction template">> |<<slider ligrxninst "LigationReactionTemplate" "Ligation Reaction Template" "inserts another reaction template">> |
150 mM Na Phosphate (150mls [[1M NaP]])
0.1% SDS (5mls 20% SDS)
845mls ddH20
to make 1 liter
1L 5X M63 10 g (NH4)2SO4
68 g KH2PO4
2.5 mg FeSO4·7H2O
adjust to pH 7 with KOH
AUTOCLAVE
Other
M9 medium (1 liter) (per Recombineering protocol)
1X 6 g Na2HPO4
3 g KH2PO4
1 g NH4Cl
0.5 g NaCl
AUTOCLAVE

Sigma salts for M9 suggest 56.4 g /L for a 5X stock which ends up with 33.9g Na2HPO4 instead of 30 as above. shouldn't make a difference which one is used.

M6030 
Sigma  	
M9 Minimal Salts, 5X 
Components  
Ingredients (g/L)
Disodium phosphate, 33.9
Monopotassium phosphate, 15
Sodium chloride, 2.5
Ammonium chloride, 5
Name: Blue
Background: #fff
Foreground: #000
PrimaryPale: #cdf
PrimaryLight: #57c
PrimaryMid: #114
PrimaryDark: #012
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

Name: Green
Background: #fff
Foreground: #000
PrimaryPale: #9b9
PrimaryLight: #385
PrimaryMid: #031
PrimaryDark: #020
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

Name: Red
Background: #fff
Foreground: #000
PrimaryPale: #fdd
PrimaryLight: #c55
PrimaryMid: #711
PrimaryDark: #500
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

Name: Smoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

Name: Teal
Background: #fff
Foreground: #000
PrimaryPale: #B5D1DF
PrimaryLight: #618FA9
PrimaryMid: #1a3844
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
DOB 
DOD
Genotype
Sex
Comments
DOB 11/5/2006
DOD
Genotype Math1GFP+
SexF
Comments
[[LabNotebookEntries]] 
<<newTiddler label:"Add New Labbook Entry" tag:"LabNotebookEntries" text:{{store.getTiddlerText('DailyJournalTemplate')}}>> 
-  
<<tag Protocols>> <<tag WorkingProtocols>>
<<tag Instances>> 
<<tag TableTemplates>>
- 
<<tag Recipes>>
- 
<<tag Stocks>> <<tag Storage>> <<tag Plasmids>> <<tag ViralStocks>> <<tag OligoPrimers>>
- [[Organizational Site]]  - 
[[Gmail|http://mail.google.com/mail/]] 
[[GoogleCalendar | http://www.google.com/calendar/render?utm_source=en-cpp-cccbr&utm_medium=cpp&utm_campaign=en&pli=1]] 
- 
[[TWHelp|http://tiddlyspot.com/twhelp/]] 
[[ "Reviews"|http://pcp.tiddlyspot.com/]]
[[ "MouseStocks"|http://ashmousestocks.tiddlyspot.com/]]
[[ "TiddlyVault"|http://tiddlyvault.tiddlyspot.com/]]
All entries in the month of May (any year)
This section elaborates (more in list form) the methods we are using in today's work.  References are made to protocols and instances (a form-based worksheet for a given detailed protocol)
!Rationale for experiment:

!Samples:

! Preparation
1. Prepare 2-well chamber slides (need 1 per mouse pup likely) or 24-well plates
	[ ] matrigel coated (dilute stock 200ul into 10mls neurobasal medium on ice.  add 180-200ul of diluted Matrigel to 24-well plates and incubate 1-2hours at 37^^o^^C in 5%CO~~2~~)
	[ ] poly-D-lysine coating
	[ ] polyornithine coated Prepare polyornithine (1mg/50 mls of dH~~2~~O; can be reused and kept for 1 month). Add 300ul of PO to cover wells and incubate 37^^o^^C 4-16 hours.  Remove polyornithine and wash chamber wells once with distilled H~~2~~O. May store treated 2-well chamber slides at 4^^o^^C for up to 2 months
!Reagents
<<slider NBSMslider NeurobasalSupplementedMedia "Neurobasal supplemented media">>
[[Papain]]
DNase-TC
OvoMucoid
N-AcetylCysteine
L-Cysteine

!~Pre-Dissection
1. Warm dPBS and dPBS-BSA to room temp 
2. Prepare 6 tubes as below , 2-3 0.22uM syringe filters, and 2-3 10ml syringes
|1) Papain I	|Add 10mls dPBS	+100U [[Papain]] +200ul Dnase| pour papain into cysteine tube (activates) adjust pH until orange (@5ul 2N NaOH) filter into papain II|
|2) Papain II	|Leave empty||
|3) Cysteine	|Add 2mg of L-cysteine	||
|4) Ovo	|Add 5mls dPBS	|At step 4 add 200ul Dnase and 1ml OvoMucoid adjust pH with 2N NaOH (3-4ul)) Filter into ovoII through 0.22uM|
|5) Ovo II		||Filter above into ovoII|
|6) Cells		||Collect cells from triturated/digested tube|

3.   Sterilize tools:  large forceps, large scissors, small scissors,  2 No 5 forceps with good tips, 1 curved fine forceps.  Soak in 100% EtOH and air dry

! Dissect cerebellum as described:
a. Hold nose with large forceps and insert the tip of the small scissors into the foramen magnum.
b. Cut along base of the skull to the ear, make a right turn across the top of the skull to the other ear and return to the foramen magnum.
c. Remove the flap of skin and skull and pinch of the cerebellum with the fine forceps.  Place the cerebellum into a dish of ice cold dPBS. 
d. Remove the meninges and the choroids plexus under a dissecting scope using the two no 5 forceps.  Do one cerebellum at a time.  Finish each the cerebellum before dissecting the next.  Dissect all cerebellums prior to digestion below.  Work rapidly.   

!Dissociation and Trituration of the cerebellums

1. Dissect cerebellums and cut into small pieces and store in dPBS until ready to proceed
2. Remove dPBS and add papain solution
3. incubate at 37C for 30minutes
4. Make up ovo solution before 30minute digestion is up
5. aspirate away papain solution from cerebellar pieces and add 0.5mls ovo solution, let settle, and aspirate off
6. Add 2mls ovo solution and triturate with a 2ml Pasteur pipet gently (5 times)
7. Let pieces settle for a minute, remove the top 1ml and transfer to “cells” collection tube
8. Add another 1ml ovo solution  and repeat trituration and 50% collection
9. repeat steps 7 and 8  2-3 times with a P1000 set at 1ml
10.  for the final trituration use a P200 set at 150ul
11. Centrifuge cells for 10 minutes (1000rpm)

This preparation is 60% granule cells/precursors.  If this is adequate:
- strain cells through cell strainer into 50ml tube and transfer cells to fresh 15ml tube
- recentrifuge for 10 minutes at room temp (1000rpm in Sorvall- #3 clinical cent)
- aspirate sup and resuspend in 5ml medium
- proceed to “counting and plating”


!Counting and Plating
Count cells  (mix 10ul cells + 90ul PBS and 100ul Trypan blue, count 4 fields on hemocytometer
Average 4 counts [_ _ _ _ _] [_ _ _ _ _] [_ _ _ _ _] [_ _ _ _ _] =  [_ _ _ _ _] X 2 X 10^^5^^ =  [_ _ _ _ _] cells/ml  X 5mls = [_ _ _ _ _] total cells
Without Percoll yield is 1-2 X 10^^7^^ cells per pup, and solution contains many dead cells and debris
With Percoll yield of small cells (granule cells + GCPs, 35-65% interface) is 0.5-1 X 10^^7^^ cells per pup, and cells are >95% viable; yield of large cells (is about 50% that of granule cells) and solution contains many dead cells and debris

!Notes:



Final Composition:
Tris-HCl 50mM pH7.4
NP-40: 1%
Na-deoxycholate: 0.25%
NaCl: 150mM
PMSF: 1mM (1M in DMSO -20C 1000X stock, dilute to 200mM in isopropanol at RT prior to use: 1:200)
Leupeptin, pepstatin, chymostatin (10mg/ml DMSO 1000X stocks) to 1ug/ml each
Na3VO4: 1mM
NaF: 1mM

Add 1975mg Tris base to 190 mls distilled H20.  Add 2250mg NaCl and stir until all solids are disolved.  Using HCl adjust pH to 7.4
Add 10mls of 10% NP-40 to the solution.
add 2.5mls of 10% Na-deoxycholate and stir until solution is clear
Adjust volume to 250ml. Store RIPA buffer at 2-8C until ready to use.

Ideally the remaining protease and phosphatase inhibitors should be added to the solution on the same day you are running the assay (250ul pepstatin, leupeptin, chymostatin) and (1250ul PMSF, Na3VO4, and NaF) but with the exception of PMSF the diluted inhibitors are stable in aqueous solution for up to 5 days.  PMSF is extremely unstable in aqueous solutions with a half-life of approximately 30 minutes, and should be added immediately before use.

[[MonkeyPirateTiddlyWiki|http://mptw.tiddlyspot.com]] is a distribution of [[TiddlyWiki|http://www.tiddlywiki.com/]] created by Simon Baird. See [[the web site|http://mptw.tiddlyspot.com/]] for more information.
!!Upgrading ~MonkeyPirateTiddlyWiki
This "empty" ~MonkeyPirateTiddlyWiki file comes pre-installed with the core ~MonkeyPirateTiddlyWiki plugins. You can upgrade these core plugins to the latest version by doing the following:
* Click ImportTiddlers
* Click "Choose..." and select "~MptwUpgradeURL"
* Click "fetch"
* Click the checkbox in the first column heading to select all tiddlers
* Click "More actions..." and select "Import these tiddlers"
* Click "OK" to confirm you want to overwrite the tiddlers
* Save and reload
|Mouse-Injection ID|L-Xpos|L-Ypos|L-Zpos|1-Xpos|1-Ypos|1-Zpos|Notes about injection and other issues|Raw images|Composite Helicon Focus Img| Fluorescence Image of Brain| Fluorescence Image of Cerebellum|
|1-1||||||||||||
|1-2||||||||||||
|2-1||||||||||||
|2-2||||||||||||
|3-1||||||||||||
|3-2||||||||||||
|4-1||||||||||||
|4-2||||||||||||
|5-1||||||||||||
|5-2||||||||||||
|6-1||||||||||||
|6-2||||||||||||
|7-1||||||||||||
|7-2||||||||||||
|8-1||||||||||||
|8-2||||||||||||
|9-1||||||||||||
|9-2||||||||||||
|10-1||||||||||||
|10-2||||||||||||
|11-1||||||||||||
|11-2||||||||||||
|12-1||||||||||||
|12-2||||||||||||
|13-1||||||||||||
|13-2||||||||||||
|14-1||||||||||||
|14-2||||||||||||
Prepare: 
Bucket of ice
thawed dye or lentivirus for experiment
pulled microinjection pipettes (PullingProgram here)

First attach microinjection pipette to tubing and pump (eliminate bubbles and fill with paraffin oil)
Backfill pipette with 4-6ul of dye/lentivirus (use cap of aliquoted tube)
Wipe off pipette with q-tip
Cage of pups is brought to InjectionSetup
anesthetize pups by keeping under ice for 90sec-2 minutes
Tape the pup to stage with head inserted into the mold so that posterior fossa is parallel to the floor (for orthogonal injection)
Using the micromanipulator or stereoctaxis control introduce the pipette into a midline portion of the would be cerebellum at a depth of 2-3mm.  
Inject solution at 0.2ul/min for a total volume of 0.5ul
Choose 2 sites of injection for each pup
Warm by returning pup to mother's cage (roll pup in bedding before mother sniffs the pup)
!Prepare
Bucket of ice
thawed dye or lentivirus for experiment (spin 5minutes tabletop centrifuge to get rid of debris)
pulled microinjection pipettes (PullingProgram here)
!Setup
#attach microinjection pipette to tubing and pump (eliminate bubbles and fill with paraffin oil)
#Backfill pipette with 4-6ul of dye/lentivirus (use cap of aliquoted tube)
#Wipe off pipette with q-tip
#Cage of pups is brought to InjectionSetup
!Injection Protocol
#anesthetize pups by keeping under ice for 90sec-2 minutes
#Tape the pup to stage with head inserted into the mold so that posterior fossa is parallel to the floor (for orthogonal injection)
#Using the micromanipulator or stereoctaxis control introduce the pipette into a midline portion of the would be cerebellum at a depth of 2-3mm.  
#Inject solution at 0.2ul/min for a total volume of 0.5ul
#Choose 2 sites of injection for each pup
#Warm by returning pup to mother's cage (roll pup in bedding before mother sniffs the pup)

|Mouse ID|Injection coordinates|Vector| Notes_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|1||||
|2||||
|3||||
|4||||
|5||||
|6||||
|7||||
|8||||
|9||||
|10||||
|11||||
|12||||
|13||||
|14||||
|15||||
|16||||
|17||||
|18||||
We will keep in TagglyTagging format our current stocks of mice so that we can search them as needed for planning matings and potential experiments.
http://ashmousestocks.tiddlyspot.com
/***
| Name|MptwLayoutPlugin|
| Description|A package containing templates and css for the MonkeyPirateTiddlyWiki layout|
| Version|3.0 ($Rev: 1845 $)|
| Source|http://mptw.tiddlyspot.com/#MptwLayoutPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
Presumes you have TagglyTaggingPlugin installed. To enable this you should have a PageTemplate containing {{{[[MptwPageTemplate]]}}} and similar for ViewTemplate and EditTemplate.
***/
//{{{
// used in MptwViewTemplate
config.mptwDateFormat = 'DD/MM/YY';
config.mptwJournalFormat = 'Journal DD/MM/YY';
//config.mptwDateFormat = 'MM/0DD/YY';
//config.mptwJournalFormat = 'Journal MM/0DD/YY';

config.shadowTiddlers.GettingStarted += "\n\nSee also MonkeyPirateTiddlyWiki.";

//}}}

//{{{
merge(config.shadowTiddlers,{

'MptwEditTemplate':[
 "<!--{{{-->",
 "<!--- http://mptw.tiddlyspot.com/#MptwEditTemplate ($Rev: 1829 $) --->",
 "<div class=\"toolbar\" macro=\"toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler\"></div>",
 "<div class=\"title\" macro=\"view title\"></div>",
 "<div class=\"editLabel\">Title</div><div class=\"editor\" macro=\"edit title\"></div>",
 "<div class=\"editLabel\">Tags</div><div class=\"editor\" macro=\"edit tags\"></div>",
 "<div class=\"editorFooter\"><span macro=\"message views.editor.tagPrompt\"></span><span macro=\"tagChooser\"></span></div>",
 "<div macro=\"showWhenExists EditPanelTemplate\">[[EditPanelTemplate]]</div>",
 "<div class=\"editor\" macro=\"edit text\"></div>",
 "<!--}}}-->"
].join("\n"),

'MptwPageTemplate':[
 "<!--{{{-->",
 "<!-- http://mptw.tiddlyspot.com/#MptwPageTemplate ($Rev: 1829 $) -->",
 "<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>",
 "	<div class='headerForeground'>",
 "		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;",
 "		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>",
 "	</div>",
 "</div>",
 "<!-- horizontal MainMenu -->",
 "<div id='topMenu' refresh='content' tiddler='MainMenu'></div>",
 "<!-- original MainMenu menu -->",
 "<!-- <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>",
 "<div id='displayArea'>",
 "	<div id='messageArea'></div>",
 "	<div id='tiddlerDisplay'></div>",
 "</div>",
 "<!--}}}-->"
].join("\n"),

'MptwStyleSheet':[
 "/*{{{*/",
 "/* http://mptw.tiddlyspot.com/#MptwStyleSheet ($Rev: 2246 $) */",
 "",
 "/* a contrasting background so I can see where one tiddler ends and the other begins */",
 "body {",
 "	background: [[ColorPalette::TertiaryLight]];",
 "}",
 "",
 "/* sexy colours and font for the header */",
 ".headerForeground {",
 "	color: [[ColorPalette::PrimaryPale]];",
 "}",
 ".headerShadow, .headerShadow a {",
 "	color: [[ColorPalette::PrimaryMid]];",
 "}",
 "",
 "/* separate the top menu parts */",
 ".headerForeground, .headerShadow {",
 "	padding: 1em 1em 0;",
 "}",
 "",
 ".headerForeground, .headerShadow {",
 "	font-family: 'Trebuchet MS' sans-serif;",
 "	font-weight:bold;",
 "}",
 ".headerForeground .siteSubtitle {",
 "	color: [[ColorPalette::PrimaryLight]];",
 "}",
 ".headerShadow .siteSubtitle {",
 "	color: [[ColorPalette::PrimaryMid]];",
 "}",
 "",
 "/* make shadow go and down right instead of up and left */",
 ".headerShadow {",
 "	left: 1px;",
 "	top: 1px;",
 "}",
 "",
 "/* prefer monospace for editing */",
 ".editor textarea {",
 "	font-family: 'Consolas' monospace;",
 "}",
 "",
 "/* sexy tiddler titles */",
 ".title {",
 "	font-size: 250%;",
 "	color: [[ColorPalette::PrimaryLight]];",
 "	font-family: 'Trebuchet MS' sans-serif;",
 "}",
 "",
 "/* more subtle tiddler subtitle */",
 ".subtitle {",
 "	padding:0px;",
 "	margin:0px;",
 "	padding-left:0.5em;",
 "	font-size: 90%;",
 "	color: [[ColorPalette::TertiaryMid]];",
 "}",
 ".subtitle .tiddlyLink {",
 "	color: [[ColorPalette::TertiaryMid]];",
 "}",
 "",
 "/* a little bit of extra whitespace */",
 ".viewer {",
 "	padding-bottom:3px;",
 "}",
 "",
 "/* don't want any background color for headings */",
 "h1,h2,h3,h4,h5,h6 {",
 "	background: [[ColorPalette::Background]];",
 "	color: [[ColorPalette::Foreground]];",
 "}",
 "",
 "/* give tiddlers 3d style border and explicit background */",
 ".tiddler {",
 "	background: [[ColorPalette::Background]];",
 "	border-right: 2px [[ColorPalette::TertiaryMid]] solid;",
 "	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;",
 "	margin-bottom: 1em;",
 "	padding-bottom: 1em;",
 "	padding-top: 0.75em;",
 "}",
 "",
 "/* make options slider look nicer */",
 "#sidebarOptions .sliderPanel {",
 "	border:solid 1px [[ColorPalette::PrimaryLight]];",
 "}",
 "",
 "/* the borders look wrong with the body background */",
 "#sidebar .button {",
 "	border-style: none;",
 "}",
 "",
 "/* this means you can put line breaks in SidebarOptions for readability */",
 "#sidebarOptions br {",
 "	display:none;",
 "}",
 "/* undo the above in OptionsPanel */",
 "#sidebarOptions .sliderPanel br {",
 "	display:inline;",
 "}",
 "",
 "/* horizontal main menu stuff */",
 "#displayArea {",
 "	margin: 1em 15.7em 0em 1em; /* use the freed up space */",
 "}",
 "#topMenu br {",
 "	display: none;",
 "}",
 "#topMenu {",
 "	background: [[ColorPalette::PrimaryMid]];",
 "	color:[[ColorPalette::PrimaryPale]];",
 "}",
 "#topMenu {",
 "	padding:2px;",
 "}",
 "#topMenu .button, #topMenu .tiddlyLink, #topMenu a {",
 "	margin-left: 0.5em;",
 "	margin-right: 0.5em;",
 "	padding-left: 3px;",
 "	padding-right: 3px;",
 "	color: [[ColorPalette::PrimaryPale]];",
 "	font-size: 115%;",
 "}",
 "#topMenu .button:hover, #topMenu .tiddlyLink:hover {",
 "	background: [[ColorPalette::PrimaryDark]];",
 "}",
 "",
 "/* make 2.2 act like 2.1 with the invisible buttons */",
 ".toolbar {",
 "	visibility:hidden;",
 "}",
 ".selected .toolbar {",
 "	visibility:visible;",
 "}",
 "",
 "/* experimental. this is a little borked in IE7 with the button ",
 " * borders but worth it I think for the extra screen realestate */",
 ".toolbar { float:right; }",
 "",
 "/* for Tagger Plugin, thanks sb56637 */",
 ".popup li a {",
 "   display:inline;",
 "}",
 "",
 "/* make it print a little cleaner */",
 "@media print {",
 "	#topMenu {",
 "		display: none ! important;",
 "	}",
 "	/* not sure if we need all the importants */",
 "	.tiddler {",
 "		border-style: none ! important;",
 "		margin:0px ! important;",
 "		padding:0px ! important;",
 "		padding-bottom:2em ! important;",
 "	}",
 "	.tagglyTagging .button, .tagglyTagging .hidebutton {",
 "		display: none ! important;",
 "	}",
 "	.headerShadow {",
 "		visibility: hidden ! important;",
 "	}",
 "	.tagglyTagged .quickopentag, .tagged .quickopentag {",
 "		border-style: none ! important;",
 "	}",
 "	.quickopentag a.button, .miniTag {",
 "		display: none ! important;",
 "	}",
 "}",
 "/*}}}*/"
].join("\n"),

'MptwViewTemplate':[
 "<!--{{{-->",
 "<!--- http://mptw.tiddlyspot.com/#MptwViewTemplate ($Rev: 2247 $) --->",
 "",
 "<div class='toolbar'>",
 "	<span macro=\"showWhenTagged systemConfig\">",
 "		<span macro=\"toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'\"></span>",
 "	</span>",
 "	<span macro=\"showWhenTagged palette\">",
 "		<span macro=\"setPalette\"></span>",
 "	</span>",
 "	<span style=\"padding:1em;\"></span>",
 "	<span macro='toolbar closeTiddler closeOthers easyEdit +editTiddler deleteTiddler > fields syncing permalink references jump'></span> <span macro='newHere label:\"new here\"'></span>",
 "	<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:\"MM/0DD/YY\"}}'></span>",
 "</div>",
 "",
 "<div class=\"tagglyTagged\" macro=\"tags\"></div>",
 "",
 "<div class='titleContainer'>",
 "	<span class='title' macro='view title'></span>",
 "	<span macro=\"miniTag\"></span>",
 "</div>",
 "",
 "<div class='subtitle'>",
 "	<span macro='view modifier link'></span>,",
 "	<span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:\"MM/0DD/YY\"}}'></span>",
 "	(<span macro='message views.wikified.createdPrompt'></span>",
 "	<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:\"MM/0DD/YY\"}}'></span>)",
 "</div>",
 "",
 "<div macro=\"showWhenExists ViewPanelTemplate\">[[ViewPanelTemplate]]</div>",
 "",
 "<div macro=\"hideWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\">",
 "	<div class='viewer' macro='view text wikified'></div>",
 "</div>",
 "<div macro=\"showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\">",
 "	<div class='viewer'><pre macro='view text'></pre></div>",
 "</div>",
 "",
 "<div macro=\"showWhenExists ViewDashboardTemplate\">[[ViewDashboardTemplate]]</div>",
 "",
 "<div class=\"tagglyTagging\" macro=\"tagglyTagging\"></div>",
 "",
 "<!--}}}-->"
].join("\n")

});
//}}}
For upgrading directly from tiddlyspot. See [[ImportTiddlers]].
URL: /proxy/mptw.tiddlyspot.com/upgrade.html
For upgrading. See [[ImportTiddlers]].
URL: http://mptw.tiddlyspot.com/upgrade.html
<!--{{{-->
<!--- http://mptw.tiddlyspot.com/#MptwViewTemplate ($Rev: 2247 $) --->

<div class='toolbar'>
	<span macro="showWhenTagged systemConfig">
		<span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>
	</span>
	<span macro="showWhenTagged palette">
		<span macro="setPalette"></span>
	</span>
	<span style="padding:1em;"></span>
	<span macro='toolbar closeTiddler closeOthers easyEdit +editTiddler deleteTiddler > fields syncing permalink references jump'></span> <span macro='newHere label:"new here"'></span>
	<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:"MM/0DD/YY"}}'></span>
</div>

<div class="tagglyTagged" macro="tags"></div>

<div class='titleContainer'>
	<span class='title' macro='view title'></span>
	<span macro="miniTag"></span>
</div>

<div class='subtitle'>
	<span macro='view modifier link'></span>,
	<span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:"MMM/0DD/YYYY"}}'></span>
	(<span macro='message views.wikified.createdPrompt'></span>
	<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:"MMM/0DD/YYYY"}}'></span>)
</div>

<div macro="showWhenExists ViewPanelTemplate">[[ViewPanelTemplate]]</div>

<div macro="hideWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">
	<div class='viewer' macro='view text wikified'></div>
</div>
<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">
	<div class='viewer'><pre macro='view text'></pre></div>
</div>

<div macro="showWhenExists ViewDashboardTemplate">[[ViewDashboardTemplate]]</div>

<div class="tagglyTagging" macro="tagglyTagging"></div>

<!--}}}-->
N-acetyl cysteine (Sigma-Aldrich A8199) 
GFM: 160gram
1M solution is 160mg/ml
0.375M solution is 60mg/ml (our stock solution)
make up 600mg in 10ml ddH~~2~~0
label: NAC

/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Version|2.0.3|
|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/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Slider.prototype.stop|
|Description|Make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content.|

++++!!!!![Configuration]>
Enable animation for slider panels
<<option chkFloatingSlidersAnimate>> allow sliders to animate when opening/closing
>(note: This setting is in //addition// to the general option for enabling/disabling animation effects:
><<option chkAnimate>> enable animations (entire document)
>For slider animation to occur, you must also allow animation in general.

Debugging messages for 'lazy sliders' deferred rendering:
<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering
<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered
===
++++!!!!![Usage]>
When installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.  Use {{{+++}}} and {{{===}}} to delimit the slider content.  You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created.  This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.

Additional optional syntax elements let you specify
*default to open
*cookiename
*heading level
*floater (with optional CSS width value)
*mouse auto rollover
*custom class/label/tooltip/accesskey
*automatic blockquote
*deferred rendering
The complete syntax, using all options, is:
//{{{
++++(cookiename)!!!!!^width^*{{class{[label=key|tooltip]}}}>...
content goes here
===
//}}}
where:
* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^
marks the start and end of the slider definition, respectively.  When the extra {{{+}}} is used, the slider will be open when initially displayed.^^
* {{{(cookiename)}}}^^
saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^
* {{{!}}} through {{{!!!!!}}}^^
displays the slider label using a formatted headline (Hn) style instead of a button/link style^^
* {{{^width^}}} (or just {{{^}}})^^
makes the slider 'float' on top of other content rather than shifting that content downward.  'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.).  If omitted, the default width is "auto" (i.e., fit to content)^^
* {{{*}}}^^
automatically opens/closes slider on "rollover" as well as when clicked^^
* {{{{{class{[label=key|tooltip]}}}}}}^^
uses custom label/tooltip/accesskey.  {{{{{class{...}}}}}}, {{{=key}}} and {{{|tooltip}}} are optional.  'class' is any valid CSS class name, used to style the slider label text.  'key' must be a ''single letter only''.  Default labels/tootips are: ">" (more) and "<" (less), with no default access key assignment.^^
* {{{">"}}} //(without the quotes)//^^
automatically adds blockquote formatting to slider content^^
* {{{"..."}}} //(without the quotes)//^^
defers rendering of closed sliders until the first time they are opened.  //Note: deferred rendering may produce unexpected results in some cases.  Use with care.//^^

//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//
===
++++!!!!![Examples]>
simple in-line slider: 
{{{
+++
   content
===
}}}
+++
   content
===
----
use a custom label and tooltip: 
{{{
+++[label|tooltip]
   content
===
}}}
+++[label|tooltip]
   content
===
----
content automatically blockquoted: 
{{{
+++>
   content
===
}}}
+++>
   content
===
----
all options combined //(default open, cookie, heading, sized floater, rollover, class, label/tooltip/key, blockquoted, deferred)//
{{{
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
   content
===
}}}
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
   content
===
----
complex nesting example:
{{{
+++^[get info...=I|click for information or press Alt-I]
   put some general information here, plus a floating slider with more specific info:
   +++^10em^[view details...|click for details]
      put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===
   ===
===
}}}
+++^[get info...=I|click for information or press Alt-I]
   put some general information here, plus a floating slider with more specific info:
   +++^10em^[view details...|click for details]
      put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===
   ===
===
===
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.03.30 - 2.0.3'' added chkFloatingSlidersAnimate (default to FALSE), so that slider animation can be disabled independent of the overall document animation setting (avoids strange rendering and focus problems in floating panels)
''2007.03.01 - 2.0.2'' for TW2.2+, hijack Morpher.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
''2007.03.01 - 2.0.1'' in hijack for Slider.prototype.stop, use apply() to pass params to core function
|please see [[NestedSlidersPluginHistory]] for additional revision details|
''2005.11.03 - 1.0.0'' initial public release
<<<
!!!!!Credits
<<<
This feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.
<<<
!!!!!Code
***/
//{{{
version.extensions.nestedSliders = {major: 2, minor: 0, revision: 3, date: new Date(2007,3,30)};
//}}}

//{{{
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;
if (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;
if (config.options.chkFloatingSlidersAnimate==undefined) config.options.chkFloatingSlidersAnimate=false;

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
//}}}

//{{{
config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\[\\>]*\\^)?)?(\\*)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(?:\\}{3})?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			// defopen=lookaheadMatch[1]
			// cookiename=lookaheadMatch[2]
			// header=lookaheadMatch[3]
			// panelwidth=lookaheadMatch[4]
			// rollover=lookaheadMatch[5]
			// class=lookaheadMatch[6]
			// label=lookaheadMatch[7]
			// blockquote=lookaheadMatch[8]
			// deferred=lookaheadMatch[9]

			 lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey
				var show="none"; var title=">"; var tooltip="show"; var cookie=""; var key="";

				// extra "+", default to open
				if (lookaheadMatch[1])
					{ show="block"; title="<"; tooltip="hide"; }

				// cookie, use saved open/closed state
				if (lookaheadMatch[2]) {
					cookie=lookaheadMatch[2].trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					if (config.options[cookie])
						{ show="block"; title="<"; tooltip="hide"; }
					else
						{ show="none"; title=">"; tooltip="show"; }
				}

				// parse custom label/tooltip/accesskey: [label=X|tooltip]
				if (lookaheadMatch[7]) {
					title = lookaheadMatch[7].trim().slice(1,-1);
					var pos=title.indexOf("|");
					if (pos!=-1) { tooltip = title.substr(pos+1,title.length); title=title.substr(0,pos); }
					if (title.substr(title.length-2,1)=="=") { key=title.substr(title.length-1,1); title=title.slice(0,-2); }
					if (pos==-1) tooltip += " "+title; // default tooltip: "show/hide <title>"
				}

				// create the button
				if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link
					var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,lookaheadMatch[6],title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,lookaheadMatch[6]);

				// set extra button attributes
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=lookaheadMatch[1]!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}

				// "non-click" MouseOver open/close slider
				if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;

				// create slider panel
				var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";
				var panel=createTiddlyElement(place,"div",null,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):""; // save requested panel size
				btn.sliderPanel=panel;
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!lookaheadMatch[9]) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(lookaheadMatch[8]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align slider/floater position with button
					window.adjustSliderPos(place,btn,panel,panelClass);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",lookaheadMatch[8]?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
					if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\n\n"+panel.getAttribute("raw"));
				}
			}
		}
	}
)

// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)
function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}

//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	var theLabel = theTarget.firstChild.data;
	var theSlider = theTarget.sliderPanel
	var isOpen = theSlider.style.display!="none";
	// if using default button labels, toggle labels
	if (theLabel==">") theTarget.firstChild.data = "<";
	else if (theLabel=="<") theTarget.firstChild.data = ">";
	// if using default tooltips, toggle tooltips
	if (theTarget.getAttribute("title")=="show")
		theTarget.setAttribute("title","hide");
	else if (theTarget.getAttribute("title")=="hide")
		theTarget.setAttribute("title","show");
	if (theTarget.getAttribute("title")=="show "+theLabel)
		theTarget.setAttribute("title","hide "+theLabel);
	else if (theTarget.getAttribute("title")=="hide "+theLabel)
		theTarget.setAttribute("title","show "+theLabel);
	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		if (config.options.chkDebugLazySliderRender)
			alert("rendering '"+theLabel+"':\n\n"+theSlider.getAttribute("raw"));
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}
	// show/hide the slider
	if(config.options.chkAnimate && (theSlider.className!='floatingPanel' || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";
	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;
	// align slider/floater position with target button
	if (!isOpen) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);
	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ ctrls[c].focus(); break; }
		}
	}
	if (this.sliderCookie && this.sliderCookie.length) {
		config.options[this.sliderCookie]=!isOpen;
		if (config.options[this.sliderCookie]!=this.defOpen)
			saveOptionCookie(this.sliderCookie);
		else { // remove cookie if slider is in default display state
			var ex=new Date(); ex.setTime(ex.getTime()-1000);
			document.cookie = this.sliderCookie+"=novalue; path=/; expires="+ex.toGMTString();
		}
	}
	return false;
}

// TW2.1 and earlier:
// hijack Slider animation handler 'stop' handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher animation handler 'stop' handler so overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function()
		{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
}

// adjust panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {
	if (panelClass=="floatingPanel") {
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
		}
		if (left+panel.offsetWidth > getWindowWidth()) left=getWindowWidth()-panel.offsetWidth-15;
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}

function getWindowWidth() {
	if(document.width!=undefined)
		return document.width; // moz (FF)
	if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
		return document.documentElement.clientWidth; // IE6
	if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )
		return document.body.clientWidth; // IE4
	if(window.innerWidth!=undefined)
		return window.innerWidth; // IE - general
	return 0; // unknown
}
//}}}
Neurobasal medium ([[Invitrogen| https://catalog.invitrogen.com/index.cfm?fuseaction=viewCatalog.viewProductDetails&sku=&productDescription=82&CID=AFLBC,AFL-BIOCOMPARE&ref=http%3A%2F%2Fwww%2Ebiocompare%2Ecom%2Fitemdetails%2Easp%3Fitemid%3D161551]] 12348-017)  100mls total
1ml Na-Pyruvate           
1ml pen/strep	              
1ml glutamine 
2mls B27 supplement (includes insulin and T3)
100ul N-acetyl cysteine
0.8 mls of 3M KCl
60mg of glucose (133ul 2.5M Glucose)	
/***
| Name:|NewHerePlugin|
| Description:|Creates the new here and new journal macros|
| Version:|3.0 ($Rev: 1845 $)|
| Date:|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
	newHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	},
	newJournalHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	}
});

//}}}

Annealing of oligos for ligation (ie. shRNA primers for cloning into expression vector)
| Amount | Reagent |
|1ul  | each oligo 100uM |
|5ul  | T4 ligase buffer |
|43ul | ddH~~2~~0 |
|50ul | total |

In Perkin Elmer 9700 Cycler
Heated at 95 for 10minutes then 
cooled about 1degree per min to 25 degrees then cooled to 4C and hold.

This is a list of primers in my stocks.  Unless otherwise specified, all oligos are diluted to 100uM final concentration in EB (Qiagen elution buffer). Typically for sequencing I would dilute 1:25 and use 2ul of the dilution (8pmol) for the reaction.  For PCR it will vary depending on the number of samples but generally I also use around 8pmol per reaction.
<html>
<body>

<iframe 
src ="http://www.rememberthemilk.com"
width = "100%"
height = "1000">
</iframe>

</body>
</html>
This prep is for Ovomucoid Trypsin inhibitor for cerebellar preps
mix 1 gram BSA (Sigma-Aldrich A8806) into 10mls dPBS and dissolve at 37C
mix 1 gram Ovomucoid (Trypsin Inhibitor [[Roche|http://www.roche.com]]  109 878) in 10mls dPBS and dissolve at 37C
mix together, adjust to pH 7.4 (about 25ul 10N NaOH needed for 20mls, pH with strips NOT probe)
Filter (0.45 uM then 0.22uM) and aliquot 1ml in epi tubes and freeze in [[CellCultureFreezer]]
ACAAACCATCACAGGGTGG
Prickle1 genomic primer from DA
CATAGTGCTCAGAGGGAATATG
Prickle1 genomic primer from DA
GCATCGCGTTGACAGGAGTCTG
Prickle1 genomic primer (from Dragana) to amplify region for subcloning pk1ckoTV
5% Normal Goat Serum (1ml)
0.1% Triton X-100 (20ul)
in PBS (19mls)
for 20mls of PBSPlus
!PCR Conditions:
|<<slider pcrrxnmix1 PCRRxnMixGeneral "PCR Mix A"  >>|<<slider pcrrxnmix2 PCRRxnMixGeneral "PCR Mix B" >>|<<slider pcrcond PCRCondGeneral "PCR conditions " >>|

!Samples:
| | | | | | |
| | | | | | |
Modify the conditions here, add date to the PCRRxnMixGeneral and PCRCondGeneral and this tiddler to create a specific instance.

Gel Image (modify with appropriate jpg file of the gel image):
<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/081307AG1.jpg" width="240" height="160" /></a></html>
!!PCR Conditions:
|<<slider pcrrxnmix1 PCRRxnMix110307-1A "PCR Mix A"  >>|<<slider pcrrxnmix2 PCRRxnMix110307-1B "PCR Mix B" >>|<<slider pcrcond PCRCond110307-1 "PCR conditions " >>|

!!Samples:
|1A cntrl |1A-pk1ckoTV |1A-pk1ckoTV miniprep |1A-pk1BACK4 |1B-cntrl |1B-pk1ckoTV |1B-pk1ckoTV miniprep |1B-pk1BACK4|


Gel Image:
<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/110407AG001.jpg" width="240" height="160" /></a></html>
!
!!PCR Conditions:
|<<slider pcrrxnmix1 PCRRxnMix110607-1A "PCR Mix A"  >>|<<slider pcrrxnmix2 PCRRxnMix110607-1B "PCR Mix B" >>|<<slider pcrcond PCRCond110607-1 "PCR conditions " >>|

!!Samples:
|1A cntrl |1A-pk1ckoTV |1A-pk1ckoTV miniprep |1A-pk1BACK4 |1B-cntrl |1B-pk1ckoTV |1B-pk1ckoTV miniprep |1B-pk1BACK4|


Gel Image:
<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/110707AG001.jpg" width="240" height="160" /></a></html>

Both products amplified as witnessed by the gel above.  These 
!
|!PCR Conditions|
|94C 2minutes DENATURATION|
|! |
|Cycle 33 times:|
|94C 30 sec Denaturation|
|58C 30 sec anneal|
|72C 90 sec extension|
|! |
|72C 7 min final extend|
|4C hold indefinate|
|!PCR Conditions|
|94C 2minutes DENATURATION|
|! |
|Cycle 35 times:|
|94C 30 sec Denaturation|
|54C 30 sec anneal|
|72C 100 sec extension|
|! |
|72C 7 min final extend|
|4C hold indefinite|
|!PCR Conditions|
|94C 2minutes DENATURATION|
|! |
|Cycle 35 times:|
|94C 30 sec Denaturation|
|57C 30 sec anneal|
|72C 70 sec extension|
|! |
|72C 7 min final extend|
|4C hold indefinite|
|!PCR Conditions|
|93C 2minutes DENATURATION|
|! |
|Cycle 35 times:|
|93C 30 sec Denaturation|
|58C 30 sec anneal|
|72C 90 sec extension|
|! |
|72C 7 min final extend|
|4C hold indefinite|
|<<tiddler ./ReactionTemplate>> | <<tiddler ./PCRConditions>>|


<part ReactionTemplate hidden>
|>|!Reaction Template|
|Primer 1  (100uM) 	|0.5ul	  	_ _ _ _|
|Primer 2  (100uM)	|0.5ul		_ _ _ _|
|>||
|DNTPs   (10mM)|1ul		_ _ _ _|
|10X PCR Buffer	|5ul		_ _ _ _|
|>||
|Expand HighFidelity	|0.5ul		_ _ _ _|
|>||
|DdH20		|41.5ul 	_ _ _ _|
|>||
|Template DNA (1:10)     1ul each well|
|			|50ul 		_ _ _ _|
|Number of reactions _ _ _ _ _|
</part>

<part PCRConditions hidden>
|>|!PCR Conditions|
|93C |2minutes denat|
|>|35X|
|  94C |30 sec denat|
|  60C |30 sec anneal|
|  72C |90 sec extend|
|>||
|72C   |7 min extension|
|>|4 C hold|
</part>

|P1F3-1802 (100uM)| 0.25ul| 1 |
|P1R3 (100uM)| 0.25ul| 1 |
|!|!|!|
|dNTPs(10mM)| 0.5ul| 2 |
|10X PCR Buffer| 2.5ul| 10 |
|Polymerase | 0.5ul| 2 |
|ddH20| 20ul| 80 |
|Templat 1:10| 1ul| _ _ _ |
|!|!|!|
|Number of Reactions 4|X24ul=| 96 ul|
|Pk1Exon6For (100uM)| 0.25ul| 1 |
|Pk1F3RSeq (100uM)| 0.25ul| 1 |
|!|!|!|
|dNTPs(10mM)| 0.5ul| 2 |
|10X PCR Buffer| 2.5ul| 10 |
|Polymerase | 0.5ul| 2 |
|ddH20| 20ul| 80 |
|Templat 1:10| 1ul| _ _ _ |
|!|!|!|
|Number of Reactions 4|X24ul=| 96 ul|
|P1R3(100uM)| 0.25ul| 1 |
|P1F3-1670(100uM)| 0.25ul| 1|
|!|!|!|
|dNTPs(10mM)| 0.5ul| 2 |
|10X PCR Buffer| 2.5ul| 10|
|Polymerase | 0.5ul| 2 |
|ddH20| 20ul| 80 |
|Templat 1:10| 1ul| _ _ _ |
|!|!|!|
|Number of Reactions: 4 |X24ul=| 96ul|

|P1R3(100uM)| 0.25ul| 1 |
|P1F3-1802(100uM)| 0.25ul| 1 |
|!|!|!|
|dNTPs(10mM)| 0.5ul| 2|
|10X PCR Buffer| 2.5ul| 10 |
|Polymerase | 0.5ul| 2 |
|ddH20| 20ul| 80 |
|Templat 1:10| 1ul| _ _ _ |
|!|!|!|
|For Mix: (Number of Reactions 4 |X25ul=| 96ul|
|Pk13LPFor(100uM)| 0.25ul| 1 |
|Pk13LPRev(100uM)| 0.25ul| 1|
|!|!|!|
|dNTPs(10mM)| 0.5ul| 2 |
|10X PCR Buffer| 2.5ul| 10|
|Polymerase | 0.5ul| 2 |
|ddH20| 20ul| 80 |
|Templat 1:10| 1ul| _ _ _ |
|!|!|!|
|Number of Reactions: 4 |X24ul=| 96ul|

|Pk1Ex45GFor(100uM)| 0.25ul| 1 |
|Pk1Ex45GRev(100uM)| 0.25ul| 1 |
|!|!|!|
|dNTPs(10mM)| 0.5ul| 2|
|10X PCR Buffer| 2.5ul| 10 |
|Polymerase | 0.5ul| 2 |
|ddH20| 20ul| 80 |
|Templat 1:10| 1ul| _ _ _ |
|!|!|!|
|For Mix: (Number of Reactions 4 |X25ul=| 96ul|
|Primer 1(25uM)| 1ul| _ _ _ |
|Primer 2(25uM)| 1ul| _ _ _ |
|!|!|!|
|dNTPs(10mM)| 0.5ul| _ _ _ |
|10X PCR Buffer| 2.5ul| _ _ _ |
|Polymerase | 0.5ul| _ _ _ |
|ddH20| 19.5ul| _ _ _ |
|Templat 1:10| 1ul| _ _ _ |
|!|!|!|
|Number of Reactions _ _ _ |X25ul=| _ _ _ul|

[[MptwPageTemplate]]
Worthington 
This represents the first product of our experiments to investigate planar cell polarity function in the developing cerebellum.
A) [[Paper1Introduction]]
B) [[Paper1Results]]
C) Paper1Methods
D) Paper1Discussion
E) Paper1Refs
[[Cerebellar organization-functional relationships]]
[[Likely Role of PCP components]]
[[Future directions]]
[[Paper1IPart1:]] Introduce cerebellar organization
[[Paper1IPart2:]] Introduce planar cell polarity pathway
[[Paper1IPart3:]] Hypothesis that links PCP influence on 3-D organization

[[In situ hybridization]]
[[Immunohistochemistry]]
[[Lentiviral Production]]
[[Conditional Knockout Generation]]
[[Imaging-3-D Reconstruction]]
Paper1ResultsPt1: Examination of developmental expression of planar cell polarity components Pk1,Pk2, Vangl1,Vangl2 in cerebellum (in situ- protein)
Paper1ResultsPt2: Lentiviral mediated knockdown of expression of Pk1,Pk2, Vgl1,Vgl2 on cerebellar slice cellular 3-D morphology (Celsr2 positive control- WT neg control)
Paper1ResultsPt3: In vivo knockdown of Pk1,2, Vgl1,2 and effects on 3-D organization of developing cerebellum
Paper1ResultsPt4: Conditional knockout of Vgl1,Vgl2 and effects on cerebellar development : L7-Cre, Math1-Cre
/***
|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|
|''Version:''|1.0.9 (2007-07-14)|
|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.3|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Table of Content<html><a name="TOC"/></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>
!Description<html><a name="Description"/></html>
With the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts. 
Each part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features").  E.g. you may create links to the parts (e.g. {{{[[Quotes/BAX95]]}}} or {{{[[Hobbies|AboutMe/Hobbies]]}}}), use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.


''Syntax:'' 
|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|
|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//. <<br>>If you use a partName containing spaces you need to quote it (e.g. {{{"Major Overview"}}} or {{{[[Shortcut List]]}}}).|
|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|
|<html><i>any&nbsp;tiddler&nbsp;content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Applications<html><a name="Applications"/></html>
!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>
Assume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.

Notice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Citation Index<html><a name="Citation"/></html>
Create a tiddler "Citations" that contains your "citations". 
Wrap every citation with a part and a proper name. 

''Example''
{{{
<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// 
in //Proc. ICSM//, 1998.</part>

<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// 
Thesis, Uni Stuttgart, 2002.</part>

<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.// 
in //Proc. ICSM//, 1999.</part>
}}}

You may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>
You may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list
{{{
* Item 1
* Item 2
* Item 3
}}}
into a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.

Using the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.

''Example''
{{{
|!Subject|!Items|
|subject1|<<tiddler ./Cell1>>|
|subject2|<<tiddler ./Cell2>>|

<part Cell1 hidden>
* Item 1
* Item 2
* Item 3
</part>
...
}}}

Notice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".

BTW: The same approach can be used to create bullet lists with items that contain more than one line.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Creating Tabs<html><a name="Tabs"/></html>
The build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.

With the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.

''Example''
The standard tabs at the sidebar are defined by the following eight tiddlers:
* SideBarTabs
* TabAll
* TabMore
* TabMoreMissing
* TabMoreOrphans
* TabMoreShadowed
* TabTags
* TabTimeline

Instead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:
{{{
<<tabs txtMainTab 
    Timeline Timeline SideBarTabs/Timeline 
    All 'All tiddlers' SideBarTabs/All 
    Tags 'All tags' SideBarTabs/Tags 
    More 'More lists' SideBarTabs/More>>
<part Timeline hidden><<timeline>></part>
<part All hidden><<list all>></part>
<part Tags hidden><<allTags>></part>
<part More hidden><<tabs txtMoreTab 
    Missing 'Missing tiddlers' SideBarTabs/Missing 
    Orphans 'Orphaned tiddlers' SideBarTabs/Orphans 
    Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>
<part Missing hidden><<list missing>></part>
<part Orphans hidden><<list orphans>></part>
<part Shadowed hidden><<list shadowed>></part>
}}}

Notice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.

E.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:
{{{
<<forEachTiddler 
		sortBy 'tiddler.modified' descending 
		write '(index < 100) ? "* [["+tiddler.title+"]]\n":""'>>
}}}
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Using Sliders<html><a name="Sliders"/></html>
Very similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature

''Example''
In a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.
{{{
...
<<slider chkAboutDetails About/Details details "Click here to see more details">>
<part Details hidden>
To give you a better overview ...
</part>
...
}}}

Notice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Revision history<html><a name="Revisions"/></html>
* v1.0.9 (2007-07-14)
** Bugfix: Error when using the SideBarTabs example and switching between "More" and "Shadow". Thanks to cmari for reporting the issue.
* v1.0.8 (2007-06-16)
** Speeding up display of tiddlers containing multiple pard definitions. Thanks to Paco Rivière for reporting the issue.
** Support "./partName" syntax inside <<tabs ...>> macro
* v1.0.7 (2007-03-07)
** Bugfix: <<tiddler "./partName">> does not always render correctly after a refresh (e.g. like it happens when using the "Include" plugin). Thanks to Morris Gray for reporting the bug.
* v1.0.6 (2006-11-07)
** Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to José Luis González Castro for reporting the bug.
* v1.0.5 (2006-03-02)
** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.
* v1.0.4 (2006-02-28)
** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.
* v1.0.3 (2006-02-26)
** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.
* v1.0.2 (2006-02-05)
** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)
* v1.0.1 (2006-01-27)
** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.
** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.
* v1.0.0 (2006-01-25)
** initial version
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Code<html><a name="Code"/></html>
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
//{{{
//============================================================================
//                           PartTiddlerPlugin

// Ensure that the PartTiddler Plugin is only installed once.
//
if (!version.extensions.PartTiddlerPlugin) {



version.extensions.PartTiddlerPlugin = {
    major: 1, minor: 0, revision: 9,
    date: new Date(2007, 6, 14), 
    type: 'plugin',
    source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"
};

if (!window.abego) window.abego = {};
if (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");

//============================================================================
// Common Helpers

// Looks for the next newline, starting at the index-th char of text. 
//
// If there are only whitespaces between index and the newline 
// the index behind the newline is returned, 
// otherwise (or when no newline is found) index is returned.
//
var skipEmptyEndOfLine = function(text, index) {
	var re = /(\n|[^\s])/g;
	re.lastIndex = index;
	var result = re.exec(text);
	return (result && text.charAt(result.index) == '\n') 
			? result.index+1
			: index;
}


//============================================================================
// Constants

var partEndOrStartTagRE = /(<\/part>)|(<part(?:\s+)((?:[^>])+)>)/mg;
var partEndTagREString = "<\\/part>";
var partEndTagString = "</part>";

//============================================================================
// Plugin Specific Helpers

// Parse the parameters inside a <part ...> tag and return the result.
//
// @return [may be null] {partName: ..., isHidden: ...}
//
var parseStartTagParams = function(paramText) {
	var params = paramText.readMacroParams();
	if (params.length == 0 || params[0].length == 0) return null;
	
	var name = params[0];
	var paramsIndex = 1;
	var hidden = false;
	if (paramsIndex < params.length) {
		hidden = params[paramsIndex] == "hidden";
		paramsIndex++;
	}
	
	return {
		partName: name, 
		isHidden: hidden
	};
}

// Returns the match to the next (end or start) part tag in the text, 
// starting the search at startIndex.
// 
// When no such tag is found null is returned, otherwise a "Match" is returned:
// [0]: full match
// [1]: matched "end" tag (or null when no end tag match)
// [2]: matched "start" tag (or null when no start tag match)
// [3]: content of start tag (or null if no start tag match)
//
var findNextPartEndOrStartTagMatch = function(text, startIndex) {
	var re = new RegExp(partEndOrStartTagRE);
	re.lastIndex = startIndex;
	var match = re.exec(text);
	return match;
}

//============================================================================
// Formatter

// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.
//
// @return true if a complete part section (including the end tag) could be processed, false otherwise.
//
var handlePartSection = function(w) {
	var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);
	if (!tagMatch) return false;
	if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;

	// Parse the start tag parameters
	var arguments = parseStartTagParams(tagMatch[3]);
	if (!arguments) return false;
	
	// Continue processing
	var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);
	var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);
	if (endMatch && endMatch[1]) {
		if (!arguments.isHidden) {
			w.nextMatch = startTagEndIndex;
			w.subWikify(w.output,partEndTagREString);
		}
		w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);
		
		return true;
	}
	return false;
}

config.formatters.push( {
    name: "part",
    match: "<part\\s+[^>]+>",
	
	handler: function(w) {
		if (!handlePartSection(w)) {
			w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);
		}
	}
} )

//============================================================================
// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers 
// as tiddlers.

var currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)

// Return the match to the first <part ...> tag of the text that has the
// requrest partName.
//
// @return [may be null]
//
var findPartStartTagByName = function(text, partName) {
	var i = 0;
	
	while (true) {
		var tagMatch = findNextPartEndOrStartTagMatch(text, i);
		if (!tagMatch) return null;

		if (tagMatch[2]) {
			// Is start tag
	
			// Check the name
			var arguments = parseStartTagParams(tagMatch[3]);
			if (arguments && arguments.partName == partName) {
				return tagMatch;
			}
		}
		i = tagMatch.index+tagMatch[0].length;
	}
}

// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler 
// object, using fullName as the Tiddler's title. 
//
// All remaining properties of the new Tiddler (tags etc.) are inherited from 
// the parentTiddler.
// 
// @return [may be null]
//
var getPart = function(parentTiddler, partName, fullName) {
	var text = parentTiddler.text;
	var startTag = findPartStartTagByName(text, partName);
	if (!startTag) return null;
	
	var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);
	var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);

	if (indexOfEndTag >= 0) {
		var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);
		var partTiddler = new Tiddler();
		partTiddler.set(
						fullName,
						partTiddlerText,
						parentTiddler.modifier,
						parentTiddler.modified,
						parentTiddler.tags,
						parentTiddler.created);
		partTiddler.abegoIsPartTiddler = true;
		return partTiddler;
	}
	
	return null;
}

// Hijack the store.fetchTiddler to recognize the "part" addresses.
//
var hijackFetchTiddler = function() {
	var oldFetchTiddler = store.fetchTiddler ;
	store.fetchTiddler = function(title) {
		var result = oldFetchTiddler.apply(this, arguments);
		if (!result && title) {
			var i = title.lastIndexOf('/');
			if (i > 0) {
				var parentName = title.substring(0, i);
				var partName = title.substring(i+1);
				var parent = (parentName == ".") 
						? store.resolveTiddler(currentParent)
						: oldFetchTiddler.apply(this, [parentName]);
				if (parent) {
					return getPart(parent, partName, parent.title+"/"+partName);
				}
			}
		}
		return result;	
	};
};

// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag. 
// At that point in the "store" is not yet defined. In that case hijackFetchTiddler through the restart function.
// Otherwise hijack now.
if (!store) {
	var oldRestartFunc = restart;
	window.restart = function() {
		hijackFetchTiddler();
		oldRestartFunc.apply(this,arguments);
	};
} else
	hijackFetchTiddler();




// The user must not edit a readOnly/partTiddler
//

config.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;

Tiddler.prototype.isReadOnly = function() {
	// Tiddler.isReadOnly was introduced with TW 2.0.6.
	// For older version we explicitly check the global readOnly flag
	if (config.commands.editTiddler.oldIsReadOnlyFunction) {
		if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;
	} else {
		if (readOnly) return true;
	}

	return this.abegoIsPartTiddler;
}

config.commands.editTiddler.handler = function(event,src,title)
{
	var t = store.getTiddler(title);
	// Edit the tiddler if it either is not a tiddler (but a shadowTiddler)
	// or the tiddler is not readOnly
	if(!t || !t.abegoIsPartTiddler)
		{
		clearMessage();
		story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);
		story.focusTiddler(title,"text");
		return false;
		}
}

// To allow the "./partName" syntax in macros we need to hijack 
// the invokeMacro to define the "currentParent" while it is running.
// 
var oldInvokeMacro = window.invokeMacro;
function myInvokeMacro(place,macro,params,wikifier,tiddler) {
	var oldCurrentParent = currentParent;
	if (tiddler) currentParent = tiddler;
	try {
		oldInvokeMacro.apply(this, arguments);
	} finally {
		currentParent = oldCurrentParent;
	}
}
window.invokeMacro = myInvokeMacro;

// To correctly support the "./partName" syntax while refreshing we need to hijack 
// the config.refreshers.tiddlers to define the "currentParent" while it is running.
// 
(function() {
	var oldTiddlerRefresher= config.refreshers.tiddler;
	config.refreshers.tiddler = function(e,changeList) {
		var oldCurrentParent = currentParent;
		try {
			currentParent = e.getAttribute("tiddler");
			return oldTiddlerRefresher.apply(this,arguments);
		} finally {
			currentParent = oldCurrentParent;
		}
	};
})();

// Support "./partName" syntax inside <<tabs ...>> macro
(function() {
	var extendRelativeNames = function(e, title) {
		var nodes = e.getElementsByTagName("a");
		for(var i=0; i<nodes.length; i++) {
			var node = nodes[i];
			var s = node.getAttribute("content");
			if (s && s.indexOf("./") == 0)
				node.setAttribute("content",title+s.substr(1));
		}
	};
	var oldHandler = config.macros.tabs.handler;
	config.macros.tabs.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
		var result = oldHandler.apply(this,arguments);
		if (tiddler)
			extendRelativeNames(place, tiddler.title);
		return result;
	};
})();

// Scroll the anchor anchorName in the viewer of the given tiddler visible.
// When no tiddler is defined use the tiddler of the target given event is used.
window.scrollAnchorVisible = function(anchorName, tiddler, evt) {
	var tiddlerElem = null;
	if (tiddler) {
		tiddlerElem = document.getElementById(story.idPrefix + tiddler);
	}
	if (!tiddlerElem && evt) {
		var target = resolveTarget(evt);
		tiddlerElem = story.findContainingTiddler(target);
	}
	if (!tiddlerElem) return;

	var children = tiddlerElem.getElementsByTagName("a");
	for (var i = 0; i < children.length; i++) {
		var child = children[i];
		var name = child.getAttribute("name");
		if (name == anchorName) {
			var y = findPosY(child);
			window.scrollTo(0,y);
			return;
		}
	}
}

} // of "install only once"
//}}}

/***
<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
0.01% v/v deoxycholate (DOC)
0.02% v/v nonidet P-40 (NP40)
in PBS
    5'- CACAGGGTGGATAGAAAGAGCAAG -3'
	                 24 nt forward primer
	                 pct G+C:   50.0 	Tm:   56.0
When Used with Pk13LPRev

    5'- AGCGAGCAGTCAAGTAACTTTTGG -3'
	                 24 nt backward primer
	                 pct G+C:   45.8 	Tm:   56.0

	               594 nt product for F1-B2 pair (11-604)
	                 Optimal annealing temp:   55.8
	                 pct G+C:   44.6          	Tm:   77.1
5'- AGCGAGCAGTCAAGTAACTTTTGG -3'
24 nt backward primer
pct G+C: 45.8 Tm: 56.0
When Used with Pk13LPFor

5'- CACAGGGTGGATAGAAAGAGCAAG -3'
24 nt forward primer
pct G+C: 50.0 Tm: 56.0


594 nt product for F1-B2 pair (11-604)
Optimal annealing temp: 55.8
pct G+C: 44.6 Tm: 77.1
5'- TGCGGTACTGCCAGTCTTTGAG -3'
	                 22 nt forward primer
	                 pct G+C:   54.5 	Tm:   56.8

When used with Pk1Ex45GRev:
  5'- GCCACAGTGGATTTTTCCATCC -3'
	                 22 nt backward primer
	                 pct G+C:   50.0 	Tm:   57.0
you obtain [[pk1Ex45G]]
	               764 nt product for F1-B5 pair (2-765)
	                 Optimal annealing temp:   58.1
	                 pct G+C:   51.2          	Tm:   80.0
  5'- GCCACAGTGGATTTTTCCATCC -3'
	                 22 nt backward primer
	                 pct G+C:   50.0 	Tm:   57.0


When used with Pk1Ex45GFor:
5'- TGCGGTACTGCCAGTCTTTGAG -3'
	                 22 nt forward primer
	                 pct G+C:   54.5 	Tm:   56.8
you obtain [[pk1Ex45G]]
	               764 nt product for F1-B5 pair (2-765)
	                 Optimal annealing temp:   58.1
	                 pct G+C:   51.2          	Tm:   80.0

useful as a pk1 genomic specific probe.
AKA DNA Stocks A
stored in my bench -20C ([[BenchFreezer]]) and contains (usually diluted ready for transformation) plasmid stocks that I have used for various reasons. Some of these stocks are endofree prepped and are indicated with EF.  Others are relatively concentrated minipreps.


|  |1_ |2_ |3_ |4_ |5_ |6_ |7_ |8_ |9_ |10  |
|A |   |   |   |   |   |   |   |   |   |    |
|B |   |   |   |   |   |   |   |   | [[pCAGGS-Flpe]]  |    |
|C |   |   |   |   |   |   |   |   |   |    |
|D |   |   |   |   |   |   |   |   |   |    |
|E |   |   |   |   |   |   |   |   |   |    |
|F |   |   |   |   |   |   |   |   |   |    |
|G |   |   |   |   |   |   |   |   |   |    |
|H |   |   |   |   |   |   |   |   |   |    |
|I |   |   |   |   |   |   |   |   |   |    |
|J |   |   |   |   |   |   |   |   |   |    |
These are DNA stocks of various purities of the collection of plasmids I have within my stocks.  This can be searched as all lab entries through the search box or by browsing.  Locations are indicated in the links to the box tiddlers that describe this level of detail.
!1000X solution (5 mg/ml) in PBS
50mg Polybrene
10mls PBS

store aliquots at –20C (Sigma-Aldrich, H9268) 
|  |1_ |2_ |3_ |4_ |5_ |6_ |7_ |8_ |9_ |10|
|A | | | | | | | | | |  |
|B | | |[[celsr2shRNAfor]] |[[celsr2shRNArev]] | | | | | |  |
|C | | | | | | | | | |  |
|D | | | | | | | | | |  |
|E | | | | | | | | | |  |
|F | | | | | | | | | |  |
|G | | | | | | | | | |  |
|H | | | | | | | | | |  |
|I | | | | | | | | | |  |
|J | | | | | | | | | |  |
This is a tiddler that organizes structure for the various protocols I use in lab.  These represent complete protocols known to work in my hands as is.  [[WorkingProtocols]] are of the variety that are not ready for public consumption but are being fine-tuned for use.  See [[Instances]] for form-based short versions of these protocols.
<html>
<body>

<iframe 
src ="
http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?DB=pubmed"
width = "100%"
height = "400">
</iframe>

</body>
</html>
!Mice

!Constructs to inject

!Procedure
Bring litter of pups to injection setup along with bucket of ice and microcapillary pulled pipettes (program 2 on Deisseroth lab pipet puller).
Make sure to turn on the heat lamp to aid recovery of the pups.
using a 27g needle back fill tubing and forward fill syringe cartridge with paraffin oil. Connect without introducing bubbles into tubing.
Forward fill a glass pipette with oil from syringe and connect to tubing without introducing air bubbles.
Load 6-10ul of injection solution (lentivirus, dye etc) into the capillary by back fill from an eppendorf cap.

Place pups one at a time in ice for about 1 minute to anesthetize
Remove and tape shoulders onto top of pipet tip box to immobilize
Using the stereoscope position the pipette over the pup head at the level of the cerebellum.
Inject 0.5ul at a rate of 0.3 ul per minute into desired spot.
Remove mouse from immobilization and place under heat lamp until pink
Repeat with remaining mice with desired injection agents.
!Notes

/***
| Name|QuickOpenTagPlugin|
| Description|Changes tag links to make it easier to open tags as tiddlers|
| Version|3.0 ($Rev: 1845 $)|
| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {

	dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?

	createTagButton: function(place,tag,excludeTiddler) {
		// little hack so we can to <<tag PrettyTagName|RealTagName>>
		var splitTag = tag.split("|");
		var pretty = tag;
		if (splitTag.length == 2) {
			tag = splitTag[1];
			pretty = splitTag[0];
		}
		
		var sp = createTiddlyElement(place,"span",null,"quickopentag");
		createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
		
		var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
                        config.views.wikified.tag.tooltip.format([tag]),onClickTag);
		theTag.setAttribute("tag",tag);
		if (excludeTiddler)
			theTag.setAttribute("tiddler",excludeTiddler);
    		return(theTag);
	},

	miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var tagged = store.getTaggedTiddlers(tiddler.title);
		if (tagged.length > 0) {
			var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
                        	config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
			theTag.setAttribute("tag",tiddler.title);
			theTag.className = "miniTag";
		}
	},

	allTagsHandler: function(place,macroName,params) {
		var tags = store.getTags();
		var theDateList = createTiddlyElement(place,"ul");
		if(tags.length == 0)
			createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);
		for (var t=0; t<tags.length; t++) {
			var theListItem = createTiddlyElement(theDateList,"li");
			var theLink = createTiddlyLink(theListItem,tags[t][0],true);
			var theCount = " (" + tags[t][1] + ")";
			theLink.appendChild(document.createTextNode(theCount));
			var theDropDownBtn = createTiddlyButton(theListItem," " +
			config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
			theDropDownBtn.setAttribute("tag",tags[t][0]);
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
"	{ margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
"	{ border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
"	{ margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
"	{ margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
"	/* looks better in right justified main menus */",
"	{ margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }", 
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		// we fully replace these builtins. can't hijack them easily
		window.createTagButton = this.createTagButton;
		config.macros.allTags.handler = this.allTagsHandler;
		config.macros.miniTag = { handler: this.miniTagHandler };
		config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
		store.addNotification("QuickOpenTagStyles",refreshStyles);
	}
}

config.quickOpenTag.init();

//}}}
|25 mM Tris•HCl pH 7.6| 2.5mls 1M stock|
|150 mM NaCl, | 3mls 5M stock|
|1% NP-40, | 10mls 10% NP-40|
|1% sodium deoxycholate | 10mls 10% stock|
|0.1% SDS | 0.5mls 20% stock|
|100mls total:| 74mls ddH20|
Prickle2 Genomic BAC to be used for homologous recombination in bacteria (would like to engineer a GFP-pk2 fusion)
clone is from BACPAC resource CHORI library. 04/07
Prickle2 Genomic BAC to be used for homologous recombination in bacteria (would like to engineer a GFP-pk2 fusion)
clone is from BACPAC resource CHORI library. 04/07
Ligations may be done at room temp (20-25C). For cohesive ends, use 1ul of T4 DNA ligase in a 20ul reaction for 10min.  For blunt ends use 1ul of T4 DNA ligase in 20ul for 2 hours or 1ul high concentration T4 DNA ligase for 10min
The areas to be swiped are:
1) Tyler's Bench 
2) The right-hand fume hood in W213
3) Raj's Bench (currently inactive)
4) Tyler's desk (currently inactive)
5) The Radiation sink (next to Kaye's bench)
6) Radiation Fridge)
7) The hybridization oven (and floor infront of it)
8) The left fume hood in W213

Take 4mls of scint fluid into new vials. Wet kimwipes with scint fluid and swipe areas thoroughly aiming for high use areas within the swiping area.  Deposit in vials and close. Count scintillation in the counter on 1st floor Clark East.
This represents a concise statement of why we are pursuing the current investigative work for the day
This tiddler organizes the molecular biology and tissue culture recipes required for various protocols.  
One useful website for salt solution preparation (does calculations for you based on the volume you want to make) is below:

http://molbiol.edu.ru/eng/protocol/01_02b.html
These constructs are used in the creation of conditional knockout targeting vectors as well as any other mutation that one can envision using homoologous recombination in E coli.
link here:
http://recombineering.ncifcrf.gov/
/***
| Name:|RenameTagsPlugin|
| Description:|Allows you to easily rename or delete tags across multiple tiddlers|
| Version:|3.0 ($Rev: 1845 $)|
| Date:|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {

	prompts: {
		rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
		remove: "Remove the tag '%0' from %1 tidder%2?"
	},

	removeTag: function(tag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,tag);
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	renameTag: function(oldTag,newTag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
			store.setTiddlerTag(tiddlers[i].title,true,newTag);  // add new
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

		saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields) {
			if (title != newTitle) {
				var tagged = this.getTaggedTiddlers(title);
				if (tagged.length > 0) {
					// then we are renaming a tag
					if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
						config.renameTags.renameTag(title,newTitle,tagged);

					if (!this.tiddlerExists(title) && newBody == "")
						// dont create unwanted tiddler
						return null;
				}
			}
			return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields);
		},

		removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

		removeTiddler: function(title) {
			var tagged = this.getTaggedTiddlers(title);
			if (tagged.length > 0)
				if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
					config.renameTags.removeTag(title,tagged);
			return this.removeTiddler_orig_renameTags(title);
		}

	},

	init: function() {
		merge(TiddlyWiki.prototype,this.storeMethods);
	}
}

config.renameTags.init();

//}}}

Samples:



[img[Restriction Digest|../Ash%20ScottLabNotebook/TWLabNotebook/RestrictionDigest.jpg]]


Gel Image:

[img[__|../Ash%20ScottLabNotebook/TWLabNotebook/  ]]

!Rationale for experiment:

!Worksheet for digest
<<slider REdiginstrow "RestrictionDigestTemplateRow" "RD Worksheet Row" "inserts another RE digest reaction template row">> 
<<slider REdiginstrow "RestrictionDigestTemplateRow" "RD Worksheet Row" "inserts another RE digest reaction template row">> 
<<slider REdiginstrow "RestrictionDigestTemplateRow" "RD Worksheet Row" "inserts another RE digest reaction template row">>
|Digest conditions <br> (_) 2hrs 37C<br> (_) other _ _ _ _ | Gel info: _ _ _ %<br> (_) TAE (_) Agarose<br> (_) TBE (_) Nuseive<br>(_) TA (_) Genepure |Runtime: _ _ _ _ <br><br>Voltage: _ _ _ _|

!Gel Image:

Enzyme 1 _ _ _ _ _(_)_ _ _ul
Enzyme 2 _ _ _ _ _(_)_ _ _ul
10XEBuf _ _ _ _ _ (_)_ _ _ul
10X_~BSA_ _ _ _ _ (_)_ _ _ul
0.1M Spermidine_ (_)_ _ _ul
DNA _ _ _ _ _ _ _ _(_)_ _ _ul
ddH~~2~~0_ _ _ _ _ _ _(_)_ _ _ul
Total_ _ _ _ _ _ _ _(_)_ _ _ul
|<<slider resdiginst "RestrictionDigestTemplate" "RD Template" "inserts another reaction template">> |<<slider resdiginst "RestrictionDigestTemplate" "RD Template" "inserts another reaction template">> |<<slider resdiginst "RestrictionDigestTemplate" "RD Template" "inserts another reaction template">> |<<slider resdiginst "RestrictionDigestTemplate" "RD Template" "inserts another reaction template">> |
This section is devoted to recording results of the experiments for the day.  It can include links to images (these are external to the TiddlyWiki) as well as embedded tables of results and other data. Often results obtained on a particular day are derived from experiments carried out in prior days (detailed in other LabNotebookEntries) and attempts to reference the prior entries will be made.
These are the recombinogenic strain provided by Neal Copeland for recombineering.  They are Flpe+(under arabinose promoter control), full details to be completed
/***
| Name|SaveCloseTiddlerPlugin|
| Description|Provides two extra toolbar commands, saveCloseTiddler and cancelCloseTiddler|
| Version|3.0 ($Rev: 2134 $)|
| Date|$Date: 2007-04-30 16:11:12 +1000 (Mon, 30 Apr 2007) $|
| Source|http://mptw.tiddlyspot.com/#SaveCloseTiddlerPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
To use these you must add them to the tool bar in your EditTemplate
***/
//{{{
merge(config.commands,{

	saveCloseTiddler: {
		text: 'done/close',
		tooltip: 'Save changes to this tiddler and close it',
		handler: function(e,src,title) {
			config.commands.saveTiddler.handler(e,src,title);
			config.commands.closeTiddler.handler(e,src,title);
			return false;
		}
	},

	cancelCloseTiddler: {
		text: 'cancel/close',
		tooltip: 'Undo changes to this tiddler and close it',
		handler: function(e,src,title) {
			config.commands.cancelTiddler.handler(e,src,title);
			config.commands.closeTiddler.handler(e,src,title);
			return false;
		}
	}

});

//}}}

Two links to the Scott lab webpages at Stanford and HowardHughes

http://scottlab.stanford.edu/

http://www.hhmi.org/research/investigators/scottm.html
/***
|''Name:''|SearchOptionsPlugin|
|''Source:''|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|''Author:''|Eric Shulman - ELS Design Studios|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.0.10|

The TiddlyWiki search function normally looks in both tiddler titles and tiddler body content ('text').  However, narrowing the search so that it examines only titles or only text, or expanding the search to include text contained in tiddler tags can be very helpful, especially when searching on common words or phrases.  In addition, it is often useful for the search results to show tiddlers with matching titles before tiddlers that contain matching text or tags.

!!!!!Usage
<<<
This plugin adds checkboxes (see below and in AdvancedOptions) to let you selectively configure the TiddlyWiki search function to just examine any combination of tiddler titles, text, or tags.  It also provides an option to switch the search results order between 'titles mixed in' (default) and 'titles shown first', as well as an option display the search results as a list of links (in an auto-generated "SearchResults" tiddler), rather than actually displaying all matching tiddlers.  You can also enable/disable the "incremental search" (key-by-key searching), so that a search is only initiated when you press the ENTER key or click on the "search:" prompt text.
<<<
!!!!!Configuration
<<<
In additional to the checkboxes in AdvancedOptions, a self-contained control panel is included here for your convenience:
<<option chkSearchTitles>> Search tiddler titles
<<option chkSearchText>> Search tiddler text
<<option chkSearchTags>> Search in tiddler tags
<<option chkSearchFields>> Search in tiddler data fields
<<option chkSearchShadows>> Search shadow tiddlers
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchList>> Show list of matching tiddlers
<<option chkSearchIncremental>> Incremental searching
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''SearchOptionsPlugin'' (tagged with <<tag systemConfig>>)
^^documentation and javascript for SearchOptionsPlugin handling^^

When installed, this plugin automatically adds checkboxes in the AdvancedOptions shadow tiddler so you can enable/disable the extended search behavior.  However, if you have customized your AdvancedOptions, you will need to manually add {{{<<option chkSearchTitles>>}}},  {{{<<option chkSearchText>>}}} and {{{<<option chkSearchTitlesFirst>>}}}  (with suitable prompt text) to your customized tiddler.
<<<
!!!!!Revision History
<<<
''2007.01.17 [mgray]'' disabled 'no search on empty box' by adding Alert to doSearch() from older version.
''2006.10.10 [2.4.0]'' added support for "search in tiddler data" (tiddler.fields)  Default is to search extended data.
''2006.04.06 [2.3.0]'' added support for "search in shadow tiddlers".  Default is *not* to search in the shadows (i.e.standard TW behavior).  Note: if a shadow tiddler has a 'real' counterpart, only the real tiddler is searched, since the shadow is inaccessible for viewing/editing.
''2006.02.03 [2.2.1]'' rewrite timeout clearing code and blank search text handling to match 2.0.4 core release changes.  note that core no longer permits "blank=all" searches, so neither does this plugin.  To search for all, use "." with text patterns enabled.
''2006.02.02 [2.2.0]'' in search.handler(), KeyHandler() function clears 'left over' timeout when search input is < 3 chars.  Prevents searching on shorter text when shortened by rapid backspaces (<500msec)
''2006.02.01 [2.1.9]'' in Story.prototype.search(), correct inverted logic for using/not using regular expressions when searching
also, blank search text now presents "No search text.  Continue anyway?" confirm() message box, so search on blank can still be processed if desired by user.
''2006.02.01 [2.1.8]'' in doSearch(), added alert/return if search text is blank
''2006.01.20 [2.1.7]'' fixed setting of config.macros.search.reportTitle so that Tweaks can override it.
''2006.01.19 [2.1.6]'' improved SearchResults formatting, added a "search again" form to the report (based on a suggestion from MorrisGray)
define results report title using config.macros.search.reportTitle instead of hard-coding the tiddler title
''2006.01.18 [2.1.5]'' Created separate functions for reportSearchResults(text,matches) and discardSearchResults(), so that other developers can create alternative report generators.
''2006.01.17 [2.1.4]'' Use regExp.search() instead of regExp.test() to scan for matches.  Correctd the problem where only half the matching tiddlers (the odd-numbered ones) were being reported.
''2006.01.15 [2.1.3]'' Added information (date/time, username, search options used) to SearchResults output
''2006.01.10 [2.1.2]'' use displayTiddlers() to render matched tiddlers.  This lets you display multiple matching tiddlers, even if SinglePageModePlugin is enabled.
''2006.01.08 [2.1.1]'' corrected invalid variable reference, "txt.value" to "text" in story.search()
''2006.01.08 [2.1.0]'' re-write to match new store.search(), store.search.handler() and story.search() functions.
''2005.12.30 [2.0.0]'' Upgraded to TW2.0
when rendering SearchResults tiddler, closeTiddler() first to ensure display is refreshed.
''2005.12.26 [1.4.0]'' added option to search for matching text in tiddler tags
''2005.12.21 [1.3.7]'' use \\ to 'escape' single quotes in tiddler titles when generating "Open all matching tiddlers" link.  Also, added access key: "O", to trigger "open all" link.
Based on a suggestion by UdoBorkowski.
''2005.12.18 [1.3.6]'' call displayMessage() AFTER showing matching tiddlers so message is not cleared too soon
''2005.12.17 [1.3.5]'' if no matches found, just display message and delete any existing SearchResults tiddler.
''2005.12.17 [1.3.4]'' use {/%%/{/%%/{  and }/%%/}/%%/} to 'escape' display text in SearchResults tiddler to ensure that formatting contained in search string is not rendered 
Based on a suggestion by UdoBorkowski.
''2005.12.14 [1.3.3]'' tag SearchResults tiddler with 'excludeSearch' so it won't list itself in subsequent searches
Based on a suggestion by UdoBorkowski.
''2005.12.14 [1.3.2]'' added "open all matching tiddlers..." link to search results output.
Based on a suggestion by UdoBorkowski.
''2005.12.10 [1.3.1]'' added "discard search results" link to end of search list tiddler output for quick self-removal of 'SearchResults' tiddler.
''2005.12.01 [1.3.0]'' added chkSearchIncremental to enable/disable 'incremental' searching (i.e., search after each keystroke) (default is ENABLED).
added handling for Enter key so it can be used to start a search.
Based on a suggestion by LyallPearce
''2005.11.25 [1.2.1]'' renamed from SearchTitleOrTextPlugin to SearchOptionsPlugin
''2005.11.25 [1.2.0]'' added chkSearchList option
Based on a suggestion by RodneyGomes
''2005.10.19 [1.1.0]'' added chkSearchTitlesFirst option.
Based on a suggestion by ChristianHauck
''2005.10.18 [1.0.0]'' Initial Release
Based on a suggestion by LyallPearce.
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
<<<
!!!!!Code
***/
//{{{
version.extensions.SearchTitleOrText = {major: 2, minor: 4, revision: 0, date: new Date(2006,10,12)};
//}}}

//{{{
if (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=true;
if (config.options.chkSearchText==undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags==undefined) config.options.chkSearchTags=true;
if (config.options.chkSearchFields==undefined) config.options.chkSearchFields=true;
if (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=false;
if (config.options.chkSearchList==undefined) config.options.chkSearchList=false;
if (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=false;
if (config.options.chkSearchShadows==undefined) config.options.chkSearchShadows=false;

config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchTitles>> Search in tiddler titles";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchText>> Search in tiddler text";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchTags>> Search in tiddler tags";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchFields>> Search in tiddler data fields";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchShadows>> Search in shadow tiddlers";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchTitlesFirst>> Search results show title matches first";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchList>> Search results show list of matching tiddlers";
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchIncremental>> Incremental searching";
//}}}

//{{{
if (config.macros.search.reportTitle==undefined)
	config.macros.search.reportTitle="SearchResults";
//}}}

//{{{
config.macros.search.handler = function(place,macroName,params)
{
	var lastSearchText = "";
	var searchTimeout = null;
	var doSearch = function(txt)
		{
		if (!txt.value.length && !confirm("No search text.  Continue anyway?")) { txt.focus(); return; }
			{
			story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);
			lastSearchText = txt.value;
			}
		};
	var clickHandler = function(e)
		{
		doSearch(this.nextSibling);
		return false;
		};
	var keyHandler = function(e)
		{
		if (!e) var e = window.event;
		switch(e.keyCode)
			{
			case 13: // ELS: handle enter key
				doSearch(this);
				break;
			case 27:
				this.value = "";
				clearMessage();
				break;
			}
		if (config.options.chkSearchIncremental)
			{
			if(this.value.length > 2)
				{
				if(this.value != lastSearchText)
					{
					if(searchTimeout) clearTimeout(searchTimeout);
					var txt = this;
					searchTimeout = setTimeout(function() {doSearch(txt);},500);
					}
				}
			else
				if(searchTimeout) clearTimeout(searchTimeout);
			}
		};
	var focusHandler = function(e)
		{
		this.select();
		};
	var btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);
	var txt = createTiddlyElement(place,"input",null,null,null);
	if(params[0])
		txt.value = params[0];
	txt.onkeyup = keyHandler;
	txt.onfocus = focusHandler;
	txt.setAttribute("size",this.sizeTextbox);
	txt.setAttribute("accessKey",this.accessKey);
	txt.setAttribute("autocomplete","off");
	if(config.browser.isSafari)
		{
		txt.setAttribute("type","search");
		txt.setAttribute("results","5");
		}
	else
		txt.setAttribute("type","text");
}
//}}}

//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack,"title","excludeSearch");
	var q = useRegExp ? "/" : "'";
	clearMessage();
	if (!matches.length) {
		if (config.options.chkSearchList) discardSearchResults();
		displayMessage(config.macros.search.failureMsg.format([q+text+q]));
	} else {
		if (config.options.chkSearchList) 
			reportSearchResults(text,matches);
		else {
			var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);
			this.closeAllTiddlers(); story.displayTiddlers(null,titles);
			displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));
		}
	}
	highlightHack = null;
}
//}}}

//{{{
TiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag)
{
	var candidates = this.reverseLookup("tags",excludeTag,false,sortField);

	// scan for matching titles first...
	var results = [];
	if (config.options.chkSearchTitles) {
		for(var t=0; t<candidates.length; t++)
			if(candidates[t].title.search(searchRegExp)!=-1)
				results.push(candidates[t]);
		if (config.options.chkSearchShadows)
			for (var t in config.shadowTiddlers)
				if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))
					results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));
	}
	// then scan for matching text, tags, or field data
	for(var t=0; t<candidates.length; t++) {
		if (config.options.chkSearchText && candidates[t].text.search(searchRegExp)!=-1)
			results.pushUnique(candidates[t]);
		if (config.options.chkSearchTags && candidates[t].tags.join(" ").search(searchRegExp)!=-1)
			results.pushUnique(candidates[t]);
		if (config.options.chkSearchFields && store.forEachField!=undefined) // requires TW2.1 or above
			store.forEachField(candidates[t],
				function(tid,field,val) { if (val.search(searchRegExp)!=-1) results.pushUnique(candidates[t]); },
				true); // extended fields only
	}
	// then check for matching text in shadows
	if (config.options.chkSearchShadows)
		for (var t in config.shadowTiddlers)
			if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))
				results.pushUnique((new Tiddler()).assign(t,config.shadowTiddlers[t]));

	// if not 'titles first',  re-sort results to so titles, text, tag and field matches are mixed together
	if(!sortField) sortField = "title";
	var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }
	if (!config.options.chkSearchTitlesFirst) results.sort(bySortField);

	return results;
}
//}}}

// // ''REPORT GENERATOR''
//{{{
if (!window.reportSearchResults) window.reportSearchResults=function(text,matches)
{
	var title=config.macros.search.reportTitle
	var q = config.options.chkRegExpSearch ? "/" : "'";
	var body="\n";

	// summary: nn tiddlers found matching '...', options used
	body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\n";
	body+="^^//searched in:// ";
	body+=(config.options.chkSearchTitles?"''titles'' ":"");
	body+=(config.options.chkSearchText?"''text'' ":"");
	body+=(config.options.chkSearchTags?"''tags'' ":"");
	body+=(config.options.chkSearchFields?"''fields'' ":"");
	body+=(config.options.chkSearchShadows?"''shadows'' ":"");
	if (config.options.chkCaseSensitiveSearch||config.options.chkRegExpSearch) {
		body+=" //with options:// ";
		body+=(config.options.chkCaseSensitiveSearch?"''case sensitive'' ":"");
		body+=(config.options.chkRegExpSearch?"''text patterns'' ":"");
	}
	body+="^^";

	// numbered list of links to matching tiddlers
	body+="\n<<<";
	for(var t=0;t<matches.length;t++) body+="\n# [["+matches[t].title+"]]";
	body+="\n<<<\n";

	// open all matches button
	body+="<html><input type=\"button\" href=\"javascript:;\" ";
	body+="onclick=\"story.displayTiddlers(null,["
	for(var t=0;t<matches.length;t++)
		body+="'"+matches[t].title.replace(/\'/mg,"\\'")+"'"+((t<matches.length-1)?", ":"");
	body+="],1);\" ";
	body+="accesskey=\"O\" ";
	body+="value=\"open all matching tiddlers\"></html> ";

	// discard search results button
	body+="<html><input type=\"button\" href=\"javascript:;\" ";
	body+="onclick=\"story.closeTiddler('"+title+"'); store.deleteTiddler('"+title+"'); store.notify('"+title+"',true);\" ";
	body+="value=\"discard "+title+"\"></html>";

	// search again
	body+="\n\n----\n";
	body+="<<search \""+text+"\">> ";
	body+="<<option chkSearchTitles>>titles ";
	body+="<<option chkSearchText>>text ";
	body+="<<option chkSearchTags>>tags";
	body+="<<option chkSearchFields>>fields";
	body+="<<option chkSearchShadows>>shadows";
	body+="<<option chkCaseSensitiveSearch>>case-sensitive ";
	body+="<<option chkRegExpSearch>>text patterns";

	// create/update the tiddler
	var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
	tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch");
	store.addTiddler(tiddler); story.closeTiddler(title);

	// use alternate "search again" label in <<search>> macro
	var oldprompt=config.macros.search.label;
	config.macros.search.label="search again";

	// render/refresh tiddler
	story.displayTiddler(null,title,1);
	store.notify(title,true);

	// restore standard search label
	config.macros.search.label=oldprompt;

}

if (!window.discardSearchResults) window.discardSearchResults=function()
{
	// remove the tiddler
	story.closeTiddler(config.macros.search.reportTitle);
	store.deleteTiddler(config.macros.search.reportTitle);
}
//}}}
/***
| Name|SelectPalettePlugin|
| Description|Lets you easily change colour palette|
| Version|3.0 ($Rev: 1845 $)|
| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source|http://mptw.tiddlyspot.com/#SelectPalettePlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
/***
!!Usage:
{{{<<<selectPalette>>}}}
<<selectPalette>>

!!WARNING
Will overwrite your ColorPalette tiddler.
***/

//{{{

merge(config.macros,{

	setPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var paletteName = params[0] ? params[0] : tiddler.title;
			createTiddlyButton(place,"apply","Apply this palette",function(e) {
				config.macros.selectPalette.updatePalette(tiddler.title);
				return false;
			});
		}
	},

	selectPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			createTiddlyDropDown(place,this.onPaletteChange,this.getPalettes());
		},

		getPalettes: function() {
			var result = [
				{caption:"-palette-", name:""},
				{caption:"(Default)", name:"(default)"}
			];
			var tagged = store.getTaggedTiddlers("palette","title");
			for(var t=0; t<tagged.length; t++) {
				var caption = tagged[t].title;
				var sliceTitle = store.getTiddlerSlice(caption,"Name");
				if (sliceTitle)
					caption = sliceTitle;
				result.push({caption:sliceTitle, name:tagged[t].title});
			}
			return result;
		},

		onPaletteChange: function(e) {
			config.macros.selectPalette.updatePalette(this.value);
			return true;
		},

		updatePalette: function(title) {
			if (title != "") {
				store.deleteTiddler("ColorPalette");
				if (title != "(default)")
					store.saveTiddler("ColorPalette","ColorPalette",store.getTiddlerText(title),
								config.options.txtUserName,undefined,"");
				this.refreshPalette();
				if(config.options.chkAutoSave)
					saveChanges(true);
			}
		},

		refreshPalette: function() {
			config.macros.refreshDisplay.onClick();
		}
	}
});

config.shadowTiddlers.OptionsPanel = "<<selectPalette>>\n\n" + config.shadowTiddlers.OptionsPanel;

//}}}

<script>
	var tags = store.getTags();
	if(tags.length == 0) return "no tags in document";
	var out="";
	for(var t=0; t<tags.length; t++) {
		out+="*[["+tags[t][0]+"]] ("+tags[t][1]+")"+"\n";
		var tids=store.getTaggedTiddlers(tags[t][0]);
		for (i=0; i<tids.length; i++) out+="##[["+tids[i].title+"]]\n";
	}
	return out;
</script>
/%
|Name|ShowRelatedTiddlers|
|Source|http://www.TiddlyTools.com/#ShowRelatedTiddlers|
|Version|1.0.0|
|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/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|starting from a selected tiddler, display a list and/or tree of linked or transcluded tiddlers|

%/{{smallform{<html><form action="javascript:;" style="display:inline"><!--
	--><select name=list size=1 style="width:69.5%" 
		onchange="var f=this.form; f.get.disabled=!this.value.length; removeChildren(f.parentNode.nextSibling); f.done.disabled=true; if (!this.value.length) return; var out=window.showRelatedTiddlers(this.value); wikify(out,f.parentNode.nextSibling); f.done.disabled=false;"><!--
	--><option value="">find all tiddlers related to...</option>
	--></select><!--
	--><input type=button name=refresh value='refresh' style="width:10%" 
		onclick="var f=this.form; var list=f.list; while (list.options[1]) list.options[1]=null; var tids=store.getTiddlers('title','excludeLists'); for (i=0; i<tids.length; i++) list.options[list.length]=new Option(tids[i].title,tids[i].title,false,false); list.selectedIndex=0; f.get.disabled=true; f.done.click();"><!--
	--><input type=button name=get value='get related' disabled style="width:10%" 
		onclick="var f=this.form; var list=f.list; var out=window.showRelatedTiddlers(list.value); removeChildren(f.parentNode.nextSibling); wikify(out,f.parentNode.nextSibling); f.done.disabled=false;"><!--
	--><input type=button name=done value='done' disabled style="width:10%" 
		onclick="removeChildren(this.form.parentNode.nextSibling); this.disabled=true;"><!--
--></form></html><script>

	// initialize tiddler list
	place.lastChild.firstChild.refresh.click();
	// adjust blockquote style to eliminate top/bottom margin
	setStylesheet(".relatedTiddlers blockquote { margin-top:0; margin-bottom:0; }","ShowRelatedTiddlers_styles");

	// when a tiddler is selected, recursively find and generate array of related tiddlers and tree view output
	window.showRelatedTiddlers = function(start) {

		// recursively build list of related tids and treeview output
		function findRelatedTiddlers(tid,tids,level) {
			var t=store.getTiddler(tid);
			if (t || store.isShadowTiddler(tid)) treeview+=level+" [["+tid+"]]\n";
			if (!t || tids.contains(tid)) return tids;
			tids.push(t.title);
			if (!t.linksUpdated) t.changed();
			if (t.links.length) for (var i=0; i<t.links.length; i++) if (t.links[i]!=tid) tids=findRelatedTiddlers(t.links[i],tids,level+">");
			return tids;
		}

		// get related tiddlers
		var treeview=listview="";
		var tids=findRelatedTiddlers(start,[],"");
		tids.shift(); // remove self from list
		var listview="[["+tids.sort().join("]], [[")+"]]";

		// generate output
		var out="";
		if (tids.length) {
			out+="+++(ShowRelatedTiddlers_TreeView){{floatright button{[tree view]}}}...";
			out+="\n----\n";
			out+="{{relatedTiddlers{\n"+treeview+"}}}===";
			out+="<"+"script>place.lastChild.id='ShowRelatedTiddlers_treeview';</"+"script>";
			out+="{{floatright{ | }}}";
			out+="++++(ShowRelatedTiddlers_ListView){{floatright button{[list view]}}}...";
			out+="\n----\n";
			out+="{{fine wrap{\n"+listview+"}}}===";
			out+="<"+"script>place.lastChild.id='ShowRelatedTiddlers_listview';</"+"script>";
		}
		out+=!tids.length?"There are no tiddlers":(tids.length+" tiddler"+(tids.length==1?" is":"s are"));
		out+=" related to: [["+start+"]]\n";
		if (tids.length) {
			out+="<"+"script>place.insertBefore(document.getElementById('ShowRelatedTiddlers_listview'),null);</"+"script>"
			out+="<"+"script>place.insertBefore(document.getElementById('ShowRelatedTiddlers_treeview'),null);</"+"script>"
		}
		return out;
	}
</script>@@display:block;@@}}}<<tiddler HideTiddlerTags>>
Source for most chemical reagents required at molecular biology purity or greater.
Website:
http://www.sigmaaldrich.com/Area_of_Interest/The_Americas/United_States.html
A Non-linear Lab Notebook
Ash's ScottLab Notebook
Hybridization Buffer 
30ml	    H20
15mls	    Formamide
20mls 	    [[1M NaPhosphateBuffer pH 7.2]]
200ul	    [[0.5M EDTA pH8.0]]
1 gram	    Bovine Serum Albumin (BSA)
35mls	    [[20% SDS]]
------------------------
100mls

<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/Southern061507.jpg" width="240" height="160" /></a></html>

This is the blot that confirms by EcorV digest that our vangl1cko clone is indeed recombinant.  We proceeded from here to express Flp to remove the neo cassette leaving behind a cleanly floxed exon4 of vangl1.
!Day 1: 
Digest DNA with restriction enzyme of choice (see [[RestrictionDigestInstance]])  For genomic DNA incubate at 37C o/n

!Day 2: 
Take a picture of the gel with metric visible in the picture for later scaling back to determine positions of expected bands
Rinse in 0.25M HCl for 10minutes (dye will change to dark purple)
Rinse in ddH20
Rinse in 0.4N NaOH for 20minutes X 2 (with ddH20 rinse between)
Stack Gel with Hybond membrane (rinse in 2X SSC 1min first) then 4 layers Whatmann paper and then paper towels.
Add weight and transfer for 4-16hrs.

!Day 3: 
Remove stack and rinse membrane briefly in 2XSSC. 
Cross link using autocrosslink feature on Stratalinker Crosslinker.
Store until ready to hybridize

Prehybridization:
<<slider  "Prehybe" "Southern Blot Hybridization Solution -- High Stringency (Joyner Lab)" "">>
Add blot to bottle after rinse in 2XSSC using 25ml stripette to roll and unroll blot
Add prehybe buffer (same as hybe solution above without probe) and incubate at 60C for 1hr - o/n.

Make probe: [[RadiolabeledRandomPrimeProbe]]

Add 1-2X10^6 counts per ml into hybridization solution and pour out old prehybe solution and replace.  
Incubate at 60C o/n to hybridize

!Day 4:
Wash steps:
Rinse blot in bottle with LowStringencySBWash at RT
Add LowStringencySBWash to bottle and incubate with rotation 20-30minutes 60C
Change wash to HighStringencySBWash and repeat 60C incubation X2 additional times.
Remove blot from bottle, place face down on Saran Wrap and back with 2XSSC moistened Whatman paper cut to size.
Wrap completely in Saran Wrap and expose to film 2days to 1week for proper exposure (may use Geiger counter to assess degree of signal and base exposure length on this)
Since it is useful to be able to search for stocks based on data in the labnotebook I have included in this file a tag for Stocks including [[Plasmids]], CellStocks, ViralStocks, OligoPrimers etc.  I will try to keep this as up to date as possible so that at anytime with a query of the this weblabnotebook one could find stocks that relate to experiments of interest and vice versa (find the daily journal entries that include the use of a given stock)  Note: MouseStocks are being kept in a separate TiddlyWiki at http://ashmousestocks.tiddlyspot.com
This is a repository for all the storage I use for my samples in lab.  From here you can quickly find [[Stocks]], including [[OligoPrimers]], ViralStocks, CellStocks, [[Plasmids]]. and anything else you might need of mine.
[[MptwStyleSheet]]
Just a short form for [[pRNATinH1.4/LentiTomatoLV]]
{{fine{
| [[Tag Grid|TagGridPlugin]] | [[Tag Cloud|TagCloudPlugin]] |
| //cross-index of tags from:// FavoriteTags | //frequently used tags are shown with larger font// |
| <html><hr></html> | <html><hr></html> |
| <<tagGrid +FavoriteTags +FavoriteTags ffffff 333333 colorAll sortrows sortcolumns>> | @@font-size:1.1em;line-height:1.3em;<<tagCloud demotag alpha test excludeMissing excludeLists excludeSearch includeNew>>@@ |
|borderless|k
}}}
These are formatted tiddlers carrying tables that I use frequently for data so I can cut and paste them into daily journal  LabNotebookEntries to use without reinventing the wheel. Also a good template tiddler for boxes used to store stocks as well.
/***
|Name|TagCloudPlugin|
|Source|http://www.TiddlyTools.com/#TagCloudPlugin|
|Version|0.0.0|
|Author|Clint Checketts|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description||

!Usage
<<tagCloud>>

!Code
***/
//{{{
version.extensions.tagCloud = {major: 1, minor: 0 , revision: 0, date: new Date(2006,2,04)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman

config.macros.tagCloud = {
 noTags: "No tag cloud created because there are no tags.",
 tooltip: "%1 tiddlers tagged with '%0'"
};

config.macros.tagCloud.handler = function(place,macroName,params) {
 
var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);

var tags = store.getTags();
for (var t=0; t<tags.length; t++) {
  for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";
}

 if(tags.length == 0) 
   createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
 //Findout the maximum number of tags
 var mostTags = 0;
 for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
  if (tags[t][1] > mostTags) mostTags = tags[t][1];
 }
 //divide the mostTags into 4 segments for the 4 different tagCloud sizes
 var tagSegment = mostTags / 4;

  for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
 var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);
 tagCloudWrapper.appendChild(document.createTextNode(" "));
 var theTag = createTiddlyButton(tagCloudElement,tags[t][0],this.tooltip.format(tags[t]),onClickTag,"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));
  theTag.setAttribute("tag",tags[t][0]);
 }

};

setStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");
//}}}
/***
|Name|TagGridPlugin|
|Source|http://www.TiddlyTools.com/#TagGridPlugin|
|Version|1.6.3|
|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/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Generate a cross-referenced grid of tiddlers, based on tag values|

!!!!!Usage
<<<
Specify which tags should be used for the columns and rows of the grid to ''see a particular cross-section'' of your document, or use //all// tags to ''get an instant 'birds-eye' overview of your entire document''.

Each grid cell contains a label with the number of tiddlers in that grid cell.  Click the number to ''show a popup of cross-indexed tiddler titles''.  Grid cells with no matching tiddlers contain a "-" (dash) that can be clicked to ''create new tiddlers automatically pre-tagged with that cell's combination of tags.''

To keep the grid display from getting very wide, the grid tags used as column headings are not initially displayed.  ''Click directly above the column to show/hide that heading'', or toggle all column headings at once by clicking the {{{>>>}}} symbol in the upper-left corner of the grid display.  Clicking a displayed row/column tag heading opens the tiddler whose title is that tag name.

The macro syntax to include a tag grid in your tiddler content is:
{{{<<tagGrid columntags exclude:tags rowtags exclude:tags startcolor endcolor open inline colorall sortrows sortcolumns>>}}}
where:

''rowtags/columntags'' are each:
* a ''quoted'' space-separated lists of tags: {{{"tag1 tag2 [[tag3 with spaces]] tag4 ..."}}}
* //or,// a tiddler name preceded by "+": {{{+TiddlerName}}} where the specified tiddler contains a space-separated list of tags (same format as DefaultTiddlers)
* //or,// a tiddler name preceded by "@": {{{@TiddlerName}}} to use the same tags as those that are tagging the specified tiddler (i.e., the tiddler is a representative example of the kind of tags you are interested in cross-indexing)
* //or,// a tag name preceded by "=": {{{=tagName}}} to use the group of tags that are themselves, in turn, tagged with the indicated tagName (i.e., useful when you have defined a 'meta-tag'/classification system, a.k.a. "TagglyTagging" techniques)
* //or,// keyword: {{{all}}} (use all tags)
* if only columntags are specified, rows display all tags by default
* if no parameters are provided, both rows and columns display all tags
''exclude:tag tag tag''
* This optional parameter can be placed immediately following the columntags and/or rowtags parameter to selectively omit certain tags from the grid display.  You can exclude several tags at once by enclosing the entire parameter in quotes, e.g.: {{{"exclude:tag tag tag"}}}  
''startcolor/endcolor''
* describes a ''color gradient'' where the grid cell background color is calculated as a combination of  the starting and ending colors, in proportion to the cell value
* colors are specified using 6-digit hex-coded RGB values (e.g., red="FF0000", green="00FF00", blue="0000FF")
* the cells with the lowest number use the starting background color
* the cells with the highest number use the ending background color
* if one or both color values are omitted, all cells have //transparent// backgrounds
''open''
* causes the grid column headings to be shown when the grid is initially displayed (you can hide all the column headings using the &lArr; link, or just toggle one heading by clicking //near// the tag text.  (Note: clicking //on// the tag text will open the tiddler with the same name as the tag.
''inline''
* by default, cells with cross-indexed tiddlers display the total number of tiddlers in the cell.  When this number is clicked, a popup is displayed, containing links to the individual tiddlers in that cell.  However, the popup display makes it difficult to compare the contents of two or more cells because only one popup can be displayed at any given time.  To address this, you can use the ''inline'' keyword parameter to ''display the grid contents directly in the cells'', without using any popups.  While this can make the grid display significantly larger (to fit the text of each cell), it also enables quick comparisons between cells.  Inline rendering of the cell contents also makes it possible to print the entire grid contents for easy off-line reporting and analysis.
''colorall''
* by default, cells with no cross-indexed tiddlers have a //transparent// background (e.g., the tiddler's background colors shows through).  However, this can create a 'patchwork' appearance to the grid.  Add the ''colorall'' keyword parameter to force these 'empty' cells to use the specified startcolor instead of a transparent background.
''sortrows/sortcolumns''
* rowtags and columntags are normally displayed in the order specified in the macro parameters, or in alphabetical order when ''all'' is used to generate the list of tags.  Adding the ''sortrows'' and/or ''sortcolumns'' keyword parameters will sort the tags in decending order so that the most frequently used tags are displayed first (i.e., towards the top-left corner).
<<<
!!!!!Examples
<<<
{{{<<tagGrid +FavoriteTags +FavoriteTags eeeeff 3333ff colorall sortrows sortcolumns>>}}}
<<tagGrid +FavoriteTags +FavoriteTags eeeeff 3333ff colorall sortrows sortcolumns>>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''TagGridPlugin'' (tagged with <<tag systemConfig>>)
^^documentation and javascript for this plugin^^
<<<
!!!!!Revision History
<<<
''2007.03.08 [1.6.3]'' use global flag to replace ALL single-quotes in tiddler titles (fixes popups where more than one tiddler title had a ' in it)
''2007.03.06 [1.6.2]'' removed debugging alert()s... D'oh!
''2007.03.06 [1.6.1]'' fix handling for excluding tags (was only removing last tag in list)
''2007.03.05 [1.6.0]'' added "exclude:tag tag tag..." parameter handling for both rows and columns
''2006.12.20 [1.5.1]'' fixed bordercolor calculation and CSS so grid correctly uses midtone-color for table cell borders
''2006.12.09 [1.5.0]'' added 'inline' keyword parameter to display tiddler titles directly in grid cells (in addition to popup)
''2006.11.03 [1.4.0]'' changed {{{=TiddlerName}}} param usage to {{{@TiddlerName}}} and added {{{=tagName}}} usage for specifying TagglyTagging "meta-tagged" groups of tag (based on ideas by GregWolff)
''2006.11.03 [1.3.3]'' performance optimization: calculate maximum cross-index value while building grid (eliminates extra calc during colormapping)
''2006.10.29 [1.3.2]'' fixes for IE: in decToHex and hexToDec, use substr() instead array indexing.  Also, use {{{>>>}}} and {{{<<<}}} instead of {{{&rArr;}}} and {{{&lArr;}}} for 'toggle headings' link text
''2006.10.29 [1.3.1]'' suppress border around table
''2006.10.21 [1.3.0]'' added {{{=TiddlerName}}} and {{{open}}} parameter handling
''2006.10.17 [1.2.1]'' fixed row/column sorting to properly sort undefined tags to the end of the list
''2006.10.16 [1.2.0]'' added optional row/column sorting and improved parameter parsing
''2006.10.15 [1.1.0]'' added features: background gradients, collapsible column headings, eliminated table borders around row/column headings
''2006.10.06 [1.0.1]'' calls to displayTiddler() use 'this' instead of 'null'
''2006.10.05 [1.0.0]'' initial release (converted from prototype inline script)
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.tagGrid= {major: 1, minor: 6, revision: 3, date: new Date(2007,3,8)};
config.macros.tagGrid= {
	verbose:false, // display debugging/performance feedback messages
	warn:true,	// display workload warning message before rendering
	threshold:300000, // workload warning threshold (workload=# of comparisons to perform)
	handler:
	function(place,macroName,params) {

		// get columns
		var columntags=params.shift(); var cols=[];
		if ((!columntags)||(columntags=="all")) // no param (or "all") - use all tags
			{ var all=store.getTags(); for (i=0;i<all.length;i++) cols[i]=all[i][0]; }
		else if (columntags.substr(0,1)=="+") // get tag list from tiddler content
			{ var t=store.getTiddlerText(columntags.substr(1)); if (t&&t.length) cols=t.readBracketedList(); }
		else if (columntags.substr(0,1)=="@") // get tag list from tiddler tags
			{ var t=store.getTiddler(columntags.substr(1)); if (t&&t.tags) cols=t.tags; }
		else if (columntags.substr(0,1)=="=")  // get names of "tagtiddlers" tagged with meta-tag
			{ var t=store.getTaggedTiddlers(columntags.substr(1)); for (i=0;i<t.length;i++) cols[i]=t[i].title; }
		else cols=columntags.readBracketedList();
		if (!cols.length) { wikify("~TagGrid: no columns to display\n",place); return; }

		// exclude specific column tags
		if (params[0].substr(0,8)=="exclude:") {
			var ex=params.shift().substr(8).readBracketedList();
			for (x=0; x<ex.length; x++) {
				var i=cols.indexOf(ex[x]);
				if (i!=-1) cols.splice(i,1); // remove excluded tags
			}
		}

		// get rows
		var rowtags=params.shift(); var rows=[];
		if ((!rowtags)||(rowtags=="all")) // no param (or "all") - use all tags
			{ var all=store.getTags(); for (i=0;i<all.length;i++) rows[i]=all[i][0]; }
		else if (rowtags.substr(0,1)=="+") // get tag list from tiddler content
			{ var t=store.getTiddlerText(rowtags.substr(1)); if (t&&t.length) rows=t.readBracketedList(); }
		else if (rowtags.substr(0,1)=="@") // get tag list from tiddler tags
			{ var t=store.getTiddler(rowtags.substr(1)); if (t&&t.tags) rows=t.tags; }
		else if (rowtags.substr(0,1)=="=")  // get names of "tagtiddlers" tagged with meta-tag
			{ var t=store.getTaggedTiddlers(rowtags.substr(1)); for (i=0;i<t.length;i++) rows[i]=t[i].title; }
		else rows=rowtags.readBracketedList();
		if (!rows.length) { wikify("~TagGrid: no rows to display\n",place); return; }

		// exclude specific row tags
		if (params[0].substr(0,8)=="exclude:") {
			var ex=params.shift().substr(8).readBracketedList();
		 	for (x=0; x<ex.length; x++) {
				var i=rows.indexOf(ex[x]);
				if (i!=-1) rows.splice(i,1); // remove excluded tags
			}
		}

		// get optional flag keywords and/or color gradient endpoints
		var defOpen=false;
		var colorAll=false;
		var sortRows=false;
		var sortColumns=false;
		var showInline=false;
		var p=params.shift();
		while (p) {
			switch (p.toUpperCase()) {
				case "OPEN":
					defOpen=true; break;
				case "COLORALL":
					colorAll=true; break;
				case "SORTROWS":
					sortRows=true; break;
				case "SORTCOLUMNS":
					sortColumns=true; break;
				case "INLINE":
					showInline=true; break;
				default:
					if (startcolor==undefined) var startcolor=p;
					else if (endcolor==undefined) var endcolor=p;
					else alert("unexpected parameter: '"+p+"'");
					break;
			}
			p=params.shift();
		}

		// get the tiddlers
		var tiddlers=store.getTiddlers("modified","excludeLists");

		// show "workload warning"... get permission to proceed...
		if (this.warn) {
			var workload=rows.length*cols.length*tiddlers.length;
			var warning="Cross-indexing %0 tiddlers in %1 row%3 by %2 column%4...\n(up to %5 comparisons MAY be needed)\n\n";
			warning+="This may take a while.  It is OK to proceed?";
			warning=warning.format([tiddlers.length,rows.length,cols.length,rows.length!=1?"s":"",cols.length!=1?"s":"",workload]);
			if (workload>this.threshold&&!confirm(warning)) { wikify("~TagGrid: display cancelled by user\n",place); return; }
		}

		// sort row and column tags in decending order, by frequency of use
		if (sortRows||sortColumns) {
			var tags=store.getTags(); var tagcount={}; for (i=0; i<tags.length; i++) tagcount[tags[i][0]]=tags[i][1];
			if (sortRows) rows.sort(function(a,b){return (!tagcount[a]||tagcount[a]<tagcount[b])?+1:(tagcount[a]==tagcount[b]?0:-1);});
			if (sortColumns) cols.sort(function(a,b){return (!tagcount[a]||tagcount[a]<tagcount[b])?+1:(tagcount[a]==tagcount[b]?0:-1);});
		}

		// cross-index tiddlers by tags, building lists of tiddler titles into grid[i][j] (sparse array)
		var time1=new Date();
		var grid=new Array();
		var max=0;  // track maximum cross-index value
		for (var t=0;t<tiddlers.length;t++) { // for each tiddler
			for (var i=0;i<tiddlers[t].tags.length;i++) { // for each tag in tiddler
				var row=rows.find(tiddlers[t].tags[i]); if (row==null) continue; // this tag not in rows
				if (!grid[row]) grid[row]=new Array(); // create row as needed
				for (var j=0;j<tiddlers[t].tags.length;j++) {  // for each tag in tiddler
					var col=cols.find(tiddlers[t].tags[j]); if (col==null) continue; // this tag not in columns
					if (!grid[row][col]) grid[row][col]=new Array(); // create cell
					grid[row][col].push("[["+tiddlers[t].title+"]]"); // add tiddler title to cell
					if (max<grid[row][col].length) max=grid[row][col].length; // check for new maximum
				}
			}
		}

		// compute gradient color map
		if (startcolor && endcolor) {
			var digits="0123456789ABCDEF";
			function hexToDec(s) // 2-digit conversion
				{ return digits.indexOf(s.substr(0,1).toUpperCase())*16+digits.indexOf(s.substr(1,1).toUpperCase()); }
			function decToHex(d) // 2-digit conversion
				{ return digits.substr(Math.floor(d/16),1)+digits.substr(d%16,1); }
			var steps=max;
			var startR=hexToDec(startcolor.substr(0,2));
			var startG=hexToDec(startcolor.substr(2,2));
			var startB=hexToDec(startcolor.substr(4,2));
			var endR=hexToDec(endcolor.substr(0,2));
			var endG=hexToDec(endcolor.substr(2,2));
			var endB=hexToDec(endcolor.substr(4,2));
			var rangeR=endR-startR;
			var rangeG=endG-startG;
			var rangeB=endB-startB;
			var stepR=rangeR/steps; if (stepR>0) stepR=Math.floor(stepR); else stepR=Math.ceil(stepR);
			var stepG=rangeG/steps; if (stepG>0) stepG=Math.floor(stepG); else stepG=Math.ceil(stepG);
			var stepB=rangeB/steps; if (stepB>0) stepB=Math.floor(stepB); else stepB=Math.ceil(stepB);
			var colors=[];
			colors[0]=startcolor;
			for (var i=1; i<steps; i++)
				colors[i]=decToHex(startR+stepR*i)+decToHex(startG+stepG*i)+decToHex(startB+stepB*i);
			colors[steps-1]=endcolor; // fixup for roundoff error
		}

		// generate HTML table containing popups (and optional inline links)
		var time2=new Date();
		var out="<html><table cellpadding='0' cellspacing='0' style='border:0;border-collapse:collapse'>";
		// column headings
		out+="<tr style='border:0;'><td style='text-align:right;border:0'>";
		out+="<a href='' style='font-size:80%;'";
		out+="	title='show all column headings'";
		out+="	onclick='return config.macros.tagGrid.toggleAllColumns(this,event,"+defOpen+")'>"+(defOpen?"<<<":">>>")+"</a>";
		out+="</td>";
		for (var i=0;i<cols.length;i++) {
			out+="<td style='text-align:center;cursor:pointer;border:0;padding-left:2px;padding-right:2px' ";
			out+="	title='show/hide column heading' ";
			out+="	onclick='return config.macros.tagGrid.toggleColumn(this,event)'>";
			out+="<a href='' title='open tag tiddler'";
			if (!defOpen) out+="	style='display:none' ";
			out+="	onclick='story.displayTiddler(this,\""+cols[i]+"\");return false'>"+cols[i]+"</a>";
			out+="</td>";
		}
		out+="</tr>";
		for (var i=0;i<rows.length;i++) {
			// row heading
			var rowlink="<a href='' onclick='story.displayTiddler(this,\""+rows[i]+"\");return false'>"+rows[i]+"</a>";
			out +="<tr style='border:0'>";
			out +="<td style='text-align:right;border:0;padding-right:2px'>"+rowlink+"</td>";
			for (var j=0;j<cols.length;j++) {
				var content="";
				var bgcolor="transparent"; // default empty cell background
				if (colors && colorAll) bgcolor="#"+colors[0]; // empty cell background uses startcolor 
				var bordercolor=""; // default border color (inherits current CSS value)
				if (colors) bordercolor="#"+colors[Math.floor(colors.length/2-1)]; // border uses mid-tone color 
				var linkstyle=""; // use default unless background color is very light or very dark
				var cross=(grid[i]&&grid[i][j])?grid[i][j]:null;
				var hdr=rows[i]+(rows[i]!=cols[j]?(" + "+cols[j]):"");
				if (cross) {
					// cross-tagged list of tiddlers (in a popup)
					var label="<b>"+cross.length+"</b>";
					var tip=hdr;
					var list=cross.sort().join(' ').replace(/'/g,"\\'");
					var handler="return config.macros.tagGrid.popup(this,event,\'"+rows[i]+"\',\'"+cols[j]+"\',\'"+list+"\')";
					if (colors) {
						var c=colors[cross.length-1];
						bgcolor="#"+c;
						linkstyle="style='color:#000000 !important'";
						// invert link color if background is very light
						if (c.substr(0,2)<"60" || c.substr(2,2)<"60" || c.substr(4,2)<"60")
							linkstyle="style='color:#FFFFFF !important'";
					}
				} else {
					var label="&nbsp;-&nbsp;";
					var tip="create a new tiddler tagged with: "+hdr;
					var list="";
					var handler="var title=config.macros.newTiddler.title;";
					handler+="story.displayTiddler(this,title,DEFAULT_EDIT_TEMPLATE);";
					handler+="story.setTiddlerTag(title,\'"+rows[i]+"\',+1);";
					handler+="story.setTiddlerTag(title,\'"+cols[j]+"\',+1);";
					handler+="story.focusTiddler(title,\'text\');return(false);";
				}
				if (!showInline || !cross)
					content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">'+label+'</a>';
				if (showInline && cross) {
					content+="<div "+linkstyle+"><span style='white-space:nowrap'>";
					content+=hdr+" ("+label+")";
					content+="</span></div><hr>";
					// list tiddler links inline in table cell
					for (t=0; t<cross.length; t++) {
						var title=cross[t].replace(/\[\[/g,'').replace(/\]\]/g,'');
						var handler="story.displayTiddler(null,'"+title+"');return false;"
						var tid=store.getTiddler(title);
						var author=tid.modifier;
						var date=tid.modified.toLocaleString();
						var tip=config.messages.tiddlerLinkTooltip.format([title,author,date]);
						if (t>0) content+="<br>";
						content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">'+title+'</a>';
					}
					content+="<hr>";
					handler="var tids=\'"+list+"\'.readBracketedList();story.displayTiddlers(this,tids); return(false);"
					tip="display all tiddlers tagged with: "+hdr;
					content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">open all...</a><br>';
					handler="var title=config.macros.newTiddler.title;";
					handler+="story.displayTiddler(this,title,DEFAULT_EDIT_TEMPLATE);";
					handler+="story.setTiddlerTag(title,\'"+rows[i]+"\',+1);";
					handler+="story.setTiddlerTag(title,\'"+cols[j]+"\',+1);";
					handler+="story.focusTiddler(title,'text'); return(false);"
					tip="create a new tiddler tagged with: "+hdr;
					content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">new tiddler...</a>';
				}
				out+="<td style='background-color:"+bgcolor+";border:1px solid "+bordercolor+" !important;text-align:center'>"+content+"</td>";
			}
			out+="</tr>";
		}
		out+="</table>";
		out+="</html>";
		createTiddlyElement(place,"span").innerHTML=out;
		var time3=new Date();
		if (this.verbose) displayMessage("TagGrid: scan="+(time2-time1)+", generate table="+(time3-time2));
	},
	popup:
	function(here,event,row,col,list) {
		var tids=list.readBracketedList();
		var hdr=row+(row!=col?(" AND "+col):"");
		if (tids.length) {
			var p=Popup.create(here); if (!p) return;
			createTiddlyText(p,hdr);
			createTiddlyElement(p,'hr');
			for(var t=0; t<tids.length; t++) createTiddlyLink(createTiddlyElement(p,'li'),tids[t],true);
			createTiddlyElement(p,'hr');
			createTiddlyButton(createTiddlyElement(p,'li'),
				"open all...", "display all tiddlers tagged with: "+hdr,
				function(){story.displayTiddlers(null,tids); return(false);});
			var a=createTiddlyButton(createTiddlyElement(p,'li'),
				"new tiddler...", "create a new tiddler tagged with: "+hdr,
				function(){
					var title=config.macros.newTiddler.title;
					story.displayTiddler(this,title,DEFAULT_EDIT_TEMPLATE);
					story.setTiddlerTag(title,this.getAttribute("rowtag"),+1);
					story.setTiddlerTag(title,this.getAttribute("coltag"),+1);
					story.focusTiddler(title,"text");
					return(false);
				});
			a.setAttribute("rowtag",row);
			a.setAttribute("coltag",col);
			Popup.show(p,false);
		}
		event.cancelBubble = true;
		if (event.stopPropagation) event.stopPropagation();
		return(false);
	},
	toggleAllColumns:
	function(here,event,defOpen) {
		if (here.expanded==undefined) here.expanded=defOpen;
		var ex=here.expanded=!here.expanded; 
		here.innerHTML=ex?"<<<":">>>";
		here.title=ex?'hide all column headings':'show all column headings';
		var cells=here.parentNode.parentNode.getElementsByTagName("td");
		for (i=1; i<cells.length; i++) cells[i].firstChild.style.display=ex?"inline":"none";
		event.cancelBubble = true;
		if (event.stopPropagation) event.stopPropagation();
		return(false);
	},
	toggleColumn:
	function(here,event) {
		here.firstChild.style.display=(here.firstChild.style.display=="none")?"inline":"none";
		event.cancelBubble = true;
		if (event.stopPropagation) event.stopPropagation();
		return(false);
	}
};
//}}}
/***
| Name|TagglyTaggingPlugin|
| Description|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
| Version|3.0 ($Rev: 2246 $)|
| Date|$Date: 2007-06-07 16:27:27 +1000 (Thu, 07 Jun 2007) $|
| Source|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
See http://mptw.tiddlyspot.com/#TagglyTagging
***/
//{{{
config.taggly = {

	// for translations
	lingo: {
		labels: {
			asc:        "\u2191", // down arrow
			desc:       "\u2193", // up arrow
			title:      "title",
			modified:   "modified",
			created:    "created",
			show:       "+",
			hide:       "-",
			normal:     "normal",
			group:      "group",
			commas:     "commas",
			sitemap:    "sitemap",
			numCols:    "cols\u00b1", // plus minus sign
			label:      "Tagged as '%0':",
			excerpts:   "excerpts",
			noexcerpts: "no excerpts"
		},

		tooltips: {
			title:    "Click to sort by title",
			modified: "Click to sort by modified date",
			created:  "Click to sort by created date",
			show:     "Click to show tagging list",
			hide:     "Click to hide tagging list",
			normal:   "Click to show a normal ungrouped list",
			group:    "Click to show list grouped by tag",
			sitemap:  "Click to show a sitemap style list",
			commas:   "Click to show a comma separated list",
			numCols:  "Click to change number of columns"
		}
	},

	config: {
		showTaggingCounts: true,
		listOpts: {
			// the first one will be the default
			sortBy:     ["title","modified","created"],
			sortOrder:  ["asc","desc"],
			hideState:  ["show","hide"],
			listMode:   ["normal","group","sitemap","commas"],
			numCols:    ["1","2","3","4","5","6"],
			excerpts:   ["noexcerpts","excerpts"]
		},
		valuePrefix: "taggly.",
		excludeTags: ["excludeLists","excludeTagging"],
		excerptSize: 50,
		excerptMarker: "/%"+"%/"
	},

	getTagglyOpt: function(title,opt) {
		var val = store.getValue(title,this.config.valuePrefix+opt);
		return val ? val : this.config.listOpts[opt][0];
	},

	setTagglyOpt: function(title,opt,value) {
		if (!store.tiddlerExists(title))
			// create it silently
			store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),null);
		// if value is default then remove it to save space
		return store.setValue(title,
			this.config.valuePrefix+opt,
			value == this.config.listOpts[opt][0] ? null : value);
	},

	getNextValue: function(title,opt) {
		var current = this.getTagglyOpt(title,opt);
		var pos = this.config.listOpts[opt].indexOf(current);
		// a little usability enhancement. actually it doesn't work right for grouped or sitemap
		var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
		var newPos = (pos + 1) % limit;
		return this.config.listOpts[opt][newPos];
	},

	toggleTagglyOpt: function(title,opt) {
		var newVal = this.getNextValue(title,opt);
		this.setTagglyOpt(title,opt,newVal);
	}, 

	createListControl: function(place,title,type) {
		var lingo = config.taggly.lingo;
		var label;
		var tooltip;
		var onclick;

		if ((type == "title" || type == "modified" || type == "created")) {
			// "special" controls. a little tricky. derived from sortOrder and sortBy
			label = lingo.labels[type];
			tooltip = lingo.tooltips[type];

			if (this.getTagglyOpt(title,"sortBy") == type) {
				label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
				onclick = function() {
					config.taggly.toggleTagglyOpt(title,"sortOrder");
					return false;
				}
			}
			else {
				onclick = function() {
					config.taggly.setTagglyOpt(title,"sortBy",type);
					config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);
					return false;
				}
			}
		}
		else {
			// "regular" controls, nice and simple
			label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
			tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
			onclick = function() {
				config.taggly.toggleTagglyOpt(title,type);
				return false;
			}
		}

		// hide button because commas don't have columns
		if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
			createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");
	},

	makeColumns: function(orig,numCols) {
		var listSize = orig.length;
		var colSize = listSize/numCols;
		var remainder = listSize % numCols;

		var upperColsize = colSize;
		var lowerColsize = colSize;

		if (colSize != Math.floor(colSize)) {
			// it's not an exact fit so..
			upperColsize = Math.floor(colSize) + 1;
			lowerColsize = Math.floor(colSize);
		}

		var output = [];
		var c = 0;
		for (var j=0;j<numCols;j++) {
			var singleCol = [];
			var thisSize = j < remainder ? upperColsize : lowerColsize;
			for (var i=0;i<thisSize;i++) 
				singleCol.push(orig[c++]);
			output.push(singleCol);
		}

		return output;
	},

	drawTable: function(place,columns,theClass) {
		var newTable = createTiddlyElement(place,"table",null,theClass);
		var newTbody = createTiddlyElement(newTable,"tbody");
		var newTr = createTiddlyElement(newTbody,"tr");
		for (var j=0;j<columns.length;j++) {
			var colOutput = "";
			for (var i=0;i<columns[j].length;i++) 
				colOutput += columns[j][i];
			var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class
			wikify(colOutput,newTd);
		}
		return newTable;
	},

	createTagglyList: function(place,title) {
		switch(this.getTagglyOpt(title,"listMode")) {
			case "group":  return this.createTagglyListGrouped(place,title); break;
			case "normal": return this.createTagglyListNormal(place,title,false); break;
			case "commas": return this.createTagglyListNormal(place,title,true); break;
			case "sitemap":return this.createTagglyListSiteMap(place,title); break;
		}
	},

	getTaggingCount: function(title) {
		// thanks to Doug Edmunds
		if (this.config.showTaggingCounts) {
			var tagCount = store.getTaggedTiddlers(title).length;
			if (tagCount > 0)
				return " ("+tagCount+")";
		}
		return "";
	},

	getExcerpt: function(inTiddlerTitle,title) {
		if (this.getTagglyOpt(inTiddlerTitle,"excerpts") == "excerpts") {
			var t = store.getTiddler(title);
			if (t) {
				var text = t.text.replace(/\n/," ");
				var marker = text.indexOf(this.config.excerptMarker);
				if (marker != -1) {
					return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
				}
				else if (text.length < this.config.excerptSize) {
					return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
				}
				else {
					return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
				}
			}
		}
		return "";
	},

	notHidden: function(t,inTiddler) {
		if (typeof t == "string") 
			t = store.getTiddler(t);
		return (!t || !t.tags.containsAny(this.config.excludeTags) ||
				(inTiddler && this.config.excludeTags.contains(inTiddler)));
	},

	// this is for normal and commas mode
	createTagglyListNormal: function(place,title,useCommas) {

		var list = store.getTaggedTiddlers(title,this.getTagglyOpt(title,"sortBy"));

		if (this.getTagglyOpt(title,"sortOrder") == "desc")
			list = list.reverse();

		var output = [];
		var first = true;
		for (var i=0;i<list.length;i++) {
			if (this.notHidden(list[i],title)) {
				var countString = this.getTaggingCount(list[i].title);
				var excerpt = this.getExcerpt(title,list[i].title);
				if (useCommas)
					output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
				else
					output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");

				first = false;
			}
		}

		return this.drawTable(place,
			this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
			useCommas ? "commas" : "normal");
	},

	// this is for the "grouped" mode
	createTagglyListGrouped: function(place,title) {
		var sortBy = this.getTagglyOpt(title,"sortBy");
		var sortOrder = this.getTagglyOpt(title,"sortOrder");

		var list = store.getTaggedTiddlers(title,sortBy);

		if (sortOrder == "desc")
			list = list.reverse();

		var leftOvers = []
		for (var i=0;i<list.length;i++)
			leftOvers.push(list[i].title);

		var allTagsHolder = {};
		for (var i=0;i<list.length;i++) {
			for (var j=0;j<list[i].tags.length;j++) {

				if (list[i].tags[j] != title) { // not this tiddler

					if (this.notHidden(list[i].tags[j],title)) {

						if (!allTagsHolder[list[i].tags[j]])
							allTagsHolder[list[i].tags[j]] = "";

						if (this.notHidden(list[i],title)) {
							allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
										+ this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";

							leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers

						}
					}
				}
			}
		}

		var allTags = [];
		for (var t in allTagsHolder)
			allTags.push(t);

		var sortHelper = function(a,b) {
			if (a == b) return 0;
			if (a < b) return -1;
			return 1;
		};

		allTags.sort(function(a,b) {
			var tidA = store.getTiddler(a);
			var tidB = store.getTiddler(b);
			if (sortBy == "title") return sortHelper(a,b);
			else if (!tidA && !tidB) return 0;
			else if (!tidA) return -1;
			else if (!tidB) return +1;
			else return sortHelper(tidA[sortBy],tidB[sortBy]);
		});

		var leftOverOutput = "";
		for (var i=0;i<leftOvers.length;i++)
			if (this.notHidden(leftOvers[i],title))
				leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";

		var output = [];

		if (sortOrder == "desc")
			allTags.reverse();
		else if (leftOverOutput != "")
			// leftovers first...
			output.push(leftOverOutput);

		for (var i=0;i<allTags.length;i++)
			if (allTagsHolder[allTags[i]] != "")
				output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);

		if (sortOrder == "desc" && leftOverOutput != "")
			// leftovers last...
			output.push(leftOverOutput);

		return this.drawTable(place,
				this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),
				"grouped");

	},

	// used to build site map
	treeTraverse: function(title,depth,sortBy,sortOrder) {

		var list = store.getTaggedTiddlers(title,sortBy);
		if (sortOrder == "desc")
			list.reverse();

		var indent = "";
		for (var j=0;j<depth;j++)
			indent += "*"

		var childOutput = "";
		for (var i=0;i<list.length;i++)
			if (list[i].title != title)
				if (this.notHidden(list[i].title,this.config.inTiddler))
					childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder);

		if (depth == 0)
			return childOutput;
		else
			return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title) + "\n" + childOutput;
	},

	// this if for the site map mode
	createTagglyListSiteMap: function(place,title) {
		this.config.inTiddler = title; // nasty. should pass it in to traverse probably
		var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"));
		return this.drawTable(place,
				this.makeColumns(output.split(/(?=^\*\[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic
				"sitemap"
				);
	},

	macros: {
		tagglyTagging: {
			handler: function (place,macroName,params,wikifier,paramString,tiddler) {
				var refreshContainer = createTiddlyElement(place,"div");
				// do some refresh magic to make it keep the list fresh - thanks Saq
				refreshContainer.setAttribute("refresh","macro");
				refreshContainer.setAttribute("macroName",macroName);
        			refreshContainer.setAttribute("title",tiddler.title);
				this.refresh(refreshContainer);
			},

			refresh: function(place) {
				var title = place.getAttribute("title");
				removeChildren(place);
				if (store.getTaggedTiddlers(title).length > 0) {
					var lingo = config.taggly.lingo;
					config.taggly.createListControl(place,title,"hideState");
					if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
						createTiddlyElement(place,"span",null,"tagglyLabel",lingo.labels.label.format([title]));
						config.taggly.createListControl(place,title,"title");
						config.taggly.createListControl(place,title,"modified");
						config.taggly.createListControl(place,title,"created");
						config.taggly.createListControl(place,title,"listMode");
						config.taggly.createListControl(place,title,"excerpts");
						config.taggly.createListControl(place,title,"numCols");
						config.taggly.createTagglyList(place,title);
					}
				}
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
"	margin-top:0px; padding-top:0.5em; padding-left:2em;",
"	margin-bottom:0px; padding-bottom:0px;",
"}",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
"	color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
"	border:0px; padding-left:0.3em;padding-right:0.3em;",
"}",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active  {",
"	border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
"}",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
"td.tagglyTagging",
" {border-style:none!important; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		merge(config.macros,this.macros);
		config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;
		store.addNotification("TagglyTaggingStyles",refreshStyles);
	}
};

config.taggly.init();

//}}}

Cut 2mm of the tail into a clean Epi tube
Add 200ul 50mM NaOH
Heat at 95C for 1 hour
Add 200ul 0.2M Tris-HCl pH 7.5-8
Spin 4K for 3min
Use 2ul undiluted as template for PCR genotyping.
These are all templates for various tiddlers that recur (BreedingCard, LabNotebookEntries, and more)
These are  boilerplates use in lab method descriptions within the lab notebook entries.
#Collect cerebellum samples and weigh each sample
#Add 1.5X volume of [[GSLB buffer ]] or [[RIPA buffer]]
#snap freeze in dry ice/ETOH or liquid nitrogen and vortex (may also snap freeze samples for later addition of lysis buffers)
#Repeat 3 times
#Add an additional 1.5X volume of buffer and homogenize with a pestle in a 1.5ml eppi tube
#Rock for 30 minutes at 4C
#Spin samples at 14K for 10minutes and transfer supernatant to new tube. Discard pellet
#Measure protein concentration, Aliquot, snap freeze, and store at -80C.

# Dissect the necessary tissue out using clean technique.
# Weigh the tissue
# Add 3X volume of <<slider "RIPA Buffer" "RIPA Buffer" "RIPA Buffer">> w/ Protease inhibitors and phosphatase inhibitors 1 and II.
# Homogenize with epi tube pestles (blue- found at Kaye's bench)
# Spin for 4 minutes at 14K in tabletop centrifuge
# Transfer the supernatant to a new tube
# Snap freeze in liquid Nitrogen
# Store in -80C until ready to quantitate and/or run Western gel

/***
| Name|ToggleTagPlugin|
| Description|Makes a checkbox which toggles a tag in a tiddler|
| Version|3.0 ($Rev: 1845 $)|
| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source|http://tiddlyspot.com/mptw/#ToggleTagMacro|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Usage
{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}
* TagName - the tag to be toggled, default value "checked"
* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler
* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'
(If a parameter is '.' then the default will be used)

Examples:

|Code|Description|Example|h
|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|
|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|
|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|
|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|
|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|
Notes:
* If TiddlerName doesn't exist it will be silently created
* Set label to '-' to specify no label
* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2

!Known issues
* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing

***/
//{{{

merge(config.macros,{

	toggleTag: {

		doRefreshAll: true,
		createIfRequired: true,
		shortLabel: "[[%0]]",
		longLabel: "[[%0]] [[%1]]",

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var tag = (params[0] && params[0] != '.') ? params[0] : "checked";
			var title = (params[1] && params[1] != '.') ? params[1] : tiddler.title;
			var defaultLabel = (title == tiddler.title ? this.shortLabel : this.longLabel);
			var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;
			label = (label == '-' ? '' : label);
			var theTiddler =  title == tiddler.title ? tiddler : store.getTiddler(title);
			var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {
				if (!store.tiddlerExists(title)) {
					if (config.macros.toggleTag.createIfRequired) {
						var content = store.getTiddlerText(title); // just in case it's a shadow
						store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
					}
					else 
						return false;
				}
				store.setTiddlerTag(title,this.checked,tag);
				return true;
			});
		}
	}
});

//}}}

/***
Contains the stuff you need to use Tiddlyspot
Note you must also have UploadPlugin installed
***/
//{{{

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'elabnotebook';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[Welcome to Tiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[Welcome to Tiddlyspot]] ");
}

// create some shadow tiddler content
merge(config.shadowTiddlers,{

'Welcome to Tiddlyspot':[
 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),

'TspotControls':[
 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<<br>>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),

'TspotSidebar':[
 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n"),

'TspotOptions':[
 "tiddlyspot password:",
 "<<option pasUploadPassword>>",
 ""
].join("\n")

});
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 28/12/2007 17:06:26 | AshSangoram | [[index.html|http://scottlabnotebook.tiddlyspot.com/index.html]] | [[store.cgi|http://scottlabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://scottlabnotebook.tiddlyspot.com/index.html]] | . | ok |
| 28/12/2007 18:44:58 | AshSangoram | [[index.html|http://scottlabnotebook.tiddlyspot.com/index.html]] | [[store.cgi|http://scottlabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://scottlabnotebook.tiddlyspot.com/index.html]] | . |
| 29/12/2007 18:42:17 | AshSangoram | [[index.html|http://scottlabnotebook.tiddlyspot.com/index.html]] | [[store.cgi|http://scottlabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://scottlabnotebook.tiddlyspot.com/index.html]] | . |
| 29/12/2007 20:41:52 | AshSangoram | [[/|http://scottlabnotebook.tiddlyspot.com/]] | [[store.cgi|http://scottlabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://scottlabnotebook.tiddlyspot.com/index.html]] | . |
| 29/12/2007 21:02:40 | AshSangoram | [[/|http://scottlabnotebook.tiddlyspot.com/]] | [[store.cgi|http://scottlabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://scottlabnotebook.tiddlyspot.com/index.html]] | . |
| 29/12/2007 21:12:15 | AshSangoram | [[/|http://scottlabnotebook.tiddlyspot.com/]] | [[store.cgi|http://scottlabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://scottlabnotebook.tiddlyspot.com/index.html]] | . | ok |
| 29/12/2007 21:21:53 | AshSangoram | [[/|http://scottlabnotebook.tiddlyspot.com/]] | [[store.cgi|http://scottlabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://scottlabnotebook.tiddlyspot.com/index.html]] | . | ok |
| 30/12/2007 11:04:07 | AshSangoram | [[/|http://scottlabnotebook.tiddlyspot.com/]] | [[store.cgi|http://scottlabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://scottlabnotebook.tiddlyspot.com/index.html]] | . |
| 30/12/2007 11:25:19 | AshSangoram | [[scottlabnotebook(3).html|file:///Users/sangoram/Documents/Firefox%20Downloads/scottlabnotebook(3).html]] | [[store.cgi|http://elabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://elabnotebook.tiddlyspot.com/index.html]] | . |
| 19/02/2008 12:15:44 | AshSangoram | [[/|http://elabnotebook.tiddlyspot.com/]] | [[store.cgi|http://elabnotebook.tiddlyspot.com/store.cgi]] | . | [[index.html | http://elabnotebook.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			config.macros.option.genericCreate(place,'pas',opt,className,desc);
			// checkbox linked with this password "save this password on this computer"
			config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);			
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
		},
		onChange: config.macros.option.genericOnChange
	}
});

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
			saveOptionCookie(opt);
		return config.options[name] ? "true" : "false";
	}
});

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
			}
		},
		set: function(name,value) {config.options[name] = decodeCookie(value);}
	}
});

// need to reload options to load passwordOptions
loadOptionsCookie();

/*
if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}

/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.0|
|''Date:''|May 5, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (#3125)|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 0,
	date: new Date("May 5, 2007"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0 (#3125)'
};

//
// Environment
//

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
	
//
// Upload Macro
//

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
};
	
config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	
};

config.macros.upload.messages = {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"
};

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
		return;
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
	else
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};

config.macros.upload.action = function(params)
{
		// for missing macro parameter set value from options
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			alert(config.macros.upload.messages.noStoreUrl);
			clearMessage();
			return false;
		}
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			alert(config.macros.upload.messages.usernameOrPasswordMissing);
			clearMessage();
			return false;
		}
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 
};

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
{
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;
};

//
// uploadOptions Macro
//

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		wizard.createWizard(place,this.wizardTitle);
		wizard.addStep(this.step1Title,this.step1Html);
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		markList.parentNode.insertBefore(listWrapper,markList);
		wizard.setValue("listWrapper",listWrapper);
		this.refreshOptions(listWrapper,false);
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
		else
			uploadCaption = config.macros.upload.label.uploadLabel;
		
		wizard.setButtons([
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
				
			]);
	},
	refreshOptions: function(listWrapper) {
		var uploadOpts = [
			"txtUploadUserName",
			"pasUploadPassword",
			"txtUploadStoreUrl",
			"txtUploadDir",
			"txtUploadFilename",
			"txtUploadBackupDir",
			"chkUploadLog",
			"txtUploadLogMaxLine",
			]
		var opts = [];
		for(i=0; i<uploadOpts.length; i++) {
			var opt = {};
			opts.push()
			opt.option = "";
			n = uploadOpts[i];
			opt.name = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
			opts.push(opt);
		}
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
				h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
			}
		}
		
	},
	onCancel: function(e)
	{
		backstage.switchTab(null);
		return false;
	},
	
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
}

//
// upload functions
//

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."
};

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
			displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
			return;
		}
		if (bidix.debugMode) 
			alert(original.substr(0,500)+"\n...");
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
			alert(config.messages.invalidFileError.format([localPath]));
			return;
		}
		bidix.upload.uploadRss(uploadParams,original,posDiv);
	};
	
	if(onlyIfDirty && !store.isDirty())
		return;
	clearMessage();
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
		saveChanges();
	}
	// get original
	var uploadParams = Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,null,null,callback,uploadParams,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);			
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		bidix.upload.httpUpload(rssUploadParams,convertUnicodeToUTF8(generateRss()),callback,Array(uploadParams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
				displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
			}
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
			store.setDirty(false);
			log.endUpload("ok");
		} else {
			alert(bidix.upload.messages.mainFailed);
			displayMessage(bidix.upload.messages.mainFailed);
			log.endUpload("failed");			
		}
	};
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);
	bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == httpStatus.NotFound)
			alert(bidix.upload.messages.storePhpNotFound.format([url]));
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			alert(responseText);
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
			alert(responseText);
		if (responseText.charAt(0) != '0')
			status = null;
		callback(status,params,responseText,url,xhr);
	};
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
		alert(config.messages.invalidFileError.format([localPath]));
		return;
	}
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
				original.substr(posDiv[1]);
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;
};

//
// UploadLog
// 
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
		store.addTiddler(this.tiddler);
	}
	return this;
};

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
		return;
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			textArray.splice(1,textArray.length-1-maxLine);
			this.tiddler.text = textArray.join('\n');		
	}
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	store.addTiddler(this.tiddler);
	// refresh and notifiy for immediate update
	story.refreshTiddler(this.tiddler.title);
	store.notify(this.tiddler.title, true);
};

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
		return;
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";
	this.addText(text);
};

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
		return;
	this.addText(" "+status+" |");
};

//
// Utilities
// 

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
	}
};

bidix.dirname = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};

bidix.basename = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

//
// Initializations
//

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});

// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');


/* don't want this for tiddlyspot sites

// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");

*/


//}}}



GATGACAACTGGGGAGAGACC
CTCAAGTGTCCCAAGCTGTAGAAG
TCAGGTGCTGTCTTGCTTTGAAC
AAGTGTTGCTGGGCTGGCTCTC
GGTTTTCCTTTCTTCTCTTCTCGTC
GAGTCATTTGCCAGCAGGGG
[[MptwViewTemplate]]
These are tiddlers describing the stocks of lentivirus that I have generated and their locations.
/***
''Name:'' Weblog
''Version:'' 1.2.0
''Location:'' http://checkettsweb.com/styles/themes.htm#WeblogPlugin
''Author:'' Clint Checketts

''Description:'' Posts the most recently edited tiddlers when the TiddlyWiki is opened, similar to a blog.

''Syntax:'' Change the daysOrPosts and numOfDaysOrPosts variables in the code section. 
Examples: 
{{{
 var daysOrPosts = "days";
 var numOfDaysOrPosts = "2";
}}}
will display the defaultTiddlers then all the tiddlers from the 2 most recent days, except those tagged as SystemTiddlers.
{{{
 var daysOrPosts = "posts";
 var numOfDaysOrPosts = "15";
}}}
will display the defaultTiddlers then the 15 most recent posts, except those tagged as SystemTiddlers.

''Directions:'' Copy this tiddler and tag it as systemConfig.  Next, change the daysOrPosts and numOfDaysOrPosts variable to your liking in the 'Settings section'

''Know Issues:'' If a defaultTiddlers references a tiddler that has recently been referenced it will appear in the chronological order rather than at the top of the page. Also, if you are inserting the 15 most recent posts and default tiddlers new enough they too will be part of that count. If there is not text in the default tiddler, the weblog plugin isn't run.

''Revision History:''
 v0.1.0 (03 Aug 2005): initial release
 v0.1.2 (03 Aug 2005): fixed 'day' sorting order and permalink breakage
 v0.1.3 (10 Aug 2005): fixed error for when the numOfDaysOrPosts is greater than number of tiddlers.
 v1.1.0 (25 Jan 2005): updated to be compatible with TiddlyWiki 2.0
 v1.2.0 (26 Jan 2005): enabled displaying of tiddlers by date created in addition to date modified

!Settings section: (edit these)
***/
//{{{
var daysOrPosts = "posts";
var numOfDaysOrPosts = "10";
var modifiedOrCreate = "modified" 
//}}}



/***
!Code section:
***/
//{{{
//modified is the other option
// // We don't want to show tiddlers tagged as systemTiddlers etc. (this doesn't work yet...)
var ignoreTags = ("systemTiddlers","systemConfig","weblogIgnore");

Story.prototype.displayTiddlers_original_TiddlyBlog = Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function(src,titles,state,highlightText,highlightCaseSensitive,animate,slowly) {
   // if using the addressbar to select tiddlers return
   if(window.location.hash) daysOrPosts = "";
   if(daysOrPosts == "posts"){
      //lookup the last few posts
      var tiddlerNames = store.reverseLookup("tags","systemTiddlers",false,modifiedOrCreate);
      //Just display all tiddlers if there aren't enough
      if(tiddlerNames.length-numOfDaysOrPosts<0)  numOfDaysOrPosts = tiddlerNames.length;   
      for(var t = tiddlerNames.length-numOfDaysOrPosts;t<=tiddlerNames.length-1;t++)
      displayTiddler(src,tiddlerNames[t].title,state,highlightText,highlightCaseSensitive,animate,slowly);
   }
    if (daysOrPosts == "days"){
      var lastDay = "";
      var tiddlerNames = store.reverseLookup("tags","systemTiddlers",false,modifiedOrCreate);
      var t = tiddlerNames.length -1;
      var tFollower = 0;
      for(t;t>=0;t--) if(numOfDaysOrPosts >= 0){
          var theDay = tiddlerNames[t].modified.convertToYYYYMMDDHHMM().substr(0,8);
          if(theDay != lastDay){
             numOfDaysOrPosts = numOfDaysOrPosts -1;
            lastDay = theDay;
             tFollower = t;
          }
      }

      for(tFollower = tFollower+1; tFollower < tiddlerNames.length;tFollower++){
        displayTiddler(src,tiddlerNames[tFollower].title,state,highlightText,highlightCaseSensitive,animate,slowly);
      }

    }

    // call the original displayTiddlers function
   this.displayTiddlers_original_TiddlyBlog(src,titles,state,highlightText,highlightCaseSensitive,animate,slowly);

}
//}}}
This electronic file represents another iteration of my forays into using publicly derived community based resources for use as a flexible interlinked Web-based electronic laboratory notebook.  This has been some time in the making as earlier attempts (in grad school) utilized simple HTML documents with manual links between pages and an unsearchable format.   The advantages of TiddlyWikis (especially with TagglyTagging capabilities added more recently) are well-documented and include easy search, dynamic data organization, and acceptance of nearly any data types (images, links, tables, graphs etc.) all within a web browser interface.  Thus we have adapted this file-type as our notebook style.  The advantage of this file-type is just that; it is a single file (images excluded) and thus it is easily portable and transmissable to others who could use this information.

<<tag Stocks>>
Wash membrane briefly in ddH20 
mixup block (3mls A, 2mls B and 5mls ddH20 =10mls enough for 1/2 of a ePage48-Gel)
incubate 30minutes RT with agitation
rinse with 20mls ddH20 X2
incubate overnight with primary antibody diluted in incubation buffer (2mls A, 1ml B, with 7mls ddH20 = 10mls enough for 1/2 of a ePage48-Gel)
These are protocols that are not complete yet in that I am in the process of verifying their integrity to accomplish the desired outcome.  As work progresses these should all move to [[Protocols]]
<html>
<body>

<iframe 
src ="http://130.15.90.245/wormlab_recipe_book.htm"
width = "100%"
height = "800">
</iframe>

</body>
</html>
0.1ml 40mg/ml X-gal in DMSO stock @ -80C (0.4mg/ml final)
0.5ml 200mM ~K4Fe(CN)6.3H20 ([[potassium ferrocyanide]]) 10mM final
0.5ml 200mM ~K3Fe(CN)6 ([[potassium ferricyanide]]) 10mM final
10ul 1M MgCl2 (1mM final)
in 8.9mls PBS (total 10ml volume of staining solution)
10ul 10% Na-Deoxycholate (optional for greater permeabilization)
20ul 10% NP-40 (optional for permeabilization)


TCTAGATTACTTGTACAGCACGTCCATGCCG
TTTTTCTAGATTACTTGTACAGCACGTCCATGCCG
GATCGGCAGGACACAGCTCAGATTTCAAGAGAATCTGAGCTGTGTCCTGCCTTT
PAGE purified 
in PrimerBoxA B3
AAAGGCAGGACACAGCTCAGATTCTCTTGAAATCTGAGCTGTGTCCTGCCTCGA

PAGE-purified

in PrimerBoxA Position B4
Self-contained precast gel is opened and placed in the mother E-base
5ul of ddH20 is loaded into each lane
10ul of sample is loaded into each lane of the ePAGE48-gel
run on program EP for 30minutes until separated
remove the casting cassette from the mother E-base and open with the butterfly opener
remove the gel and proceed to  transfer ([[iBlot]])
Follow the brochure instructions to load:
Briefly
remove wrap from anode-PVDF stack and place at the base of iBlot apparatus
lower bar #1
place the E-Page48 gel on top of the stack (face up)
lower bar #2
place top cathode stack on top of the gel with the E-PAGE tab hooked into it facing up (teeth up)
place the debubbler roller in place and firmly, steadily pull the stacks and membrane through
place sponge ontop of the stack in the lid and close lid
Start transfer (Program P3 7:30 minutes)
Remove gel and top stack 
Marker should be visible on membrane
mark the membrane appropriately, cut to desired section for staining
rinse in ddH20 and proceed to antibody staining 
or total protein staining (ponceau S, Coomassie Blue etc)
or air dry and store at 4C (will need to rewet with methanol prior to proceeding if this is chosen)
GATCCGGCAGAGGACAGTTGCATATTCAAGAGATATGCAACTGTCCTCTGCCTTTTTC
PAGE Purified, 5' phosphorylated
Ordered Elim 11/7/06
TCGAGAAAAAGGCAGAGGACAGTTGCATATCTCTTGAATATGCAACTGTCCTCTGCCG
PAGE Purified Oligo for cloning 5'phosphorylated
ordered from Elim 11/10/06
<<newTiddler label:"Add New Labbook Entry" tag:"LabNotebookEntries" text:{{store.getTiddlerText('DailyJournalTemplate')}}>>
A Flpe recombinase plasmid under control of CAGGS promoter with a ~SV40 nuclear localization signal N-terminally and IRES Puro for selection in vivo of stable transformants.  Can use to delete FRT flanked Neo cassettes in ES cells, among other things


[img[__|http://ashvin-imac.stanford.edu/TWLabNotebook/pCAGGS-FLpeMAP.jpg]]

|Date of isolation|Method|Concentration|Storage|
|07/03/07 | EF Maxiprep | ng/ul | [[BenchFreezer]] |
| | EF Maxiprep | ng/ul | [[BenchFreezer]] |

packaging plasmid to make lentivirus. 
Map to be included here
From Eszter Vladar of Tim Stearns lab.  This is the second generation packaging vector for lentivirus production that requires only [[pMD2.VSVg]] and the SIN Lentiviral vector to produce replication-incompetent virus.  Need to try to obtain full-length sequence for this vector (not readily available in Pubmed or Addgene)  Googling this name will hit links to papers that describe its construction and use.

miniprepped 4/30/07 stored in [[BenchFreezer]]

|Date of isolation|Method|Concentration|Storage|
|6/6/7 | EF Maxiprep | ng/ul | [[BenchFreezer]] |
|6/28/07| EF Maxiprep | 524ng/ul | [[BenchFreezer]] [[LentiviralConstructs]] |
|8/6/07| EF Gigaprep | 8.4ug/ul and 7.8ug/ul | [[BenchFreezer]] [[LentiviralConstructs]] |
plasmid required for point mutation introduction using the recombineering protocols of Copeland.
map to be included here
From Eszter Vladar of Tim Stearns lab.  This is the second generation packaging vector for lentivirus production that requires only [[pCMVdeltaR8.74]] and the SIN Lentiviral vector to produce replication-incompetent virus.  Sequence is contained in the shRNALentiviralGFP sequencher project for reference.  Also it is available through Addgene.  Need to insert maps here.

Maxiprepped: 6/6/7
|Date of isolation|Method|Concentration| Storage|
|6/6/07|Maxiprep||[[BenchFreezer]] |
|6/28/07|EF Maxiprep|219ng/ul|[[BenchFreezer]] [[LentiviralConstructs]] |
|8/6/07|EF Gigaprep|6.8ug/ul|[[BenchFreezer]] [[LentiviralConstructs]] |
packaging plasmid to make lentivirus. 
g/p RRE
Map to be included here
This is the original cGFP shRNA lentiviral SIN vector from genscript:


|Date of isolation|Method|Concentration| Storage|
|6/28/07|EF Maxiprep|219ng/ul| [[BenchFreezer]] [[LentiviralConstructs]] |
|6/28/07|EF Maxiprep*contaminated|271ng/ul|[[BenchFreezer]] [[LentiviralConstructs]] |

Details at their website:
http://www.genscript.com/product_001/marker/code/SD1260/siRNA%20Expression%20Vector/pRNATin_H1_4_Lenti/SD1260.html



[img[__|http://ashvin-imac.stanford.edu/TWLabNotebook/pRNATinH1.4Lenti.jpg]]
|Date of isolation|Method|Titer|Storage|
|7/12/07 |  LentiviralMaxiprep-v1.0 | U/ml| [[LVTCFridge]] |
|7/12/07 |  LentiMiniprep-v1.0 |  U/ml | [[LVTCFridge]] |
This is the modified lentiviral plasmid I have constructed to replace GFP with tomato for brighter visualization (and distinct from GFP for use in GFP expressing mice to distinguish lentiviral infection from endogenous GFP expression).
The original [[pRNATinH1.4/Lenti]] map can be found through it's link.

This construct was made by PCR of tdtomato from a Richard Tsien plasmid using primers:
[[AgeImCherryFor]]
[[XbaImCherryRev]]

The original [[pRNATinH1.4/Lenti]] was cut with AgeI and XbaI to excise cGFP and facilitate directional cloning and the above PCR product was cut with AgeI/XbaI as well and these two species were ligated together.
Full sequence rests in the file:
[[LentiviralshRNA-SequencherProject|file:///Users/sangoram/Documents/Gene Sequence Docs/Lentiviral Project/shRNALentivirusGFP]]


|Date of isolation|Method|Concentration|Storage|
|6/29/07 | EF Maxiprep | ng/ul | [[BenchFreezer]] |
|8/6/07|EF Gigaprep|4.6ug/ul|[[BenchFreezer]] [[LentiviralConstructs]] |
These are a table with the details of the isolation of this basic tomatoFP lentivirus.  
|Date of isolation|Method|Titer|Storage| Comments|
|7/12/07 |  [[LentiviralMaxiPrep-v1.0]] | U/ml| [[LVTCFridge]] |produced virus capable of infecting HeLas|
|7/12/07 |  [[LentiMiniprep-v1.0]] |  U/ml | [[LVTCFridge]] |produced virus capable of infecting HeLas|
|8/01/07 |  [[LentiviralMaxiPrep-v1.0]] | U/ml| [[LVTCFridge]] |3 tubes- 1 with 2v packaging, 2 with 3v pk, needs testing-doubtful that it's useful|
|8/19/07 |  [[LentiviralMaxiPrep-v1.1]] | U/ml| [[-80Space1]] |good pellets, more from CalcPhos vs Lipofectamine|
|9/27/07| +chlor +butyrate|10^7 TU/ml| [[-80Space1]]| Cell Factory prep Aliquots 1-1 -- 1-7 (7ul each first isolate) 1-A -- 1-D (80ul of 2nd isolate)|
|12/06/07| [[120307LentiXFect]]|@10^8 TU/ml| [[-80Space1]]| Cell Factory prep 10ul aliquots|
packaging plasmid to make lentivirus. 
Map to be included here
This probe is generated by the primers as tagged.  See primer tiddlers for details of this probe.  This probe can be used to detect the RFLP generated by the pk1ckoTV in ES cells or mouse DNA.  (AflII-BamHI digestion will reveal the RFLP)

<html><a><img src="http://ashvin-imac.stanford.edu/TWLabNotebook/070215shRNAKDWestern" width="480" height="320" /></a></html>

Explanation: 
This blot against prickle2 (FP-tagged fusion proteins are depicted) demonstrates that pk2shRNA2 likely has a 80-90% knockdown effect on this protein.  We need to confirm this using an endogenous assay (say granule neuron preps)
This is the [[pRNATinH1.4/LentiTomato]] SIN vector modified (BamHI-XhoI cut) by addition of pk2shRNA1 dsoligo ligation.  Sequence is contained in the shRNALentiviralGFP sequencher project for reference. 

|Date of isolation|Method|Concentration| Storage|
|6/28/07|EF Maxiprep|507ng/ul| [[BenchFreezer]] [[LentiviralConstructs]]|
|Date of isolation|Method|Titer|Storage|
|7/12/07 |  LentiviralMaxiprep-v1.0 | U/ml| [[LVTCFridge]] |
|7/12/07 |  LentiMiniprep-v1.0 |  U/ml | [[LVTCFridge]] |
This is the [[pRNATinH1.4/LentiTomato]] SIN vector modified (BamHI-XhoI cut) by addition of pk2shRNA2 dsoligo ligation.  Sequence is contained in the shRNALentiviralGFP sequencher project for reference. 
|Date of isolation|Method|Concentration| Storage|
|6/28/07|EF Maxiprep|576ng/ul|[[BenchFreezer]] [[LentiviralConstructs]]|
|8/6/07|EF Gigaprep|4.24ug/ul|[[BenchFreezer]] [[LentiviralConstructs]] |
This lentivirus directs knockdown against prickle 2 message.  It has been validated once in an overexpression fusion protein context but this bears repeating in lysates expressing endogenous protein.

|Date of isolation|Method|Titer|Storage| Comments|
|7/12/07 |  [[LentiviralMaxiPrep-v1.0]] | U/ml| [[LVTCFridge]] |produced virus capable of infecting HeLas|
|7/12/07 | [[LentiMiniprep-v1.0]] |  U/ml | [[LVTCFridge]] |produced virus capable of infecting HeLas|
|8/1/07|  [[LentiviralMaxiPrep-v1.0]] | U/ml| [[LVTCFridge]] |needs testing-doubtful that it's useful|
|8/19/07 | [[LentiviralMaxiPrep-v1.1 ]]| U/ml| [[-80Space1]] |good pellets, more from CalcPhos vs Lipofectamine|
|9/25/07 | [[LentiviralMaxiPrep-v1.2 ]]| U/ml| [[-80Space1]] |15cm X 5 prep - good pellets, aliquoted 5X7.5ul |
|10/1/07 | [[LentiviralMaxiPrep-v1.2 ]]| U/ml| [[-80Space1]] |Cell Factory Prep good pellets 1-1 -- 1-11 (7ul each) 2-1 -- 2-7 (40ul of second isolate) |
|[[04 November 2007]] | [[ LentiviralMaxiPrep-v1.2 ]]| U/ml| [[-80Space1]] |Cell Factory Prep good pellets  (10ul each) Dated 11/7/07|
This is the [[pRNATinH1.4/LentiTomato]] SIN vector modified (BamHI-XhoI cut) by addition of pk2shRNA3 dsoligo ligation.  Sequence is contained in the shRNALentiviralGFP sequencher project for reference. 


|Date of isolation|Method|Concentration|Storage|
|6/29/07 | EF Maxiprep | ng/ul | [[BenchFreezer]] |
| | EF Maxiprep | ng/ul | [[BenchFreezer]] |
|Date of isolation|Method|Titer|Storage|
|7/12/07 |  LentiviralMaxiprep-v1.0 | U/ml| [[LVTCFridge]] |
|7/12/07 |  LentiMiniprep-v1.0 |  U/ml | [[LVTCFridge]] |
0.2 M K3Fe(CN)6 in H20 [0.66grams in 10mls H20]
Make fresh every 2 weeks, protect from light and store at 4C
0.2 M K4Fe(CN)6 in H20 [0.85grams in 10mls H20]
Make fresh every 2 weeks, protect from light and store at 4C