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: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:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.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;}

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

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

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 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:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which 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, #backstageButton, #backstageArea {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
''~GeneTrack'' has been designed and programmed by [[Dr. Istvan Albert|http://www.personal.psu.edu/iua1]] with input and contributions from ''Dr. Shinichiro Wachi'' and  ''Dr. Cizhong Jiang''. The project has been developed as part of the [[Genome Cartography Project|http://atlas.bx.psu.edu/]] led by [[Prof. Frank Pugh|http://www.bmb.psu.edu/faculty/pugh/pugh.html]] at the [[Pennsylvania State University|http://www.psu.edu]]
[[Home]]
''~GeneTrack'' is designed with extensibility in mind. It offers a simple application programming interface (API) and plugin architecture that can accommodate many other types of data and analysis.
!!API examples
The main workhorse of the system is our wrapper module around the HDF database and the utility classes and functions implemented therein. These allow for a fast and efficient access of the stored data. You may run the examples below after processing the demo data as described in [[Quick Overview]].

Print all existing  datasets in the HDF database
{{{
from atlas import hdf
db = hdf.hdf_open( 'yeast-data.hdf' )
print db
db.close()
}}}
Print all the labels (chromosomes) that are associated with the ''~H2AZ'' name:
{{{
from atlas import hdf
db = hdf.hdf_open( 'yeast-data.hdf' )
data = hdf.GroupData(db=db, name='H2AZ')
print data.labels
# prints ['chr01', 'chr02', 'chr03', 'chr04', ... ]
db.close()
}}}
Print the first ''10'' values stored for chromosome ''chr01''and label ''~H2AZ'' (only the relevant portions are now shown the initialization is the same as above):
{{{
data = hdf.GroupData(db=db, name='H2AZ')
table = data.get_table( label='chr01')
for row in table[:10]:
    print row
}}}
Print the data that has ''coordinates'' between ''1000'' and ''1500'' for chromosome ''chr01''and label ''~H2AZ'':
{{{
table = data.get_table( label='chr01')
start, end = data.get_indices( label='chr01', start=1000, stop=1500 )
for row in table[start:end]:
    print row
}}}
The schema that was used to generate table will provide the format of the rows (what gets printed). The default schema (located in ''library/mod454/schema.py'') is simply a list with the index, values on forward, reverse and composite strands. Developers have a degree of freedom in changing this schema, the only constraint is that there must be an index field that stores the chromosomal coordinates. The default schema has the following form:
{{{
class Mod454Schema( IsDescription ):
    """
    Stores a triplet of float values for each index.
    """
    ix = IntCol  ( pos=1 )  # index
    wx = FloatCol( pos=2 )  # values on the W (forward) strand
    cx = FloatCol( pos=3 )  # value on the C (reverse) strand
    ax = FloatCol( pos=4 )  # weighted value on the combined W + C strands
}}}
And allows for column based access like so:
{{{
print table.cols.wx[start:end]
print table.cols.cx[start:end]
}}}
This returns ''~NumPy'' arrays that are well suited for fast processing.
!!Plugin interface
Perusing the configuration module (for example ''home/dataconf.py'') one may find entries such as:
{{{
# Specifies the data file format parser.
from mod454.loader import loader as LOADER

# Specifies the data fitter.
from mod454.fitter import fitter as FITTER

# Specifies the data predictor.
from mod454.predictor import predictor as PREDICTOR
}}}
At each data analysis step the system will invoke the function that is attached to the {{{LOADER, FITTER}}} and {{{PREDICTOR}}} steps respectively. Each of these functions takes a single argument (the configuration module) and performs its action independently. The implementation for each of these steps is thus loaded from an external module, and is therefore replaceable. It is also noteworthy how thanks to the very high level building blocks that we provide the actual implementation of each of the data analysis steps is around a mere 70 to 120 lines of code (see for example [[predictor.py|http://code.google.com/p/genetrack/source/browse/trunk/library/mod454/predictor.py]]). Thus the entire functionality of the ''~GeneTrack'' software may be entirely changed (although we admit this step will takes substantial programming expertise)

The systems sports an extensively documented code, with numerous testcases decorating each module. We make use of document and unittesting that directly execute the modules themselves. These tests can serve as examples for more advanced use cases.
To start the webserver type see the ''webconf.py'' module in the home directory. Modify it to reflect your own settings (at the very least you need to modify the home directory) then start the server with the command:

{{{
python run.py server home.webconf
}}}
<<closeAll>><<permaview>><<newTiddler>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options ยป' 'Change TiddlyWiki advanced options'>>
''~GeneTrack'' is a high performance bioinformatics data storage and analysis system designed to store genome wide information. It is currently used to analyze data obtained via high-throughput rapid sequencing platforms such as the ''454'' and ''Solexa'' as well as tiling array data based on various platforms. 

The software, implemented entirely in the ''Python'' programming language, is designed with simplicity, accessibility and performance in mind. It provides an  interface that allows for customizations and extensions beyond its original design. It also has very low hardware requirements, and it runs on any operating system that supports ''Python'' and its extension libraries. See [[Installation]] for more details.

To understand  what ''~GeneTrack''  does read the [[Quick Overview]] and the [[Using GeneTrack]] pages. Information on more advanced usage is available via the [[Extend]] page. The software is optimized for speed and efficiency, and it runs well on systems with low resources (see [[Performance]]).
''~GeneTrack'' works on ''Windows'', ''Linux'' and ''OS X'' operating systems. It requires ''Python'' and a number of Python extension libraries. Most required libraries are //open source// but the plotting library used during visualization requires a [[License]].

The first step requires installing the software packages listed in the [[Software Requirements]] page. Then download the ''~GeneTrack'' software from the [[project website|http://genetrack.googlecode.com/]]:
* As versioned releases from archives
* Last stable version from the subversion repository:
{{{
svn checkout http://genetrack.googlecode.com/svn/trunk/ genetrack
}}}
''Note'': those obtaining the distribution via subversion will need to unzip the ''.zip'' files located in the ''library/yeast/data'' and ''library/dmel/data'' directories before running the demos detailed in the [[Quick Overview]]. 

The next step is to verify that everything is in working order, see [[Testing the software]].
//Note that you only need the plotting library if you wish to use the webserver.//

The plotting library that we use, [[ChartDirector|http://www.advsofteng.com/]] is not a free software. It is provided by a third party company that has no connection to us. Users are expected to purchase a license to use it (approximately $100 per computer or $500 per organization). Note that you may use the library without a license (to evaluate it), but it will generate certain extra marks on the charts that you create. The licence key must be available as an environment variable:
{{{
set CHARTDIRECTOR_LICENSE = XYZ-123-XYZ
}}}
for Windows or
{{{
export CHARTDIRECTOR_LICENSE = XYZ-123-XYZ
}}}
under Linux bash shell (etc). ''~GeneTrack'' will read this variable and set the license.
!!Why aren't we using a free plotting library?
Short answer, nothing offers as many features and looks as good as [[ChartDirector|http://www.advsofteng.com/]]. Over the course of the development we have explored several options and we have implemented partially functional solutions using four different approaches:
* [[PIL - Python Imaging Library|http://www.pythonware.com/products/pil/]]
* [[Matplotlib|http://matplotlib.sourceforge.net/]]
* [[Ploticus|http://ploticus.sourceforge.net/]]
* [[GD - Graphics Library|http://www.boutell.com/gd/]]
None of these offered the performance and elegance of the ''~ChartDirector'' module yet required substantial effort in adding additional features.  ''~ChartDirector'' allows us to focus on the important aspects of our project rather than reimplement existing functionality. 

''Final note:'' At the time of writing the document the cost of a ''~ChartDirector'' license is around ''$100'' per computer, a trivial cost compared to the likely expenditure of projects for which you need ''~GeneTrack''. We strongly recommend that you purchase a license thus avoid any kind of complications while supporting small software firms such as the makers of this very high quality plotting library.
[[Home]] [[Installation]] [[Extend]] [[About]]
<!--{{{-->
<div id='header' class='header'>

<div class='headerShadow'>
<span class='searchBar' macro='search'></span>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
</div>

<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='HaemoSideBarOptions'></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 id='contentFooter' refresh='content' tiddler='contentFooter'></div>
<!--}}}-->
Typical runtime depends primarily on the number experimental measurements of the input data but it is also affected by the genome size.

An entire run consists of three steps: data loading, data fitting and peak prediction. We maintain data for each strand separately, thus performing each of the data fitting and predictions steps three times, for the forward, reverse and composite (forward + reverse) datasets. A few observed run times:
* a full run over the yeast genome (see the demo data included in the distribution) with 321,684 data points, takes about 2 minutes. 
* a full run over the yeast genome and 6 million data points takes approximately 15 minutes. 
* a full run over the drosophile genome and 1.5 million data points takes approximately 20 minutes
* a full run for the human genome with 7 million data points takes about 3 hours. 
Note that the choice of parameters can greatly affect the runtime, for example setting the minimum peak height to 1 (in essence disregarding peaks that are predicted by a single read) reduces the runtime for the human data to 24 minutes.
!!Memory requirements
Most data processing steps require little memory (around 50Mb) regardless of the genome size or number of measurements. In general increasing the {{{DATA_SIZE}}} parameter will improve the runtime at the expense of using more memory, we use the value of 1 million for the yeast and 30 million for the human runs.

The peak prediction algorithm must maintain information to detect overlapping intervals on a chromosome wide scale. The default method is optimized for speed and requires approximately 1Mb of memory for every 1 million bases of the largest chromosome in the genome. Thus this consumes extra memory at the rate of 4Mb for the yeast, 30Mb for the drosophila and 250Mb for the human genome.

We have also implemented an alternative solution that emphasizes memory reduction to about one tenth of the numbers above at the cost of increasing runtime with an order of magnitude. As even the worst case scenario of 300Mb does not seem excessive regarding today's hardware we chose not to enable this optimization by default. In any case, interested users may turn it on by uncommenting a single line of code in the ''peakfunc.py'' module. Contact us for more details.
!!Factors affecting runtime
The factor that most affects the total running time is the expansion of the orginal dataset into a smoothed one. Increasing {{{MINIMUM_PEAK_SIZE}}} and reducing {{{WIDTH}}} parameter will affect the smoothing (fitting) and may substantially reduce the number of points that will be need to be processed later. Note that changing these parameters will alter the minimum detected signal, and smoothness of the fit respectively.
This page describes a simple strategies that one may employ to prepare an input suitable for processing. This tutorial assumes that the user has access to Python and a Unix-like shell. Linux and OS X users have builtin support of a shell, Windows users are best suited if they install Cygwin. 

The input files wil have to have a simple tab delimited format, such as:
{{{
chrom   index    forward  reverse
chr01     200       2         0
chr02     100       1         1
}}}
There are two main requirements to fulfill. The file must be unique with respect to the {{{chrom, index}}} pair. This means that a certain chromosomal coordinate may only appear once. The second requirement is that the file must be sorted by this same pair {{{chrom, index}}}. In essence this means that the data must be grouped by chromosome and sorted by index. These requirements may turn out to be very simple or complicated depending on the format the data originally is as well as one's ability to reformat text files. Below we detail one simple methodology to generate such files, a methodology that requires some programming expertise.

The main complexity arises from the grouping/sorting requirement, for example very large datasets may not be fit in memory thus requiring a file based merge sort.  Thankfully the problem of efficient sorting is ubiquitous enough so that any Unix like distribution provides a high performance built in sort that can efficiently deal with this problem. As it turns out numerical sort and alphabetical sort are different, thus the default alphabetical sorts will place ''11'' before ''2''. Some sorts allow for a numerical interpretation but not for sorting by multiple keys of different types.  There is a elegant solution to this limitation, one that allows the sort do to just what we need in a single step. Over the course of processing pad every number with sufficient number of zeroes, for example above ''11'' will become ''0000000011'' whereas ''2'' will become ''0000000002''. This way alphabetical sorting will generate just right order for both keys. 

The first step is to create a file that contains padded indices that are not unique. Simply read the file and output lines in whatever order they came in the original file. This requires the ability to write a simple program that can read the columns from your original file and outputs lines for every hit in the data like so:
{{{
chr02    000100    1  0
chr01    000200    1  0
chr02    000100    0  1
chr01    000200    1  0
}}}
We cannot provide you with a program that does this as there is a wide variety of formats that your data may be in. Now run the resulting file through sorting like so:
{{{
sort datafile1.txt > datafile2.txt
}}}
The resulting file ''datafile2.txt'' is now sorted in the proper order:
{{{
chr01    000200    1  0
chr01    000200    1  0
chr02    000100    1  0
chr02    000100    0  1
}}}
but identical indices are  not yet ''consolidated'' into single entry. The final step is to consolidate these indices into a proper file. You may develop your own program to add the values as desired or use ours located in {{{/bin/scripts/consolidate.py}}}. Run it like so:
{{{
python consolidate.py datafile2.txt > input_data.txt
}}}
This will combine the data into the final format:
{{{
chrom   index    forward  reverse
chr01     200       2         0
chr02     100       1         1
}}}
''~GeneTrack'' is a software package that can process high-throughput  experimental data. It can:
* ''store and retrieve'' data efficiently
* it can ''quickly average'' or smooth data over an entire chromosome
* it can ''detect peaks rapidly'' on a genome-wide scale
* it can ''visualize'' and distribute the results via an embedded webserver
The software and its behavior is controlled via configuration files.

To more readily demonstrate the use of ''~GeneTrack'' the main distribution includes an experimental dataset and configuration files that can be used to process and visualize it. The data file contains data that was published as:
<<<
//Translational and rotational settings of ~H2A.Z nucleosomes across the Saccharomyces cerevisiae genome//
Istvan Albert, Travis N. Mavrich, Lynn P. Tomsho, Ji Qi, Sara J. Zanton , Stephan C. Schuster, and B. Franklin Pugh
''Nature 446, 572-576, (2007)''
<<<
and is located in the  ''library/yeast/data/~H2AZ-genetrack-input.txt'' file. It has a simple tab delimited format that can be directly loaded into the system:
{{{
chrom	index	forward	reverse
chr01	146	0.0	1.0
chr01	254	0.0	3.0
chr01	319	0.0	1.0
...
... and so on 16 chromosomes for a total of 321,683 data lines ...
...
}}}
Each line contains a unique genomic coordinate and represents the measured values for these coordinates on the forward and reverse strands. Specifically, the example above shows the number of reads that map to a given coordinate in the yeast genome. ''Note'' that this file must be sorted by the ''chrom'' (chromosome)  and ''index'' columns (see [[Preparing the input]] for more details). The data processing pipeline will then consist of the following steps:
# Data loading - getting the data above into the database
# Data fitting - smoothing/averaging/consolidating the data 
# Peak prediction - determining the location of the nucleosomes
# Data exporting - storing the predictions in an external file
Throughout this overview we will refer to the ''library/yeast/dataconf.py'' file as the configuration module. This configuration file is already set to process the data above and can be run via:
{{{
python run.py execute yeast.yeast_dataconf
}}}
During execution the software will print detailed messages to keep the users appraised on the ongoing operations. Below we explain in more detail what happens at each step.
!!Data Loading
Internally ''~GeneTrack'' uses the hierarchical data format [[HDF|http://hdf.ncsa.uiuc.edu/products/hdf5/whatishdf5.html]] and within this format every datasets is represented by a label. In our case we chose to call our data as ''~H2AZ'', so in the configuration module you can find lines that say something like:
{{{
DATA_LABEL = "H2AZ"
FIT_LABEL = "H2AZ-SIGMA-20"
PEAK_LABEL = "PRED-H2AZ-SIGMA-20"
}}}
These lines will assign labels to the input data, fitted data and the predicted peaks. The configuration file is a python module, for convenience one may generate the  {{{FIT_LABEL}}} and {{{PEAK_LABEL}}} based on on other existing parameters, such as {{{SIGMA}}} (the tightness of the fit). 
Data is stored and processed on each strand separately. This allows one to evaluate results as if were produced by technical replicates, increasing their predictive power. By default all operations are performed three times separately on the "forward", "reverse" and "composite (all)" strands, typically labeled as ''+'', ''-'', and ''A'' strands. Currently the composite strand is simply be the sum the forward and reverse strands. It may also be computed as a weighted sum of the two or any other combination (see the [[Extend]] wiki page for more details). For platforms that do not collect data on both strands one of the strand columns may be left at zero. 
!!Data Fitting
Fitting consist of approximating the data with a  curve that smooths and averages over a certain width. The default data fitting in ''~GeneTrack'' is a so-called ''gaussian smoothing'' where each measurement is approximated with a normal function of a standard deviation specified by the {{{SIGMA}}} parameter. The value of this parameter has a direct statistical interpretation in that it represents the distance over which the contribution of the measurement falls to one half of its original value. The same data fitted with {{{SIGMA=20}}} and {{{SIGMA=5}}} will produce the following outputs:
[img[Medium Resolution|medres.png]]
[img[High Resolution|hires.png]]
Note how a smaller {{{SIGMA}}} produces more peaks but more variability as well.
!!Peak prediction
The default peak prediction algorithm detects ''maximal'', ''non-overlapping'' intervals that correspond to the peaks determined at the fitting step. Specifically each peak is assigned an exclusion zone ( specified as parameter {{{EXCLUSION_ZONE}}}) that ''blocks'' other peaks from being detected. For example a well positioned nucleosome is 147bp wide, therefore  only one such call should be made within that width. The matter is complicated in that the peaks (and exclusion zones) must be placed in rank order, starting with the highest while maintaining the exclusion information on a chromosome-wide scale. The predicted peaks are stored in a relational database under the label {{{PRED_LABEL}}}.
!!Data export
By default the predicted peaks are exported as a text file into the directory specified by the {{{EXPORT_DIR}}} parameter. The name of the file will be generated automatically as by concatenating the name of configuration module name and the label of the exported data.

Users can export data in several formats, tabular with headers, BED, GFF and wiggle formats. Plus strand filters may be added to limit the data to a certain strand ''+'' or ''-'' or the composite value ''A''. The exporter is set in the data configuration file with this following line
{{{
from atlas.commands import exporter as EXPORTER
}}}
To request export in the bed format:
{{{
from atlas.commands import bed_exporter as EXPORTER
}}}
and similarly for other formats {{{ wig_exporter, tab_exporter, bed_exporter, gff_exporter}}}
The test configuration module located in {{{library/mod454/testconf.py}}} shows an example of limiting the output to specific strands (seen here [[testconf.py|http://code.google.com/p/genetrack/source/browse/trunk/library/mod454/testconf.py]]).
Enter your username for signing your edits: <<option txtUserName>>

You may modify the following tiddlers:

* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
a genomic data storage and visualization framework
~GeneTrack
The following software must be installed:
* [[Python 2.5|http://www.python.org]] you can see the version of Python by typing {{{python -V }}} at the command line. The software works ''only'' with python of version 2.5 or above.
* [[NumPy|http://numpy.scipy.org/]] a software library for scientific computing with Python
*   [[PyTables|http://www.pytables.org/]] a software library for managing hierarchical datasets in Python. A version 2.0 or higher is required.
For the convenience of ''Windows'' users we provide a file that contains all the required libraries and files including python at our website: [[windows-quickstart.zip (15MB)|http://atlas.bx.psu.edu/genetrack/docs/windows-quickstart.zip]] see the included ''readme.txt''. ''Linux'' users should use their package manager to install ''python2.5'', ''pytables'' and ''numpy'' then visit the ''~ChartDirector'' website (see below) to get the plotting library. 
!!! Plotting Library
The software has a pluggable interface that, in principle can accommodate different plotting libraries. For this release you must have the following library present: 
* [[ChartDirector|http://www.advsofteng.com/]] - the python component for this professional chart component for web applications. Visit their [[download page|http://www.advsofteng.com/download.html]] and download the python libraries. Once downloaded move the content of the ''lib'' folder to a location that is in the ''Python'' import path (the simplest such place would be the ''library'' folder of ''~GeneTrack'' distribution). Note that this library, ''~ChartDirector'' is not a free software. Please see the [[License]] page for more information.
!!! Packaged Software
These libraries are distributed with ''~GeneTrack'', no installation is necessary:
* [[Sqlalchemy|http://www.sqlalchemy.org//]] an object-relational mapper (ORM) for Python
* [[Mako|http://www.makotemplates.org/]] a Python template library written for maximum performance 
* [[CherryPy|http://www.cherrypy.org/]] a pythonic, object-oriented HTTP framework 
* [[FormKit|http://dalchemy.com/opensource/formkit/]] web form processing library
We would like to extend our thanks and appreciation to the authors of these high quality software tools.
/*{{{*/
/*Haemoglobin Theme for TiddlyWiki*/
/*Design and CSS by Saq Imtiaz*/
/*Version 1.0*/
/*}}}*/
/*{{{*/

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

body
{background:#fefefe;}

#contentWrapper {
	font-family: Verdana, Arial, Tahoma, Sans-Serif;
	color: #555555;
margin:1.9em auto 1em ; width:800px;}

#header {background:#fefefe;}

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

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

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

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

a{
color:#BF2323;
text-decoration: none; font-weight:normal;
}

a:hover{
color:#BF2323;
background-color: #fefefe;
border-bottom:1px solid #BF2323;
}

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

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

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

#topMenu br {display:none;}

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

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

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



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

.tiddler {padding-left:0;}

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

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

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

    *  html .viewer pre {

margin-left: 0em;
}

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

width: 98%;
}

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

/***
!SidebarOptions
***/
#sidebarOptions {padding-left:0.5em; padding-top:2em;}

#sidebarOptions a {
			color:#999;
			text-decoration: none;}

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

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



 .listTitle {color:#888;}

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

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


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



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

}

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

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

}

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

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

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

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

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


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

.tabContents {background:#fefefe;}




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

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

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

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

.tagging .button, .tagged .button {
color:#ccc;
}
.selected .tagging .button, .selected .tagged .button {
color:#aaa;
}

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

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

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

.popup li.disabled {
color: #000;
}

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

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



   #messageArea {

border: 4px solid #BF2323;
background: #fefefe;
color: #555;
font-size:90%;
}

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


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

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

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


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



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




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

.tiddler {padding-bottom:10px;}

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

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

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

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

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

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

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

h1,h2,h3,h4,h5 { color: #BF2323; background: transparent; padding-bottom:2px; font-family: Arial, Helvetica, sans-serif; }
h1 {font-size:18px;}
h2 {font-size:16px;}
h3 {font-size: 14px;}
/*}}}*/
We assume that you followed the steps in the [[Installation]]. 

In the main installation directory you should see a file named ''run.py''. Execute this script by typing:

{{{
python run.py
}}}

in a terminal. It should display a help on its usage mode. You can run the internal self test by passing the ''test'' command to the script like so:

{{{
python run.py test
}}}

This will verify that the software is installed correctly and that it can access all dependecies. If there are failures you will need to modify your setup until all tests pass see [[Trouble Shooting]] for more details. When all tests pass you can now move on to the next step as described in [[Quick Overview]] or [[Using GeneTrack]].
Turn on verbose reporting mode with the ''-d'' (debug) flag:

{{{
python run.py -d test
}}}

You can test each individual module by running it at the command line:

{{{
python atlas/hdf.py
}}}

for example will run the tests for the ''hdf'' module

''Note:'' To run any of the components on their own you will need to add the directory containing the main installation directory and the ''library/library.zip'' file to the Python path. To that end the ''bin'' folder contains two scripts; one for Windows (''setenv.bat'') and one for Unix (''setenv.sh'') type systems. Edit the script for your platform and change the ''~SOURCE_DIR'' variable to point to the directory that contains ''run.py''. Enable the settings by either running the script (Windows) or sourcing it (Unix) in a terminal.
We assume that you have followed the [[Installation]] and the [[Testing the software]] pages.

''~GeneTrack'' is controlled via configuration files written as python modules. The content of each module may be a simple listing of the various settings in a ''key=value'' form (i.e. {{{SIGMA=20}}}). These modules are directly imported (executed) thus the approach supports more advanced usage as well. For an example for a data and a web configuration module see [[yeast_dataconf.py|http://code.google.com/p/genetrack/source/browse/trunk/library/yeast/yeast_dataconf.py ]] and [[yeast_webconf.py|http://code.google.com/p/genetrack/source/browse/trunk/library/yeast/yeast_webconf.py ]]. 

The main program ''run.py'' can take different commands as arguments. For example:

{{{
python run.py test
}}}

runs the internal self test. It is the first command that should be run. 
!!Analyzing the yeast data
To execute the demo run on the yeast data that is included 
{{{
python run.py execute yeast.yeast_dataconf
}}}
will execute the data analysis steps layed out in the  ''library/yeast/yeast_dataconf.py'' file. Note how the path separated by ''/'' was translated into the ''.'' notation and that the ''.py'' extension is not written out. See [[Quick Overview]] for more details on what this demo data is about (note that svn users need to manually unzip the data files ''library/yeast/data'').  The [[Preparing the input]] page describes common strategies for generating input for ''~GeneTrack''. Finally one may invoke the webserver via:
{{{
python run.py server yeast.yeast_webconf
}}}
The server will generate track plots as specified in ''library/yeast/yeast_webconf.py'' configuration module. There are sample configurations for both data processing and web serving included in the ''library'' folder. The default configuration starts a server accessible via the {{{http://localhost:8080/}}} URL. See the webconf.py module for more details,

Note that the configuration modules and data may be anywhere as long as they are in the python path that executes ''run.py''. By default ''home'' and ''library'' directories are visible when run from the default directory. 
!!Analyzing drosophila data
We distribute a full sequencing run for the drosophila as well. It can we processed and viewed by running:
{{{
python run.py execute dmel.dmel_dataconf
}}}
and 
{{{
python run.py server dmel.dmel_webconf
}}}
respectively.
Genome Cartography Project - Copyright Penn State (2007)