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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
This website processes astronomical images taken anywhere in the sky, where the nominal RA and Dec of the image center is unknown.  Browse for your image, upload it and get back the sky coordinates of the image.
----
{{borderless{
|[[Click here to open in a new browser tab|http://nova.astrometry.net/upload]]|
<html><div align="center"><iframe src ="http://nova.astrometry.net/upload" width="100%" align="center" height="600">< /></div></html>}}}
----
* Here's the list of all the websites currently accessible from this Reference Guide
*__Underlined__ links open directly in a new browser tab
*Please <html> <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#98;&#114;&#105;&#103;&#104;&#116;&#115;&#107;&#105;&#101;&#115;&#46;&#117;&#115;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#63;subject=ACP&#32;Reference&#32;Guide&#32;(online)"><b>let me know</b></a></html> of broken links.
----
{{twocolumns{
[[383 Henden fields mapped to RA/Dec]]
[[AAVSO]]
[[AAVSO Charts]]
[[AAVSO Photometric All-Sky Survey (APASS)]]
[[AboutTime]]
[[ACP Comm Center]]
[[ACP Horizon Editor Application]]
[[ACP Users on Google Earth]]
[[ACP Website]]
[[ad.usno.navy.mil/act/act.html]]
[[ad.usno.navy.mil/ucac/]]
[[Aberration of Light (both annual and diurnal)]]
[[AboutTime]]
[[Adam Block]]
[[Aladin]]
[[An Atlas of O-C Diagrams of Eclipsing Binaries]]
[[Annual Aberration]]
[["Anywhere" Plate Solver]]
[[APASS Data]]
[[Arp 1966]]
[[Arp Catalog]]
[[Arp Galaxy Images]]
[[ASCOM Focuser Drivers]]
[[ASCOM Initiative Web Site]]
[[ASCOM Platform Updates]]
[[ASCOM standards org]]
[[Asteroid Occultations]]
[[AstroMC Extech RH401 Driver]]
[[AstroMC WeatherSentry]]
[[Astrometry.net]]
[[Astronomical Catalogs and Catalog Formats]]
[[Astrophysics Source Code Library]]
[[A Time Tutorial]]
[[Auroral Ovals]]
[[Australia Weather]]
[[Big Photometry Web Page]]
[[Bill McLaughlin]]
[[Catalog and Atlas of Cataclysmic Variables]]
[[Catalogs Supported by WCS Tools]]
[[Center for Backyard Astrophysics]]
[[Centre de Données astronomiques de Strasbourg]]
[[China Weather]]
[[Comets]]
[[Comet Ephemeris Service]]
[[Creating a Mosaic World Coordinate System]]
[[Critical-list Numbered Minor Planets]]
[[DC-3 Dreams Communication Center]]
[[DC-3 Tycho-2 Archive]]
[[Differential Photometry Alternative Equations]]
[[Diffraction Limited]]
[[Dimension 4]]
[[Double Star Astronomy]]
[[Download 2011 version of ACP Log Analyzer]]
[[Download 2013 version of ACP Horizon Editor]]
[[Download ACP Planner]]
[[Download the MiniSAC Catalog Maintenance Kit]]
[[DSS Plate Finder]]
[[Europe Weather]]
[[Exoplanet Catalog]]
[[Exoplanet Transit Database]]
[[FileZilla FTP Client]]
[[FITS Header elements]]
[[FITS World Coordinate System]]
[[FITS World Coordinate Systems - Calabretta]]
[[FocusMax Autofocus Software]]
[[G2V Image Calibration]]
[[Galaxy Map]]
[[Gamma-ray Bursters]]
[[Goddard Space Flight Center web page all about FITS]]
[[Google Earth]]
[[Grazing Occultations]]
[[GSC 1.1 Reference]]
[[GSC.dc3.com]]
[[GSC2.3 Online]]
[[Henden Photometry Fields]]
[[Hubble Legacy Archives]]
[[IAU Central Bureau for Astronomical Telegrams]]
[[Indian Ocean Basin Weather]]
[[International Celestial Reference System (ICRS)]]
[[International Celestial Reference Frame (ICRF)]]
[[Introducing TheSky HD (iOS) with Built-in ACP Control]]
[[Jim Misti]]
[[Jonas Grinde]]
[[JPL Small-Body Database Browser]]
[[Landolt 1983]]
[[Landolt 1992]]
[[Landolt Special Areas Catalogs]]
[[List of Potentially Hazardous Asteroids]]
[[List of Recent Supernovae]]
[[List of Stars with Confirmed Extrasolar Planets]]
[[Local Clouds (Middle Atlantic Region)]]
[[Matt Russell]]
[[MaxIm Autoguiding]]
[[MaxIm Calibration]]
[[MaxIm DL Image Processing and Camera Control software]]
[[MaxIm DL Video Tutorials]]
[[MaxIm Fundamentals]]
[[MaxIm Online Help Index]]
[[MaxPoint™ Pointing Corrector]]
[[Messier Marathon]]
[[Messier Marathon Search Sequence]]
[[Mikulski Archive for Space Telescopes (MAST)]]
[[Minor Planet Astrometry]]
[[Minor Planet Center Links (All)]]
[[Minor Planet Center's Near Earth Object Confirmation Page (NEOCP)]]
[[Minor Planet Checker]]
[[Minor Planet Ephemeris Service]]
[[Minor Planet Photometry]]
[[MPC 1-line format]]
[[MPCORB Database website]]
[[NASA Exoplanet Archive]]
[[NASA Ephemeris Generator]]
[[NEO and Unusual Minor Planets]]
[[NEO Checker]]
[[Nick Risinger]]
[[NOAA Space Weather Prediction Center]]
[[North America (Eastern) Cloud Cover]]
[[North America (Western) Cloud Cover]]
[[North America Seeing]]
[[North America Weather]]
[[Nutation of the earth's rotation axis]]
[[Observable Comets]]
[[Observable Distant Minor Planets]]
[[official Tycho-2 home]]
[[Parallax]]
[[Photometric Accuracy of the USNO A2.0 Catalog]]
[[Photometry for Dummies]]
[[PipeHub Help File]]
[[Planalyzer]]
[[POTH Help File]]
[[Precession of the Equinoxes]]
[[Proper motion]]
[[R. Jay GaBany]]
[[Recommended Star Catalogs]]
[[Reference Chart for V404 Cygni]]
[[Register Your Observatory]]
[[Rob Capon]]
[[Robert Gendler]]
[[Russell Croman]]
[[Saguaro Astronomy Club (SAC) V8.1 catalog]]
[[ScopeSim Help File]]
[[SCT Collimation]]
[[SDSS DR13 Finding Charts]]
[[Sharpless 1959]]
[[Sharpless Catalog]]
[[SIMBAD]]
[[Sky Solve Application]]
[[Sky Survey Application]]
[[Sky-Map.org]]
[[SmartTrack ACP Application]]
[[So-called Precession]]
[[Software & Calculators]]
[[Starry Night Pro]]
[[Startup/Shutdown Script]]
[[Stetson Standards]]
[[Steve Mazlin]]
[[Steve Reilly]]
[[STEREO]]
[[STSci Digitized Sky Survey]]
[[Submit a Photo to APOD]]
[[Sumner Photometry Fields]]
[[The Flat Sky: Calibration and Background Uniformity in Wide-Field Astronomical Images]]
[[the GSC Catalog]]
[[The Whole NGC]]
[[TheSky]]
[[Thierry Legault]]
[[Third Reference Catalog of Bright Galaxies (RC3)]]
[[TiddlyWiki Home Page]]
[[TIGER Map Service]]
[[TPOINT Telescope Analysis Software]]
[[Tycho-2 Reference]]
[[UCAC2 Reference]]
[[UCAC3 Reference]]
[[UCAC4 Reference]]
[[Unisys Weather]]
[[US Weather by zipcode]]
[[USNO-A2.0 Reference]]
[[USNO Systems of Time]]
[[VOEvents]]
[[Videos]]
[[VizieR]]
[[Washington Double Star Catalog]]
[[Washington Double Star Catalog Listing]]
[[WCSTools Web page - package of programs and a library of utility subroutines]]
[[WCSTools: Image World Coordinate System Utilities]]
[[Where can I download the latest ACP updates?]]
}}}
Please <html> <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#98;&#114;&#105;&#103;&#104;&#116;&#115;&#107;&#105;&#101;&#115;&#46;&#117;&#115;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#63;subject=ACP&#32;Reference&#32;Guide&#32;(online)"><b>let me know</b></a></html> of broken links.
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
*Download the [[Henden Field spreadsheet|RefDocs/HendenFieldCenters.xls]], which has an interactive version of this map.
----
<html>
<img src="RefDocs/Henden.png" width="98%" />
</html>
----
{{borderless{
|[[Click here to open in a new browser tab|http://heasarc.gsfc.nasa.gov/docs/xte/abc/time_tutorial.html]]|
<html><div align="center"><iframe src ="http://heasarc.gsfc.nasa.gov/docs/xte/abc/time_tutorial.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.aavso.org/]]|
<html><div align="center"><iframe src ="http://www.aavso.org/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.aavso.org/vsp/]]|
<html><div align="center"><iframe src ="http://www.aavso.org/vsp/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.aavso.org/apass]]|
<html><div align="center"><iframe src ="http://www.aavso.org/apass" width="100%" align="center" height="600">< /></div></html>}}}
----
|!This is an HTML rendering of the ACP Help File that is included with the ACP v8.1 software.|
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/ACP81Help.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/ACP81Help.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 2000-<<today YYYY>>, Robert B. Denny, Mesa AZ^^
|!This is an HTML rendering of the ACP Active Server Pages Help File that is included with the ACP v8 software.|
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/ASP.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/ASP.html" width="100%" align="center" height="600">< /></div></html>}}}
----
[img[RefDocs/Architecture.png]]

A typical network and Internet configuration:

[img[RefDocs/WANLAN.png]]
{{borderless{
|[[Click here to open in a new browser tab|http://forums.dc3.com]]|
<html><div align="center"><iframe src ="http://forums.dc3.com" width="100%" align="center" height="600">< /></div></html>}}}
----
|!These are the inline versions of Help files published with ACP Expert v8.1|
*[[ACP 8.1]], with separate, additional sections covering:
**[[ACP Programmer's Reference]]
**[[ACP Active Server Pages]]
**[[PinPoint Programmer's Reference]]
**[[ASCOM Telescope 2 (for ACP Hub)]]
***[[POTH Help File]]
***[[PipeHub Help File]]
***[[ScopeSim Help File]]
**[[Windows Scripting (Microsoft)]]
**[[Agent Programming (Microsoft)]]
*[[ACP Planner]]
*[[Scheduler 8.1]]
|!These are the inline versions of Help files for useful ~ACP-related software|
*[[RTML 2.3]]
*[[ASCOM Platform 6]]

~~Note: Javascript links embedded in the above references will not work in this environment. URL's will.
//The published help files are also available using the program's own toolbar "Help" button.//~~
----
from: ''Jörg Hanisch''
----
!!ACP Horizon Editor is an application that makes it easy to create an individual horizon for use with ACP

[>img[RefDocs/MainWindow.gif]]

!!With ACP Horizon Editor you can:
*Create your own horizon for use with ACP
*Save different Horizons to files for future use
*Save Horizons to be used directly with ACP
*Save Horizons to be used directly with TheSky astronomy software
*Load/save Horizon-files from TheSky X

!!Works with ACP v5, v6, v7, and ACP v8
| [[Download 2013 version of ACP Horizon Editor]] |
----
current as of 20 April 2013
~~The author takes no responsibility for potential damage caused by the software. Use at your own risk...and have fun!~~
from: ''Russ Archer'' and ''Dave Wormuth''

Russ has taken down the original website where his application was posted. With Russ' blessing, another ACP user, Dave Wormuth, has picked up this application and recreated and refreshed the help system for it and provided a home location for the software. 

{{borderless{
<html><div align="center"><iframe src ="http://ACPLogAnalyzer.org" width="100%" align="center" height="640">< /></div></html>}}}
----
ACP is a program that serves as the hub and instrument sequencer for a fully robotic observatory, and (optionally) as a web and FTP server that provides safe and convenient internet access to a robotic observatory. It is designed to be used in conjunction with Diffraction Limited's [[MaxIm DL Image Processing and Camera Control software]], and the [[FocusMax Autofocus Software]]. __No other software is needed.__ Here are a few links to pages that describe some of the capabilities included in ACP.
!!!Click on the following links to read about each of the following subjects
|[[Using ACP Configuration Profiles]]|[[Using the Simulators for Test & Practice]]|
|[[Observing Plan Checker]]|[[Deep Sky Catalog]]|
|[[Coordinate Systems]]|[[Auto-Calibration of Images]]|
|[[Auto-Focus Support in ACP]]|[[Extended Filter Support]]|
|[[Auto-Guiding Your Mount]]|[[Standard ACP Scripts]]|
|[[Default File Locations for User Data and Logs (v6, v7 & v8)]]|[[Using ACP's Pointing Corrector]]|
|[[Sets, Repeats, and Filter Groups]]|[[ ]]|
----
|!This is an HTML rendering of the ACP Planner Help File that is provided with the ACP Planner v4.2.6 software.|
The ACP Planner v4.2.6 application (free) can be downloaded from ''[[here|http://acp.dc3.com/planner.html]]''.
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/ACPPlannerHelp.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/ACPPlannerHelp.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 2005-2009, Robert B. Denny^^
|!This is an HTML rendering of the ACP Programmer's Reference Help File that is included with the ACP v8.1 software.|
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/ProgRef.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/ProgRef.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 2000-<<today YYYY>>, Robert B. Denny, Mesa AZ^^
{{indent{This web-enabled reference guide is a hyperlinked online document containing portions of the contents of the ACP Help file provided with ACP, along with significantly more additional information of general astronomy interest not found in the help file, or in one place anywhere else. Listed below are links (in ''@@color:#ffbf00;orange@@'') to the major sections of the Reference Guide. There are over 380 individual items included here. Click on any of them to open the item. In addition, there are links to [[215 online websites]] in the Reference Guide.

[[Observing Tools Online]] and [[Observing Tools Online (Abbreviated)]] -- useful web links to online resources for professional and amateur astronomers alike, such as the AAVSO, ~VizieR, Aladin, SIMBAD, the Sharpless Catalog, the ARP Catalog, ~GRBs, occultations, exoplanet catalogs, and much more
[[Global Weather]] -- various online weather sites
[[Technical Information]] -- references and technical information about advanced capabilities
[[FAQs, Tips & Tricks]] -- answers to frequent user questions, and other stuff
[[Star Catalog Information]] -- particulars about the catalogs used by ACP, and other catalogs, too
[[User-contributed apps and scripts]] -- a collection of useful add-ons contributed by ACP users
[[Customizing ACP]] -- making ACP "yours"
[[Share your Sky! (Browser Usage)]] -- enabling others to use your observatory
[[ACP Observatory Control Software]] -- introductory descriptions and information
[[Getting Started with ACP]] -- reference information for using ACP with your observatory, telescope and camera
[[Acquiring Images Automatically]] -- how to build plans to run with ACP -- directives, lists, examples, etc.
[[Directives]] -- descriptions of all of ACP's directives are collected here
[[Nifty Astrophotography]] -- Excellence in astrophotography
[[Scheduler-Specific Tips]] -- A few useful help items excerpted from the ACP Scheduler help file

[[ACP Help]] -- online versions of the help files found within ACP, Scheduler, Planner, RTML, and ASCOM

Use this [[Site Map]], this [[Site Map (Alphabetic)]], this [[Site Map (Full)]] or [[TOC]], to explore the topics of the ACP Reference Guide, or type a word or phrase in the search bar above.

^^[[Latest Update]]^^
----
^^The ''//ACP Reference Guide//'' is updated frequently. If you have suggestions for other information or specific websites or tools, or if you find substantive errors, please <html> <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#98;&#114;&#105;&#103;&#104;&#116;&#115;&#107;&#105;&#101;&#115;&#46;&#117;&#115;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#63;subject=ACP&#32;Reference&#32;Guide&#32;(online)">suggest changes</a></html>.
^^
	The form below is ready for you to fill in the pertinent information per the instructions on the page. After you submit your form, a script in the background does the format conversion to the Google Earth .kml schema. The master .kml file is updated immediately to include your observatory. You can submit a new or second entry, but you cannot edit one you've already submitted. If you make a mistake [[let me know|mailto:richard.berg@verizon.net]], and I'll fix it.

	Filling out and submitting the form means that you give your tacit approval to redistribute this information to any ACP customer. There's no interest in making the ACP.kml file public, or in using it for any purpose other than as an illustration of where on Earth ACP is being used. Only those with access to the customer's parts of the Comm Center will be able to find and download the .kml file. The minimum information you need to provide is indicated by asterisks. If you want to associate a website with your placemark, please also fill in the URL.

	To use the .kml file, [[click here|http://acp.dc3.com/ACPCustomers.kml]] to retrieve the file and save it someplace. Then in Google Earth, go to the File/Open... menu and point to this .kml file to open it. It will show up in the "Temporary Places" part of the Google Earth menu. You can drag it up to the "My Places" section if you like.

{{borderless{
|[[Click here to open in a new browser tab|http://acp.dc3.com/google-earth.html]]|
<html><div align="center"><iframe src ="http://acp.dc3.com/google-earth.html" width="100%" align="center" height="600">< /></div></html>}}}
----
*from ''John Winfield''
{{borderless{
|[[Click here to open in a new browser tab|http://winfij.com/acp.html]]|
<html><div align="center"><iframe src ="http://winfij.com/acp.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://dc3.com/]]|
<html><div align="center"><iframe src ="http://dc3.com/" width="100%" align="center" height="600">< /></div></html>}}}
----
|The AAVSO Photometric ~All-Sky Survey now contains photometry for about 60 million objects in about 99% of the sky. This survey is conducted in five filters: ''Johnson B'' and ''V'', plus Sloan ''g′, r′, i′''. It is valid from about 10th magnitude to about 17th magnitude. The catalog is online here. HTML results will be returned quickly; a CSV document will take more time to generate. You do not need to log in to search the catalog.|
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.aavso.org/download-apass-data]]|
<html><div align="center"><iframe src ="http://www.aavso.org/download-apass-data" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://ascom-standards.org/Downloads/FocuserDrivers.htm]]|
<html><div align="center"><iframe src ="http://ascom-standards.org/Downloads/FocuserDrivers.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://ascom-standards.org/]]|
<html><div align="center"><iframe src ="http://ascom-standards.org/" width="100%" align="center" height="600">< /></div></html>}}}
----
|!This is an HTML rendering of the ASCOM Help File that supports ACP Expert v8.1 software.|
| !Wait for it |
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/ASCOMPlatformHelp.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/ASCOMPlatformHelp.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 2000-<<today YYYY>>, Robert B. Denny, Mesa AZ^^
{{borderless{
|[[Click here to open in a new browser tab|http://ascom-standards.org/Downloads/PlatformUpdates.htm]]|
<html><div align="center"><iframe src ="http://ascom-standards.org/Downloads/PlatformUpdates.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
|!This is an HTML rendering of the ASCOM Telescope 2 Help File that is included with the ACP v8.1 software.|
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/Telescope2.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/Telescope2.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 2000-2004, The ASCOM Initiative^^
{{borderless{
|[[Click here to open in a new browser tab|http://ascom-standards.org/]]|
<html><div align="center"><iframe src ="http://ascom-standards.org/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://en.wikipedia.org/wiki/Aberration_of_light]]|
<html><div align="center"><iframe src ="http://en.wikipedia.org/wiki/Aberration_of_light" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://abouttime.software.informer.com/4.8/]]|
<html><div align="center"><iframe src ="http://abouttime.software.informer.com/4.8/" width="100%" align="center" height="60">< /></div></html>}}}
----
/***
|''Name:''|AccordionMacro|
|''Description:''|Create an accordion effect for menus|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#AccordionMacro|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.0|
|''Date:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.2|
|''Requires:''|InlineSlidersPlugin (http://tw.lewcid.org/#InlineSlidersPlugin)|

!!Usage
* designed to work with the InlineSlidersPlugin.
* when one slider is opened, all other sliders in that tiddler are closed.
* just put {{{<<accordion>>}}} in the tiddler.
* useful for menus.
* [[Demo|Site Map]]
***/
// /%
//!BEGIN-PLUGIN-CODE
config.macros.accordion={};
config.macros.accordion.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
    var tiddler = story.findContainingTiddler(place);
    var btns = tiddler.getElementsByTagName("a");
    for (var i=0; i<btns.length; i++){
        var btn=btns[i];
        if (hasClass(btn,"sliderButton")){
           btn.old_onclick = btn.onclick;
           btn.onclick = function(e){
               this.old_onclick.apply(this,arguments);
               divs = tiddler.getElementsByTagName("div");
               for (var i=0; i<divs.length; i++){
                   if(hasClass(divs[i],"sliderPanel")){
                       if(divs[i]!=this.nextSibling){
                          divs[i].style.display = "none";
                          if (divs[i].nextSibling.tagName.toLowerCase()=="br"){
                             divs[i].nextSibling.style.display="";
                          }
                       }
                       else if(divs[i].nextSibling.tagName.toLowerCase()=="br"){
                             divs[i].nextSibling.style.display = divs[i].style.display =="none"? "": "none";
                       }
                   }
               }
           };
        }
    }
};
//!END-PLUGIN-CODE
// %/
/***
|''Name:''|AccordionMenuPlugin|
|''Description:''|Turn an unordered list into an accordion style menu|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#AccordionMenuPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.1|
|''Date:''|11/29/2007|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.5|
!!Usage:
* put {{{<<accordion>>}}} immediately after your unordered list

!!Examples:
*[[AccordionMenuPluginDemo]]

***/
// /%
//!BEGIN-PLUGIN-CODE
config.macros.accordion={
        dropchar : " \u00BB",
        handler : function(place,macroName,params,wikifier,paramString,tiddler){
          list = findRelated(place.lastChild,"UL","tagName","previousSibling");
          if (!list)
            return;
          addClass(list,"accordion");
          if (params.length){
            addClass(list,paramString);
          }
          this.fixLinks(list.childNodes);         
        },

        fixLinks : function(els){
          for (var i=0; i<els.length; i++){
            if(els[i].tagName.toLowerCase()=="li"){
              var link = findRelated(els[i].firstChild,"A","tagName","nextSibling");
              if(!link){
                var ih = els[i].firstChild.data;
                els[i].removeChild(els[i].firstChild);
                link = createTiddlyElement(null,"a",null,null,ih+this.dropchar,{href:"javascript:;"});
                els[i].insertBefore(link,els[i].firstChild);
              }
              else{
                link.firstChild.data = link.firstChild.data + this.dropchar;
                removeClass(link,"tiddlyLinkNonExisting");
              }
              link.onclick = this.show;
            }
          }
        },
       
        show : function(e){
                var list = this.parentNode.parentNode;
                var els = list.childNodes;
                var open = hasClass(this.parentNode,"accordion-active");
                for (var i=0; i<els.length; i++){
                        removeClass(els[i],"accordion-active");
                }
                if(!open)
                        addClass(this.parentNode,"accordion-active");
        }       
};

config.shadowTiddlers["StyleSheetAccordionMenuPlugin"] = "/*{{{*/\n"+
         "ul.accordion, ul.accordion li, ul.accordion li ul  {margin:0; padding:0; list-style-type:none;text-align:left;}\n"+
         "ul.accordion li ul {display:none;}\n"+
         "ul.accordion li.accordion-active ul {display:block;}\n"+
         "\n"+
         "ul.accordion a {display:block; padding:0.5em;}\n"+
         "ul.accordion li a.tiddlyLink, ul.accordion li a.tiddlyLinkNonExisting, ul.accordion li a {font-weight:bold;}\n"+
         "ul.accordion li a {background:#202040; color:#FFBF00;}\n"+
         "ul.accordion li.accordion-active a, ul.accordion li a:hover {background:#202040;color:#FFF;}\n"+
         "\n"+
         "ul.accordion li ul li{display:inline-block;overflow:hidden;}\n"+
         "ul.accordion li.accordion-active ul li {background:#303060; color:#FFBF00; padding:0em;}\n"+
         "ul.accordion li.accordion-active ul li div {padding:1em 1.5em; background:#303060;}\n"+
         "ul.accordion li.accordion-active ul a{background:#303060; color:#0F0; padding:0.5em 0.5em 0.5em 1.0em;border:none;}\n"+
         "ul.accordion li.accordion-active ul a:hover {background:#303060; color:#FFF;}\n" +
         "/*}}}*/";
 
 store.addNotification("StyleSheetAccordionMenuPlugin",refreshStyles);
 //!END-PLUGIN-CODE
// %/
This is the script you will probably use most often. It implements ACP's sequencing capabilities with observing plan input. Normally, when started, ~AcquireImages.js will display a file-open window, asking you which observing plan you want to run. There are three ways to bypass this and have ~AcquireImages.js run without user interaction:
*~AcquireImages.js will look in the user's default plans folder for a file ''default.txt''. If it is found, ~AcquireImages.js will run it as a plan.
*~AcquireImages.js will look in the user's default plans folder for a file ''runplanonce.txt''. If this file is found, the first line in the file is read and used as the full path/name to the actual plan file, then //runplanonce.txt is deleted// (hence the name!). The first line of runplanonce.txt must contain the //full path/name// to the desired observing plan file. No folder searching is performed.
*If ~AcquireImages.js is started from another script via the ''Util.~ChainScript()'' method, and the chaining script previously set the ''Util.~ChainParameter'' property to the name or the full path/name of the observing plan file, ~AcquireImages.js will start running that plan immediately. If only the plan's file name is given, ~AcquireImages.js will look in the user's default plans folder for that plan file and if found, it will be run.

Here are all the [[Standard ACP Scripts]].
----
!About Observing Plans

Observing plans are text files containing instructions on how to acquire images. The easiest way to make observing plans for most people is via the free [[ACP Planner|http://acp.dc3.com/planner.html]]. It is your responsibility to create your observing plans, using ACP Planner or by hand. Note that Planner can convert ~TheSky™ database exports and mosaics into ACP plans. 

If you write plans by hand, or if you hand-edit plans created by ACP Planner, you should use the ACP Plan Checker before running them live. Or you can try running your plan, at which time the compiler/runner script ''~AcquireImages.js'' will compile it into machine format, checking even deeper than the Plan Checker. If there are errors at that time, the plan won't run and you can correct the errors, then try again. 

Once created, you can either initiate acquisition by running ''~AcquireImages.js'' script and selecting the plan when it starts, or upload the plan through the web and initiate acquisition via the "Multiple Targets, Observing Plan" web page. 

Each of the links below will open a new window.

[[Making Observing Plans]] -- overall format, target specifications, and mixing new and old formats
[[Directives]] -- the whole panoply of directives available for ACP plans
[[Using Tab-Delimited Lists]]
[[Asteroids and Comets]]
[[NEOCP Ephemerides]]
[[Observing Plan Checker]]
[[Sample Observing Plans]]
----
{{borderless{
|[[Click here to open in a new browser tab|https://www.youtube.com/v/Ca7nJrYeAek]]|
<html><div align="center"><iframe src ="https://www.youtube.com/v/Ca7nJrYeAek" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.caelumobservatory.com/]]&nbsp;&raquo;|
<html><div align="center"><iframe src ="http://www.caelumobservatory.com/" width="100%" align="center" height="600"></iframe></div></html>}}}
----
!Using Dropbox, Google Drive, ~BitTorrent Sync, etc. to Get Remote Data
Remote observing can be inconvenient when it's time to get your images. The usual process has the images being acquired at night, then the next day transferring them (usually via FTP). This can take several hours, and requires a human or a clever //cron// job. It's not practical to transfer large batches with ACP's FTP server while it is also doing automated observing. Fortunately, a new breed of "cloud" file sharing services have come on the market, and these may be used to provide access to data acquired at the remote observatory. Their capabilities vary widely, and we aren't able to evaluate them all. Here, we outline how you can use the Dropbox service (also ''[[Google Drive|http://drive.google.com/]]'' and ''[[BitTorrent Sync|http://www.bittorrent.com/sync]]'') to distribute the images (__not logs!__) from your remote observatory to you and other observatory users. 

Imagine... shortly after each image is acquired by your remote observatory, you see a little balloon appear on your local computer advising you that a new file is available. When you see the balloon, the image is ready to use. You don't have to lift a finger, it just happens.
!!A Little Bit About Dropbox (other cloud/sync services are similar)
The key feature of Dropbox is its integration with the computer's file system. After registering for an account and installing the Dropbox client, a new folder appears on your system. This folder is automatically synchronized with Dropbox's cloud storage servers. You can install the Dropbox client on other Windows, Macintosh, iPhone/iPad, and Android systems. The Dropbox service automatically keeps the contents of the Dropbox folders on all of these systems synchronized. The other great thing about Dropbox is that it works through most firewalls, since no incoming connections to the observatory computer are needed. You should already be getting the idea of how this can be used with Share Your Sky! remote observing.
!!How to Set Up ACP for Dropbox or Other Cloud/Sync Service
Using Dropbox as an alternative to FTP is easy in concept. The details can take some planning and focus. The idea is to use ACP's Custom File and Folder naming features to tell ACP to save its images in the Dropbox folder tree somewhere. The layout and naming really depends on how you plan to use the data, and whether you use the observatory yourself or as part of a team. Also, you have the choice of creating a Dropbox account for the observatory then sharing folders with other Dropbox "users," or just using your general purpose Dropbox account on the observatory and putting your astronomy data into some folders for that purpose. There are so many ways you could set this up, we won't try to give step by step directions here. Really all you need to understand are the file/folder templates. From there, your imagination is the only limit.
|!NOTE|
|__Do not configure log files into the Dropbox areas!__ If you do, Dropbox will sync them over and over as they are being written and rewritten, resulting in many "delta-copies" on the Dropbox servers, and continuous "new version" balloon popups on all systems with access to the Dropbox folders. ''Use the usual web interface to view and download logs!''|
!!Template Generator Tool
In order to help you get started with the templates, we've included the [[File/Folder Customization Tool]] that constructs a template based on your choices. Obviously, all the limitless ways that you can set up folders and files can't be covered by this tool. However, we've tried to anticipate some useful and common setups. At a minimum, playing with this for a few minutes should help you "get it." At the bottom of the page are options for setting up Dropbox or other cloud/sync services.
!!How to Use Dropbox Etc.
There's not much to this; your files "just appear" a short time after they are acquired at the remote observatory. Just keep in mind that anything you do to the files at your local computer will be "reflected" (synced) out at the remote observatory, and any other computer with that Dropbox account or with whom you have shared one of your Dropbox folders. Deleting a file locally will cause it to be deleted at the observatory. Note that Dropbox keeps a version history of your documents. You can get a deleted file or version of a file back 30 days for the free account and forever if you have the paid "pack-rat" service.

!!An Important Limitation
Don't use the cloud/sync folders as the place to work on data reduction. Move or copy the data to another place on your local hard drive to work on it. For example, let's say you calibrate 100 images and they're in your Dropbox area. Shortly thereafter, Dropbox will silently create new versions of those image files, then sync those files back out to the observatory and to anyone else that has that folder. Probably not something you want.
----
^^Copyright &copy; 2000-<<today YYYY>>, Robert B. Denny, Mesa AZ^^
Adding your own logic to ACP's image acquisition process is accomplished through the use of scripts and scriptlets. Already in place scripting stubs, or "hooks," enable and allow the addition of almost anything at a given user site. You need to write your own script code to take advantage of these features. Here's what's covered:

[[Startup and Shutdown scripts]]
[[Script Failure script]]
[[Weather Safety script]]
[[Custom Actions (expert feature)]]
----
|!This is an HTML rendering of Microsoft's Agent Programming Help File that is included with the ACP v8.1 software.|
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/MSAgent.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/MSAgent.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 2001, Microsoft Corporation^^
{{borderless{
|[[Click here to open in a new browser tab|http://aladin.u-strasbg.fr/aladin.gml]]|
<html><div align="center"><iframe src ="http://aladin.u-strasbg.fr/aladin.gml" width="100%" align="center" height="600">< /></div></html>}}}
----
*Open and save a .pdf version ''[[here|RefDocs/mighellkj.pdf]]''
{{borderless{
|[[Click here to open in a new browser tab|http://www.adass.org/adass/proceedings/adass98/mighellkj/]]|
<html><div align="center"><iframe src ="http://www.adass.org/adass/proceedings/adass98/mighellkj/" width="100%" align="center" height="600">< /></div></html>}}}
----
In Version 7 and beyond, this switch is now located on the ACP/Preferences/General tab. Check the box to force place solving for every final image. 

[img[RefDocs/SolveIt.png]]
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.as.ap.krakow.pl/o-c/cont.html]]|
<html><div align="center"><iframe src ="http://www.as.ap.krakow.pl/o-c/cont.html" width="100%" align="center" height="600">< /></div></html>}}}
----
If you happen to own Software Bisque's implementation of Patrick Wallace's [[TPOINT Telescope Analysis Software]], you can use TPOINT to analyze the pointing models generated by ACP's automatic pointing corrector. This allows you to learn about your telescope's pointing and evaluate the quality of the model. On ACP's Telescope menu, there is an option to save the current (active) model in a backup file. With this option, you can make a copy of the active model and analyze it with TPOINT.

As described on the [[Using ACP's Pointing Corrector]] page, ACP saves its model mapping points in a file that is compatible with Diffraction Limited's [[MaxPoint™ Pointing Corrector]]. These model files must be converted into a format that can be imported into TPOINT. ACP comes with a standard script [[ModelToTpoint.vbs]] that converts ACP model files into ~TPOINT-importable text format. Once converted, the resulting text file is imported into TPOINT for analysis.

!Analysis Procedure
#Unless you already have a saved ACP model, on ACP's Telescope menu, select Save model as... to make a copy of the active model into a separate file, for example ''~MyModel.clb''. 
#Load the ''~ModelToTpoint.vbs'' standard script into ACP's console. The telescope, camera, etc. do not need to be connected. 
#Click Run to start the script. 
##You will first see a file-open box. Select the model you want to analyze (~MyModel.clb) and click OK. 
##Next you will see a file-save box. Specify the ~TPOINT-text file into which you want to save the converted model (''~MyModel.dat'') and click OK. 
##When the script completes, you can close ACP. 
#Start TPOINT and select New in its File menu. This creates a new (empty) TPOINT model. 
#Select Import Text in the TPOINT file menu. Choose the converted model from above (~MyModel.dat). As soon as you click OK in the file-open box, the model data should appear in TPOINT. 
#Select Save as... in the TPOINT File menu and specify the name of the TPOINT model file (''~MyModel.tpt''). 
#Now you're ready to analyze with TPOINT. Depending on how familiar and/or advanced you are with TPOINT, the best place to start is with the "fit data" feature: 
##In the Model menu, select Fit Data 
##''Critical'': Start with all of the checkboxes in the Terms area turned on. These terms correspond directly with ACP's corrector terms (which ACP uses at all times). You should see "8 terms in use" next to the "More Terms" button. If more than 8 are in use, go into the More Terms window and turn them off. 
##Select Scatter Diagram in the Graph area. 
This should get you started using TPOINT to analyze ACP's pointing models.
---- 
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.astrobin.com/users/Ioda/]]|
<html><div align="center"><iframe src ="http://www.astrobin.com/users/Ioda/" width="100%" align="center" height="600">< /></div></html>}}}
--
*An example using the [[MathSVGPlugin]]
*Click the button to start/stop animation
<div class='SVGgraph' options="height:300,scales:[-2,2,-1,3],border:'white 1px dotted'">
function goforit(){
SVG.locked = !SVG.locked;
if(animate==true){
timer = setInterval(roll,100);
} else {
clearInterval(timer);
}
animate=!animate;
return false;
}

function roll(){
time+=0.1;
var theta = PI/4*sin(sqrt(4.9)*time);
rotate("line",theta,{center:[0,2],replace:true});
}

var timer;
var time=0;
var animate=true;
rect([-1.5,2],[1.5,2.25],{fill:"red",stroke:"red"});

line([0,2],[0,0],{id:"line",marker:"--*",size:50,strokewidth:2,stroke:"yellow"});
button([SVG.xmax-0.75,SVG.ymin],[SVG.xmax,SVG.ymin+0.3],"button",goforit,{fill:"white",fillopacity:0.5,rx:0.05,ry:0.05,stroke:"yellow"});
</div>
----
{{borderless{
|[[Click here to open in a new browser tab|http://en.wikipedia.org/wiki/Aberration_of_light]]|
<html><div align="center"><iframe src ="http://en.wikipedia.org/wiki/Aberration_of_light" width="100%" align="center" height="600">< /></div></html>}}}
----
''Thanks to Jim ~McMillan, who authored these simple instructions for processing images using only the capabilties built into ~MaxIm. In his own words:''

----
{{indent{I'm kinda excited about a specific processing step I've been trying recently and thought I'd share it. It's really easy to do, and I think it makes a big difference. Most times, we want to tease out as much detail as possible by applying some type of sharpening process. However, it's really easy to over-do it and introduce artifacts, leaving it looking over-cooked and unnatural.

{{indent{Typical astroimages have a mixture of high and low SNR (signal to noise ratio) areas. High SNR areas can be sharpened relatively aggressively with good results, while low SNR areas usually end up looking worse with any kind of sharpening.

{{indent{I've recently discovered one of the parameters available with ~MaxIm's unsharp mask that makes it a really effective tool. One can specify the ADU range to apply the unsharp mask. What that means is you can sharpen the high SNR areas while ignoring the low SNR areas. Taking it a step farther, one can quite aggressively sharpen the brightest areas and back off on medium SNR areas.

{{indent{As an example, relatively little processing was done on this image below. It is 35, 10 min exposures. It would certainly benefit from lots more exposure and improve the SNR in the dimmer areas. However, this demonstrates the process pretty effectively.

{{indent{These are the processing steps (all done in ~MaxIm):
#Calibrate, remove blooms, auto-gradient removal, remove hot/dead pixels. Do this for each image.
##Then align and stack the processed images.
#Apply DDP (no sharpening).
#Unsharp mask 2 times.
##The first time was done at a custom level of 20, with the maximum ADU at 65000 (max for my camera), the minimum ADU at 16000. The lower limit was chosen to include sharpening the brighter areas of the spiral arms, but ignoring the dimmer areas. The custom level of 20 was chosen through experimentation - anything stronger started to look over-done.
##The second time I set the minimum adu at 35000 and set the level to "mild" (which is 5). The effect was to sharpen only the galaxy core fairly aggressively.
#Follow up with other cute processing steps. For example, add the one star spike in Photoshop Elements.

{{indent{Once you have the stacked image, it takes maybe 5 minutes to produce this "final" image.

{{indent{When additional exposures are added, apply step 1) above to them. Continue with 1a). Then run the first unsharp mask on a little lower minimum value (for example, 12000 ADU versus 16000) and do it more aggressively (custom level of 10 versus 20). The difference between the original and new image is pretty subtle, but it is possible to tease out a bit more detail in the dimmer parts of the galaxy arms as well as having a smoother background. (You can darken the background just a bit as a matter of taste.)
----
|Note:  The .pdf version is 16 MB|
{{borderless{
|[[Click here to open in a new browser tab|http://nedwww.ipac.caltech.edu/level5/Arp/Arp_contents.html]]|
<html><div align="center"><iframe src ="http://nedwww.ipac.caltech.edu/level5/Arp/Arp_contents.html" width="100%" align="center" height="600">< /></div></html>}}}
----
*Read the original refereed article at [[Arp 1966]]
*Here's a web page with [[Arp Galaxy Images]]
*Search a catalog for specific objects on this web page:
{{borderless{
|[[Click here to open in a new browser tab|http://webviz.u-strasbg.fr/viz-bin/VizieR-2?-source=VII/74A]]|
<html><div align="center"><iframe src ="http://webviz.u-strasbg.fr/viz-bin/VizieR-2?-source=VII/74A" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.338arps.com/]]|
<html><div align="center"><iframe src ="http://www.338arps.com/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.asteroidoccultation.com/]]|
<html><div align="center"><iframe src ="http://www.asteroidoccultation.com/" width="100%" align="center" height="600">< /></div></html>}}}
----
Acquiring images of minor planets (asteroids and comets) is complicated by the fact that the target moves relative to our position on the Earth. This means that the coordinates change with time and thus, to center the target in the image, the coordinates must be calculated for the time of the exposure. By using orbital elements, you provide ACP with the formula for calculating the position of the target at the time we actually start the exposure. 
|''NOTE:'' If your telescope supports offset tracking rates, be sure to look at the #TRACKON and #TRACKOFF plan [[Directives]]. These control ACP's //orbital tracking// feature, where the motion of the minor planet is fed into the telescope and its tracking is adjusted to match the motion. An orbitally tracked image will show trailed stars and a stationary minor planet.|
The formula for calculating the position of a minor planet changes over time, so orbital elements are themselves calculated for a particular epoch. If you are tracking a minor planet, you should update your orbital elements (or MPCORB.DAT) periodically. There's no set formula for how often to do this. Orbits vary, the orbit may be "improved" via additional observations, the orbit may be perturbed by a large body, etc. 
!NEOCP Asteroids 
Newly discovered near-earth orbit (NEO) asteroids may not have elements available. They may be listed on the Near Earth Asteroid Confirmation Page ([[NEOCP]]), however, in the form of ephemerides. ACP can also handle targets composed of multiple NEOCP ephemeris records. See [[NEOCP Ephemerides]]. 

!Minor Planet Elements
ACP accepts minor planet orbital elements in the Minor Planet Center "1-line" format or just the designation (numbered, named, packed or unpacked provisional, see the info on MPCORB below). To get this information directly from the Minor Planet Center's web site (as opposed to a local MPCORB database), first prepare a list of targets you want to image by designation or name. Designations should be entered in one of the following forms: 
*Named objects: Denny 
*Numbered objects: (1290) or 1290 
*Unnumbered objects: 1997 ~XF11 or 1998 AA. 
Designations are case sensitive. Once you have this list, go to the Minor Planet Ephemeris Service web page. Enter your objects as above into the list area. You can leave the Ephemeris Options section blank, as you are not getting an ephemeris. Make sure you select "MPC 1-line" for the return format, as shown in the image to the right. You will be prompted to save a file called "elements.txt" (or possibly "elements.txt.COM"), save the file with the name you wish, and an extension of ".txt". 

The format of the MPC 1-line elements is shown in the figure below: 

{{stretch {[<img[RefDocs/OneLineNEO.png]]}}}

The MPC furnishes elements in a number of formats used by other software, however ACP uses the standard MPC format. ACP is compatible with the new encoded numbering format used for asteroids with numbers 100000 and greater.
!Local MPCORB Database
|''NOTE:'' If you want to download the elements database from the Minor Planet Center (MPCORB.DAT), ACP can automatically retrieve elements locally, then calculate position and motion. In the folder C:\Program Files\Common Files\ASCOM\MPCORB there is a set of tools for building a fast-lookup database from MPCORB.DAT. Instructions are in the readme.txt file there. Retrieve the latest database from [[MPCORB Database website]]. If you build the database as instructed, you need only give "MP " plus the designation (numbered, named, packed or unpacked provisional) as a target specification. ACP uses the MPCORB database wrapper object to retrieve the elements. It is very fast!|
If you built the local MPCORB database as described in the note above, you need only give "MP " (note the space after MP) and the designation. If you use a (numbered) minor planet number, you must give all 5 digits, including leading zeroes if necessary. For example:

[<img[RefDocs/~MCorb.png]]


!Comet Elements
MPC 1-Line elements of [[Observable Comets]] are available from the Minor Planet Center. The MPC 1-line format of comet elements is shown in the figure below. The MPC furnishes elements in a number of formats used by other software. ACP uses the standard [[MPC 1-line format]] and supports the specially-named comet-fragment MPS 1-line elements as well. 

{{stretch {[<img[RefDocs/CometEls.png]]}}}
&nbsp;
|''NOTE:'' The elements must be in MPC 1-Line format (exactly as shown) including the leading spaces for the second (named, e.g. ~PJ97T030) format.|
from: ''Stan Ralph (Foster Systems)''
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.fostersystems.com/]]|
<html><div align="center"><iframe src ="http://www.fostersystems.com/" width="100%" align="center" height="600">< /></div></html>}}}
----
from: ''Stan Ralph (Foster Systems)''
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.fostersystems.com/viewitem.php?productid=81]]|
<html><div align="center"><iframe src ="http://www.fostersystems.com/viewitem.php?productid=81/" width="100%" align="center" height="600">< /></div></html>}}}
----
*Enter your unsolved image here: [["Anywhere" Plate Solver]]
----
{{borderless{
|[[Click here to open in a new browser tab|http://nova.astrometry.net/]]|
<html><div align="center"><iframe src ="http://nova.astrometry.net/" width="100%" align="center" height="600">< /></div></html>}}}
----
*See also the ~WCSTools Catalogs page that tells how the catalogs are implemented.  (Note link at bottom)
{{borderless{
|[[Click here to open in a new browser tab|http://tdc-www.harvard.edu/software/catalogs/]]|
<html><div align="center"><iframe src ="http://tdc-www.harvard.edu/software/catalogs/" width="100%" align="center" height="600">< /></div></html>}}}
----
*The "Browse" tab lists all code sources in serial order.
{{borderless{
|[[Click here to open in a new browser tab|http://asterisk.apod.com/wp/]]|
<html><div align="center"><iframe src ="http://asterisk.apod.com/wp/" width="100%" align="center" height="600">< /></div></html>}}}
----
This websites forecasts real-time auroral activity derived from satellite imagery. 
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.swpc.noaa.gov/products/aurora-30-minute-forecast]]|
<html><div align="center"><iframe src ="http://www.swpc.noaa.gov/products/aurora-30-minute-forecast" width="100%" align="center" height="600">< /></div></html>}}}
----
Satellite images are time stamped in "UTC" (Coordinated Universal Time). This is the start time of the reception of the top of the image from the satellite. It takes approximately 30 minutes for ~MTSAT-1R to complete a scan.
{{borderless{
|[[Click here to open in a new browser tab|http://www.bom.gov.au/australia/satellite/]]|
<html><div align="center"><iframe src ="http://www.bom.gov.au/australia/satellite/" width="100%" align="center" height="600">< /></div></html>}}}
----
!Using ~Auto-Calibration
~MaxIm DL's automatic calibration feature allows scripted systems such as ACP to use its capabilities. ~MaxIm DL has a sophisticated calibration group facility that allows building a library of calibration images for various binning, exposure intervals and temperatures. ACP depends on your having set up ~MaxIm's cal-group facility. It simply calls ~MaxIm at the appropriate point in the acquisition process, and expects ~MaxIm to do the actual calibration.

Prior to doing auto-calibration, ACP saves a copy of the image with "RAW" pre-pended to the image's file name. Thus you can access the original uncalibrated image if, for some reason, calibration had undesired effects. __Note that this increases your disk space requirements.__ If you want to disable this, open the ACP Preferences, select the Imaging tab, and uncheck the "Save original uncalibrated final/data images" checkbox. This is on by default.

When doing auto-calibration, your raw/uncalibrated images will now be saved into a subfolder named RAW under your final/calibrated images (as well as having ~RAW_ pre-pended to their names as before). This may cause a disruption to your automated pipeline if you depend on the location of the ~RAW_xxx files.

|!NOTE: The old calibration scheme used with ~MaxIm V3.x is no longer supported. Delete any images in the ACP\Calibration folder.|

Calibration images you acquire via ACP observing plans are saved in a Calibration folder inside the current image folder. If you want to set up ~MaxIm's calibration groups, you can point the calibration groups generator to the Calibration folder and the images therein will be added to the groups.
----
!Using ~Auto-Focus
ACP has built-in support for the free [[FocusMax Autofocus Software]], written by Larry Weber and Steve Brady, as well as the [[PlaneWave PWI]] focusing tool provided with ~PlaneWave's mount/telescope systems. If you have a focuser that has an ASCOM driver, you can use ~FocusMax or PWI together with ACP. 

|Do not attempt to use ACP's autofocus features until you can achieve reliable automatic focus virtually every time with PWI or ~FocusMax at any place in the sky. Plan to spend some up-front time getting familiar with your auto-focus tool. Both programs are sophisticated programs with lots of features.|

ACP offers several ways to control autofocus.
#With multiple filters it is recommended that you configure ACP with focus offsets and use periodic autofocus in your observing plans. See [[Extended Filter Support]]. 
#Alternatively, or in addition to periodic autofocus, you can force an autofocus to be done during observing at specific points in your observing plan (e.g. whenever the filter switches) using the #AUTOFOCUS directive. 

ACP's unique, ''adaptive autofocus'' feature monitors focus quality and refocuses your imager only when needed. At present this depends on ~MaxIm DL's half-flux diameter measurements. This measurement is not reliable enough when the images contain large extended objects (galaxies, nebulae), so if you are an astro-imager, we recommend against depending on adaptive autofocus. 

!Getting Started
#Connect and install the software for your focuser. Make sure you can control the focuser using the software that comes with it. 
#Install the ASCOM Focuser driver for your focuser, if necessary. Most focusers are covered by the set of drivers that come with the [[ASCOM Focuser Drivers]] platform. 
#Go to the ACP Getting Started page and run the ~FocusMax test in step 3 of Software Installation Checks. If needed, install or update your ~FocusMax. @@color:#ff0;''Don't continue here until you know that the current version of ~FocusMax or PWI is installed.''@@ 
#In ~FocusMax's Telescope setup, select the ACP Telescope Hub (ASCOM) as the telescope type. __This is essential!__ If you try to use ~FocusMax as a hub between ACP and your scope, then ACP will not be aware of the slews performed by ~FocusMax and will not be able to track the flip state of German mounts. In addition, if you are using the ACP pointing corrector, you will want to give ~FocusMax the benefit of these corrections by attaching it to ACP's hub. ''Do not use ~FocusMax as a telescope hub!'' PWI already knows what is going on with the mount so you needn't be concerned with that.
|~FocusMax has two places where a Chooser window appears. One is for selecting the //focuser// type, the other is for selecting the //telescope// type. In this step you are selecting the //telescope// type. If you can't find the ACP Hub, you are probably looking at the focuser Chooser (which should be set for your specific focuser type).|
#Enable and configure your chosen focus tool for your observatory. This will probably take some effort and time if you're a newcomer to this. Stick with it. The documentation for the focusing programs are minimal, so experiment, read, experiment, and eventually you'll get there. Do this with ACP running and being used as the telescope connection per the above step! 
#Using the included documentation, configure and //test// the focus program for your focuser and ~MaxIm DL. @@color:#ff0;''Do not go any further until you achieve a successful hands-off autofocus with the program!''@@ 
#In ~FocusMax Version 3, select the Open menu, Options (the last menu item in ~FocusMax). In the Options window check the box to ''Send log text to ACP''. In ~FocusMax Version 4, this check box is found from the Open menu Preferences selection, General button. This will cause ~FocusMax's logging to be included in your ACP run logs, a very handy capability for diagnosing focus problems! Close the Options window. ~PlaneWave provides this automatically, so you don't have to set any options. 
#If needed Start ACP and connect to your scope and camera, so it's ready to run and image. 
#Go to ACP's Preferences window, ~AutoFocus tab, and enable ~FocusMax. Leave ~AcquireStar OFF for now.
#Under real skies, run the ''~AutoFocus.vbs'' script from ACP's console. If all is well, you should observe an autofocus cycle being performed successfully. 
#Slew the telescope to several random places in the sky. It's entirely unnecessary to go to Messier objects or bright stars. Again, run the ''~AutoFocus.vbs'' script from ACP's console. If all is well, you should observe an autofocus cycle being performed successfully. 
#If you have a filter wheel and multiple filters, run the ''~FocusOffsets.vbs'' script from the console. See [[Extended Filter Support]]. This will set up ACP to adjust focus between filter changes automatically. 
#You can also optionally enable Adaptive autofocus if you want ACP to focus whenever it thinks it needs to. This is in ACP's Preferences window, ~AutoFocus tab. Fill in the FWHM growth percentage - a good place to start is 50%. This will cause ACP to autofocus whenever the FWHM exceeds 50% above the last autofocus FWHM.  
#If you have narrowband filters, or an unusually sensitive camera or large scope, you can override ACP's focus star selection to use brighter or fainter stars. For more information see [[Extended Filter Support]].
!Routine Use With ACP
Once you have ACP and ~FocusMax set up per the preceding section, using autofocus with ACP is easy. It is recommended that you include periodic autofocus in your observing plans using the #AFINTERVAL directive, but you can force ACP to refocus any time you want. You can also set it to run when your FWHM gets above a certain value (adaptive autofocus). Just a hint: Some people focus way too often. Try reducing the frequency of your autofocus runs.

|!NOTE|
|We've found that starting ~FocusMax by hand, when you start ACP, is best. It doesn't matter which one you start first (ACP or ~FocusMax). Just start ~FocusMax yourself.|

!Known Bad Bright Stars
ACP's logic for selecting a nearby "bright" star can use a file of known bad bright star locations. If the file ~BadBrightStars.txt exists in ACP's config file folder (''Public Documents\ACP Config''), ACP will read its list of RA/Dec coordinates. If any candidate stars lie within 5 arc minutes of a coordinate set in that file, those stars will be ignored. Use this to prevent ACP from using stars you discover are ill-suited for autofocus (doubles, in crowded field, etc.). 

The format of the ''~BadBrightStars.txt'' file is plain ASCII text. A semicolon starts a comment; the semicolon and everything to the right on the line is ignored. Blank lines are OK and are ignored. A live line consists of a right ascension value, a ''TAB'', and then a declination. In other words, the file is tab-delimited. The RA and Dec values may be in decimal or sexagesimal, and a wide variety of sexagesimal formats are OK.

ACP run logs include the RA/Dec of the selected star for autofocus, so if you suspect a bad star caused a focus failure, you can get the RA/Dec of the star, then go take an image at that location. If the star is indeed bad, add it to your list.
----
It is highly recommended that you read through Jim ~McMillan's excellent [[Autoguiding]] paper right now. Jim has a great deal of experience with high-precision unattended autoguiding using ACP, and he is largely responsible for the advanced capabilities of ACP's smart-start autoguiding. After you read it, go to the ACP Help file and start with Smart Autoguiding Setup in the Help file section, "//~Auto-Guiding Your Mount//."
Acquires sky flats using the "minimum gradient" position in the sky. This position is on the solar circle near the zenith, offset in the anti-solar direction by 15 degrees. This should be "close enough" for most uses, including precision photometry. For more information and the theory behind this selection, see "[[The Flat Sky: Calibration and Background Uniformity in Wide-Field Astronomical Images]]", Chromey & Hasselbacher, PASP 108: 944-949, October 1996.
|NOTE:  Before using ACP's automatic sky-flat system, be certain to read Using Automatic Sky Flats. It won't work unless you set it up once for your system and prepare at least one flat plan. In particular, see the Getting Started section. ACP's automatic sky-flat capabilities are incredibly powerful, so if you are interested in automating sky-flats, do read about it!|
~AutoFlat.vbs normally runs only under control of the observing system. In this normal mode of usage it expects to find a default/standard flat plan in your Plans folder (typically My Documents/ACP Astronomy/Plans): 
*~AutoFlat.vbs will look in your default plans folder for a file ''defaultflat.txt''. If it is found, ~AutoFlat.vbs will use it as a flat plan at both dawn and dusk.
*At dusk, ~AutoFlat.vbs will look in your default plans folder for a file ''defaultduskflat.txt''. If it is found, ~AutoFlat.vbs will use it as the dusk flat plan.
*At dawn, ~AutoFlat.vbs will look in your default plans folder for a file ''defaultdawnflat.txt''. If it is found, ~AutoFlat.vbs will use it as the dawn flat plan.
*//(advanced users//) ~AutoFlat.vbs will look in your default plans folder for a file ''runflatplanonce.txt''. If this file is found, the first line in the file is read and used as the full path/name to the actual flat plan file, then //runflatplanonce.txt is deleted// (hence the name!). The first line of runflatplanonce.txt must contain the full path/name to the desired flat plan file. No folder searching is performed.
*//(advanced users)// ~If ~AutoFlat.vbs is run directly by you, and none of the above default plans or runplanonce have been found, it will display a file-open window so you can choose the flat plan you want it to use. 
*//(advanced users)// If ~AutoFlat.vbs is started from another script via the ''Util.~ChainScript()'' method, and the chaining script previously set the ''Util.~ChainParameter'' property to the name or the full path/name of the flat plan file, ~AutoFlat.vbs will start running that flat plan immediately. If only the flat plan's file name is given, ~AutoFlat.vbs will look in the user's default plans folder for that flat plan file and if found, it will be run. 
|NOTE:: Until you get familiar with the flexibility and degrees of freedom that flat planning can provide, it is ''strongly recommended'' that you prepare one standard flat set for general use, called ''defaultflat.txt'', put it into your default plans folder, and use the #DUSKFLATS and #DAWNFLATS directives in your ACP observing plans. It's going to take you some time to determine the optimum ordering for your filter/binning combinations to make the best use of the twilight sky window available for sky-flats.|

Here are all the [[Standard ACP Scripts]].
----
This script will perform an auto-focus using ~FocusMax. The ~AutoFocus option in ACP Preferences must be enabled, and ~FocusMax must be installed. It simply calls a library function in ~AcquireSupport. If you have ~FocusMax's ~AcquireStar feature enabled, all of its features will be used, otherwise ACP will select a focus star somewhere within a 15 degree radius of the current telescope position, then call ~FocusMax to focus using that star. 

Here are all the [[Standard ACP Scripts]].
----
This script is useful for testing your guider setup with ACP's "smart autoguiding" startup. Position a guide star on the guide sensor with the mount tracking, then run this script. It will immediately do the smart autoguiding startup, choosing the exposure interval for the guide star, then if guiding errors meet limits it will start guiding. At this point, the script displays an OK button and "Press OK to stop guiding." When you press OK, ACP's guiding shutdown logic will run, stopping autoguiding gracefully. The mount will be left with tracking on so that the guide star will remain on the guide sensor.

Here are all the [[Standard ACP Scripts]].
----
|!Close this window after download completes|
{{borderless{
<html><iframe src ="RefDocs/AutoguidingMcMillanNov2005.pdf" scrolling="auto" height="600" width="850">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://brucegary.net/dummies/allonepage.htm]]|
<html><div align="center"><iframe src ="http://brucegary.net/dummies/allonepage.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://nightskypictures.com/index.html]]|
<html><div align="center"><iframe src ="http://nightskypictures.com/index.html" width="100%" align="center" height="600">< /></div></html>}}}
----
<div class='header' macro='gradient vert #18f #04b'>

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

<div class='headerForeground'>
<!-- <span id='searchBar' macro="search"></span>
<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 id='ContentFooter' refresh='content' tiddler='contentFooter'></div>
</div>
/***
Styles used in Share Your Sky! adaptation of ~TiddlyWiki. These must be completely overridden in other themes, as this style sheet is used only with the Default TW styles (StyleSheetLayout and StyleSheetColors).
!!Revision History
<<<
''2006.10.08 [rbd]'' Begin version control
''2006.10.23 [rbd]'' Remove height from <input> and <select>, was scrunching buttons.
''2006.10.24 [rbd]'' Complete telemetry colors
''2006.11.07 [rbd]'' Faint border for sysmon thumbnail, add light tiddler borders (with Checketts fix), use new TW 2.1.x ColorPalette color specs.
''2006.11.21 [rbd]'' Add .collapsedTitle for folded tiddlers
<<<
!Overrides for Standard TW styles
***/
/*{{{*/
body {
 position: static; /*Clint's IE fix part 1 (part 2 in TW now) */
}

/** LOSER ON IE6 without Clint's IE fix (see body section at top!) **/
.tiddler {
 border: 1px solid [[ColorPalette::TertiaryLight]];
 padding-bottom: 8px;
 margin-left: 8px; /* Vastly different on IE vs FireFox! */
 margin-bottom: 12px;
}

.headerForeground {
 padding: 2.5em 0em 1em 1em;
}

.headerShadow {
 padding: 2.5em 0em 1em 1em;
}

#searchBar { 
  float: right; 
  margin-top: 1em;
  margin-right: 1em; 
  font-size: 0.9em; 
} 
#searchBar .button { 
  margin-right: 0.5em; 
  border: none; 
}

.viewer input {
 font-family: "Lucida Console","Courier New",Courier,monospace;
 font-size: 1.0em;
}

.viewer select {
 font-family: "Lucida Console","Courier New",Courier,monospace;
 font-size: 1.0em;
}


.viewer .sortheader {
 font-weight: normal;
}

.viewer .filelist table {
 margin_bottom: 0px;
}

.viewer .fileList tr {
 border: none;
}

.viewer .fileList td, 
.viewer .fileList th {
 border: 0; 
 padding: 2px 8px 2px 8px;
} 

.viewer .noBorder table,
.viewer .noBorder th,
.viewer .noBorder tr,
.viewer .noBorder td {
 border: 0;
}

.viewer .noBorder #sm_thumb { /* For sysmon thumbnail */
 border: 1px solid #eee;
 padding: 0px;
}

.viewer iframe {
 border: 1px dashed blue;
}

textarea {
 font-family:courier !important;
}

.tagged {
 display:none;
}
/*}}}*/
/***
!Special style for folded tiddlers
***/
/*{{{*/
.collapsedTitle {
 color: #888;
 font-size: 1.3em;
 font-weight: bold;
}
/*}}}*/
/***
!System Status Display Styles
***/
/*{{{*/
div.progBarBg {
 position:relative;
 height:0.75em;
 background-color: [[ColorPalette::SecondaryPale]];
}

div.progBarFg {
 position:absolute;
 overflow: hidden;
 height: 0.75em;
 width:0px;
 background-color: [[ColorPalette::SecondaryDark]];
}

td.telemetry {
 font-family: "Lucida Console","Courier New",Courier,monospace;
 font-size: 1em;
 background-color: [[ColorPalette::SecondaryPale]];
 white-space: pre;
 color: [[ColorPalette::TertiaryLight]]; /* "off" state overridden by inner <span> tags */
}

span.telemActive { color: [[ColorPalette::Foreground]]; }
span.telemWarn { color: red; }
span.telemOff { color: [[ColorPalette::TertiaryLight]]; } /* Match color in td.telemetry */

td.telemlabel {
 white-space: nowrap;
}

textarea.scriptlog {
 border: 1px solid #18f;
 margin: 0; padding: 0.5em;
 background: [[ColorPalette::SecondaryPale]];
 color: black;
 font-family: "Lucida Console","Courier New",Courier,monospace !important;
 font-size: 8pt !important;
 white-space: pre;
 line-height: 110%;
}

sidebar borders to 1px. Added Clint Checketts' IE CSS hack to permit the .tiddler CSS to work correctly. How'd he EVER figure that out?
''2006.09.30 [rbd]'' Fix "dotted-line removal" change above so buttons in viewer don't change size when highlighted. This made flickering buttons! Improve table colors in general, fix appearance of sortable table headers, add custom fileList class for the file list tables used in ~SyS.
''2006.10.08 [rbd]'' Much more work over last 10 days, add styles for System Monitor.
''2006.10.23 [rbd]'' Remove height from <input> and <select>, was scrunching buttons. Style <input> and <select> colors to match the rest. OOPS, looks like hell on IE.
''2006.10.27 [rbd]'' Fix colors of SelectThemePlugin button and popup highlight. See inline comments for location.
''2006.10.31 [rbd]'' Reorganize.
''2006.11.07 [rbd]'' Faint border for sysmon thumbnail
''2006.11.21 [rbd]'' Add .collapsedTitle for folded tiddlers
<<<
!Colors Used
*@@bgcolor(#ff7f00):color(#000): #ff7f00@@
*@@bgcolor(#ffbf00):color(#000): #ffbf00@@
*@@bgcolor(#fff):color(#000): #fff@@
*@@bgcolor(#4c4c4c):color(#fff): #4c4c4c@@
*@@bgcolor(#5f5f5f):color(#fff): #5f5f5f@@
*@@bgcolor(#333):color(#fff): #333@@
*@@bgcolor(#666):color(#fff): #666@@
*@@bgcolor(#000030):color(#fff): #000030@@
*@@bgcolor(#000080):color(#fff): #000080@@
*@@bgcolor(#000):color(#fff): #000@@
*@@bgcolor(#000040):color(#fff): #000040@@
*@@bgcolor(#888):color(#fff): #888@@
*@@bgcolor(#ddd):color(#000): #ddd@@
*@@bgcolor(#ffe72f):color(#000): #ffe72f@@
*@@bgcolor(#300000):color(#fff): #300000@@
*@@bgcolor(#600000):color(#fff): #600000@@
*@@bgcolor(#ffffcc):color(#000): #ffffcc@@
*@@bgcolor(#fffacd):color(#000): #fffacd@@

!Generic Layout Rules 
***/
/*{{{*/
body {
 background: #303060;
 position: static; /*Clint's IE fix part 1 (part 2 in TW now) */
}

textarea {
 font-family: courier !important; /* Fixed point font for editing */
}


.title{
 color: #fffacd;
 border-bottom: 1px dashed #333;
}

.subtitle {
 color: #666;
}

.collapsedTitle {
 color: #888;
 font-size: 1.3em;
 font-weight: bold;
}

h1, h2, h3, h4, h5 {
 color: #fffacd;
 background-color: #000040;
 border-top: 1px solid #333;
 border-bottom: 1px solid #333;
}
/*}}}*/
/***
!Link styles
***/
/*{{{*/
a,
a.button,
#mainMenu a.button,
#sidebarOptions .sliderPanel a {
 color: #ffbf00;
 border: 0;
}
a:hover,
a.button:hover,
#mainMenu a.button:hover,
#sidebarOptions .sliderPanel a:hover
#sidebarOptions .sliderPanel a:active {
 color: #ff7f00;
 border: 0;
 border-bottom: #ff7f00 1px dashed;
 background: transparent;
 text-decoration: none;
}

#sidebarOptions a {
 margin: 0;
 color: #ffbf00;
 border: 0;
}

#sidebarOptions a:active {
 color: #ffbf00;
 background-color: transparent;
}

#sidebarOptions a:hover {
 color: #4c4c4c;
 background-color: #ffbf00;
}

#sidebarTabs .tabContents a, 
#popup a {
 color: #ffbf00;
}

#messageArea a:link,
#messageArea a:visited {
 color: #ffbf00;
 text-decoration: none;
}

#messageArea a:hover, 
#messageArea a:active {
 color: #ff7f00;
}

#messageArea .messageToolbar a {
 border: 1px solid #ffbf00;
 background: #4c4c4c;
}

.headerForeground a {
 color: #fff;
}

.toolbar a.button {
 border: 0;
}

.editorFooter a {
 border: 0;
}
/*}}}*/
/***
!Header styles
***/
/*{{{*/
.header{
 border-bottom: 1px solid #ffbf00;
 color: #fff;
}

.header a:hover {
 border-bottom: 1px dashed #fff;
}

.headerForeground, 
.headerShadow {
 padding: 2.5em 0em 1em 1em;
}

#searchBar { 
  float: right; 
  margin-top: 1em;
  margin-right: 1em; 
  font-size: 0.9em; 
} 
#searchBar .button { 
  margin-right: 0.5em; 
  border: none; 
}

/*}}}*/
/***
!Main menu styles
***/
/*{{{*/
#mainMenu {
 color: #fff;
}

#mainMenu h1 {
 font-size: 1.1em;
}

#mainMenu li,
#mainMenu ul {
 list-style: none;
 margin: 0;
 padding: 0;
}
/*}}}*/
/***
!Sidebar styles 
***/
/*{{{*/
#sidebar {
 right: 0;
 color: #fff;
 border: 1px solid #ffbf00;
 border-width: 0 0 1px 1px;
}

#sidebarOptions {
 background-color: #4c4c4c;
 padding: 0;
}


#sidebarOptions .sliderPanel {
 background-color: #333;
 margin: 0;
}

#sidebarOptions input {
 border: 1px solid #ffbf00;
 background-color: #ffffcc;
}

#sidebarTabs .tabUnselected:hover,
#sidebarTabs .tabContents {
 background-color: #666;
}

#sidebarOptions .highlight {
 color: #4c4c4c;
 background-color: #ffbf00;
}

.listTitle {
 color: #fff;
}


/* Special for SelectThemePlugin when 
 leaving popup open and mousing away*/
#sidebarTabs {
 background-color: #4c4c4c;
}

#sidebarTabs .tabSelected {
 padding: 3px 3px;
 cursor: default;
 color: #ffbf00;
 background-color: #666;
}

#sidebarTabs .tabUnselected {
 color: #ffbf00;
 background-color: #5f5f5f;
 padding: 0 4px;
}

#sidebarTabs .tabContents a:hover {
 color: #ff7f00;
 background: transparent;
}

#sidebarTabs .txtMoreTab .tabUnselected {
 color: #ffbf00;
 background: #5f5f5f;
}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents {
 color: #ffbf00;
 background: #4c4c4c;
}

/*}}}*/
/***
!General tab styles
***/
/*{{{*/

.tab.tabUnselected {
 background-color: #666;
}

.tab.tabSelected,
.tab.tabSelected:hover {
 color: #ffbf00;
 border: 0;
 background-color: #4c4c4c;
 cursor: default;
}

.tab.tabUnselected:hover {
 color: #ffbf00;
 border: 0;
 background-color: #4c4c4c;
}

.tabContents {
 background-color: #4c4c4c;
 border: 0;
}

.tabContents .tabUnselected{
 background: #5f5f5f;
}

.tabContents .tab:hover, 
.tabContents .tabContents, 
.tabContents .tabSelected {
 background: #666;
}

/*}}}*/
/***
!Message area styles
***/
/*{{{*/
#messageArea {
 background-color: #666;
 color: #fff;
 border: 2px solid #ffbf00;
}


/*}}}*/
/***
!Popup styles 
***/
/*{{{*/
#popup {
 color: #fff;
 background-color: #4c4c4c;
 border: 1px solid #ffbf00;
}

#popup a:hover {
 background: transparent;
 color: #ff7f00;
 border: 0;
}

#popup hr {
 color: #ffbf00;
 background: #ffbf00;
}

/* Special for SelectTheme popmenu */
#popup .currentlySelected {
 color: #4c4c4c;
 background: #ffbf00;
}
/*}}}*/
/***
!Tiddler Display styles
***/
/*{{{*/
/** LOSER ON IE6 without Clint's IE fix (see body section at top!) **/
.tiddler {
 background: #000030;
 border: 1px solid #000080;
 padding-bottom: 8px;
 margin-left: 8px; /* Vastly different on IE vs FireFox! */
 margin-bottom: 12px;
}

#displayArea .button.highlight {
 color: #ffbf00;
 background: #4c4c4c;
}


.tiddler .button {
 color: #888;
}

.tiddler .button:hover,
.tiddler .button:active {
 color: #ffbf00;
 background-color: #4c4c4c;
 border-bottom: 1px solid #4c4c4c; /* No dotted line in buttons */
}

.viewer {
 color: #FFF;
}

.viewer table{
 background: transparent;
 color: #fff;
 border: 1px solid;
}

.viewer th {
 background-color: #4c4c4c;
 color: #fff;
}

.viewer hr {
 color: #666;
}

.viewer input, 
.viewer select {
 font-family: "Lucida Console","Courier New",Courier,monospace;
 font-size: 1.0em; 
/** Looks bad on IE6
 padding-left:4px;
 color: #ddd;
 background-color: #4c4c4c;
 border: 1px solid #ffbf00;
**/
}

.viewer .sortheader {
 font-weight: normal;
}

.viewer pre, 
.viewer code {
 color: #ddd;
 background-color: #4c4c4c;
 border: 1px solid #ffbf00;
}

.viewer .button:hover,
.viewer .button:active {
 border: 1px solid #4c4c4c; /* Needed to avoid button size changing */
}

.viewer .fileList table {
 border-color: #ff7f00;
 margin-bottom: 0px;
}

/* For Share your Sky only */
.viewer .fileList tr {
 border: none;
}

.viewer .fileList td, 
.viewer .fileList th {
 border: 0;
 padding: 2px 8px 2px 8px;
}
 
.viewer .noBorder table,
.viewer .noBorder th,
.viewer .noBorder tr,
.viewer .noBorder td, 
.viewer iframe {
 border: 0;
}

.viewer .noBorder #sm_thumb { /* For sysmon thumbnail */
 border: 1px solid #000080;
 padding: 0px;
}

/* End Share Your Sky */

.toolbar {
 color: #4c4c4c;
}

.footer {
 color: #ddd;
}

.selectedTiddler .footer {
 color: #888;
}

.editor textarea, 
.editor input {
 border: 1px solid #ffbf00;
 background-color: #ffffcc;
}

.editorFooter {
 color: #aaa;
}

.tab{
 -moz-border-radius-topleft: 3px;
 -moz-border-radius-topright: 3px;
}

.tagging,
.tagged {
 background: #4c4c4c;
 border: 1px solid #4c4c4c;
}

.selected .tagging,
.selected .tagged{
 background: #000;
 border: 1px solid #ffbf00;
}

.tagging .button,
.tagged .button{
 color: #ffbf00;
 border: 0;
 padding: 0;
}

.tagging .button:hover,
.tagged .button:hover{
 background: transparent;
}

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

.tagClear{
 margin-top: 1em; /* clear: both; Clint's IE fix part 2 now in TW 2.1.2 */
}

.highlight, 
.marked {
 background-color: #000080;
 color: #ffffff;
}

.cascade {
 background: #4c4c4c;
 color: #ddd;
 border: 1px solid #ffbf00;
}

.twocolumns { display:block; -moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%;}

/*}}}*/
/***
!XP ~NavBar Style Overrides
***/
/*{{{*/
.topItem {
 background: url("im/fire-classic-up.png") no-repeat 0 0;
 color: #ffbf00;
}

.topItemOver {
 background: url("im/fire-classic-up-on.png") no-repeat 0 0;
 color: #ffffff;
}

.topItemClose {
 background: url("im/fire-classic-down.png") no-repeat 0 0;
 color: #ffbf00;
}

.topItemCloseOver {
 background: url("im/fire-classic-down-on.png") no-repeat 0 0;
 color: #ffffff;
}

.subItem, 
.subSubItem, 
.subItemOver, 
.subSubItemOver {
 color: #ffffff;
}

.dropMenu {
 background-color: #4c4c4c;
 color: #000;
 border: 1px solid;
 border-color: #4c4c4c #ff7f00 #ff7f00 #ff7f00;
}
/*}}}*/
/***
!System Status Display Styles
***/
/*{{{*/
div.progBarBg {
 position: relative;
 height: 0.75em;
 background-color: #300000;
}

div.progBarFg {
 position: absolute;
 overflow: hidden;
 height: 0.75em;
 width: 0px;
 background-color: #ff7f00;
}

td.telemetry {
 font-family: "Lucida Console","Courier New",Courier,monospace;
 font-size: 1em;
 background-color: #300000;
 white-space: pre;
 color: #600000;
 // "off" state overridden by inner <span> tag: s;
}

span.telemActive {
 color: #ccccff;
}

span.telemWarn {
 color: #ff0000;
}

span.telemOff {
 color: #600000; /* Match color in td.telemetry */
}

td.telemlabel {
 white-space: nowrap;
}

textarea.scriptlog {
 border: 1px solid #ffbf00;
 margin: 0;
 padding: 0.5em;
 background: #300000;
 color: #ffffff;
 font-family: "Lucida Console","Courier New",Courier,monospace !important;
 font-size: 1em !important;
 white-space: pre;
 line-height: 110%;
}

/*}}}*/
/***
!Footer styles /% ============================================================= %/
***/
/*{{{*/

#ContentFooter {background:#000; color:#0f0; clear:both; padding:0.5em 1em; text-align:center;}
#ContentFooter a {color: #fff; border-bottom: 10px dotted #000;}
#ContentFooter a:hover { color: #fff; background-color:#000;}
/*}}}*/

/***
!Horizontal Main Menu Style Mods /% ============================================================= %/
***/
/*{{{*/

#displayArea { margin: 1em 15.5em 0em 1em; /* neutralize default margins */ }

#mainMenu {
	position: static; width: auto; /* neutralize default settings */
	overflow: auto; /* contain floats */ border-bottom: 1px solid #303060; padding: 0;
	text-align: left; color: #c000f0; background-color: #303060; font-size: 0.8em; }

#mainMenu a,
#mainMenu .button,
#mainMenu .tiddlyLink { display: block; float: left; margin: 0; padding: 0.2em 0.75em;
	                font-size: 1.15em; font-weight: bold; color: #8080f0; }

#mainMenu a:hover,
#mainMenu .button:hover,
#mainMenu .tiddlyLink:hover { background-color: #303060; color: #ff7f00; }

#mainMenu br { 	display: none; }

/*}}}*/
/***
|Name|BreadcrumbsPlugin|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.1.4|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|list/jump to tiddlers viewed during this session plus "back" button/macro|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Documentation
<<<
see [[BreadcrumbsPluginInfo]]
<<<
!!!!!Configuration
<<<
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
<<option chkBreadcrumbsSave>> prompt to save breadcrumbs when 'Home' link is pressed
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order (most recent first)
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items

<<<
!!!!!Revisions
<<<
2011.02.16 2.1.4 in refresh(), use 'inline' instead of 'block' style (avoids unwanted linebreak).  In previousTiddler(), allow handling even if not in a tiddler so that back button can be placed in ~MainMenu or ~SidebarOptions.
| Please see [[BreadcrumbsPluginInfo]] for previous revision details |
2006.02.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.BreadcrumbsPlugin= {major: 2, minor: 1, revision: 4, date: new Date(2011,2,16)};

var defaults={
	chkShowBreadcrumbs:		true,
	chkReorderBreadcrumbs:		true,
	chkCreateDefaultBreadcrumbs:	true,
	chkShowStartupBreadcrumbs:	false,
	chkBreadcrumbsReverse:		false,
	chkBreadcrumbsLimit:		false,
	txtBreadcrumbsLimit:		5,
	chkBreadcrumbsLimitOpenTiddlers:false,
	txtBreadcrumbsLimitOpenTiddlers:3,
	chkBreadcrumbsHideHomeLink:	false,
	chkBreadcrumbsSave:		false,
	txtBreadcrumbsHomeSeparator:	' | ',
	txtBreadcrumbsCrumbSeparator:	' > '
};
for (var id in defaults) if (config.options[id]===undefined)
	config.options[id]=defaults[id];

config.macros.breadcrumbs =  {
	crumbs: [], // the list of current breadcrumbs
	askMsg: "Save current breadcrumbs before clearing?\n"
		+"Press OK to save, or CANCEL to continue without saving.",
	saveMsg: 'Enter the name of a tiddler in which to save the current breadcrumbs',
	saveTitle: 'SavedBreadcrumbs',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var area=createTiddlyElement(place,"span",null,"breadCrumbs",null);
		area.setAttribute("homeSep",params[0]||config.options.txtBreadcrumbsHomeSeparator);
		area.setAttribute("crumbSep",params[1]||config.options.txtBreadcrumbsCrumbSeparator);
		this.render(area);
	},
	add: function (title) {
		var thisCrumb = title;
		var ind = this.crumbs.indexOf(thisCrumb);
		if(ind === -1)
			this.crumbs.push(thisCrumb);
		else if (config.options.chkReorderBreadcrumbs)
			this.crumbs.push(this.crumbs.splice(ind,1)[0]); // reorder crumbs
		else
			this.crumbs=this.crumbs.slice(0,ind+1); // trim crumbs
		if (config.options.chkBreadcrumbsLimitOpenTiddlers)
			this.limitOpenTiddlers();
		this.refresh();
		return false;
	},
	getAreas: function() {
		var crumbAreas=[];
		// find all DIVs with classname=="breadCrumbs"
		var all=document.getElementsByTagName("*");
		for (var i=0; i<all.length; i++)
			try{ if (hasClass(all[i],"breadCrumbs")) crumbAreas.push(all[i]); } catch(e) {;}
		// or, find single DIV w/fixed ID (backward compatibility)
		var byID=document.getElementById("breadCrumbs")
		if (byID && !hasClass(byID,"breadCrumbs")) crumbAreas.push(byID);
		if (!crumbAreas.length && config.options.chkCreateDefaultBreadcrumbs) {
			// no crumbs display... create one
			var defaultArea = createTiddlyElement(null,"span",null,"breadCrumbs",null);
		 	defaultArea.style.display= "none";
			var targetArea= document.getElementById("tiddlerDisplay");
		 	targetArea.parentNode.insertBefore(defaultArea,targetArea);
			crumbAreas.push(defaultArea);
		}
		return crumbAreas;
	},
	refresh: function() {
		var crumbAreas=this.getAreas();
		for (var i=0; i<crumbAreas.length; i++) {
			crumbAreas[i].style.display = config.options.chkShowBreadcrumbs?"inline":"none";
			removeChildren(crumbAreas[i]);
			this.render(crumbAreas[i]);
		}
	},
	render: function(here) {
		var co=config.options; var out=""
		if (!co.chkBreadcrumbsHideHomeLink) {
			createTiddlyButton(here,"Clear List",null,this.home,"tiddlyLink tiddlyLinkExisting");
			out+=here.getAttribute("homeSep")||config.options.txtBreadcrumbsHomeSeparator;
		}
		for (c=0; c<this.crumbs.length; c++) // remove non-existing tiddlers from crumbs
			if (!store.tiddlerExists(this.crumbs[c]) && !store.isShadowTiddler(this.crumbs[c]))
				this.crumbs.splice(c,1);
		var count=this.crumbs.length;
		if (co.chkBreadcrumbsLimit && co.txtBreadcrumbsLimit<count) count=co.txtBreadcrumbsLimit;
		var list=[];
		for (c=this.crumbs.length-count; c<this.crumbs.length; c++) list.push('[['+this.crumbs[c]+']]');
		if (co.chkBreadcrumbsReverse) list.reverse();
		out+=list.join(here.getAttribute("crumbSep")||config.options.txtBreadcrumbsCrumbSeparator);
		wikify(out,here);
	},
	home: function() {
		var cmb=config.macros.breadcrumbs;
		if (config.options.chkBreadcrumbsSave && confirm(cmb.askMsg)) cmb.saveCrumbs();
		story.closeAllTiddlers(); restart();
		cmb.crumbs = []; var crumbAreas=cmb.getAreas();
		for (var i=0; i<crumbAreas.length; i++) crumbAreas[i].style.display = "none";
		return false;
	},
	saveCrumbs: function() {
		var tid=prompt(this.saveMsg,this.saveTitle); if (!tid||!tid.length) return; // cancelled by user
		var t=store.getTiddler(tid);
		if(t && !confirm(config.messages.overwriteWarning.format([tid]))) return;
		var who=config.options.txtUserName;
		var when=new Date();
		var text='[['+this.crumbs.join(']]\n[[')+']]';
		var tags=t?t.tags:[]; tags.pushUnique('story');
		var fields=t?t.fields:{};
		store.saveTiddler(tid,tid,text,who,when,tags,fields);
		story.displayTiddler(null,tid);
		story.refreshTiddler(tid,null,true);
		displayMessage(tid+' has been '+(t?'updated':'created'));
	},
	limitOpenTiddlers: function() {
		var limit=config.options.txtBreadcrumbsLimitOpenTiddlers; if (limit<1) limit=1;
		for (c=this.crumbs.length-1; c>=0; c--) {
			var tid=this.crumbs[c];
			var elem=story.getTiddler(tid);
			if (elem) { // tiddler is displayed
				if (limit <=0) { // display limit has been reached
					if (elem.getAttribute("dirty")=="true") { // tiddler is being edited
						var msg= "'"+tid+"' is currently being edited.\n\n"
							+"Press OK to save and close this tiddler\n"
							+"or press Cancel to leave it opened";
						if (confirm(msg)) {
							story.saveTiddler(tid);
							story.closeTiddler(tid);
						}
					}
					else story.closeTiddler(this.crumbs[c]);
				}
				limit--;
			}
		}
	}
};
//}}}
// // PreviousTiddler ('back') command and macro
//{{{
config.commands.previousTiddler = {
	text: 'back',
	tooltip: 'view the previous tiddler',
	handler: function(event,src,title) {
		var crumbs=config.macros.breadcrumbs.crumbs;
		if (crumbs.length<2) config.macros.breadcrumbs.home();
		else story.displayTiddler(story.findContainingTiddler(src),crumbs[crumbs.length-2]);
		return false;
	}
};
config.macros.previousTiddler= {
	label: 'back',
	prompt: 'view the previous tiddler',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var label=params.shift(); if (!label) label=this.label;
		var prompt=params.shift(); if (!prompt) prompt=this.prompt;
		createTiddlyButton(place,label,prompt,function(ev){
			return config.commands.previousTiddler.handler(ev,this)
		});
	}
}
//}}}
// // HIJACKS
//{{{
// update crumbs when a tiddler is displayed
if (Story.prototype.breadCrumbs_coreDisplayTiddler==undefined)
	Story.prototype.breadCrumbs_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler) {
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	this.breadCrumbs_coreDisplayTiddler.apply(this,arguments);
	if (!startingUp || config.options.chkShowStartupBreadcrumbs)
		config.macros.breadcrumbs.add(title);
}

// update crumbs when a tiddler is deleted
if (TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler==undefined)
	TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler=TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler= function() {
	this.breadCrumbs_coreRemoveTiddler.apply(this,arguments);
	config.macros.breadcrumbs.refresh();
}
//}}}
/***
|Name|BreadcrumbsPluginInfo|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.1.4|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|Documentation for BreadcrumbsPlugin|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Usage
<<<
{{{
<<breadcrumbs homeSeparator crumbSeparator>>
}}}
By default, the breadcrumbs are displayed as a continuous, //horizontal// word-wrapped line of text, using default character sequences for ''homeSeparator'' (" | ") and ''crumbSeparator'' (" > ").  The //optional// ''homeSeparator'' and ''crumbSeparator'' macro parameters allow you to specify alternative separators.  For example, to display the breadcrumbs //vertically// (in a stack, rather than a row), set the separator values to use {{{[[<br>]]}}}... and, to display a horizontal line as the home separator, use {{{[[<html><hr></html>]]}}}.
{{{
<<previousTiddler>>
}}}
This macro embeds a 'back' button in your content.  Clicking the button opens/scrolls to the most recent previously viewed tiddler.  You can also add the {{{previousTiddler}}} keyword to the ~ViewToolbar slice definition in ToolbarCommands.  This adds a 'back' button directly to the toolbar of each tiddler that is displayed.
<<<
!!!!!Examples:
<<<
{{{
<<breadcrumbs>>
}}}
<<breadcrumbs>>
{{{
<<breadcrumbs [[<html><hr></html>]] [[<br>]]>>
}}}
<<breadcrumbs [[<html><hr></html>]] [[<br>]]>>
<<<
!!!!!Customization
<<<
Using CSS and a few of the plugin configuration options (see below), you can make the breadcrumbs display resemble browser tabs by adding the following to your [[StyleSheet]]:
{{{
.breadCrumbs { border-bottom:1px solid; }
.breadCrumbs a {
	border: 1px solid; padding: 0px 1em;
	-moz-border-radius-topleft:.5em; -moz-border-radius-topright:.5em;
	-webkit-border-top-left-radius:.5em; -webkit-border-top-right-radius:.5em;
}
}}}
and this in [[ConfigTweaks]] (tagged with systemConfig, of course):
{{{
config.options.chkShowStartupBreadcrumbs=true;
config.options.chkBreadcrumbsLimitOpenTiddlers=true;
config.options.txtBreadcrumbsLimitOpenTiddlers=1;
config.macros.breadcrumbs.homeSeparator=" ";
config.macros.breadcrumbs.crumbSeparator=" ";
}}}
<<<
!!!!!Configuration
<<<
__''display placement:''__
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
{{{<<option chkCreateDefaultBreadcrumbs>>}}}
>By default, the plugin automatically creates the "breadCrumbs" display element at the top of the story column, just above the tiddlerDisplay area.  To manually control the display and placement of the breadcrumbs display, you can define a DIV with class="breadCrumbs" in a custom [[PageTemplate]] or embed the {{{<<breadcrumbs>>}}} macro in specific tiddler content.
>
>For example, to add the breadcrumbs below the mainMenu, change this:
{{{
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
}}}
>to:
{{{
<div id='mainMenu'>
	<div refresh='content' tiddler='MainMenu'></div>
	<div id='breadCrumbs' class='breadCrumbs'></div>
</div>
}}}
>You can also block automatic creation of the breadcrumbs display by setting
{{{
config.options.chkCreateDefaultBreadcrumbs=false;
}}}
>in a [[CookieJar]]/[[ConfigTweaks]] plugin tiddler.

__''other settings:''__
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
{{{<<option chkShowBreadcrumbs>>}}}
>This checkbox toggles the visibility of the breadcrumbs display.  However, the display is not updated until the next crumb is added (or a previous crumb is clicked on).  For immediate effect, you can use [[ToggleBreadcrumbs]] to synchronize the checkbox setting and the breadcrumbs display.
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
{{{<<option chkReorderBreadcrumbs>>}}}
>When visiting a previously viewed tiddler, the title of the most-recently displayed tiddler is simply moved to the end of the list and individual breadcrumbs are not removed from the list unless the underlying tiddler is deleted.  When ''re-ordering'' is disabled, the breadcrumbs list is ''trimmed'' so that all crumbs following that tiddler are removed from the list.
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
{{{<<option chkBreadcrumbsHideHomeLink>>}}}
>Enabling this option suppresses the automatic display of the "Home" link (and home separator).  To manually add the home link elsewhere in your document, use the following HTML:
{{{
<html><a href="javascript:;" onclick="config.macros.breadcrumbs.home()">home</a></html>
}}}
<<option chkBreadcrumbsSave>> prompt to save breadcrumbs when 'Home' link is pressed
{{{<<option chkBreadcrumbsSave>>}}}
>Whenever you press the 'home' button, you can be prompted to save the current breadcrumbs in a tiddler as a space-separated list of tiddler links (default title="SavedBreadcrumbs").  
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
{{{<<option chkShowStartupBreadcrumbs>>}}}
>Breadcrumbs are usually only added for tiddlers that are opened after the document has been loaded, and not for tiddlers displayed during initial startup (e.g., [[DefaultTiddlers]]).  Enabling this option displays breadcrumbs for all viewed tiddlers, regardless of when they are opened.
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order
{{{<<option chkBreadcrumbsReverse>>}}}
>As tiddlers are displayed, breadcrumbs are usually added to the //end// of the list.  Enabling this option displays breadcrumbs in reverse order, so that the most recently visited tiddlers are listed first.
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
{{{<<option chkBreadcrumbsLimit>>}}} and {{{<<option txtBreadcrumbsLimit>>}}}
>By default, breadcrumbs are displayed for all tiddlers that have been visited (unless the list is being 'trimmed' by disabling the chkReorderBreadcrumbs option above).  Enabling this option limits the display of the list to a maximum specified number of breadcrumbs.
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items
{{{<<option chkBreadcrumbsLimitOpenTiddlers>>}}} and {{{<<option txtBreadcrumbsLimitOpenTiddlers>>}}}
>By default, tiddlers remain open (e.g., displayed in the story column) until you explicitly close them.  When this option is enabled, only the most recently opened tiddlers will remain open: ''any tiddlers in excess of the specified limit are automatically closed.''  //Note: for 'data safety', if a tiddler is being edited, you will be asked for permission to "save-and-close" that tiddler or leave it open (even if that would exceed the specified limit).//
<<<
!!!!!Revisions
<<<
2011.02.16 2.1.4 in refresh(), use 'inline' instead of 'block' style (avoids unwanted linebreak).  In previousTiddler(), allow handling even if not in a tiddler so that back button can be placed in ~MainMenu or ~SidebarOptions.
2010.11.30 2.1.3 use story.getTiddler()
2009.10.19 2.1.2 code reduction
2009.03.22 2.1.0 added 'save breadcrumbs to tiddler' feature
2008.05.01 2.0.0 added 'limit open tiddlers' feature (with safety check for tiddler in edit mode)
2008.04.06 1.9.1 corrected 'limit' logic so that //last// N crumbs are shown instead of //first// N crumbs.  Also, added chkBreadcrumbsHideHomeLink
2008.04.04 1.9.0 added chkBreadcrumbsReverse and chk/txtBreadcrumbsLimit
2008.03.29 1.8.4 in displayTiddler(), get title from tiddler object (if needed).  Fixes errors caused when calling function passes a tiddler *object* instead of a tiddler *title*
2008.03.24 1.8.3 include shadow tiddlers in breadcrumbs list.  Also changed settings so that "reordering" breadcrumbs is the default, instead of "trimming" the list
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.26 1.8.2 documentation cleanup
2007.10.18 1.8.1 in GetAreas(), use try/catch to avoid "Bad NPObject as private data" fatal error caused when embedded QuickTime player element is accessed by hasClass() function.
2007.10.02 1.8.0 major documentation and code cleanup.  Moved config.breadCrumbs.* to config.macros.breadcrumbs.* to consolidate objects.  Also, fixed homeSeparator and crumbSeparator default handling.
2007.10.02 1.7.0 added config.options.chkShowStartupBreadcrumbs option
2007.09.16 1.6.1 in getAreas(), removed errant use of 'place' (was causing fatal error when creating default breadcrumbs display element).  Also, added chkCreateDefaultBreadcrumbs configuration setting to enable/disable automatic creation of a default breadcrumbs display.
2007.09.16 1.6.0 re-wrote refresh() to enable multiple display instances, by finding elements with "breadCrumbs" classname.  Fallback to fixed ID (="breadCrumbs") is still used for backward-compatibility.  move rendering code from refresh() to separate render() function, and added definition for {{{<<breadCrumbs>>}}} macro to support embedding breadcrumbs displays in tiddler content.
2007.09.15 [1.5.9.1] updated documentation
2007.09.15 1.5.9 defined homeSeparator (" | ") and crumbSeparator (" > ") as object properties so that they can be redefined as desired for different layouts (e.g., using 'newline' for the crumbSeparator will arrange crumbs in a column rather than a row.
2007.06.21 [1.5.8.1] in home(), return false to prevent IE from attempting to navigate away...
2007.05.26 1.5.8 added support for {{{<<option chkReorderBreadcrumbs>>}}} to toggle trim vs. re-order behavior when visiting previously viewed tiddlers
2007.05.25 1.5.7 added support for {{{<<option chkShowBreadcrumbs>>}}} to toggle //display// of breadcrumbs
2007.05.24 1.5.6 in refresh(), remove non-existing tiddler titles from crumb list.  Also, hijack removeTiddler() so crumbs can be updated after tiddler is deleted.
2007.04.11 1.5.5 added optional params to previousTiddler macro handler() to allow alternative label and tooltip text (instead of default "back")
2007.03.02 1.5.4 in refresh(), for TW2.2, look for "storyDisplay" instead of "tiddlerDisplay" but keep fallback to "tiddlerDisplay" for TW2.1 or earlier
2007.02.24 1.5.3 changed from hijack of onClickTiddlerLink to hijack of displayTiddler() so that ALL displayed tiddlers are recorded in the crumbs, including programmatically displayed tiddlers opened by macros, scripts, etc., (such as [[GotoPlugin]], among many others) in addition to those opened by clicks on links.
2007.02.24 [1.5.2.0] eliminated global space clutter by moving function and data declarations so they are contained inside config.breadCrumbs object.
2007.02.06 1.5.1 added "previousTiddler" macro (for use in sidebar)
2007.02.05 1.5.0 added "previousTiddler" toolbar command (aka, "back")
2006.08.04 [1.4.0.1] change spaces to tabs
2006.08.04 1.4.0 modified from 1.4.0 distro: in refresh(), set {{{display:none/block}}} instead of {{{visibility:hidden/visible}}}.  In home(), check for valid crumbArea before setting style.
2006.08.02 1.4.0 Fixed bug, the redefined onClickTiddlerLink_orig_breadCrumbs works incorrectly on IE
2006.07.20 1.3.0 Runs compatibly with TW 2.1.0 (rev #403+)
2006.02.07 1.2.0 change global array breadCrumbs to config.breadCrumbs by Eric's suggestion
2006.02.04 1.1.0 JSLint checked
2006.02.01 1.0.0 initial release
<<<
<!--{{{-->
<div class='header' macro='gradient vert #101020 #303060'>
 <div class='headerShadow'>
 <span id='searchBar' macro="search"></span>
 <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
 <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
 </div>

 <div class='headerForeground'>
<!-- <span id='searchBar' macro="search"></span>
 <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
 <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>  -->
 </div>
</div>

<!-- Added following div for hypergraph applet [[menuGraph]] custom shadow tiddler -->
<div id='menuGraph' refresh='content' tiddler='menuGraph'></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 id='ContentFooter' refresh='content' tiddler='contentFooter'></div>
</div>
<!--}}}-->
/***
!Colors Used in this ~BrightSkies Style Sheet
| !Neutral | @@bgcolor(#fff):color(#000): #ffffff@@ | @@bgcolor(#ddd):color(#000): #dddddd@@ | @@bgcolor(#aaa):color(#000): #aaaaaa@@ | @@bgcolor(#888):color(#fff): #888888@@ | @@bgcolor(#666):color(#fff): #666666@@ | @@bgcolor(#5f5f5f):color(#fff): #5f5f5f@@ | @@bgcolor(#4c4c4c):color(#fff): #4c4c4c@@ | @@bgcolor(#333):color(#fff): #333333@@ | @@bgcolor(#000):color(#fff): #000000@@ |
| !Standard | @@bgcolor(#ffffcc):color(#000): #ffffcc@@ | @@bgcolor(#ffff88):color(#000): #ffff88@@ | @@bgcolor(#ffe72f):color(#000): #ffe72f@@ | @@bgcolor(#ffbf00):color(#000): #ffbf00@@ | @@bgcolor(#ff7f00):color(#000): #ff7f00@@ | @@bgcolor(#f00):color(#000): #f00000@@ | @@bgcolor(#c000f0):color(#fff): #c000f0@@ | @@bgcolor(#00f000):color(#000): #00f000@@ |   |
| !Theme | @@bgcolor(#9090c0):color(#000): #9090c0@@ | @@bgcolor(#8080c0):color(#000): #8080c0@@ | @@bgcolor(#404080):color(#fff): #404080@@ | @@bgcolor(#303060):color(#fff): #303060@@ | @@bgcolor(#202050):color(#fff): #202050@@ | @@bgcolor(#101040):color(#fff): #101040@@ | @@bgcolor(#000030):color(#fff):#000030@@ |   |   |
!Generic Layout Rules 
***/
/*{{{*/
@font-face {
  font-family: 'Xirod';
  src: url('RefDocs/Xirod.ttf') format('truetype');
}

body { 
  background: #303060; 			        /* !!! */
  position: static; 				/*Clint's IE fix part 1 (part 2 in TW now) */ 
}

textarea { 
  font-family: courier !important; 	        /* Fixed point font for editing */ 
}

.title{ 
  color: #fffacd; 
  border-bottom: 1px dashed #333; 
}

.subtitle { 
  color: #666; 
}

.collapsedTitle { 
  color: #888; 
  font-size: 1.3em; 
  font-weight: bold; 
}

h1, h2, h3, h4, h5 { 
  color: #ffff88;
  background-color: #000030;   			/* !!! */
  border-top: 1px solid #000030;		/* !!! */
  border-bottom: 1px solid #000030; 		/* !!! */
}

.tagged { 
  display:none; 
}
/*}}}*/
/***
!Link styles
***/
/*{{{*/
a, 
a.button, 
#mainMenu a.button, 
#sidebarOptions .sliderPanel a {
  color: #ffbf00;  
  border: 0; 
}

a:hover, 
a.button:hover, 
#mainMenu a.button:hover, 
#sidebarOptions .sliderPanel a:hover, 
#sidebarOptions .sliderPanel a:active {
  color: #ff7f00;
  border: 0;
  border-bottom: none;  			/* !!! */
  background: transparent;
  text-decoration: none;
}

#sidebarOptions a {
  margin: 0;
  color: #ffbf00;
  border: 0;
}

#sidebarOptions a:active {
  color: #ffbf00;
  background-color: transparent;
}

#sidebarOptions a:hover {
  color: #4c4c4c;
  background-color: #ffbf00;
}

#sidebarTabs .tabContents a, 
#popup a {
  color: #ffbf00;
}

#messageArea a:link,
#messageArea a:visited {
  color: #ffbf00;
  text-decoration: none;
}

#messageArea a:hover, 
#messageArea a:active {
  color: #ff7f00;
}

#messageArea .messageToolbar a {
  border: 1px solid #ffbf00;
  background: #4c4c4c;
}

.headerForeground a {
  color: #fff;
}

.toolbar a.button {
  border: 0;
}

.editorFooter a {
  border: 0;
}
/*}}}*/
/***
!Header styles
***/
/*{{{*/
.header{
  border-bottom: 1px solid #303060;	        /* !!! */
  color: #fff;
}

.header a:hover {
  border-bottom: none ;  			/* !!! */
}

.headerForeground, 
.headerShadow {
  padding: 2.5em 0em 1em 1em;
}

.siteTitle {
  color: #000030;
  font-family: Xirod; 
  font-size: 3em; 
  text-shadow: 2px -2px 3px white;
}

.siteSubtitle {
  color: #a0a0d0;
}

#searchBar { 
  float: right; 
  margin-top: 1em;
  margin-right: 1em; 
  font-size: 0.9em; 
} 

#searchBar .button { 
  margin-right: 0.5em; 
  border: none; 
}

/*}}}*/
/***
!Main menu styles
***/
/*{{{*/
#mainMenu {
  color: #fff;
}

#mainMenu h1 {
 font-size: 1.1em;
}

#mainMenu li,
#mainMenu ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
/*}}}*/
/***
!Sidebar styles 
***/
/*{{{*/
#sidebar {
  right: 0;
  color: #fff;
  border: 1px solid #000030;
  border-width: 0 0 1px 1px;
}

#sidebarOptions {
  background-color: #202050;
  padding: 0;
}


#sidebarOptions .sliderPanel {
  background-color: #101040;
  margin: 0;
}

#sidebarOptions input {
  border: 1px solid #ffbf00;
  background-color: #ffffcc;
}

#sidebarTabs .tabUnselected:hover,
#sidebarTabs .tabContents {
  background-color: #202050;
}

#sidebarOptions .highlight {
  color: #4c4c4c;
  background-color: #ffbf00;
}

.listTitle {
  color: #8080c0;
}


/* Special for SelectThemePlugin when leaving popup open and mousing away*/
#sidebarTabs {
  background-color: #202050;
}

#sidebarTabs .tabSelected { 
  padding: 3px 3px; 
  cursor: default; 
  color: #ffbf00; 
  background-color: #202050; 
}

#sidebarTabs .tabUnselected { 
  color: #ffbf00; 
  background-color: #303060; 
  padding: 0 4px; 
}

#sidebarTabs .tabContents a:hover { 
  color: #ff7f00; 
  background: transparent; 
}

#sidebarTabs .txtMoreTab .tabUnselected { 
  color: #ffbf00; 
  background: #303060; 
}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents { 
  color: #ffbf00; 
  background: #202050; 
}
/*}}}*/
/***
!General tab styles
***/
/*{{{*/

.tab.tabUnselected {
  background-color: #666;
}

.tab.tabSelected,
.tab.tabSelected:hover {
 color: #ffbf00;
  border: 0;
  background-color: #4c4c4c;
  cursor: default;
}

.tab.tabUnselected:hover {
  color: #ffbf00;
  border: 0;
  background-color: #4c4c4c;
}

.tabContents {
  background-color: #4c4c4c;
  border: 0;
}

.tabContents .tabUnselected{
  background: #5f5f5f;
}

.tabContents .tab:hover, 
.tabContents .tabContents, 
.tabContents .tabSelected {
  background: #666;
}
/*}}}*/
/***
!Message area styles
***/
/*{{{*/
#messageArea {
  background-color: #666;
  color: #fff;
  border: 2px solid #ffbf00;
}
/*}}}*/
/***
!Popup styles 
***/
/*{{{*/
#popup {
  color: #fff;
  background-color: #4c4c4c;
  border: 1px solid #ffbf00;
}

#popup a:hover {
  background: transparent;
  color: #ff7f00;
  border: 0;
}

#popup hr {
  color: #ffbf00;
  background: #ffbf00;
}

/* Special for SelectTheme popmenu */
#popup .currentlySelected {
  color: #4c4c4c;
  background: #ffbf00;
}
/*}}}*/
/***
!Tiddler Display styles
***/
/*{{{*/
/** LOSER ON IE6 without Clint's IE fix (see body section at top!) **/
.tiddler {
  background: #101040;   			/* !!! */
  border: 3px solid #202050;			/* !!! */
  padding-bottom: 8px;
  margin-left: 8px; 				/* Vastly different on IE vs FireFox! */
  margin-bottom: 12px;
}

#displayArea .button.highlight {
  color: #ffbf00;
  background: #4c4c4c;
}

.tiddler .button {
  color: #888;
}

.tiddler .button:hover,
.tiddler .button:active {
  color: #ffbf00;
  background-color: #4c4c4c;
  border-bottom: 1px solid #4c4c4c;              /* No dotted line in buttons */
}

.viewer {
  color: #FFF;
}

.viewer table{
  background: #303060;  			/* !!! */
  color: #fff
  border: 1px solid;
}

.viewer th {
  background-color: #4c4c4c;
  color: #fff;
}

.viewer hr {
  color: #666;
}

.viewer input, 
.viewer select {
  font-family: "Lucida Console","Courier New",Courier,monospace;
  font-size: 1.0em; 
/** Looks bad on IE6
  padding-left:4px;
  color: #ddd;
  background-color: #4c4c4c;
  border: 1px solid #ffbf00;
**/
}

.viewer .sortheader {
  font-weight: normal;
}

.viewer pre, 
.viewer code {
  color: #ddd;
  background-color: #303060  			/* !!! */
  border: 1px solid #ffbf00;
}

.viewer .button:hover,
.viewer .button:active {
  border: 1px solid #4c4c4c; 			/* Needed to avoid button size changing */
}

.viewer .fileList table {
  border-color: #ff7f00;
  margin-bottom: 0px;
}

/* For Share your Sky only */
.viewer .fileList tr {
  border: none;
}

.viewer .fileList td, 
.viewer .fileList th {
  border: 0;
  padding: 2px 8px 2px 8px;
}
 
.viewer .noBorder table,
.viewer .noBorder th,
.viewer .noBorder tr,
.viewer .noBorder td, 
.viewer iframe {
  border: 0;
}

.viewer .noBorder #sm_thumb { 			/* For sysmon thumbnail */
  border: 1px solid #404080;  			/* !!! */
  padding: 0px;
}
/* End Share Your Sky */

.toolbar {
  color: #4c4c4c;
}

.footer {
  color: #ddd;
}

.selectedTiddler .footer {
  color: #888;
}

.editor textarea, 
.editor input {
  border: 1px solid #ffbf00;
  background-color: #ffffcc;
}

.editorFooter {
  color: #aaa;
}

.tab{
  -moz-border-radius-topleft: 3px;
  -moz-border-radius-topright: 3px;
}

.tagging,
.tagged {
  background: #4c4c4c;
  border: 1px solid #4c4c4c;
}

.selected .tagging,
.selected .tagged{
  background: #000;
  border: 1px solid #ffbf00;
}

.tagging .button,
.tagged .button{
  color: #ffbf00;
  border: 0;
  padding: 0;
}

.tagging .button:hover,
.tagged .button:hover {
  background: transparent;
}

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

.tagClear{
  margin-top: 1em;
}

.highlight, 
.marked {
  background-color: #000080;
  color: #ffffff;
}

.cascade {
  background: #4c4c4c;
  color: #ddd;
  border: 1px solid #ffbf00;
}

.stretch img {
  width:100%; 
} 

.twocolumns { 
  display:block; 
  -moz-column-count:2; 
  -moz-column-gap:1em; 
  -moz-column-width:50%;
}
/*}}}*/
/***
!XP ~NavBar Style Overrides
***/
/*{{{*/
.topItem {
  background: url("im/fire-classic-up.png") no-repeat 0 0;
  color: #ffbf00;
}

.topItemOver {
  background: url("im/fire-classic-up-on.png") no-repeat 0 0;
  color: #ffffff;
}

.topItemClose {
  background: url("im/fire-classic-down.png") no-repeat 0 0;
  color: #ffbf00;
}

.topItemCloseOver {
  background: url("im/fire-classic-down-on.png") no-repeat 0 0;
  color: #ffffff;
}

.subItem, 
.subSubItem, 
.subItemOver, 
.subSubItemOver {
  color: #ffffff;
}

.dropMenu {
  background-color: #4c4c4c;
  color: #000;
  border: 1px solid;
  border-color: #4c4c4c #ff7f00 #ff7f00 #ff7f00;
}
/*}}}*/
/***
!Footer styles /% ============================================================= %/
***/
/*{{{*/

#ContentFooter {
  background: #303060; 				/* !!! */
  color:#0f0; 
  clear:both; 
  padding:0.5em 1em; 
  text-align:center;
}

#ContentFooter a {
  color: #fff; 
  border-bottom: 10px dotted #0f0;		/* !!! */
}	

#ContentFooter a:hover {
  color: #fff;
  background-color:#f00;
}
.textcenter {
  text-align:center;
}
/*}}}*/
/***
!Horizontal Main Menu Style Mods /% ============================================================= %/
***/
/*{{{*/


#mainMenu a.button.HideSideBarButton {
  color: #8080f0;
}

#mainMenu a.button.HideSideBarButton:hover {
  color: #ffbf00;
}

#displayArea { 
  margin: 1em 15.5em 0em 1em; 			/* neutralize default margins */ 
}

#mainMenu {
  position: static; 
  width: auto; 					/* neutralize default settings */
  overflow: auto; 				/* contain floats */ 
  border-bottom: 1px solid #303060;		/* !!! */ 
  padding: 0;
  text-align: left; 
  color: #c000f0; 
  background-color: #303060;			/* !!! */ 
  font-size: 0.8em; 
}

#mainMenu a,
#mainMenu .button,
#mainMenu .tiddlyLink { 
  display: block; 
  float: left; margin: 0; 
  padding: 0.2em 0.75em;
  font-size: 1.15em; 
  font-weight: bold; 
  color: #8080f0; 
}

#mainMenu a:hover,
#mainMenu .button:hover,
#mainMenu .tiddlyLink:hover { 
  background-color: #303060;			/* !!! */
  color: #ff7f00; 
}

#mainMenu br {
  display: none; 
}

/*}}}*/
!MPCORB Database Package
This package has the tools needed to convert the Minor Planet Center orbital elements catalog into a Microsoft Access database and make the elements availaable to ASCOM scripts and client programs. YOU DO NOT NEED TO HAVE MICROSOFT ACCESS. The ~MakeDB.wsf tool builds the database from scratch. The MPCORB.wsc component provides virtually instantaneous scriptable access to the database. A demo tool, ~GetElements.wsf can be used to test and browse the database.

!Building the Database
#Download the MPCORB database from the Minor Planet Center. This must be the CR/~LF-terminated version of the database. You can get the latest version of this from the [[MPCORB Database website]]. Unzip this and save as MPCORB.DAT (watch it! the file name in the zipfle is different!).
#Double-click the ~MakeDB.wsf file. You'll see a popup message immediately. Read it, then click OK. Wait a few minutes and you'll see another popup indicating that the database has been built, and the number of records that were inserted into it.

!Running the Test Program
#Open a command shell ("DOS" window) into this directory
#Type C:\xxx> cscript ~GetElements.wsf  You'll get usage info.
#Try it for speed:  cscript ~GetElements.wsf Denny
#Try it using various names, designations, etc.

!Troubleshooting
If you get object errors, then you don't have some required operating system components installed. With XP and later you should have everything.

Required:    

  1) The latest ASCOM Platform (for the script engines, etc.) from the [[ASCOM Initiative Web Site]].

  2) Data Access Components 2.8 or later
  Jet 4.0 Service Pack 7 or later

    http://msdn.microsoft.com/data/downloads/updates/default.aspx

Both are free downloads from Microsoft.

!Using This as a Template
This whole thing was developed with (1) Notepad, and (2) the Windows Script 5.6 documentation. The latter comes with the full [[ASCOM Platform 6]]. NO DEVELOPMENT TOOLS NEEDED, NO MS ACCESS NEEDED.

If you decide to use this as a template for providing rapid access to other catalogs from scripts, ''@@color:#ff0;YOU MUST ABSOLUTELY POSITIVELY CHANGE THE <registration> IN THE XML OF YOUR SCRIPTLET/WSC COMPONENT!@@''

    <registration 
        progid="ASCOM.MPCORB" 
        classid="{~A8510BBF-40EA-4D56-9630-9752997549C0}" 
        description="ASCOM Minor Planet Orbit Database Component"
        remotable="no" 
        version="1.0">

Change the progid to ASCOM.XXX, where XXX is a name for your catalog, for example ASCOM.~LandoltRef. Names are case insensitive.

Change the classid to some other globally unique identifier (GUID). Use the GUIDGEN program if you have it. At the moment, it is available from this web page:

  http://webhome.idirect.com/~jhonz/Utilities.HTM

Or you may be able to get a GUID directly from the following web page:

  http://www.hoskinson.net/GuidGenerator/
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.ccdware.com/resources/]]|
<html><div align="center"><iframe src ="http://www.ccdware.com/resources/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.w3schools.com/cssref/default.asp]]&nbsp;&raquo;|
<html><div align="center"><iframe src ="http://www.w3schools.com/cssref/default.asp" width="100%" align="center" height="600"></iframe></div></html>}}}
This script will calibrate the auto-guider at the current telescope position. If you have an internal or off-axis guider, a bright guide star must already be positioned on the guide sensor. If you have a rotator, it will calculate the mechanical offset of your imager with respect to the true position angle then send the corrected guiding angle to ~MaxIm before calibration. The Guider option in ACP Preferences must be enabled and the guider must be set up in ~MaxIm DL.

Here are all the [[Standard ACP Scripts]].
----
You want to use Voice from a ~UserAction, right? There is a way...

In Version 7 and later of ACP, enabling text to speech in ~UserActions is an integral part of the code. (It's in ~AcquireImages.js.) 

To use it, in your ~UserActions add a line in the appropriate place that looks like this: ''@@color:#ff0;Util.Script.voiceForUA.Speak("xxx")@@'', where "xxx" is the word, phrase or sentence you want ACP to speak.
----
You sure can. Copy this script into Notepad and save it as a <anyname>.vbs file on your (observatory computer's) desktop. When you click it, the script will start both ACP and ~MaxIm, and it will connect the camera in ~MaxIm and start the cooler, and also connect ACP to the camera and the telescope. For it to work, the Windows Scripting Host must be available on your computer (this should be the norm).

This capability also exists directly on the web interface, in the System Status item.
----
{{{
set app = createobject ("maxim.application")
set cam = createobject ("maxim.ccdcamera")
set acpa = createobject ("ACP.application")
set tele = createobject ("ACP.Telescope")
set utils = createobject ("ACP.Util")
cam.linkenabled = true
cam.disableautoshutdown = true
cam.cooleron = true
app.LockApp = true
utils.CameraConnected = true
tele.Connected = true
}}}
*See also Bob Denny's [[Startup/Shutdown Script]]
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
! 
''NO'' is the easy answer.

Many available astronomy packages contain the Guide Star Catalog 1.1. Most of these GSC distributions cannot be used with ~PinPoint. Why not?

~PinPoint requires the Guide Star Catalog 1.1 in its original unmodified format (FITS tables). It will read gzip-compressed table files. In order to save disk space, programming time, or both, most application developers have created unique, private formats for their GSC distributions. There are just about as many of these private ~GSCs as there are programs which supply the GSC. There is no way ACP can support the many private formats out there.

The ~PinPoint ~CD-ROM contains the entire GSC 1.1 (North and South) in its original FITS table format, with each table file gzip-compressed. You can use the 2-disk set if it  is still available from the Astronomical Society of the Pacific as well. In this case, if you need access to both North and South regions, you'll need to copy the tables to a hard disk or have 2 ~CD-ROM drives online.

The GSC catalog can also be download from Bob Denny's [[the GSC Catalog]] server. (Note: it's 326 ~MBytes.)
----
By way of example, these are all simulated images, except for the real image and the annotated reference chart at the top. The field is a Henden photometry standard field. In the ~MiniSAC Catalog, it's called "Henden ~V404Cyg", and it's located at RA 20:24:09.88, Dec 33:50:14.9. Click on the Reference Chart title to display the data for this chart.

The real image is a 3-minute exposure through an "R" filter, using a 12-inch SCT and ~ST-7XME camera, with autoguiding.

| !Real Image | ![[Reference Chart for V404 Cygni]] |
|[img[RefDocs/HENDEN-V404CYG.png]]|[img[RefDocs/FindingChart.png]]|
| !~UCAC2 (364 catalog stars) | !~UCAC3 (504 catalog stars) |
|[img[RefDocs/UCAC2.png]]|[img[RefDocs/UCAC3.png]]|
| !USNO A2.0 (695 Catalog Stars) | !USNO B1.0 (885 catalog stars) |
|[img[RefDocs/A2.0.png]]|[img[RefDocs/B1.0.png]]|
| !NOMAD (1286 catalog stars) | !GSC 1.1 (47 catalog stars) |
|[img[RefDocs/NOMAD.png]]|[img[RefDocs/GSC1.1.png]]|
| !~UCAC4 (1286 catalog stars) | !.  |
|[img[RefDocs/NOMAD.png]]| .  |
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
from: ''Dick Berg''
----
When edited into ACP, this software will display a view of a selected catalog (e.g. ~UCAC3) at specified coordinates. The adjacent image shows what the output looks like. The view window is a fixed size, 30' x 30'. Run the item from the ACP browser GUI, right sidebar. If you want to see a different sky position, you can fold and unfold the window and select a new catalog or enter new values.

To set this up to run, these four things need to be done: [>img[RefDocs/CatView.png]]
#Click here to [[Download Catalog View parts]] to your desktop. Unzip the file. There are three files inside:
##the ''acatalogview.asp'' software
##the ''~CatalogView.txt'' tiddler
##the ''~MathSVG.txt'' file - The ~MathSVG plugin is included in ACP v8.1 and later.
#Put the acatalogview.asp file into the /ac/ folder. In Windows XP, "ac" is in .../ACP Obs Control/~WebDocs/. In Windows 7, it's in Users/Public/Public Documents/ACP Web Data/~DocRoot/. In Windows 8 it's [TBD].
#Create a <<newTiddler>> in your ACP. Name it something useful like "Catalog View". Copy the text from ~CatalogView.txt into this tiddler, tag it "Custom svg" and save it. 
#~~{{{Skip this step for ACP v8.1 and later}}}~~  Create another <<newTiddler>> called (exactly) ~MathSVGPlugin. Copy ''all'' 131 lines of the text from ~MathSVG.txt file into this. Tag it "Custom systemConfig" and save it. If you run somewhere across a supplemental package called ~MathSVGPluginComp, it's not needed.
Reload the browser. ACP needs to be running, but ~MaxIm doesn't, and the telescope doesn't need to be connected, either. Open the right sidebar and click on the Catalog View item.

In this particular version, there is the capability in the selection form (as shown) to choose the catalog in addition to the usual entry of RA and Dec. To make this work, you ''must'' edit the acatalogview.asp file and put in the correct full-path locations of the "catPath" for each catalog in your catalog library. Looking at the .asp file -- you'll see where those changes have to be done.


----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
{{borderless{
|[[Click here to open in a new browser tab|http://archive.stsci.edu/prepds/cvcat/]]|
<html><div align="center"><iframe src ="http://archive.stsci.edu/prepds/cvcat/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://tdc-www.harvard.edu/software/wcstools/wcstools.files.html]]|
<html><div align="center"><iframe src ="http://tdc-www.harvard.edu/software/wcstools/wcstools.files.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://cbastro.org/]]|
<html><div align="center"><iframe src ="http://cbastro.org/" width="100%" align="center" height="600">< /></div></html>}}}
----
This script will perform a single ~PinPoint pointing update at the current telescope coordinates and (if possible) sync it to establish pointing accuracy. If the ACP Pointing Corrector is active, and something (including this script) has already sent one sync to the scope, this script will instead add a mapping point to the pointing corrector. If the scope cannot be synced (for example Paramount running TPOINT pointing correction) the script will jog the scope to remove the pointing error.

Here are all the [[Standard ACP Scripts]].
----
{{borderless{
|[[Click here to open in a new browser tab|http://cdsarc.u-strasbg.fr/]]|
<html><div align="center" style="background-color:white"><iframe src ="http://cdsarc.u-strasbg.fr/" width="100%" align="center" height="600">< /></div></html>}}}
----
|Past 24 hours of IR imagery from the ~MTSAT-1R bird and the Hong Kong Observatory. It takes a couple minutes to download all the images in the loop. Note HKT time; GMT is 8 hours earlier.|
{{borderless{
|[[Click here to open in a new browser tab|http://www.hko.gov.hk/wxinfo/intersat/satpic_s.shtml?pv_mode=playback]]|
<html><div align="center"><iframe src ="http://www.hko.gov.hk/wxinfo/intersat/satpic_s.shtml?pv_mode=playback" width="100%" align="center" height="600">< /></div></html>}}}
----
{{floatleft small borderright{
Sunshine: #ff0
Grass: #360
Sky: LightBlue
Dirt: #633
Apple: #C00
Banana: #FF0
Lime: #3C6
Orange: #F93
Peach: #F99
Pear: #CF6
Raspberry: #606
Background: #fff
Foreground: #000
PrimaryPale: #9cf
PrimaryLight: #09f
PrimaryMid: #03c
PrimaryDark: #003
SecondaryPale: #ffc
SecondaryLight: #fc9
SecondaryMid: #cc6
SecondaryDark: #630
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #C33
}}}PaletteMaker:<hr><<tiddler PaletteMaker>>{{clear block{}}}
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/MPEph/MPEph.html]]|
<html><div align="center"><iframe src ="http://www.cfa.harvard.edu/iau/MPEph/MPEph.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/Ephemerides/Comets/index.html]]|
<html><div align="center"><iframe src ="http://www.cfa.harvard.edu/iau/Ephemerides/Comets/index.html" width="100%" align="center" height="600">< /></div></html>}}}
----
/***
|Name|ConfirmExitPlugin|
|Source|http://www.TiddlyTools.com/#ConfirmExitPlugin|
|Version|2.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|plugin|
|Requires||
|Overrides|window.confirmExit|
|Options|##Configuration|
|Description|extra safety when exiting with unsaved changes|
For extra "data safety" when exiting from a TiddlyWiki document, this plugin prompts you to ''//save any tiddlers that are still being actively edited//''.  The plugin then provides an additional option to ''//save the entire TiddlyWiki document//'' before continuing.  Finally, if you do not choose to save the file and there are still unsaved tiddler changes, the standard TiddlyWiki warning message is then displayed as usual, with options to ''//stay on the current page or exit and lose all changes.//''
!!!!!Configuration
<<<
<<option chkConfirmExit>> ''//always//'' confirm before exiting (even if no unsaved changes)
<<option chkSaveOnExit>> show save-before-exiting confirmation messages (if unsaved changes)
<<<
!!!!!Revisions
<<<
2008.09.05 2.2.0 renamed plugin ConfirmExitPlugin to better reflect general functionality
2008.09.05 2.1.0 added "always confirm exit" {{{<<option chkConfirmExit>>}}}
2008.04.03 2.0.0 completely re-written to provide checks for active tiddler editors and more consistent warning messages
2007.03.01 1.0.2 use apply() to invoke hijacked core function
2006.08.23 1.0.1 Re-released.  Note default is now to NOT enable second message. (i.e., standard behavior)
2006.02.24 1.0.0 Initial release.  Replaces ConfirmExitPlugin, which is now included in the TW core functionality.
<<<
!!!!!Code
***/
//{{{
version.extensions.SaveOnExit = {major: 2, minor: 2, revision: 0, date: new Date(2008,9,5)};

// do NOT enable safety checks by default (i.e., use standard behavior unless explicitly enabled)
if (config.options.chkSaveOnExit===undefined) config.options.chkSaveOnExit=false;
if (config.options.chkAlwaysConfirmExit===undefined) config.options.chkAlwaysConfirmExit=false;

config.messages.activeEditorWarning=
	"Are you sure you want to navigate away from this page?"
	+"\n\n--------------------------------\n\n"
	+"'%0' is currently being edited."
	+"\n\n--------------------------------\n\n"
	+"Press OK to save this tiddler, or Cancel to skip this tiddler and continue.";

config.messages.unsavedChangesWarning=
	"Are you sure you want to navigate away from this page?"
	+"\n\n--------------------------------\n\n"
	+"There are unsaved changes in this TiddlyWiki document."
	+"\n\n--------------------------------\n\n"
	+"Press OK to save the document, or Cancel to continue without saving.";

// for browsers that support onBeforeUnload event handling
window.saveOnExit_coreConfirmExit=window.confirmExit;
window.confirmExit=function() {
	// call core handler (to invoke other hijacked 'on exit' code, e.g., [[StorySaverPlugin]])
	window.saveOnExit_coreConfirmExit.apply(this,arguments);
	// check for tiddlers being edited and offer chance to save/close each
	if (config.options.chkSaveOnExit) story.forEachTiddler(function(tid,elem) {
		if (elem.getAttribute("dirty")!="true") return;
		if (!confirm(config.messages.activeEditorWarning.format([tid]))) return;
		story.saveTiddler(tid);
		story.closeTiddler(tid);
	});
	// check for unsaved changes
	if(store && store.isDirty && store.isDirty()) {
		if (config.options.chkSaveOnExit && confirm(config.messages.unsavedChangesWarning))
			saveChanges(); // save the file
		else
			return config.messages.confirmExit; // 'unsaved changes' confirmation message
	} else if (config.options.chkAlwaysConfirmExit)
		return ""; // 'no changes' confirmation message
}

// for older browsers that only support onUnload event handling
window.checkUnsavedChanges=function() { if(window.hadConfirmExit === false) window.confirmExit(); }
//}}}
config.options.chkConfirmExit=true; // asks before unloading web page
!Introduction
Throughout ACP's help, we refer to @@color:#0F0;''J2000''@@ versus @@color:#0F0;''local topocentric''@@ (equatorial) coordinates. You can think of J2000 as "universal" coordinates, independent of your location on the earth, the date/time, and the motion of the target (if any).

It is assumed that you understand the basic astronomy coordinate systems:
*Equatorial (RA/Dec or HA/Dec) 
*Horizontal (Az/Alt) 
If it were only that simple. The //''equatorial''// coordinates as seen from the observatory vary with location and time. The coordinates needed to center a star in Arizona tonight will be significantly different than those needed from Australia or from Arizona 5 years ago. Of course objects seem to move across the night sky due to the Earth's rotation, but we're speaking of the //equatorial// coordinates, not the local horizontal coordinates! What causes equatorial coordinates to change? These Wikipedia links provide more information: 
*[[Precession of the Equinoxes]]
*[[Nutation of the earth's rotation axis]]
*[[Aberration of Light (both annual and diurnal)]]
*[[Parallax]]
!Catalogs - What Coordinates to Use?
A catalog must be usable anywhere at any time. Clearly, we need a __standard coordinate system__ (frame of reference) from which the coordinates for a given place and time can be derived. This is the [[International Celestial Reference System (ICRS)]], which uses the [[International Coordinate Reference Frame (ICRF)]]. For all practical purposes, this is what we call @@color:#0F0;''J2000''@@, which is //geocentric// and derived from the earth's axis (equinox) at Julian calendar date 2000.0. You'll hear people talking about the "J2000 epoch" but to be proper, we should refer to the coordinate system as the "J2000 equinox". An //epoch// is a time reference only; our standard coordinate reference frame is based on the orientation of the //equinox// (Earth's axis) at the epoch J2000. 

!The Telescope - What Coordinates to Use?
In order to point the telescope accurately to an object, we need to "convert" the standard catalog (J2000) coordinates to those of the object as we see if from our location at the current time, called the //local topocentric equatorial coordinates//, or simply //local topo//. As originally stated, the apparent coordinates of an object change over time and with location on the Earth. Some research-grade telescopes do the conversion within their own control systems, but the vast majority of telescopes used with ACP do not. Therefore, ACP normally does this conversion for you, leaving you to (conveniently) work in J2000 coordinates for your observing plans. If you're interested in the details, read on.

!Conversion Process
As outlined above, there are several factors that influence the variation of the apparent equatorial coordinates at a location and time. To convert from J2000 to local topo involves several steps (this is simplified, omitting the very tiny corrections, which ACP nonetheless applies!):

#[[Proper motion]]: Change in apparent position in space due to motion of the object itself, from the J2000 epoch to now. 
#[[So-called Precession]]: Apply the change in the tilt of the earth's axis from the J2000.0 epoch to now, actually a combination of Precession of the Equinoxes and Nutation. 
#[[Parallax]]: Correct for the position of the earth in its orbit around the sun and our position on the earth as it rotates. The closer the object the greater the correction. 
#[[Annual Aberration]]: Resulting from the earth's velocity around the sun relative to the inertial reference frame. This variation is around 20 arcseconds. 
At this point we have //local topo// (assuming "tiny" corrections have been omitted). We can transform to local horizontal (alt/az) and apply the refraction correction, then back to equatorial (if we have an equatorial mount) and point it. If you hear someone talk about ''~JNow'' coordinates, be wary. This term is often imprecise, including only the first two corrections above, or maybe all four (and maybe the tiny ones too). 

In any case, @@color:#0F0;''all coordinate input to ACP must be J2000 coordinates''@@, whether it comes from a Deep Sky Catalog search, from positions you take out of specialized catalogs, or from MPC or NEO listings. ACP will perform the appropriate calculations to ensure every image is centered.
----
{{borderless{
|[[Click here to open in a new browser tab|http://iraf.noao.edu/projects/ccdmosaic/astrometry/astrom.html]]|
<html><div align="center" style="background-color:white"><iframe src ="http://iraf.noao.edu/projects/ccdmosaic/astrometry/astrom.html" width="100%" align="center" height="600">< /></div></html>}}}
----
!Account Setup
All of ACP's web and FTP services are protected by username/password logins. Thus it is not possible for just anyone to view pages or take control of your observatory. Only those people to whom you grant access can use your observatory. Web and FTP servers share the same user accounts. 
|NOTE:  You should only grant access to people who you trust. By granting someone basic access, you are giving them the right to seize control of the observatory and acquire single images. If you give them permission to upload things, they can upload observing plans and do long automated runs, acquiring many images. If you give them permission to upload and to execute scripts, they can do anything, including erasing your hard drive. For details on account permissions, see [[Web Account Privileges]].|
|''Moral: give accounts and permissions only to those you trust, and do not give "run scripts" permissions to anyone but yourself and your most trusted users!''|
Here's how to create an account for yourself. The process is the same when creating accounts for others. Be sure ACP is running. 
#Open up the ACP Preferences, Server tab dialog. The user list is initially empty. 
#Click New to display the New User dialog. 
#In the upper field, enter the full name, for example, John Q. Public 
#In the lower field, enter a username for login, for example, jpublic. 
#Click OK to close the New User dialog. Note that the full name appears in the list. 
#Click on your name in the list. Notice the generated password. ACP generates random passwords. These are difficult to remember, but also difficult to crack. Consider using the generated password. If you want to change it, do so now. 
#For yourself, click Allow File Uploading, Allow Script Execution, and Allow Using FTP Server. 
#Now click OK to close the Web Users dialog. ''Leave ACP running.''
You should consider making a second username and password for yourself - one for which you are not an administrator - and use that username for your observing runs. This has the advantage that you can't screw up the computer by inadvertently running a script you didn't mean to run.
  
You are now ready to log into ACP's web and FTP servers. First we'll use the browser on this computer, then we'll use a browser on different computer at your facility.
Go on to [[First-time Login: Local Access]]
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/Ephemerides/CritList/index.html]]|
<html><div align="center"><iframe src ="http://www.cfa.harvard.edu/iau/Ephemerides/CritList/index.html" width="100%" align="center" height="600">< /></div></html>}}}
----
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto "namespace"
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be = Array();
	var len = Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str = "";
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex = "0123456789ABCDEF";
	var str = "";
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	add32 = function(a,b)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF);
		var msw = (a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Add five 32-bit integers, wrapping at 32 bits
	add32x5 = function(a,b,c,d,e)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Bitwise rotate left a 32-bit integer by 1 bit
	rol32 = function(n)
	{
		return (n>>>31)|(n<<1);
	};

	var len = blen*8;
	// Append padding so length in bits is 448 mod 512
	x[len>>5] |= 0x80 << (24-len%32);
	// Append length
	x[((len+64>>9)<<4)+15] = len;
	var w = Array(80);

	var k1 = 0x5A827999;
	var k2 = 0x6ED9EBA1;
	var k3 = 0x8F1BBCDC;
	var k4 = 0xCA62C1D6;

	var h0 = 0x67452301;
	var h1 = 0xEFCDAB89;
	var h2 = 0x98BADCFE;
	var h3 = 0x10325476;
	var h4 = 0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j,t;
		var a = h0;
		var b = h1;
		var c = h2;
		var d = h3;
		var e = h4;
		for(j = 0;j<16;j++) {
			w[j] = x[i+j];
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=16;j<20;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=20;j<40;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=40;j<60;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=60;j<80;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}

		h0 = add32(h0,a);
		h1 = add32(h1,b);
		h2 = add32(h2,c);
		h3 = add32(h3,d);
		h4 = add32(h4,e);
	}
	return Array(h0,h1,h2,h3,h4);
};


}
//}}}
Any ACP script that uses the support library ~AcquireSupport.wsc, including the standard image acquisition script ~AcquireImages.js, can call out to user-written script snippets (scriptlets). This powerful feature, __custom actions__, enables ACP to meet virtually any special need(s) without having to modify the standard scripts or the scripting support library (or ACP itself, of course!). Scriptlets are called for all of the following events: 
*Script start 
*Script end 
*Slew start (see below) 
*Slew end
*~AcquireImage (see below) 
*Image start (see below) 
*Image end (see below) 
*Image completion (see below) 
*Target start (see below) 
*Target end (see below) 
*Shutdown (see below) 
To use this feature, you need to insert your custom script actions (scriptlets) into an ~ACP-provided [[UserActions-template.wsc]] Windows Script Component (WSC) called ''~UserActions.wsc''. ACP also includes an javascript version of the same file, [[UserActionsJS-template.wsc]]. These file contains the framework for the WSC, and stubbed-out implementations for each of the above actions. All functions except ~ScriptEnd() must return a Boolean (true/false) value. Returning False will stop the script with an error message. If you return False, you should log the reason in the console log in your code. The description below pertains to either the .wsc or .js version. 
|!NOTE|
|To activate this feature, you ''must activate ~UserActions.wsc'' (see below). Once registered, you will see "User actions detected" in your run logs, and the functions will be called during each invocation of a script. To deactivate this feature, unregister ~UserActions.wsc. ''For more information, look at the ~UserActions.wsc file itself with Notepad.''|
!!Activating ~UserActions (registering with Windows)
By default ACP does not "see" this component and its member functions. To activate it for ACP it must be registered with the Windows OS. On Windows 7 and later, with User Account Control enabled (the default for those versions of Windows), this is a real pain. You need to have a ''32-bit'' command (CMD) window running in ''administrator mode''. It's different on 32- and 64 bit systems, and with UAC off (common on Observatory control computers) you don't need to mess with administrator mode. So:
!!!64 bit, UAC on: 
#Find C:\Windows\~SysWOW64\cmd.exe 
#Right-click, select Run as Administrator 
#...> CD "\Program Files (x86)\ACP Obs Control" (''note quotes'') 
#...> regsvr32 ~UserActions.wsc 
!!!64 bit, UAC off:
#Find C:\Windows\~SysWOW64\cmd.exe 
#Double-click it 
#...> CD "\Program Files (x86)\ACP Obs Control" (''note quotes'') 
#...> regsvr32 ~UserActions.wsc 
!!!32 bit, UAC on: 
#Find C:\Windows\System\cmd.exe 
#Right-click, select Run as Administrator 
#...> CD "\Program Files\ACP Obs Control" (''note quotes'') 
#...> regsvr32 ~UserActions.wsc 
!!!32 bit, UAC off:
#Find C:\Windows\System\cmd.exe 
#Double-click it 
#...> CD "\Program Files\ACP Obs Control" (''note quotes'') 
#...> regsvr32 ~UserActions.wsc 
If you see a success popup, it's ready to go. If you see a failure popup, there is a mistake in the code or XML.
!Accessing the Running Script
From within your custom actions, you can access methods and properties of the running script. To access these items, use the following syntax: 
|Util.Script.//xxx//|
Any method, and all variables defined outside the scope of a property or method implementation, in the running script are accessible this way. For example, the standard ~AcquireImages.js script contains a variable called ~targetName, which contains the name of the target currently being acquired. 
|!NOTE|
|Don't modify the value of any script variables unless you know exactly what you're doing.|
!Accessing the ~AcquireSupport Library
From within your custom actions, you can use any of the properties and methods of the ~AcquireSupport library. To access these items, use the following syntax: 
|Util.Script.SUP.//property-or-method//|
All of ACP's standard scripts define a global variable SUP which is the handle to the initialized ~AcquireSupport library. Thus, using the running-script access syntax described in the previous section, you can access ~AcquireSupport. It is chock full of useful methods, and its properties can be used to learn a lot about the running script. Have a look at ~AcquireSupport.wsc with a text editor. It is a Windows Script Component, so using ~PrimalScript will make looking at it easier. 
|!NOTE|
|Don't modify the value of any of ~AcquireSupport's properties unless you know exactly what you're doing.|
!Debugging Custom Actions
The simplest way to debug custom user actions is via ~MsgBox() statements within your code. Be sure to remove them before going into production, though! Otherwise your observing work will stop if one of them are displayed, requiring you to click OK to proceed.

There are also a couple of additional levels of debugging available. User Actions are contained within a supplied template Windows Script Component (WSC), which is "known" to ACP's standard scripts. Once enabled the functions in ~UserActions.wsc are automatically called by ACP at the appropriate times during ACP's standard script execution cycles.

For general information on WSCs see Reusable Code in the ACP Help, where you will find information about the Error Switch and the Debug Switch. Each of these switches is in the XML framework of ~UserActions.wsc and may be edited with Notepad, etc. Their function is also explained in this section of ACP help. By using the Error Switch and/or Debug Switch, you can cause ~UserActions.wsc to pop up an error message if any run-time error occurs. By using the Debug Switch, you can cause ~UserActions to invoke your script debugger on a ''Stop'' (VBS) or ''debugger'' (JS) statement, or any run time error.

For information on how to install and use the Microsoft Office Script Debugger (recommended) see Debugging, in the ACP Help. 
!Slew Start Function
The ~SlewStart() function is called with parameters that contain the J2000 equatorial coordinates of the slew destination. You could use these, for example, to perform special safety tests before each slew. Returning False will stop the script with an error.
!Acquire Image Function
The ~AcquireImage() function provides a way to completely replace the normal final/data image acquisition process. When called, any pending autofocus will have been completed and the scope will be pointed at the target (via a pointing update as needed). The implementation of ~AcquireImage is responsible for everything related to acquiring the image including any needed flip (for image duration), filter selection, focus shifs for same, handling of the guider, and acquisition of the image. The function can return True to indicate that it wants the normal image acquisition process to be done by ACP's logic, False to cause the entire run to be terminated, or "ok" to cause ACP to skip its image acquisition logic and proceed to the next image (within a count, repeat or target loop). In other words, this function handles a single image within the flow of ACP image acquisition process. Consider using a ''#TAG'' directive to allow the function to decide whether it should handle the current image or defer to ACP's normal logic. When using from Scheduler, you could put a special string into the Description field of the ~ImageSet or Observation to trigger this. 
!Image Start Function
The ~ImageStart() function is called with parameters that allow you to modify the image acquisition. The exposure interval, binning, and sub frame fraction can be altered, resulting in a change from the parameters specified in the plan or script that is doing the image acquisition. Two other parameters //which must not be changed// specify the filter that is selected and whether or not this is a pointing exposure.

One way to use this feature is to alter the exposure interval to compensate for a filter's transmissivity when doing a pointing exposure. When combined with the Filter Info feature, you could use the selected imaging filter for pointing exposures as well. You could also force pointing exposures to be acquired at binning levels other than the default chosen by ACP.
!Image End Function
The ~ImageEnd() function is special. It is called with a parameter that is the full path/name of the final (closed) image file. With this information, you could apply special post-processing of the image. For example, you could mail the file to a user, or extract science information using a program such as IRAF or the ~PinPoint engine, etc. Scripts can start shell programs such as IRAF and pass command line parameters to same (see documentation on the ~WScript.Shell object in the Windows Script 5.6 documentation). ''@@color:#ff0;Do not rename or move the image file in this action!@@'' Use the ~ImageComplete() function described in the next section. 
!Image Complete Function
The ~ImageComplete() function is called with a parameter that is the full path/name of the final (closed) image file, after all post-acquisition processing has been completed. It may have been plate-solved and/or calibrated. This event allows you to (among other things) change the final file path/name of the just-acquired //and processed// image. 
!Target Start Function 
The ~TargetStart() function is called with parameters that allow you to examine or modify virtually anything about the upcoming target. You could use this function, for example, to offset from the given coordinates or alter the name. Returning False will stop the script with an error. 
!Target End Function 
The ~TargetStart() function is called with parameters that allow you to examine virtually anything about the just-finished target and do some post-acquisition task, then decide whether or not to continue acquisition, and even start a new observing run. Returning False will stop the script with an error. 
!Shutdown Function
The Shutdown() function is called when an ACP plan uses the #shutdown directive, or when any script calls the Shutdown() method of the ~AcquireSupport library. This can be used to override or augment the default observatory shutdown logic. If this method returns True, the default logic is skipped, otherwise the default logic is executed after the logic in the custom action. This is not the same as the ACP Shutdown script, which runs when ACP itself is shut down. 
!Migrating if New Actions are Added 
Occasionally, upgrades to ACP will add new user actions. When this happens, you must merge your custom action code into the new template, as the new actions must exist as methods in //your// ~UserActions.wsc. The ACP installer always creates two template files, [[UserActions-template.wsc]] and [[UserActionsJS-template.wsc]], which contain the current set of user actions. To migrate, you have two choices. Which one you use depends on your comfort level:

#Copy your custom code from your current ~UserActions.wsc into the same methods in the ~UserActions-template.wsc, then save ~UserActions-template.wsc over the top of your ~UserActions.wsc. This will upgrade your ~UserActions.wsc. 
#Look at ~UserActions-template.wsc and note any newly added methods. Add them to the interface section (XML) of your ~UserActions.wsc, and add the corresponding template method code to your ~UserActions.wsc. This will also upgrade your ~UserActions.wsc. 
----
^^Copyright &copy; 2000-<<today YYYY>>, Robert B. Denny, Mesa AZ
Sometimes ACP's standard image file naming and/or folder usage is not well suited for a particular observatory's use. Since ACP is designed to be usable by a wide spectrum of astronomers, we've provided a way to customize the image (and log) file naming, as well as the folder paths and names for same. This facility treats "light" images separately from calibration images and log files. 
|!NOTE|
|Lost? Having trouble visualizing what is going on with customizing? Try the Template Generator Tool. Having trouble finding the image and log files themselves and/or the configuration files you may have already set up? Try the Where Are My Files? tool!|

To activate this feature for a particular class of files (image, dark/bias, or log), you need to create a corresponding template text file (with notepad or your favorite text editor) in the ACP configuration folder (typically ''...Public Documents\~ACPConfig''). 
*For live images, the config file is ''@@color:#0F0;~ImageFileConfig.txt@@''. 
*For dark/bias files, it is ''@@color:#0F0;~CalFileConfig.txt@@''. 
*For log files, it is ''@@color:#0F0;~LogFileConfig.txt@@''. 
For ''flat fields'' generated by ACP's automatic flat feature, the folder and file template strings are included in the ''~AutoFlatConfig.txt'' file. See Getting Started in the ACP Help ~AutoFlat documentation for other info on ~AutoFlatConfig.txt; the template information is given below in ''~AutoFlat File and Folder Customization''.
!Template Concept
Folder and fiile paths and names are constructed by ACP using the concept of a template which can consist of simple text with substitution tokens interspersed. For example, let's say we want our image file names to be like __''Image of @@color:#0F0;M-57@@ taken on the night of @@color:#0F0;27-Dec-2014.fts@@''__. For this we would use a template of

|Image of @@color:#0F0;&#36;TGTNAME@@ taken on the night of @@color:#0F0;&#36;DATENITE@@|

where the tokens (see below for the list of tokens) &#36;TGTNAME and &#36;DATENITE are replaced at observation time by the name of the target and the local date for the evening on which the run started. The key concept here is that //the naming template can contain both simple text as well as the substitution tokens//.
!Config File Format (Light, Dark, Bias and Log files) 
The format of the config files (for each type of image) is the same. Blank lines and lines beginning with ; are considered to be comments. At least one line (see next section) needs to have the template for the path and name of the corresponding class of files. To generate customized file and folder paths and names, the template can contain "tokens" which will be replaced by ACP to form the final folder/file path and name. For example, an ''~ImageFileConfig.txt'' containing 
|&#36;DEFPATH\&#36;DATENITE\&#36;~TGTNAME-S&#36;~SETNUM-R&#36;~RPTNUM-C&#36;~CNTNUM-&#36;FILTER|
will result in the normal/default folder and file naming for light images that ACP provides without customization. The other config files are ''~CalFileConfig.txt'' (dark/bias images) and ''~LogFileConfig.txt'' (log files). 
|!NOTE|
|Do not include the file type (extension) such as .fts or .fit in the templates!|
!Template Generator Tool
In order to get started with the templates, ACP includes a tool that constructs a template based on your choices. Obviously, the __limitless__ ways that you can set up folders and files aren't covered by this tool. However, the tool anticipates some useful and common setups. At a minimum, playing with this for a few minutes should help you "get it". 

To ind the tool, search in the ~ACPHelp.chm file for: ''File/Folder Customization Tool (Template Generator).''
!~Per-User and Separate Web Templates (advanced)
It is possible to have special file/folder naming for one or more web users. You can specify one template for all web users and/or separate templates for one or more web users. To do this, precede any default template (as described above) with user-specific templates, then (optionally) a web-specific template (applies to all web users who don't have specific templates, then end the file with the (optional) override template as described in the preceding section. Web users are designated by enclosing their login username in square brackets. An "all web users" template is specified with [*]. The user-specific templates must come first, followed by a possible all-web-users template, followed by a possible default template. Some examples should make this clearer:

|[*] &#36;DEFPATH\&#36;~DATENITE-&#36;~TGTNAME-S&#36;~SETNUM-R&#36;~RPTNUM-C&#36;~CNTNUM-&#36;FILTER|
The above gives web users a naming where file names start with the "run date" (see below) instead of creating separate folders with the run-date name. Note the '-' after &#36;DATENITE, which makes it part of the file name. Local users get the standard ACP naming. 

|[*] &#36;DEFPATH\&#36;~DATENITE-&#36;~TGTNAME-S&#36;~SETNUM-R&#36;~RPTNUM-C&#36;~CNTNUM-&#36;FILTER|
|&#36;DEFPATH\&#36;DATEUTC\&#36;~TGTNAME-S&#36;~SETNUM-R&#36;~RPTNUM-C&#36;~CNTNUM-&#36;~MERSIDE-&#36;FILTER|

The above gives all web users the custom naming from the previous example, and gives local users folders with the UTC date name (instead of the run date) as well as adding East/West meridian status to file names. 

|[jdoakes] &#36;DEFPATH\&#36;~TGTNAME-S&#36;~SETNUM-R&#36;~RPTNUM-C&#36;~CNTNUM-&#36;FILTER|
|[kblack]  D:\kblackastro\&#36;~TGTNAME-S$~SETNUM-R&#36;~RPTNUM-C&#36;~CNTNUM-&#36;FILTER|
|[*]       &#36;DEFPATH\&#36;~DATENITE-&#36;~TGTNAME-S&#36;~SETNUM-R&#36;~RPTNUM-C&#36;~CNTNUM-&#36;FILTER|
|&#36;DEFPATH\&#36;DATEUTC\&#36;~TGTNAME-S&#36;~SETNUM-R&#36;~RPTNUM-C&#36;~CNTNUM-&#36;~MERSIDE-&#36;FILTER|

The above gives web users jdoakes and kblack their own file/folder naming, all other web users a different naming, and local users yet another naming.

|!NOTE|
|Be sure to specify (optional) web-user-specific templates first, then the (optional) all-web-user template, with the (optional) default template last.|
!Substitution Tokens 
So what are the &#36;//XXX// tokens that are used for substitution? And which ones are applicable for image vs dark/bias vs log files, filters and folders? Here's the list of [[Substitution Tokens (ACP)]].
!~AutoFlat File and Folder Customization
The template strings for custom ~AutoFLat file/folder naming are part of the file ~AutoFlatConfig.txt. Rather than using a single template string as above, there are separate templates for folders and files. The format of each is similar to those described above, and appear in ~AutoFlatConfig.txt to produce the default/standard naming. See the same table of [[Substitution Tokens (ACP)]] for those that can be used in the ''Folder Template'' template string.
----
!Custom Image/Log Folder and File Naming
You can override the standard image folder and file naming used by Scheduler. Open the file ''~Sample-ImageFileConfig.txt'' with Notepad and read the instructions there. This file can contain a //template// for the complete path/name for image files. There are over 15 dynamic substitution tokens that you can put into your template line. These will be replaced by the current values of the tokens each time a file path/name is constructed.  See [[Substitution Tokens (Scheduler)]] for the list of tokens.

Once you have made your edits, save the file as ''~ImageFileConfig.txt'' (without the Sample-) to make your changes active.

|!NOTE|
|Keep in mind that you can alter both folder paths as well as image file names. Folders are automatically created as needed.|

Similarly, you can override the standard ACP run log folder and file naming used by the Scheduler. Open the file ''~Sample-LogFileConfig.txt'' with Notepad and read the instructions there. This file can contain a template for the complete path/name for image files. These will be replaced by the current values of the tokens each time a file path/name is constructed.

Once you have made your edits, save the file as ''~LogFileConfig.txt'' (without the Sample-) to make your changes active.
!Overriding the default images folder in Schedule Browser
The custom folder and file name template applies to all images acquired by the scheduler. You can also specify overriding folder names for entire projects, plans, observations, and image sets while working with the Schedule Browser. Right click on a tree node and select Folder for ~ImageSets. You can then browse folders (and create new folders). When you complete the folder selection it will be applied to all image sets under the tree node you selected. The same option can be used to remove/clear previous folder overrides.

The Folder field in the ~ImageSet window can be used to override the default folder for a single image set.
!Redirecting Scheduler Engine Logs to Custom Folder (e.g. for ~Web-Visibility)
You can change the location into which the Scheduler writes its log files (as opposed to the logs of ACP observing activity). This feature was added so that Scheduler logs could be made web-visible or mapped to a ~DropBox folder. To do this, redirect the logs to ACP's web document root, in its ''files'' subfolder. This folder is visible to all ACP web users. Or you may want to have the logs written elsewhere like to a network share. Be careful, though - if the network share goes down, the Scheduler will die. The setting is located in the Dispatcher section of Scheduler's configuration window.
You can customize the operation of ACP in several interesting ways. Click the links below to go to those pages.

[[Filter Usage and Focus Offsets]]
[[Custom File and Folder Names (ACP)]]
[[Custom File and Folder Names (Scheduler)]]
[[Web, Error, and Weather Alert Sounds]]
[[Tip of the Day Messages]]
[[Registry Settings]]
[[Adding to ACP Logic]]
[[Embedding an iframe into a Tiddler]]
[[Adding a "dropbox"]]
[[Modifying Utility Tasks to enable starting scripts]] 

----
{{borderless{
|[[Click here to open in a new browser tab|http://forums.dc3.com]]|
<html><div align="center"><iframe src ="http://forums.dc3.com" width="100%" align="center" height="600">< /></div></html>}}}
----
|!Close this window when the files finish downloading.|
----
{{borderless{
|[[Click here to open in a new browser tab|http://tycho2.dc3.com/]]|
<html><div align="center" style="background-color:white"><iframe src ="http://tycho2.dc3.com/" width="100%" align="center" height="300">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://archive.stsci.edu/cgi-bin/dss_plate_finder]]|
<html><div align="center"><iframe src ="http://archive.stsci.edu/cgi-bin/dss_plate_finder" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
----
|[[Click here to open in a new browser tab|http://darksitefinder.com/maps/world.html]]|
<html><div align="center"><iframe src ="http://darksitefinder.com/maps/world.html" width="100%" align="center" height="600">< /></div></html>}}}
----
from: ''Jeffrey Jongmans''
*Just copy this tiddler into your own ACP environment
<html><img src=http://www.timeanddate.com/scripts/sunmap.php?earth=1 border=0 width=720px></html>
----
{{borderless{
* See also: ''http://www.ccdphotography.com/''
----
|[[Click here to open in a new browser tab|http://www.ccdimages.com/Default.aspx/]]|
<html><div align="center"><iframe src ="http://www.ccdimages.com/Default.aspx" width="100%" align="center" height="600">< /></div></html>}}}
----
!ACP Deep Sky Catalog
The ACP deep sky catalog is a file of J2000 coordinates for over 45,000 designations of deep sky objects. The catalog is a combination of the [[Saguaro Astronomy Club (SAC) V8.1 catalog]], the [[Sharpless Catalog]], the [[Arp Catalog]] and the PGC galaxies from the [[Third Reference Catalog of Bright Galaxies (RC3)]]. Almost all objects are listed by the catalog abbreviation, followed by a space, followed by the number in that catalog. 
|>|>|!Examples|
|M 51          |MCG -03-01-01   |Bochum 15|
|NGC 2100      |vdB 150         |Sh 2-122|
|PGC 63008     |PK 26-11.1      |LBN 623|
|Arp 312       |Abell 347       |ESO 350-23|
!!!Searching the Catalog
The ACP "Slew or Sync (catalog)" window, as well as the Color Series form on ACP's web user interface, have a Search button. This displays another interface with which you can do powerful searches of the Deep Sky Catalog. The "Match pattern" box is where you enter your search specification. The power of the catalog search facility is in the construction of the match pattern. This simple form can do very sophisticated searches. First, let's look at the simplest way to use it: 

!!!Simple Match Pattern - //Contains//
The easiest way to search is to enter some part of the name into the "Match pattern" box and click Search. This will return any object whose name contains the characters you entered. For example, "M" will match all objects that contain the letter "M" or "m". 

!!!Simple Match Pattern - //Starts With//
If you want to specify the //starting characters// of the name, prefix your pattern with an up-arrow. For example, "^M" will match all objects that begin with the letter "M". For just Messier objects, which begin with M and a space, enter "^M " (note the space after the M). 

!!!General Pattern - //Regular Expression//
You can perform arbitrarily complex catalog searches with the use of //regular expression// match patterns. If you haven't encountered these before, they can be a bit intimidating. Play around with regular expressions a bit and you may find they will enhance your searching ability greatly. If you already know about regular expressions, you will immediately be able to use the full power of ACP's catalog searching facility. 

The following table shows the meta-characters that can be used in regular expression searches of the ACP Deep Sky Catalog. Multi-line features are not available. You have already seen the use of the up-arrow to force beginning-of-text matching.


|!Character|!Description|
|\  |Marks the next character as either a special character or a literal. For example, "n" matches the character "n". "\b" matches a word boundary. The sequence "\\" matches "\" and "\(" matches "(".|
|^  |Matches the beginning of input.|
|$  |Matches the end of input.|
|*  |Matches the preceding character zero or more times. For example, "zo*" matches either "z" or "zoo".|
|+  |Matches the preceding character one or more times. For example, "zo+" matches "zoo" but not "z".|
|?  |Matches the preceding character zero or one time. For example, "a?ve?" matches the "ve" in "never".|
|. |Matches any single character.|
|x&#124;y |Matches either x or y. For example, "z&#124;wood" matches "z" or "wood". "(z&#124;w)oo" matches "zoo" or "wood".|
|{n} |n is a nonnegative integer. Matches exactly n times. For example, "o{2}" does not match the "o" in "Bob," but matches the first two o's in "foooood".|
|{n,}  |n is a nonnegative integer. Matches at least n times. For example, "o{2,}" does not match the "o" in "Bob" and matches all the o's in "foooood." "o{1,}" is equivalent to "o+". "o{0,}" is equivalent to "o*".|
|{n,m}  |m and n are nonnegative integers. Matches at least n and at most m times. For example, "o{1,3}" matches the first three o's in "fooooood." "o{0,1}" is equivalent to "o?".|
|[xyz]  |A character set. Matches any one of the enclosed characters. For example, "[abc]" matches the "a" in "plain".|
|[^xyz]  |A negative character set. Matches any character not enclosed. For example, "[^abc]" matches the "p" in "plain".|
|[a-z]  |A range of characters. Matches any character in the specified range. For example, "[a-z]" matches any lowercase alphabetic character in the range "a" through "z".|
|[^m-z]  |A negative range characters. Matches any character not in the specified range. For example, "[m-z]" matches any character not in the range "m" through "z".|
|\b  |Matches a word boundary, that is, the position between a word and a space. For example, "er\b" matches the "er" in "never" but not the "er" in "verb".|
|\B  |Matches a non-word boundary. "ea*r\B" matches the "ear" in "never early".|
|\d  |Matches a digit character. Equivalent to [0-9].|
|\D  |Matches a non-digit character. Equivalent to [^0-9].|
|\s  |Matches any white space including space, tab, form-feed, etc. Equivalent to "[ \f\n\r\t\v]".|
|\S  |Matches any nonwhite space character. Equivalent to "[^ \f\n\r\t\v]".|
|\w  |Matches any word character including underscore. Equivalent to "[~A-Za-z0-9_]".|
|\W  |Matches any non-word character. Equivalent to "[^~A-Za-z0-9_]".|
----
Jim ~McMillan's quest to achieve the goal of unattended imaging.

{{borderless{
<html><iframe id="mcmillan" src="RefDocs/McMillanDeepSkyImagingOct2005.pdf" scrolling="auto" height="600" width="100%" ></iframe></html>
}}}
----
!!!If you upgraded from ACP 5.1

The location and names of the ''~WebDocs'' and ''~WebLogs'' folders remains unchanged in Windows XP:

{{indent{C:\Program Files\ACP Obs Control\~WebDocs
{{indent{C:\Program Files\ACP Obs Control\~WebLogs

Note that the ACP version 6 installer does not rename or move these folders. 

Optionally, after completing the upgrade to ACP version 6 you can manually move the ''~WebDocs'' and ''~WebLogs'' folders to any new location. Using the new folder location provides no additional functionality. However, it allows user files to be moved out of the Program Files folder, which is a security strategy recommended by Microsoft. This strategy is enforced by the ACP version 7 installer.

!!!If you undertook a new installation

The v5/v6 ''~WebDocs'' folder is now called @@color:#db0;''Doc Root''@@ and the v5/v6 ''~WebLogs'' folder is called @@color:#db0;''Server Logs''@@.

The locations of the folders will be as follows:

|!Windows XP|
|C:\Documents and Settings\All Users\Documents\ACP Web Data\Doc Root|
|C:\Documents and Settings\All Users\Documents\ACP Web Data\Server Logs|

|!Windows 7|
|C:\Users\Public\Documents\ACP Web Data\Doc Root|
|C:\Users\Public\Documents\ACP Web Data\Server Logs|

!!!ACP Configuration Files in ACP v7 on Windows 7

#ACP's configuration files such as ''~AutoFlatConfig.txt, ~FilterInfo.txt, ~BadBrightStars.txt, ~RoModeInfo.txt'', and the file/folder naming template files are now kept in the "Public Documents" folder under ACP Config instead of under Program Files\ACP (which is normally prohibited for access under Windows 7).

.../Users/Public Documents/ACP Config
....../~AutoFlatConfig.txt
....../~FilterInfo.txt
....../~BadBrightStars.txt
....../~RoModeInfo.txt

.../Users/Public Documents/ACP Web Data
.../Users/Public Documents/ACP Web Data/Doc Root
.../Users/Public Documents/ACP Web Data/Server Logs

In summary,

|!Path to web document root|
|C:\Documents and Settings\All Users\Documents\ACP Web Data\Doc Root (for Windows XP)|
|C:\Users\Public\Public Documents\ACP Web Data\Doc Root (for Windows 7/Vista)|

|!Path to folder for web/FTP activity logs|
|C:\Documents and Settings\All Users\Documents\ACP Web Data\Server Logs (for Windows XP)|
|C:\Users\Public\Public Documents\ACP Web Data\Server Logs (for Windows 7/Vista)|
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
[[ACP Reference Guide]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = 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) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
ABSTRACT
The LONEOS photometric catalogue is a compilation by Brian Skiff that contains the V magnitudes of more than 17,000 standard stars. The catalogue contains stars from various publications of photometry of open clusters, magnitudes of AAVSO comparison stars and all the Landolt standard stars. The catalogue is considered as the best source of V magnitudes and is available on ~VizieR.

In a previous work Roger Dymock and Richard Miles derived a formula for calculating V magnitudes from the ~CMC14 catalogue using the r’ Sloan magnitude with a precision of 0.05. However ~CMC14 only covers an area with declinations from +20 to -20. The recently published ~UCAC3 catalogue however covers the whole sky and has an aperture and model fit magnitudes as well as R magnitude from ~SuperCosmos.

This paper describes the analytically determined transformation for deriving a V magnitude from ~UCAC3 with a standard error of 0.08 magnitudes.

|!Close this window after download completes|
{{borderless{
<html><iframe src ="RefDocs/V-UCAC3.pdf" scrolling="auto" height="600" width="850">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://brucegary.net/DifferentialPhotometry/dp.htm]]|
<html><div align="center"><iframe src ="http://brucegary.net/DifferentialPhotometry/dp.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cyanogen.com/]]|
<html><div align="center"><iframe src ="http://www.cyanogen.com/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://download.cnet.com/Dimension-4/3000-2094_4-10039998.html]]|
<html><iframe src ="http://download.cnet.com/Dimension-4/3000-2094_4-10039998.html" width="100%" height="600">< /></div></html>}}}
----
Directives may be interspersed within the target lines in your observing plans. The system recognizes a directive by its first non-blank character, which must be a "&#35;". Directives come in five flavors, and they are arranged in the following hierarchy. Click on the Title lines to read more details about each directive.

<<<
[[Directives that affect the plan as a whole]]. These can appear anywhere in your plan, but only one time. 
&nbsp;#SETS
&nbsp;#AFINTERVAL
&nbsp;#ALWAYSSOLVE
&nbsp;#DUSKFLATS
&nbsp;#MINSETTIME
&nbsp;#QUITAT
&nbsp;#SHUTDOWNAT
&nbsp;#SHUTDOWN
&nbsp;#STARTSETNUM
&nbsp;#COMPLETIONSTATE
>[[Directives that affect the current and all subsequent targets]], until you change them.
>&nbsp;#COUNT
>&nbsp;#INTERVAL
>&nbsp;#FILTER
>&nbsp;#BINNING
>&nbsp;#SUBFRAME
>&nbsp;#POSANG
>&nbsp;#DITHER
>&nbsp;#DIR
>&nbsp;#TRACKON
>&nbsp;#TRACKOFF
>&nbsp;#READOUTMODE
>&nbsp;#DEFOCUS
>>[[Directives that affect only the next target]]. These must precede each target they are to act on.
>>&nbsp;#REPEAT
>>&nbsp;#CALIBRATE
>>&nbsp;#AUTOGUIDE
>>&nbsp;#STACK
>>&nbsp;#STACKALIGN
>>&nbsp;#AUTOFOCUS
>>&nbsp;#POINTING
>>&nbsp;#NOPOINTING
>>&nbsp;#NOPREVIEW
>>&nbsp;#NOSOLVE
>>&nbsp;#WAITFOR
>>&nbsp;#WAITUNTIL
>>&nbsp;#WAITINLIMITS
>>&nbsp;#WAITZENDIST
>>&nbsp;#WAITAIRMASS
>>&nbsp;#TAG
>>>[[Directives that act themselves like targets]]. (Targets themselves go here, too.)
>>>&nbsp;#DARK
>>>&nbsp;#BIAS
>>>&nbsp;#MANUAL
>>>&nbsp;#CHILL
>>>&nbsp;#DOMEOPEN
>>>&nbsp;#DOMECLOSE
>>>&nbsp;#NOWEATHER
[[Directives that terminate the plan]]
&nbsp;#CHAIN
&nbsp;#DAWNFLATS
&nbsp;#SCREENFLATS
&nbsp;#CHAINSCRIPT
<<<
[[Sample Observing Plans]] has some typical plans that show how to build more detailed plans.
----
!These act like targets

|!#DARK|
Acquire a ''dark'' //or// ''bias'' frame using the current target exposure interval. If you set #INTERVAL to 0 before using #DARK, ACP will acquire a bias frame, and the file naming will be adjusted. It is recommended, however, to use the #BIAS directive described below. You can use the #REPEAT directive to acquire multiple darks or biases. Multiple darks/biases will be sequence numbered as well as carrying the current #SET number, similar to file naming for light images (except no filter name is included of course). For example: 
|#DARK|

results in one or more files of the form Dark-//~Snnn-Rnnn//.fts, or if the preceding #INTERVAL was 0, Bias-//~Snnn-Rnnn//.fts. 

An optional ''complete'' file path and name may be given, in which case the dark or bias will be created in the given folder with the //exact given name//. Dark vs bias name changing and sequencing are not done. Any existing file with that name will be //replaced//. For example: 
|#DARK D:\~MyCalibration\2006012\~Dark-Bin2.fts|

|!#BIAS|
Acquire a ''bias'' frame using the current target exposure interval. You can use the #REPEAT directive to acquire multiple biases. Multiple biases will be sequence numbered as well as carrying the current #SET number, similar to file naming for light images (except no filter name is included of course). For example: 
|#BIAS|results in one or more files of the form ~BIAS-//~Snnn-Rnnn//.fts.| 

An optional ''complete'' file path and name may be given, in which case the bias will be created in the given folder with the //exact given name//. Any existing file with that name will be //replaced//. For example: 
|#BIAS D:\~MyCalibration\2006012\~Bias-Bin2.fts|

|!#MANUAL|
Acquire an image at the current telescope location. No pointing updates or slews will be done. This is actually a type of target, so don't include a target line. Include an object name. For example: 
|#MANUAL  ~MyImage|

If you don't include an object name, the current date/Time will be used. For example: 
|#MANUAL|

results in an image file name of Manual-//dd-mm-yyyy@hhmmss-~Snnn-Rnnn-filter//.fts 

|!#CHILL|
If needed, turns on the imager's cooler and waits for 5 seconds. In any case, the imager's temperature setpoint is changed to the given temperature (&deg;C). After the change, ''#CHILL'' waits for up to 15 minutes for the cooler to reach a temperature within the given tolerance (or 2 &deg;C, default) of the setpoint. This is actually a type of target, so you can wait before it, have the imager cooled, then wait again so that imaging starts later. If the cooler does not reach the given temperature and tolerance, the plan fails with an error. For example:  
|#CHILL  -35.0|
|#CHILL  -35.0, 0.2|

If your application requires tight temperature tolerances, you can include one of these directives for every target. Thus, before starting on a target, ACP will change or verify the cooler temperature, and fail if it does not meet your criteria.

|!#DOMEOPEN|
Opens the shutter or roll-off roof, and waits until the shutter or roof is actually open. This directive will un-home or un-park the dome if needed. Effective only during the first or only set-loop of the plan. This is actually a type of target, so you can wait before it, have the shutter or roof opened, then wait again so that imaging starts later. For example: 
|#DOMEOPEN|

|!NOTE|
|If you have a dome or roof that is potentially hazardous, ACP will allow you to start your plan. If your plan attempts to slew before the shutter/roof is in a safe condition, the slew will result in an immediate script error.|

|!#DOMECLOSE|
Closes the shutter or roll-off roof, and waits until the shutter or roof is actually closed. Effective only during the last or only set-loop of the plan. For example: 
|#DOMECLOSE|

|!#NOWEATHER|
Disconnects the weather input. This is provided so that you can do calibration frames (darks/biases) in unsafe weather without the weather safety interrupt. Normally follows ''#domeclose''. __Weather will not be disconnected if the dome or roof is open.__ If you have no dome or roof, this will disconnect the weather, so beware! This latter logic is for special cases where the roof or enclosure is not under ACP's control and is sure to be closed in unsafe weather by another means (such as observatory pods housing multiple telescopes). For example:
|#NOWEATHER|
----
!These affect only the next target:

|!#REPEAT|
See [[Sets, Repeats, and Filter Groups]]. Tells script to take the given number of filter groups of the next target or dark/bias frame (#DARK) in a row. #REPEAT may be combined with #SETS. For example: 
|#REPEAT 5|

|!#CALIBRATE|
Forces calibration of the images for this target, even if ACP's auto-calibration preference is turned off (it is redundant if ACP's auto-calibration is turned on). This will not cause calibration of pointing exposures, only the final images. See [[Using Auto-Calibration]]. For example: 
|#CALIBRATE|

|!#AUTOGUIDE|
This directive forces the next target's images to be guided, regardless of the setting of ACP's "enable autoguiding" preference or the duration of the exposure(s). For example:
|#AUTOGUIDE|

|!#STACK|
Combines repeated images within one filter group ''without aligning'' into a single image. Individual images used in the stack are preserved. File names will have -STACK in place of the repeat number. This is most useful when doing orbital tracking. See #TRACKON. The stacked image is saved in IEEE floating-point FITS format to preserve the dynamic range. For example: 
|#STACK|

|!#STACKALIGN|
Combines repeated images within one filter group ''and aligns'' images into a single image. Individual images used in the stack are preserved. File names will have STACK in place of the repeat number. Use this for all stare-mode image sets. The stacked image is saved in IEEE floating-point FITS format to preserve the dynamic range. For example: 
|#STACKALIGN|

|!#AUTOFOCUS|
See [[Sets, Repeats, and Filter Groups]]. Automatically refocus the optical system before each //filter group// in the filter group for this target. In order to preserve compatibility with the old target-per-filter plan format, this is modified if there is only one filter group. In this case, the autofocus is done once for the target, even if #repeat is greater than one. This requires that ~FocusMax 3.4.1 or later be installed and autofocus be enabled in ACP's preferences. For example: 
|#AUTOFOCUS|

|!NOTE|
|See the #AFINTERVAL directive (in [[Directives that affect the plan as a whole]]) for periodic autofocus. If your filters are non-parfocal, consider setting up a focus offset table so you can avoid wasting time focusing on each filter change. Finally, ACP has an //adaptive autofocus// feature. If you turn this on (in the ~AutoFocus tab of Preferences), then ACP will monitor the half-flux diameter (a measurement of focus quality) and autofocus when needed.|

|!#POINTING|
Schedule a pointing update prior to the target. This will work even if auto-center is disabled in Preferences. Thus, you can use #POINTING as a means to manually control when pointing updates occur in a plan. For example: 
|#POINTING|

|!#NOPOINTING|
Prevent the pointing update prior to the target. Harmless if auto-center is disabled in Preferences. For example:
|#NOPOINTING|

|!#NOPREVIEW|
Prevent the generation of preview images for the web System Status display. This can save significant time per image, maximizing efficiency at the cost of no "last image preview" thumbnail or clickable light box image. For example:
|#NOPREVIEW|

|!#NOSOLVE|
Prevent final/data image plate solving for all of the images of the current target. Harmless if final/data image solving is disabled in Preferences. For example: 
|#NOSOLVE|

|!#WAITFOR|
Pause for the given number of seconds before processing the next target. For example: 
|#WAITFOR  30|

|!#WAITUNTIL (date/time)|
Pause during a specific set (see #SETS) until the given ''UTC'' date/time or (only) time. The first parameter is the set number for the pause, the second is the date/time at which to resume. The set number may range from 0 through the number of sets given by the #SETS directive. If there is no #SETS directive on the plan, the set number must be 1. If the set number is 0, it means "wait on //all// sets." This is useful, when only a time is given, for plans that are stopped before completion then resumed on subsequent nights. If a //complete// date/time is given, and has passed, the directive is ignored. If only a time is given, it will wait //for up to 12 hours//. If the time is less than 12 hours in the past, it will not wait. The idea is that the time is relative to that observing night, and may be re-used on the next night.See the note below. For example: 
|#WAITUNTIL  1, 21-Apr-2011 08:02:00|Wait until 08:02 UTC only if set #1 and only if 21-Apr-2011|
|#WAITUNTIL  2, 08:32:00|Wait until 08:32 UTC if set #2 no matter what the date is|
|#WAITUNTIL  0, 09:21:00|Wait until 09:21 UTC on any night on any set #|

The date/time format is flexible. We use US English here, so acceptable formats for us include:

|7/3/06 08:22|
|07/03/2006 18:34:24|
|03-July-2006 06:34 PM|

You can use any acceptable date/time format for //your version (language) of Windows//.

|NOTE|
|If the date part is not included, the directive will wait //for up to 12 hours//. This allows plans to be re-used for multiple runs. If the time is less than 12 hours in the past, it will not wait.|

|!#WAITUNTIL (sun-down angle)|
Pause during a specific set (see #SETS) until the Sun gets below the given angle, degrees (__must be a negative number__). The first parameter is the set number for the pause, the second is the negative sun-down angle (degrees) at which to resume. The set number may range from 0 through the number of sets given by the #SETS directive. If there is no #SETS directive on the plan, the set number //must// be 1. If the set number is 0, it means "wait on //all// sets". This is mostly useful for runs that start before dusk. The directive waits for the //nearest dusk//, so if you start a run with this directive after solar nadir, it will wait until the upcoming dusk! For example: 
|#WAITUNTIL  1, -10.5|Wait until the Sun gets to 10.5 degrees below the horizon if set #1|
|#WAITUNTIL  0, -10.5|Wait until the Sun gets to 10.5 degrees below the horizon on any night on any set #|

|!#WAITINLIMITS|
Pause until the target is within the observatory limits: minimum elevation, horizon, and any tilt-up limit. If target will never meet the criteria, it is immediately skipped. A maximum time to wait (minutes) must be included. For Example: 
|#WAITINLIMITS  60|This will wait for the target to rise above the observatory limits for up to 60 minutes.| 

|!#WAITZENDIST|
Pause until the target is within the given zenith distance (degrees) for up to the given time (minutes). If the target will never get within the given zenith distance, or won't get there within the time limit, it is skipped. A maximum time to wait (minutes) must be included. For Example: 
|#WAITZENDIST  40, 30|This will wait until the target is within 40 degrees of the zenith for up to 30 minutes.| 

|!#WAITAIRMASS|
Pause until the target is at or below the given air mass. If the target will never get within the given air mass, or won't get there within the time limit, it is skipped. A maximum time to wait (minutes) must be included. For example: 
|#WAITAIRMASS  2.5, 30|This will wait until the target is at or below 2.5 air masses for up to 30 minutes.| 

|!#TAG|
Adds a named //tag// to the target. This directive does not affect the image acquisition process; it simply attaches the tag name and value to the target. You can specify as many of these as you want (each with different names) for any target. The tag name(s) and value(s) will be echoed to the run log, but this is most useful when you have __custom actions__ defined for ~TargetStart and ~TargetEnd. These custom actions are passed a Target object as a parameter. Within the custom action, you can refer to tags by their name (as you defined them) with the syntax Target.Tags.name. Thus, you can use tags to alter the action of ~TargetStart and ~TargetEnd based on the tags' value(s). This is an expert feature and allows powerful custom logic to be implemented. The syntax is #TAG name=value. There must be an '=' in the #TAG directive. For example: 
|#TAG type=reference star|This will attach a tag named "type" with the value equal to "reference star" to the target.|
----
!These affect the current and all subsequent targets

|!#COUNT|
See [[Sets, Repeats, and Filter Groups]]. Used only when specifying a filter group. For example: 
|#Count  5,10,5,15|

|!#INTERVAL|
See [[Sets, Repeats, and Filter Groups]]. Set the final target exposure interval(s), in seconds, for subsequent targets. For example:
|#INTERVAL 31.5|
|#INTERVAL 180,240,180,180|

|!#FILTER|
See [[Sets, Repeats, and Filter Groups]]. Required if the system has filters. Set the filter(s) for subsequent targets. If the filter name is not recognized, an error is logged at plan start, and the plan will not run. For example: 
|#FILTER Blue|
|#FILTER Red,Clear,Green,Blue|

|!#BINNING|
See [[Sets, Repeats, and Filter Groups]]. Sets the binning factor(s) for subsequent targets. Note that some detectors don't support arbitrary binning values. Consult the documentation for your detector for specifics. Note: for auto-calibration, of the binned size must be available in ~MaxIm's calibration groups. For example: 
|#BINNING 4|
|#BINNING 2,1,2,2|

|!#SUBFRAME|
Sets the fraction of the chip to be used for subsequent images. Legal values are 0.1 to 1.0 (full frame). For example, if the chip is 1K by 1K (1024 by 1024), a subframe of 0.5 will result in using the center 512 by 512 pixels of the chip. For example: 
|#SUBFRAME  0.5|

|!#POSANG|
__Required if a rotator is connected in ACP__. If a rotator is installed and __connected in ACP__, sets the position angle for subsequent images. The value of the position angle ranges from 0 up to but not including 360 degrees. 0 Degrees is pole-up, and the angle increases counterclockwise, that is, north toward east. The rotator will be positioned correctly regardless of GEM meridian flip, and the guider will be adjusted accordingly as well. For example: 
|#POSANG 240.5|

|!#DITHER|
Offset each image in a repeat-set by some small amount away from the original target location. Works for both guided and unguided images. If no parameter is given, ACP uses a value of 5 //main imager// pixels for dithering (see below). Normally, this value will be appropriate for achieving the noise reduction effect of dithering. Dithering is done by generating //two// uniform random numbers ranging from minus to plus the "amount". One is applied in the X direction, the other in the Y direction. Note that you must supply a value for the guider's plate scale in order for ACP to calculate main imager pixels for guided dithering. If you fail to do this, a warning message will appear in your run log and dithering will be in guider pixels.

//If given//, the parameter specifies the //maximum// amount //in each axis// of this offset in fractional pixels. A parameter value of 0 disables dithering. The random offsets are applied independently in X and Y and are always relative to the initial position. For example: 
|#DITHER        ; Automatic dithering|
|#DITHER 3.0    ; 3 pixels dither on the image|
|#DITHER 0      ; Disable dithering|

|!#DIR|
__Temporarily__ change the directory into which all subsequent images are to be stored. This can be a //relative// or //full// (with a drive letter) directory path, with multiple levels. If relative, the folder is relative to the default image folder as configured in the Local User tab of ACP Preferences (or for web users, their images folder). The folder, including all intermediate levels, is created if needed. For example: 
|#DIR C:\Special\Comet Search\28-Sep-2003  //(absolute)//|
|#DIR Photometric Standards\Landolt  //(relative)//|

If //no folder name// is given, this will switch back to the default image folder as configured in the Local User tab of ACP Preferences (or for web users, their images folder) plus the usual date-based subfolder. For example: 
|#DIR          ; Restore default image folder|

|NOTE|
|The file path/name customization feature should be used to __permanently__ change image file names and folders. This directive will override the custom folder, and if #DIR is given without a folder name, the custom folder will be restored.|

|!#TRACKON|
Initiates //orbital tracking// of solar system bodies. This remains in effect until canceled by #TRACKOFF. Orbital tracking will not be done except for solar system bodies, so non-solar-system targets may be intermixed without harm. Autoguiding will not be done if orbital tracking is active. Note that orbital tracking requires orbital elements as the target specification (major planet targets will also be tracked). For example: 
|#TRACKON|

|!#TRACKOFF|
Cancels orbital tracking. This remains in effect until re-enabled with #TRACKON. For example: 
|#TRACKOFF|

|!#READOUTMODE|
Selects the imager's readout mode for the current target and all subsequent targets. __The imager must support readout modes__, and the name you give must be supported by your imager. You can see which readout modes (if any) are supported by looking on the MaxIm DL CCD control window's "Expose" tab. Pointing exposures will always use Fast or Normal, so this will not impact pointing update times. For example: 
|#READOUTMODE 8 MPPS (RBI Flood)|

|!#DEFOCUS|
Moves the focuser the given number of integer steps away from proper focus just before acquiring each subsequent image. The focus position is restored immediately after acquiring the image, but this directive does carry from target to target, so unless changed, the focus will be moved away from proper focus before each subsequent image. This does not affect pointing images. For example:  
|#DEFOCUS -150|

|NOTE|
|This should not be used when you have an internal or off-axis guider and the image exposure duration would result in guiding being used. Doing so will obviously defocus the guider -- probably not what you want! If #DEFOCUS is specified, the "aggregate exposure" algorithm will not be used to determine whether guiding will be used, only the individual exposure interval will be considered.|

----
!These directives affect the whole plan.
@@color:#ff0;''These directives may appear anywhere in the plan. If one of these directives appears more than once, the last value given is used for the entire plan.''@@

|!#SETS|
See [[Sets, Repeats, and Filter Groups]]. Repeat the entire plan a given number of times. The images are acquired in round-robin order. The default is a single set. For example:
|#SETS  3|

|!#AFINTERVAL|
Turns on periodic autofocus and forces an autofocus at the start (or resumption) of the plan. The interval is given in minutes. If an #AUTOFOCUS directive is seen, it overrides a scheduled autofocus, and the time to the next autofocus is reset to the interval. For example, to start the plan with an autofocus and then do an autofocus every 30 minutes: 
|#AFINTERVAL  30|

|!#ALWAYSSOLVE|
Normally, when ACP fails to solve a final/data image in a series (the same target/filter/etc.), it will not try to solve again for that series. This prevents wasting time waiting for plate solves that will probably fail again. If you want to override this behavior and force ACP to attempt solving every final/data image, include this directive anywhere in your plan. For example: 
|#ALWAYSSOLVE|

|!#DUSKFLATS|
The plan starts by acquiring a series of automatic sky flats at dusk via the ~AutoFlat.vbs script (which is run under control of ~AcquireImages.js). See ''#DAWNFLATS'' below, and [[Using Automatic Sky Flats]]. __Using this directive will result in an ACP execution error if the observatory is configured to use a light panel for flats__.

If no argument is supplied, there must be a default flat plan named ''defaultduskflat.txt'' or just ''defaultflat.txt'' in the Local User's default plans folder or ~AcquireImages.js will not try to start ~AutoFlat.vbs. This avoids ~AutoFlat.vbs stalling while waiting for flat plan input. If an argument is supplied it can be either a full path to a flat plan, or just a flat plan file name. If just the flat plan file name is given, it is assumed to be in your default Plans folder.  Examples:
|#DUSKFLATS|Need standard flat plan defaultflat.txt in user's default plans folder|
|#DUSKFLATS 20060122-dusk-flats.txt|In user's default plans folder|
|#DUSKFLATS C:\~MasterCalibration\~LRGB-Standard-Flats.txt|In a specified folder|

|!#MINSETTIME|
The minimum amount of time that a set is allowed to take. This can be used to limit the number of sets per unit time. For example:
|#MINSETTIME  00:05|Will tell ACP to wait until at least 5 minutes has elapsed before starting the next set.| 

|!#QUITAT|
Set a "quitting time" at which the plan will stop acquiring images. The quitting date/time is in UTC, and is interpreted the same as for ''#WAITUNTIL''. If you specify ''#DAWNFLATS'', ''#CHAIN'', or ''#CHAINSCRIPT'', these actions will still occur after the plan ends. For example:
|#QUITAT 7/1/01 08:22|If the plan completes before the quit date/time is reached, it ends as usual. If only a time is given, it will always wait until the given time, even if it was just passed.|

|!#SHUTDOWNAT|
Same as ''#QUITAT'', except the scope is parked and the camera is shut down at the quitting time, ''or at normal exit''. The shutdown time is in UTC, and is interpreted the same as for ''#WAITUNTIL''. For example:
|#SHUTDOWNAT  7/1/06 08:22|If the plan completes before the shutdown date/time is reached, it acts as though a ''#SHUTDOWN'' directive was given instead. If only a time is given, it will always wait until the given time, even if it was just passed.|

|!#SHUTDOWN|
At the end of the run, parks the scope and shuts down the camera and cooler. If dome control is active, and if the "Automatically park or home and close AFTER the scope is parked" option is set, then the dome will be parked or homed and the shutter or roll-off roof will be closed. This may be used with ''#DAWNFLATS'', and shutdown will occur after dawn flats have been taken. For example: 
|#SHUTDOWN|

|!#STARTSETNUM|
The starting set number used in naming image files. ''Do not include this in your plans, it is automatically inserted in all plans by ~AcquireImages.js.'' Each time the plan runs to completion, this number is incremented by the number of sets specified in #SETS or by 1. Its main use is to prevent overwriting of images when the same plan is run multiple times. For example: 
|#STARTSETNUM 6|

|!#COMPLETIONSTATE|
The number of sets, targets in the current set, repeats in the current target, filter groups in the current repeat, and images in the current filter group, that have been completed. @@color:#0F0;''Do not include this in your plans. It is automatically inserted in all plans by ~AcquireImages.js each time a target is completed, then removed if and when the plan runs to completion''@@ (at which time #STARTSETNUM is adjusted as described above). Its main use is to allow an interrupted plan to resume at the point where the interruption occurred. For example: 
| #COMPLETIONSTATE 2,4,1,3,1 |
----
!These terminate the plan (last or only set)

|!#CHAIN|
When encountered during the last (or only) set, //immediately// stops reading image acquisition lines from the current plan file, queues a new run of ~AcquireImages.js with the new plan, then exits. A chained-to plan is thus run in a separate invocation of ~AcquireImages.js, and starts with conditions identical to those when the same plan is run directly. Use this to chain together plans, each of which might take several sets of images, then wait for a while, then run the new plan which would also take several sets of images. For example: 
|#CHAIN C:\Program Files\ACP\Plans\~LateNight.txt|

or if you just specify a file name, the plan is assumed to be in the same folder as the plan being chained-from. For example: 
|#CHAIN ~LateNight.txt    ; In current plan's folder|

|!#DAWNFLATS|
When encountered during the last (or only) set, //immediately// stops reading image acquisition lines from the current observing plan file, terminates ~AcquireImages.js, and starts ACP's automatic sky-flat script ~AutoFlat.vbs. If ~AcquireImages.js fails or is aborted, the auto-flats will ''not'' occur. See #DUSKFLATS above, and "//Automatic Flat Fields (Sky and Screen)//" in the ACP Help documentation. __Using this directive will result in an ACP execution error if the observatory is configured to us a light panel for flats__.

If no argument is supplied, there must be a default flat plan named defaultdawnflat.txt or just defaultflat.txt in the Local User's default plans folder or ~AcquireImages.js will not try to start ~AutoFlat.vbs. This avoids ~AutoFlat.vbs stalling while waiting for flat plan input. If an argument is supplied it can be either a full path to a flat plan, or just a flat plan file name. If just the flat plan file name is given, it is assumed to be in your default Plans folder. For example:
|#DAWNFLATS|Need standard flat plan defaultflat.txt in user's default plans folder|
|#DAWNFLATS 20060122-dawn-flats.txt|In user's default plans folder|
|#DAWNFLATS C:\~MasterCalibration\~LRGB-Standard-Flats.txt|Specific file location|

|!SCREENFLATS|
When encountered during the last (or only) set, //immediately// stops reading image acquisition lines from the current observing plan file, terminates ~AcquireImages.js, and starts ACP's automatic flat script ~AutoFlat.vbs. If ~AcquireImages fails or is aborted, the auto-flats will ''not'' occur. See "//Automatic Flat Fields (Sky and Screen)//" in the ACP Help documentation. __Using this directive will result in an ACP execution error if the observatory is configured to us a light panel for flats__. 

If no argument is supplied, there must be a default flat plan named ''defaultflat.txt'' in the Local User's default plans folder or ~AcquireImages will not try to start AutoFlat. This avoids AutoFlat stalling waiting for flat plan input. If an argument is supplied it can be either a full path to a flat plan, or just a flat plan file name. If just the flat plan file name is given, it is assumed to be in your default Plans folder. For example:

|#SCREENFLATS|Need standard flat plan defaultflat.txt in user's default plans folder|
|#SCREENFLATS 20060122-flats.txt|In user's default plans folder|
|#SCREENFLATS C:\MasterCalibration\LRGB-Standard-Flats.txt|Specific file location|


|!#CHAINSCRIPT|
When encountered during the last (or only) set, //immediately// stops reading image acquisition lines from the current plan file, terminates ~AcquireImages.js, and starts the given ACP script. If ~AcquireImages.js fails or is aborted, the chain will ''not'' occur. 

The argument is either the full path/name or just the file name only of the script to be chained-to. If only the script file name is given, it is assumed to be in the ACP scripts folder. For example:

|#CHAINSCRIPT C:\Program Files\ACP Obs Control\Scripts\Cleanup.vbs|
|#CHAINSCRIPT Cleanup.vbs    ; In ACP script folder|
----
!A.  What’s the sidereal rate – how fast does the Earth turn?
*In one day, the Earth turns 360 degrees = 1,296,000 arcsec
*One sidereal day = 23h 56m 4.086s = 86,164.09056 seconds

Thus, the rate of the Earth’s turning is 1,296,000 arcsec / 86,164.09056 seconds = 

        ''Sidereal rate = 15.0410686'' (arcsec/second)

!B.  What’s the plate scale of the camera/telescope system?
*The focal length is usually measured from an astrometric plate solution and is not necessarily the “published” focal length of the instrument.

	''The plate scale is  (206.2648 x pixel size (microns) x binning) / (Focal Length (mm))''  (arcsec/pixel)

!C.  At the sidereal rate, how fast do stars move across the FOV, imaging at the celestial equator?

*The sidereal rate is 15.0410686 arcsec/seconds.
*The plate scale is (206.2648 x pxsize x binning)/FL  arcsec/pixel
Thus, the stars move at a rate =  (15.0410686 x  FL) / (206.2648 x  pxsize  x  binning)  pixels/second = 

	''Drift-rate = (0.07292116 x  FL ) / (pxsize  x  binning)''   (pixels/second)
where FL is in mm, pxsize is in microns, and binning is unitless.  This is the “1x” sidereal rate.

!D.  What about convergence of the meridians?
*Because the meridians converge at higher declinations, the drift rate is slower -- a star takes longer to cross the FOV.
*The factor is 1/cos(δ)
*This factor is NOT applied here.  The effect is accounted for in the autoguiding routines of ~MaxIm with the factor called “declination compensation.”

!E.  Correcting for different guiding rates (e.g.  1/2x sidereal rate)
*Some autoguiders drive the telescope in the guide mode at ½ the sidereal rate, or perhaps another known rate.
*This changes the time to drift, so we need to multiply the drift-rate by the guide rate. Autoguiding at ½ the sidereal rate will decrease the drift rate by 2x.

	@@color:#0f0;''The autoguiding calibration constant = (0.07292116 x  FL x  guide rate) / (pxsize  x  binning )''   (pixels/second@@

!F.  Example

One can compute this for the main camera, and test it out by measuring directly the drift-rate.  To apply this to another guider camera, whether it’s a dual-chip camera or a separately mounted “shorty” used for guiding, the drift rate can be scaled to that guider by substituting the new FL and pxsize values. Here’s an example:  FL = 1630mm, pxsize =  7.4 microns, binning = 2 (using the ~TC-237 guiding chip of a dual-chip ~ST7), guiding at 1x sidereal rate

	Drift-rate = (0.07292116 x  1630 x  1 ) / (7.4  x  2 )  =  8.0312 pixels/second

Measuring this experimentally at the telescope finds this to be nominally correct. The measured rate was 8.073 pixels/second. 

|!NOTE|
|Calculating the drift rate in declination is another matter – this is best done experimentally unless it’s known that the drive is 1x sidereal or some other known factor.|
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
!!Two websites with useful information for double star observersb (Part 2 below)
*Link here to the [[Washington Double Star Catalog]] website
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.handprint.com/ASTRO/bineye1.html]]|
<html><div align="center"><iframe src ="http://www.handprint.com/ASTRO/bineye1.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.handprint.com/ASTRO/bineye2.html]]|
<html><div align="center"><iframe src ="http://www.handprint.com/ASTRO/bineye2.html" width="100%" align="center" height="600">< /></div></html>}}}
----
|!Close this window after download completes|
{{borderless{
<html><div align="center"><iframe src ="RefDocs/AHE_installer.zip" width="100%" align="center" height="30">< /></div></html>}}}
----
*This is the latest version of the ACP Planner.
----
{{borderless{
|[[Click here to open in a new browser tab|http://acp.dc3.com/get-planner.html]]|
<html><div align="center"><iframe src ="http://acp.dc3.com/get-planner.html" width="100%" align="center" height="600">< /></div></html>}}}
----
|!Close this window after download completes|
{{borderless{
<html><div align="center"><iframe src ="RefDocs/CatalogView.zip" width="100%" align="center" height="30">< /></div></html>}}}
----
|!Close this window after download completes|
{{borderless{
<html><div align="center"><iframe src ="RefDocs/MosaicNxM-v131.zip" width="100%" align="center" height="30">< /></div></html>}}}
----
|!Close this window after download completes|
{{borderless{
<html><div align="center"><iframe src ="RefDocs/SlewToZenith.zip" width="100%" align="center" height="30">< /></div></html>}}}
----
*Scroll to the bottom of this screen
{{borderless{
|[[Click here to open in a new browser tab|http://ascom-standards.org/Downloads/ScriptableComponents.htm]]|
<html><div align="center"><iframe src ="http://ascom-standards.org/Downloads/ScriptableComponents.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
/***
|''Name:''|DropDownMenuPlugin|
|''Description:''|Create dropdown menus from unordered lists|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#DropDownMenuPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.1|
|''Date:''|11/04/2007|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.5|

!!Usage:
* create a two-level unordered list using wiki syntax, and place {{{<<dropMenu>>}}} on the line after it.
* to create a vertical menu use {{{<<dropMenu vertical>>}}} instead.
* to assign custom classes to the list, just pass them as parameters to the macro {{{<<dropMenu className1 className2 className3>>}}}

!!Features:
*Supports just a single level of drop-downs, as anything more usually provides a poor experience for the user.
* Very light weight, about 1.5kb of JavaScript and 4kb of CSS.
* Comes with two built in css 'themes', the default horizontal and vertical.

!!Customizing:
* to customize the appearance of the menu's, you can either add a custom class as described above or, you can edit the CSS via the 

StyleSheetDropDownMenu shadow tiddler.

!!Examples:
* [[DropDownMenuDemo]]

***/
// /%
//!BEGIN-PLUGIN-CODE
config.macros.dropMenu={

        dropdownchar: "\u25bc",

        handler : function(place,macroName,params,wikifier,paramString,tiddler){
                list = findRelated(place.lastChild,"UL","tagName","previousSibling");
                if (!list)
                        return;
                addClass(list,"suckerfish");
                if (params.length){
                        addClass(list,paramString);
                }
                this.fixLinks(list);
        },
       
        fixLinks : function(el){
                var els = el.getElementsByTagName("li");
                for(var i = 0; i < els.length; i++) {
                        if(els[i].getElementsByTagName("ul").length>0){
                                var link = findRelated(els[i].firstChild,"A","tagName","nextSibling");
                                if(!link){
                                        var ih = els[i].firstChild.data;
                                        els[i].removeChild(els[i].firstChild);
                                        var d = createTiddlyElement(null,"a",null,null,ih+this.dropdownchar,{href:"javascript:;"});
                                        els[i].insertBefore(d,els[i].firstChild);
                                }
                                else{
                                        link.firstChild.data = link.firstChild.data + this.dropdownchar;
                                        removeClass(link,"tiddlyLinkNonExisting");
                                }
                        }
                        els[i].onmouseover = function() {
                                addClass(this, "sfhover");
                        };
                        els[i].onmouseout = function() {
                                removeClass(this, "sfhover");
                        };
                }
        }       
};

config.shadowTiddlers["StyleSheetDropDownMenuPlugin"] = 
         "/*{{{*/\n"+
         "/***** LAYOUT STYLES -  DO NOT EDIT! *****/\n"+
         "ul.suckerfish, ul.suckerfish ul {\n"+
         "      margin: 0;\n"+
         "      padding: 0;\n"+
         "      list-style: none;\n"+
         "      line-height:1.4em;\n"+
         "}\n\n"+
         "ul.suckerfish  li {\n"+
         "      display: inline-block; \n"+
         "      display: block;\n"+
         "      float: left; \n"+
         "}\n\n"+
         "ul.suckerfish li ul {\n"+
         "      position: absolute;\n"+
         "      left: -999em;\n"+
         "}\n\n"+
         "ul.suckerfish li:hover ul, ul.suckerfish li.sfhover ul {\n"+
         "      left: auto;\n"+
         "}\n\n"+
         "ul.suckerfish ul li {\n"+
         "      float: none;\n"+
         "      border-right: 0;\n"+
         "      border-left:0;\n"+
         "}\n\n"+
         "ul.suckerfish a, ul.suckerfish a:hover {\n"+
         "      display: block;\n"+
         "}\n\n"+
         "ul.suckerfish li a.tiddlyLink, ul.suckerfish li a, #mainMenu ul.suckerfish li a {font-weight:bold;}\n"+
         "/**** END LAYOUT STYLES *****/\n"+
         "\n\n"+
         "/**** COLORS AND APPEARANCE - DEFAULT *****/\n"+
         "ul.suckerfish li a {\n"+
         "      padding: 0.5em 1.5em;\n"+
         "      color: #FFF;\n"+
         "      background: #0066aa;\n"+
         "      border-bottom: 0;\n"+
         "      font-weight:bold;\n"+
         "}\n\n"+
         "ul.suckerfish li:hover a, ul.suckerfish li.sfhover a{\n"+
         "      background: #00558F;\n"+
         "}\n\n"+
         "ul.suckerfish li:hover ul a, ul.suckerfish li.sfhover ul a{\n"+
         "      color: #000;\n"+
         "      background: #eff3fa;\n"+
         "      border-top:1px solid #FFF;\n"+
         "}\n\n"+
         "ul.suckerfish ul li a:hover {\n"+
         "      background: #e0e8f5;\n"+
         "}\n\n"+
         "ul.suckerfish li a{\n"+
         "      width:9em;\n"+
         "}\n\n"+
         "ul.suckerfish ul li a, ul.suckerfish ul li a:hover{\n"+
         "      display:inline-block;\n"+
         "      width:9em;\n"+
         "}\n\n"+
         "ul.suckerfish li {\n"+
         "      border-left: 1px solid #00558F;\n"+
         "}\n"+
         "/***** END COLORS AND APPEARANCE - DEFAULT *****/\n"+
         "\n\n"+
         "/***** LAYOUT AND APPEARANCE: VERTICAL *****/\n"+
         "ul.suckerfish.vertical li{\n"+
         "      width:10em;\n"+
         "      border-left: 0px solid #00558f;\n"+
         "}\n\n"+
         "ul.suckerfish.vertical ul li, ul.suckerfish.vertical li a, ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a {\n"+
         "      border-left: 0.8em solid #00558f;\n"+
         "}\n\n"+
         "ul.suckerfish.vertical li a, ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a,  ul.suckerfish.vertical li.sfhover a:hover{\n"+
         "      width:8em;\n"+
         "}\n\n"+
         "ul.suckerfish.vertical {\n"+
         "      width:10em; text-align:left;\n"+
         "      float:left;\n"+
         "}\n\n"+
         "ul.suckerfish.vertical li a {\n"+
         "      padding: 0.5em 1em 0.5em 1em;\n"+
         "      border-top:1px solid  #fff;\n"+
         "}\n\n"+
         "ul.suckerfish.vertical, ul.suckerfish.vertical ul {\n"+
         "      line-height:1.4em;\n"+
         "}\n\n"+
         "ul.suckerfish.vertical li:hover ul, ul.suckerfish.vertical li.sfhover ul { \n"+
         "      margin: -2.4em 0 0 10.9em;\n"+
         "}\n\n"+
         "ul.suckerfish.vertical li:hover ul li a, ul.suckerfish.vertical li.sfhover ul li a {\n"+
         "      border: 0px solid #FFF;\n"+
         "}\n\n"+
         "ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a{\n"+
         "      padding-right:1.1em;\n"+
         "}\n\n"+
         "ul.suckerfish.vertical li:hover ul li, ul.suckerfish.vertical li.sfhover ul li {\n"+
         "      border-bottom:1px solid  #fff;\n"+
         "}\n\n"+
         "/***** END LAYOUT AND APPEARANCE: VERTICAL *****/\n"+
         "/*}}}*/";
store.addNotification("StyleSheetDropDownMenuPlugin",refreshStyles);
//!END-PLUGIN-CODE
// %/
This useful tool is a spreadsheet that tabulates predicted geocentric ''local'' times of minima of eclipsing binary systems - 2303 of them, plus 132 exoplanets - at your observatory. Each of the data columns has filters that can be used to selectively display information of interest so that only part of the data need be shown. The eclipse elements, JD epoch and period, are used to compute the heliocentric times of eclipses. These are then appropriately corrected to geocentric times depending on the positions of the Earth, Sun and object.  Instructions for use are included as one of the tabs in the spreadsheet.

Click here to download [[The EclBinEph spreadsheet]] zip file (592KB).
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
Bob Denny wrote this document in September 2006 to serve as a tickler for him about iframes and for others to benefit from his work and knowledge gained. Think of iframes as a type of HTML frame which contains content from another document or site. It's a mini-browser with no controls. 

The page below is Bob's ~TiddlyWiki website explaining how to embed an iframe in a tiddler.
----
{{borderless{
|[[Click here to open in a new browser tab|http://solo.dc3.com/tw/HandlingIframes.html]]|
<html><div align="center"><iframe src ="http://solo.dc3.com/tw/HandlingIframes.html" width="100%" align="center" height="600">< /></div></html>}}}
----
!Network Access 
There are two issues to be dealt with:
#access from computers on your local/home network, and 
#access from the public Internet. 
!!Local/Home Net Access 
Go to a different computer on your local/home network. Using the same IP address, username, and password, try to log in. This may fail if you have firewall software installed on either of the two computers. If you have a firewall, follow the instructions for your firewall software to allow access between the computers on your local network. In particular, you must allow //inbound// access to ports 80 and 21 on the ACP computer for the other computers on your local net. Generally, putting all of your local/home computers into the "trusted" group is enough, but again see your firewall software's instructions.

If you succeeded in logging into ACP from the other local computer you're on your way, but typically you'll have to do the next task: providing access from the Internet through your cable/DSL router. 

!!Access from the Internet
We'll assume you're using broadband (DSL or cable) for your internet access. If you want to try a dial up connection, go ahead. If you have problems, there is help by phone or from the [[DC-3 Dreams Communication Center]]. Meanwhile, broadband connections typically use some combination of a modem and a //router// (they may be the same box).

[img[RefDocs/WANLAN.png]]

The key component is the //router//. It divides the network into //your// Local Area Net (LAN) and the //public// Wide Area Net (WAN). In typical use, your computers on the LAN can connect out to servers on the WAN. But to Share Your Sky!, you want others to connect in to the ACP servers on your LAN.
!!Setting Up Port Forwarding 
Since your LAN IP addresses are not visible to the WAN, allowing inbound connections requires some adjustments to the router configuration. The details vary with different router types, but the concept is usually the same: set up port-forwarding from the WAN to the LAN. 
For example, referring to the figure above, the observatory/ACP computer has a LAN IP address of 192.168.1.10, and the router has a public/visible IP address of 70.121.56.149. The idea is to tell the router to forward TCP ports 80 (web) and 21 (FTP) to 192.168.1.10 on the LAN. 
This makes it look like the ACP web and FTP servers are on the router's public IP, which is visible. Then people on the WAN can log into your ACP web and ftp servers by using an IP address of 70.121.56.149. 
Meanwhile, inside your LAN, your computers can get to ACP via its LAN IP address 192.168.1.10. The LAN address is what shows on ACP's preferences servers tab.
!!Testing
The only reliable way to test your routing setup is to have someone on the WAN try to log into your ACP servers. From the LAN, you can log in via the public IP address, but this does not test your provider's filtering (see the next section). So to really know whether you have a usable setup, have a friend somewhere on the WAN (preferably one in another city or country) try to log on.
If it doesn't work, Check the following:
#Double check your router's WAN IP address. Did it change? It can! 
#Verify basic internet connectivity. Have your friend open a command shell ("DOS" box) and type ping 70.121.56.149 (substitute your router's WAN IP). Usually this will work, but your provider may block ping packets. You never know. But if it does work (ping receives replies) then you know that there is connectivity between your friend and your router. 
#Make sure ACP's web and FTP servers are turned on. 
#In ACP Preferences, Servers tab, look at the IP address that shows below the IP selector. Is it the same IP you used when you set up the port forwarding? 
#See the next section... 
!!OK, I did all that but it still doesn't work!
Sometimes, broadband providers block inbound access to TCP port 80 (web), and less frequently, to port 21 (FTP) as well. They do this to prevent their residential customers from running web servers. But that's exactly what you want to do!

Fortunately there is a workaround: using a non-standard port. In ACP preferences, servers tab, change the web server port from 80 to 8080. Then reconfigure your router to disable any port 80 port forwarding you set up and then enable port forwarding for port 8080 to your ACP computer's LAN IP address. This creates a slight inconvenience for your Share your Sky! users; they have to include the non-standard port number in their ~URIs. In the above example, the URI for your ACP web server with port 8080 is {{{http://70.121.56.149:8080/}}}. 

If you run into the same problem with FTP (unlikely), change ACP's FTP server port to 8021 and instruct your users to use this port instead of (the default) 21 in their FTP clients. 
|NOTE: The ACP web content describing FTP usage automatically displays the  host name or IP address, and the port (if non-standard), so your users will have all of the information they need even if you are forced to use a non-standard port.|
!!Other Common Problems 
As noted in the section on Local/Home Net Access, any firewall software on the observatory/ACP computer may block inbound connects. The details vary, so consult the instructions for your firewall software. You must configure it to allow inbound access from any IP address, at least for starters. After you get it working, you can restrict the IP addresses from which people can connect to ACP if you want additional security and you can predict what range(s) of IP addresses your observers will be on.

If your router is also a wireless hub, there could be separate configuration settings for wireless and wired LAN hosts. Be sure you have port forwarding enabled for the type of connection used by your observatory/ACP computer.
!!Making it Easier: Getting a Domain Name
[[Registering an Internet Name]] describes how to get a domain name for your observatory/ACP computer. Virtually all broadband providers can change your router's IP address at will. Thus, you never really know what IP address to give your Share Your Sky! observers without first looking. Furthermore, if they bookmark an IP address, chances are it will become a broken link soon thereafter, forcing them to contact you to get the latest IP address. Read on for the right solution to this...
----
~~Copyright © 2000-2014, Robert B. Denny, Mesa, AZ~~
ACP has a powerful built-in telescope pointing corrector. It is based on the ~MaxPoint technology from [[Diffraction Limited]]. The ACP online help provides instructions for pointing corrector setup and usage. A standard script, [[TrainCorrector.vbs]] is available to specifically train the corrector. After the corrector has been trained, just start using ACP normally and the corrector will learn and improve correction as it goes, eventually reducing the frequency of ~PinPoint pointing updates to zero. 
!How ACP Learns
The corrector engine learns about pointing errors whenever ACP is called upon to synchronize the telescope coordinates. When correction is enabled, sync operations don't actually reset the telescope coordinates. Instead, the desired and actual coordinates at the time of sync are sent to the corrector as a mapping point which immediately updates the model used to predict the telescope's pointing behavior. Each time a sync is performed, whether during automated image acquisition, manually through ACP's controls, from one of ACP's utility scripts, or from a client (such as ~MaxIm DL, ~TheSky or Starry Night) connected to ACP's ASCOM telescope hub, the pointing engine is immediately updated with a mapping point. 

When ACP is first started with a new telescope and with correction enabled, it needs a minimum of six accurate syncs at fairly widely spaced points in the sky before the correction starts to take effect. For most mounts, after ten or so syncs, the pointing accuracy will be below two arc minutes, often below one arc minute, regardless of mechanical flexure or polar alignment errors (within reason!). If the mount has poor slewing position repeatability, more mapping points will be required. A mount with poor repeatability will never achieve excellent corrected pointing.

The syncs must use accurate coordinates. Hand-centering stars in an image will not reliably produce the accuracy needed to make the best use of the corrector. There is a utility script, ~TrainCorrector, that can build a model, however you don't need to train the corrector, though!
!Troubleshooting
If your pointing errors don't reduce towards zero, there is something wrong with your telescope and/or mount. Check to see that your mount's clutches are firmly engaged, that the mount is on solid ground. For a ~Schmidt-Cassegrain, make sure that your main mirror is not flopping. It's best to use an inline focuser and lock the mirror down. 

If you want to make another run, be sure to click the "Reset Model" button in the Pointing Corr. tab of ACP Preferences before starting.
----
|A two-hour loop of ~IR-band EUMETSAT imagery of the European continent. Click on one of the red pips on the image to zoom in to that location.|
{{borderless{
|[[Click here to open in a new browser tab|http://www.sat24.com/?culture=en]]|
<html><iframe src ="http://www.sat24.com/?culture=en" scrolling="auto" height="600" width="100%">< /></div></html>}}}
----
*Click on "All Catalogs" to view the catalog
*Click on "Other Sites" for additional interesting information
*Click on "Diagrams" for some visualizations of exoplanet characteristics
*Click on [[Exoplanet Transit Database]], where you enter your lat/long and create predictions for your particular location
*Click on [[Exoplanet Transit Query Service Form]], yet another tool to create predictions for your particular location
*Click on [[NASA Exoplanet Archive]] to examine the data from the Kepler mission
----
{{borderless{
|[[Click here to open in a new browser tab|http://exoplanet.eu/]]|
<html><div align="center"><iframe src ="http://exoplanet.eu/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://var2.astro.cz/ETD/predictions.php]]|
<html><div align="center"><iframe src ="http://var2.astro.cz/ETD/predictions.php" width="100%" align="center" height="600">< /></div></html>}}}
----
Jump to [[SIMBAD]]
{{borderless{
|[[Click here to open in a new browser tab|http://exoplanetarchive.ipac.caltech.edu/cgi-bin/TransitView/nph-visibletbls?dataset=transits]]|
<html><div align="center"><iframe src ="http://exoplanetarchive.ipac.caltech.edu/cgi-bin/TransitView/nph-visibletbls?dataset=transits" width="100%" align="center" height="600">< /></div></html>}}}
----
!Using Filters
ACP supports extended filter controls, including focus offset support and selection of filters for use in auto-focus and pointing updates. These optional settings for filter usage are contained in a file called ''~FilterInfo.txt''. This file must be placed into the ACP configuration file folder Public Documents\ACP Config. ACP includes a tool that can automatically create this file for you.

|!NOTE|
|Before doing anything, make sure that the filter names configured in ~MaxIm's Filter Setup do not have any blank rows between the real filters. The best solution is to arrange your filters so they are contiguous in the wheel. If you must have an empty slot between others, give that slot a name like "Do Not Use". This will be a live filter though and will be measured in the process described below. Clear out the unused filter slot names at the end as well.|

If told to autofocus for a target (#AUTOFOCUS), ACP (without the presence of ''~FilterInfo.txt'') will refocus after every filter change (very inefficient!), and it uses the configured "Clear" filter for pointing exposures. 

|!NOTE|
|Whether or not you have parfocal filters, we strongly recommend that you set up your focus offsets. It's so easy, see Setting Up Focus Offsets the Easy Way next. It will keep you from having to create the ''~FilterInfo.txt'' file by hand yourself, and it gives you the opportunity of adjusting the focus star magnitudes for each filter, if you are not using ~FocusMax ~AcquireStar.|

!Setting Up Focus Offsets the Easy Way 
|!NOTE|
|Before doing anything else, go into ~MaxIm's filter setup and remove the "Filter n" names from the unused slots. ACP depends on the fact that when there is a name present, and they must correspond to real selectable filters!|

ACP comes with a standard script [[FocusOffsets.vbs]] that will automatically determine focus offsets for your filter set and create the ''~FilterInfo.txt'' file for you. If you have ~FocusMax installed, and ~AutoFocus enabled in ACP, simply run this script in ACP's console. It will make 5 focus position measurements through each of your filters then create the ''~FilterInfo.txt'' file automatically. Load it into ACP's console and run it, then take a break! It may run for an hour or more.

If you have problems with your narrow band filters while running this script, you may need to create an initial ''~FilterInfo.txt'' with 0 offsets but including brighter focus star magnitudes for the narrowband filters. See the next section for details. The 3 below is the "filter to be used for pointing updates and as the focusing reference filter" as set in ACP Preferences, Imaging tab. Normally this is the slot with your Luminance/Clear filter. The filters are in order they are in your wheel. The ';' starts comments which are ignored as well as the text thereafter. Here's an example that forces ACP to pick mag 4-6 stars for the narrowband filters. If you start with this, the [[FocusOffsets.vbs]] script will give brighter stars to the focusing software (~FocusMax or PWI).

{{{
;
; Sample ACP extended filter info file
; Fields are offset, relative-to, use for pointing[, min-mag, max-mag]
;
0,  3,  3,           ; #0 Red,    relative to Clear, Pointing w/Clear
0,  3,  3,           ; #1 Green,  relative to Clear, Pointing w/Clear
0,  3,  3,           ; #2 Blue,   relative to Clear, Pointing w/Clear
0,  3,  3,           ; #3 Clear,  relative to Clear, Pointing w/Clear
0,  3,  3,  4,  6    ; #4 HAlpha, relative to Clear, Pointing w/Clear, Mag 4-6 focus star
0,  3,  3,  4,  6    ; #5 OIII,   relative to Clear, Pointing w/Clear, Mag 4-6 focus star
}}}

!!Overriding Focus Star Brightness
If you are not using ~FocusMax's ~AcquireStar feature, ACP chooses the focus star and then calls FocusMax. If you have narrowband filters, or if your scope has a large aperture and/or a sensitive imager, the default range of focus star brightness (mag 6-9) can be a problem. You can override ACP's choice of focus stars by specifying a magnitude range for any of the filters listed in ''~FilterInfo.txt''. For large scopes and/or sensitive imagers and wideband filters, you may want to go fainter to prevent focus star saturation and/or really short exposure times. For smaller scopes and narrowband filters you may want to choose brighter stars to allow focusing and even shorten focusing time by reducing the needed exposure time.

After using [[FocusOffsets.vbs]] to create your __initial__ ''~FilterInfo.txt'' file, open it up in Notepad (ASCII mode!). On each data line, the last two values are the magnitude range for the focus star to be used with that filter (see Format of ~FilterInfo.txt below). You'll see that they all are listed ''6,9'' (unlike the example below, which has the default values omitted). If you have narrowband filters (Hydrogen Alpha, Oxygen III, etc.) consider specifying brighter (lower magnitude) values. If you had to do this when running the initial measurement script (see above) the values you chose will be preserved. Once you have customized the focus star magnitude values, subsequent runs of [[FocusOffsets.vbs]] will use your mag values (improving its reliability!) and also preserve your changes. 

|!NOTE|
|Once you have customized the focus star magnitude values, subsequent runs of [[FocusOffsets.vbs]] will use your mag values (improving its reliability!) and also preserve your changes.|

!!!If you insist on per-filter refocusing
Once you have ~FilterInfo.txt, ACP can avoid refocusing when it changes filters. If you have special requirements, or if you don't trust this approach (for example, if you have a focuser with poor repeatability), you can force ACP to refocus on each filter change. In ACP Preferences, ~AutoFocus tab, enable the option ''Force per-filter focusing even when ~FilterInfo is present''.

!Setting Up Focus Offsets the Hard Way (manually)
If you want to measure your focus offsets manually: 
#Pick a filter to be used as the reference filter. 
#Focus using the reference filter. Note the focus position (F~~ref~~). 
#Focus using your other filters. Note the focus position of each (F~~i~~) 
#For each non-reference filter, calculate the focus offset O~~i~~ = F~~i~~ - F~~ref~~
In other words, the focus offset is the amount to move the focuser to get from focus with the reference filter to focus with the other filter. You should probably focus several times with each filter and use the average of the positions.

Now create a file called ''~FilterInfo.txt'', using Notepad or other text editor, and place it into the ACP configuration file folder ''Public Documents\ACP Config''. This file contains, for each filter on your system, the focus offset for the filter, the filter to which that focus offset is relative, and the filter to use for pointing exposures, and optionally the values of the magnitude range for the focus star.

!!!Format of ~FilterInfo.txt
~FilterInfo.txt is an ANSI (not Unicode) text file. It may contain spaces and tabs anywhere. Comments may be included, and they are indicated by a semicolon (';'). A line beginning with a semicolon will be ignored, and all text on any line that follows a semicolon will be ignored.

Filter info itself consists of one line per filter, ''in filter number order''. Each line consists of three comma-delimited fields:
#The focus offset for the filter, for example, Clear or V. 
#The filter number to which the offset applies. This is the filter that will be used for auto-focus. 
#The filter number to be used for pointing exposures 
#//(optional)// The minimum and maximum magnitudes for the focus star to be used with this filter. If present, both must be specified. The defaults are from mag 6 to mag 9. 
|!NOTE|
|In ACP, filter numbers start with 0. In ~MaxIm, they start with 1. So, for example, filter number 4 in ~MaxIm is filter number 3 in ACP.|

!!!Simple Example ~FilterInfo.txt
{{{
;
; Sample ACP extended filter info file
; Fields are offset, relative-to, use for pointing[, min-mag, max-mag]
;
-10,  3,  3,         ; #0 Red,    relative to Clear, Pointing w/Clear
-5,   3,  3,         ; #1 Green,  relative to Clear, Pointing w/Clear
+15,  3,  3,         ; #2 Blue,   relative to Clear, Pointing w/Clear
0,    3,  3,         ; #3 Clear,  relative to Clear, Pointing w/Clear
-180, 3,  3,  4,  6  ; #4 HAlpha, relative to Clear, Pointing w/Clear, Mag 4-6 focus star
}}}
The observatory to which the example applies has filters of Red, Green, Blue, Clear, and ~HAlpha in ACP positions 0, 1, 2, 3, and 4, respectively. The focus offsets for Red, Green, Blue, and ~HAlpha are relative to filter #3, the Clear filter. Thus, all auto-focus operations will be done using the Clear filter (#3) as specified by the 3 in the second field of all entries. For any filter selected for imaging, pointing exposures will be done using the Clear filter, as specified by the 3 in the third field of all entries. Finally, the ~HAlpha filter's entry includes brighter than normal minimum and maximum magnitude values for the focus star (unless using ~FocusMax ~AcquireStar). The default mags are 6-9.
 
!!!Advanced Example ~FilterInfo.txt
{{{
;
; Sample ACP extended focus info file
; Fields are offset, relative-to, use for pointing[, min-mag, max-mag]
;
; LRGB Group, relative to Clear
;
-10,  3,  3          ; #0 Red,    relative to Clear, Pointing w/Clear
-5,   3,  3          ; #1 Green,  relative to Clear, Pointing w/Clear
+15,  3,  3          ; #2 Blue,   relative to Clear, Pointing w/Clear
0,    3,  3          ; #3 Clear,  relative to Clear, Pointing w/Clear
-180, 3,  3,  4,  6  ; #4 HAlpha, relative to Clear, Pointing w/Clear, Mag 4-6 focus star
;
; UBVRI Group, relative to V
;
+40,  7,  7,  4,  6  ; #5 U,      relative to V,     Pointing w/V,     Mag 4-6 focus star
+10,  7,  7          ; #6 B,      relative to V,     Pointing w/V
0,    7,  7          ; #7 V,      relative to V,     Pointing w/V
-12,  7,  8          ; #8 R,      relative to V,     Pointing w/R  <== NOTE (avoid filter changes)
-35,  7,  7,  5,  7  ; #9 I,      relative to V,     Pointing w/V,     Mag 5-7 focus star
}}}
This example organizes the filter set into two groups, one to be used for UBVRI photometry runs, and the other for use in color astrophotography. The filters have been physically placed into the filter-wheel in these groups. The first group is specified identically to the simple example above. The second group establishes the V filter as the reference for focus offsets, and therefore V will be used for auto-focus before imaging using any of these filters. U, B, V, and I use the V filter for pointing exposures. Pointing exposures with R selected for imaging will be done through the R filter, saving time for focus changes. The observer knows that R transmits enough light to be used for pointing exposures, and thus has chosen this optimization. Also note the custom focus star magnitude ranges for ~HAlpha, U, and I (see Overriding Focus Star Brightness above). 

|!NOTE|
|In this example, use of filters in the LRGB group requires that the Clear filter be focused, and use of filters in the UBVRI group requires that the V filter be focused. ''It is your responsibility to focus using the reference filter before using any other filters in a group!'' The easiest way to do this is include an ACP #AUTOFOCUS directive in your plans when switching from one filter group to another. If you don't have auto-focus available, then you cannot mix filters from both groups in one plan, and you must focus the reference filter for the group before starting a plan that uses (only) filters in that group.|
----
Here are answers to the most commonly asked questions about ACP, ~PinPoint, ~FocusMax and ~MaxIm.

[[Are there simple steps to processing images?]]
[[How do I apply calibration to MaxIm guiding images?]]
[[Fine Tuning ACP Dusk and Dawn Flats]]
[[What do I do when it's cloudy again?]]
[[How does #AUTOFOCUS work with filter groups?]]
[[How does ACP's focus routine work?]]
[[Where can I download the latest ACP updates?]]
[[Where are the ACP videos?]]
[[How do I log FocusMax activity in ACP logfiles?]]
[[Can I use any old GSC catalog?]]
[[Where can I get a copy of the <...> catalog?]]
[[How are transforms between Alt/Az and RA/Dec done?]]
[[Can I add voice to UserActions?]]  /% [[How do I do fix a PinPoint license problem?]] %/
[[Can I start ACP and MaxIm with one click?]]
[[How does ACP Planner work?]]
[[How does #CHILL work in ACP?]]
[[How do I set up FocusMax?]]
[[How do I avoid guiding on a bright galaxy?]]
[[How many exoplanets are there?]]
[[How Scheduler Focuses]]
----
|NOTE: Click on "Contents" to go to the table of contents.|
{{borderless{
|[[Click here to open in a new browser tab|http://archive.stsci.edu/fits/fits_standard/]]|
<html><div align="center"><iframe src ="http://archive.stsci.edu/fits/fits_standard/" width="100%" align="center" height="600">< /></div></html>}}}
----
''Here is a dump of FITS header (using the listhead.exe command line tool supplied with ~PinPoint) with the WCS highlighted:''

SIMPLE = T / file does conform to FITS standard
BITPIX = 16 / number of bits per data pixel
NAXIS = 2 / number of data axes
~NAXIS1 = 1280 / length of data axis 1
~NAXIS2 = 1024 / length of data axis 2
COMMENT FITS (Flexible Image Transport System) format defined in Astronomy and
COMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365.
COMMENT Contact the NASA Science Office of Standards and Technology for the
COMMENT FITS Definition document #100 and other FITS information.
BZERO = 32768. / Unsigned 16-bit pixels
BSCALE = 1. / Unsigned 16-bit pixels
HISTORY File was created by ~PinPoint 5.0.13 at 2012-01-07T23:25:21
EXPOSURE= 9.00000000000E+002 / [sec] Duration of exposure
EXPTIME = 9.00000000000E+002 / [sec] Duration of exposure
~DATE-OBS= '2012-01-07T23:23:46' / [ISO 8601] UTC date/time of exposure start
DATE = '07/01/12' / [old format] UTC date of exposure start
~TIME-OBS= '23:23:46' / [old format] UTC time of exposure start
UT = '23:23:46' / [old format] UTC time of exposure start
TIMESYS = 'UTC ' / Default time system
RADECSYS= '~FK5 ' / Equatorial coordinate system
XBINNING= 1 / Binning level along the X-axis
YBINNING= 1 / Binning level along the Y-axis
FILTER = 'Luminance' / Filter name
OBSERVER= 'Bob Denny' / Observer name
TELESCOP= '~ACP->Simulator' / Telescope name
INSTRUME= 'Simulator' / Detector instrument name
OBJECT = 'Video Nebula' / Target object name
CLRBAND = 'R ' / [~J-C std] Std. color band of image or C=Color
PIERSIDE= 'WEST '
READMODE= 'Normal '
HISTORY File was processed by ~PinPoint 5.0.13 at 2012-01-07T23:25:23
AIRMASS = 1.18611900958E+000 / Airmass (multiple of zenithal airmass)
ST = '23 05 25.39' / Local apparent sidereal time of exp. start
~LAT-OBS = 3.37833333333E+001 / [deg +N ~WGS84] Geodetic latitude
~LONG-OBS= -1.11933333333E+002 / [deg +E ~WGS84] Geodetic longitude
~ALT-OBS = 4.20000000000E+002 / [metres] Altitude above mean sea level
OBSERVAT= 'Red Mountain Observatory' / Observatory name
RA = '01 34 56.00' / [hms J2000] Target right ascension
OBJCTRA = '01 34 56.00' / [hms J2000] Target right ascension
DEC = '+27 54 32.0' / [dms +N J2000] Target declination
OBJCTDEC= '+27 54 32.0' / [dms +N J2000] Target declination
HISTORY File was processed by ~PinPoint 5.0.13 at 2012-01-07T23:25:28
FWHM = 9.00000000000E+002 / [pixels] Mean ~Full-Width-Half-Max of image star
ZMAG = 2.24049532443E+001 / Mag zero point for 1 sec exposure
EQUINOX = 2000.0 / Equatorial coordinates are J2000
EPOCH = 2000.0 / (incorrect but needed by old programs)
PA = 1.10466622545E-002 / [deg, 0-360 CCW] Position angle of plate
@@color:#FF0;~CTYPE1 = '~RA---TAN' / X-axis coordinate type
~CRVAL1 = 2.37330629242E+001 / [deg] X-axis coordinate value (=RA)
~CRPIX1 = 6.40000000000E+002 / X-axis reference pixel
~CDELT1 = -4.54054822279E-004 / [deg/pixel] X-axis plate scale
~CROTA1 = -1.10466622545E-002 / [deg] Roll angle wrt X-axis
~CTYPE2 = '~DEC--TAN' / Y-axis coordinate type
~CRVAL2 = 2.79086062834E+001 / [deg] Y-axis coordinate value (=Dec)
~CRPIX2 = 5.12000000000E+002 / Y-axis reference pixel
~CDELT2 = -4.54047141009E-004 / [deg/pixel] ~Y-Axis Plate scale
~CROTA2 = -1.10466622545E-002 / [deg] Roll angle wrt ~Y-axis@@
@@color:#F00;~CD1_1 = -4.54054813840E-004 / Change in ~RA---TAN along ~X-Axis
~CD1_2 = -8.75405732482E-008 / Change in ~RA---TAN along ~Y-Axis
~CD2_1 = 8.75420542019E-008 / Change in ~DEC--TAN along ~X-Axis
~CD2_2 = -4.54047132570E-004 / Change in ~DEC--TAN along ~Y-Axis@@
~TR1_0 = 6.39999789930E+002 / [private] ~X-axis distortion coefficients
~TR1_1 = 1.27999998233E+003
~TR1_2 = -2.15388234919E-001
~TR1_3 = -5.56137720571E-002
~TR1_4 = 9.24337450316E-001
~TR1_5 = -9.99679884209E-001
~TR1_6 = 1.00959566970E+000
~TR1_7 = -4.18684439124E-001
~TR1_8 = 1.27901170508E+000
~TR1_9 = 2.30870754312E-001
~TR1_10 = -2.33878639536E-001
~TR1_11 = -1.47440596154E+000
~TR1_12 = 1.56633557347E+000
~TR1_13 = -3.83966862199E+000
~TR1_14 = 3.09733571232E+000
~TR2_0 = 5.12000001798E+002 / [private] Y-axis distortion coefficients
~TR2_1 = 6.78150484725E-004
~TR2_2 = 1.02399999943E+003
~TR2_3 = -7.70497398650E-001
~TR2_4 = 6.32582694932E-001
~TR2_5 = -1.34119378748E+000
~TR2_6 = 1.29075926318E+000
~TR2_7 = 6.00148237575E-001
~TR2_8 = -7.12691481706E-003
~TR2_9 = 7.76860049552E-001
~TR2_10 = 1.62441256104E+000
~TR2_11 = 1.21611616706E+000
~TR2_12 = 9.08727042328E+000
~TR2_13 = -5.84424125485E+000
~TR2_14 = 2.56461629413E+000
HISTORY WCS added by ~PinPoint 5.0.13 at 2012-01-07T23:25:28
HISTORY Matched 380 stars from the ~USNO-A2.0 Catalog
HISTORY Average residual was 0.64 arc-seconds
PLTSOLVD= T / Plate has been solved by ~PinPoint
END

The yellow are the most common WCS coefficients, and the red are the newer matrix form WCS. The ''~CRVAL1'' is RA (degrees) and ''~CRVAL2'' is Dec (degrees).
{{borderless{
|[[Click here to open in a new browser tab|http://fits.gsfc.nasa.gov/fits_wcs.html]]|
<html><div align="center"><iframe src ="http://fits.gsfc.nasa.gov/fits_wcs.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.atnf.csiro.au/people/mcalabre/WCS/]]|
<html><div align="center"><iframe src ="http://www.atnf.csiro.au/people/mcalabre/WCS/" width="100%" align="center" height="600">< /></div></html>}}}
----
Larry Weber and Steve Brady's seminal paper describing ~FocusMax presented at the 2001 Minor Planet Amateur/Professional Workshop, pp.104-113, Tucson AZ.
|!Close this window after download completes|
{{borderless{
<html><div align="center"><iframe src ="RefDocs/Weber-Brady_FocusMax.doc" width="100%" align="center" height="600">< /></div></html>}}}
----
ACP user Mike Dodd's analysis of the repeatability of the Feather Touch focuser.

{{borderless{
<html><div align="center"><iframe src ="RefDocs/FeatherTouch.pdf" width="100%" align="center" height="600">< /></div></html>}}}
----
|!This tool builds the file and folder customization template string for users of ACP Observatory Control Software based on some common configurations. The standard template is given by the selected class in first question. Select the various radio buttons in the remaining 10 questions to generate modifications to the standard template. This tool works "live" within this window. Copy the result to the appropriate *Config.txt files and store it in the ACP Config folder.|

{{borderless{
|[[Click here to open in a new browser tab|RefDocs/filecust_tool.htm]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/filecust_tool.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
~~Copyright © 2000-<<today YYYY>>, Robert B. Denny, Mesa, AZ~~
FileZilla is updated frequently. Once you install it, it will notify you when new version are available of updating.

{{borderless{
|[[Click here to open the download page in a new browser tab|http://filezilla-project.org/download.php]]|
}}}
----
ACP supports focus offsets and extended filter selection. To enable these features, you need to create a custom "filter info" file. For more information, see the [[Extended Filter Support]] section.
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.brightskies.us/filtCCD.html]]|
<html><div align="center"><iframe src ="http://www.brightskies.us/filtCCD.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
This script will find a magnitude 6-9 star within 15 degrees of the current telescope position, assuring that it is not a double and does not have another star within 30 arc seconds. It will then slew to this star, do a pointing update, and thus center the star in the field. This is useful if you want to do something like collimation or focusing by hand. The CCD must be on the telescope - it will not work for visual observing. The mag range (6-9 by default) can be modified on a per-filter basis by including extra info in your ~FilterInfo.txt file. (see also [[Extended Filter Support]])

Here are all the [[Standard ACP Scripts]].
----
This script will take a pointing image at the current telescope coordinates and solve for the //true focal length// as well as the horizontal and vertical plate scales of your imager-telescope combination. This is useful for setting up ACP Preferences for ~PinPoint plate solving. The ~PinPoint plate scales must be somewhere near the actual plate scales, (within 50% either way) or the plate solution in this script may not succeed.

Here are all the [[Standard ACP Scripts]].
----
This script can recover the position of a "lost" scope. It is usable __only for scopes that can be synced__. The script takes a pointing image then sends it to [[Astrometry.net]] for all-sky plate solving. This almost always succeeds, returning coordinates of the location at which the scope is really pointing. As a final check, those coordinates are then plugged into ~PinPoint for an independent solution. IF the coordinates agree, then the solution is truly correct and the coordinates from ~PinPoint are used to sync the mount, recovering it's position.
----

from: ''Tim Khan''
----
An ACP User, Tim writes "I wanted to fine tune my Autoflats so I took some recent flat data logs and placed the data into an Excel spreadsheet. From the data, I back-calculated the ADU acceleration, increased my target ADU, tightened the ADU tolorance, and adjusted the sun elevation for a later dusk start time. I figure that somebody may find this information helpful/useful."

Here's [[Tim Khan's data table]].

ACP version 8.1 now includes a built-in tool in the Toolbox menu called Sky Flat Analyzer. The tool scans an ACP sky flat log file, extracts the exposure information and timing, then produces a graphic showing elapsed time on the horizontal axis and exposure length for each flat on the vertical axis. Analyzing this data can provide insight into ways of shortening the total length of time it takes to collect sky flats. Here is a typical example for dusk flats consisting of five filters and three binnings (15 groups):

[img[RefDocs/SkyFlatAnalyzer.png]]   
<div class='header' macro='gradient vert #300 #900'>

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

 <div class='headerForeground'>
<!-- <span id='searchBar' macro="search"></span>
 <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 id='ContentFooter' refresh='content' tiddler='contentFooter'></div>
</div>
/***
Author: //unknown// - originally retrieved from Clint Checketts (http://www.checkettsweb.com) 
!!Revision History
<<<
''2006.09.17 [rbd]'' Get rid of ghost blue borders on <input> and <textarea> elements within both the editor and the viewer content. Mute the background of <input> and <textarea> to reduce the glare of them against the dark background. Change highlighting color to match the style. Fix table cell borders so they show. Fix buttons so they don't display dotted underline hyperlink when clicked or hovered, brighten the normal text within buttons, perceptually it was too dark! Reformat rules to multi-line with tabs.
''2006.09.18 [rbd]'' Add overrides for ~XP-style navbar used on Share Your Sky! main page.
''2006.09.19 [rbd]'' More work on styles, improved bar graphics, tweaks for boxing, non-hyperlinked fonts. Looking good now.
''2006.09.20 [rbd]'' Add background and border to tiddlers, adjust padding and bottom margin for same. Remove rbd marks and dead styles. Reduce header and sidebar borders to 1px. Added Clint Checketts' IE CSS hack to permit the .tiddler CSS to work correctly. How'd he EVER figure that out?
''2006.09.30 [rbd]'' Fix "dotted-line removal" change above so buttons in viewer don't change size when highlighted. This made flickering buttons! Improve table colors in general, fix appearance of sortable table headers, add custom fileList class for the file list tables used in ~SyS.
''2006.10.08 [rbd]'' Much more work over last 10 days, add styles for System Monitor.
''2006.10.23 [rbd]'' Remove height from <input> and <select>, was scrunching buttons. Style <input> and <select> colors to match the rest. OOPS, looks like hell on IE.
''2006.10.27 [rbd]'' Fix colors of SelectThemePlugin button and popup highlight. See inline comments for location.
''2006.10.31 [rbd]'' Reorganize.
''2006.11.07 [rbd]'' Faint border for sysmon thumbnail
''2006.11.21 [rbd]'' Add .collapsedTitle for folded tiddlers
<<<
!Colors Used
*@@bgcolor(#ff7f00):color(#000): #ff7f00@@
*@@bgcolor(#ffbf00):color(#000): #ffbf00@@
*@@bgcolor(#fff):color(#000): #fff@@
*@@bgcolor(#4c4c4c):color(#fff): #4c4c4c@@
*@@bgcolor(#5f5f5f):color(#fff): #5f5f5f@@
*@@bgcolor(#333):color(#fff): #333@@
*@@bgcolor(#666):color(#fff): #666@@
*@@bgcolor(#000030):color(#fff): #000030@@
*@@bgcolor(#000080):color(#fff): #000080@@
*@@bgcolor(#000):color(#fff): #000@@
*@@bgcolor(#000040):color(#fff): #000040@@
*@@bgcolor(#888):color(#fff): #888@@
*@@bgcolor(#ddd):color(#000): #ddd@@
*@@bgcolor(#ffe72f):color(#000): #ffe72f@@
*@@bgcolor(#300000):color(#fff): #300000@@
*@@bgcolor(#600000):color(#fff): #600000@@
*@@bgcolor(#ffffcc):color(#000): #ffffcc@@
*@@bgcolor(#fffacd):color(#000): #fffacd@@

!Generic Layout Rules 
***/
/*{{{*/
body {
 background: #000;
 position: static; /*Clint's IE fix part 1 (part 2 in TW now) */
}

textarea {
 font-family: courier !important; /* Fixed point font for editing */
}


.title{
 color: #fffacd;
 border-bottom: 1px dashed #333;
}

.subtitle {
 color: #666;
}

.collapsedTitle {
 color: #888;
 font-size: 1.3em;
 font-weight: bold;
}

h1, h2, h3, h4, h5 {
 color: #fffacd;
 background-color: #000040;
 border-top: 1px solid #333;
 border-bottom: 1px solid #333;
}

.tagged {
 display:none;
}
/*}}}*/
/***
!Link styles
***/
/*{{{*/
a,
a.button,
#mainMenu a.button,
#sidebarOptions .sliderPanel a {
 color: #ffbf00;
 border: 0;
}
a:hover,
a.button:hover,
#mainMenu a.button:hover,
#sidebarOptions .sliderPanel a:hover
#sidebarOptions .sliderPanel a:active {
 color: #ff7f00;
 border: 0;
 border-bottom: #ff7f00 1px dashed;
 background: transparent;
 text-decoration: none;
}

#sidebarOptions a {
 margin: 0;
 color: #ffbf00;
 border: 0;
}

#sidebarOptions a:active {
 color: #ffbf00;
 background-color: transparent;
}

#sidebarOptions a:hover {
 color: #4c4c4c;
 background-color: #ffbf00;
}

#sidebarTabs .tabContents a, 
#popup a {
 color: #ffbf00;
}

#messageArea a:link,
#messageArea a:visited {
 color: #ffbf00;
 text-decoration: none;
}

#messageArea a:hover, 
#messageArea a:active {
 color: #ff7f00;
}

#messageArea .messageToolbar a {
 border: 1px solid #ffbf00;
 background: #4c4c4c;
}

.headerForeground a {
 color: #fff;
}

.toolbar a.button {
 border: 0;
}

.editorFooter a {
 border: 0;
}
/*}}}*/
/***
!Header styles
***/
/*{{{*/
.header{
 border-bottom: 1px solid #ffbf00;
 color: #fff;
}

.header a:hover {
 border-bottom: 1px dashed #fff;
}

.headerForeground, 
.headerShadow {
 padding: 2.5em 0em 1em 1em;
}

#searchBar { 
  float: right; 
  margin-top: 1em;
  margin-right: 1em; 
  font-size: 0.9em; 
} 
#searchBar .button { 
  margin-right: 0.5em; 
  border: none; 
}


/*}}}*/
/***
!Main menu styles
***/
/*{{{*/
#mainMenu {
 color: #fff;
}

#mainMenu h1 {
 font-size: 1.1em;
}

#mainMenu li,
#mainMenu ul {
 list-style: none;
 margin: 0;
 padding: 0;
}
/*}}}*/
/***
!Sidebar styles 
***/
/*{{{*/
#sidebar {
 right: 0;
 color: #fff;
 border: 1px solid #ffbf00;
 border-width: 0 0 1px 1px;
}

#sidebarOptions {
 background-color: #4c4c4c;
 padding: 0;
}


#sidebarOptions .sliderPanel {
 background-color: #333;
 margin: 0;
}

#sidebarOptions input {
 border: 1px solid #ffbf00;
 background-color: #ffffcc;
}

#sidebarTabs .tabUnselected:hover,
#sidebarTabs .tabContents {
 background-color: #666;
}

#sidebarOptions .highlight {
 color: #4c4c4c;
 background-color: #ffbf00;
}

.listTitle {
 color: #fff;
}


/* Special for SelectThemePlugin when 
 leaving popup open and mousing away*/
#sidebarTabs {
 background-color: #4c4c4c;
}

#sidebarTabs .tabSelected {
 padding: 3px 3px;
 cursor: default;
 color: #ffbf00;
 background-color: #666;
}

#sidebarTabs .tabUnselected {
 color: #ffbf00;
 background-color: #5f5f5f;
 padding: 0 4px;
}

#sidebarTabs .tabContents a:hover {
 color: #ff7f00;
 background: transparent;
}

#sidebarTabs .txtMoreTab .tabUnselected {
 color: #ffbf00;
 background: #5f5f5f;
}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents {
 color: #ffbf00;
 background: #4c4c4c;
}

/*}}}*/
/***
!General tab styles
***/
/*{{{*/

.tab.tabUnselected {
 background-color: #666;
}

.tab.tabSelected,
.tab.tabSelected:hover {
 color: #ffbf00;
 border: 0;
 background-color: #4c4c4c;
 cursor: default;
}

.tab.tabUnselected:hover {
 color: #ffbf00;
 border: 0;
 background-color: #4c4c4c;
}

.tabContents {
 background-color: #4c4c4c;
 border: 0;
}

.tabContents .tabUnselected{
 background: #5f5f5f;
}

.tabContents .tab:hover, 
.tabContents .tabContents, 
.tabContents .tabSelected {
 background: #666;
}

/*}}}*/
/***
!Message area styles
***/
/*{{{*/
#messageArea {
 background-color: #666;
 color: #fff;
 border: 2px solid #ffbf00;
}


/*}}}*/
/***
!Popup styles 
***/
/*{{{*/
#popup {
 color: #fff;
 background-color: #4c4c4c;
 border: 1px solid #ffbf00;
}

#popup a:hover {
 background: transparent;
 color: #ff7f00;
 border: 0;
}

#popup hr {
 color: #ffbf00;
 background: #ffbf00;
}

/* Special for SelectTheme popmenu */
#popup .currentlySelected {
 color: #4c4c4c;
 background: #ffbf00;
}
/*}}}*/
/***
!Tiddler Display styles
***/
/*{{{*/
/** LOSER ON IE6 without Clint's IE fix (see body section at top!) **/
.tiddler {
 background: #000030;
 border: 1px solid #000080;
 padding-bottom: 8px;
 margin-left: 8px; /* Vastly different on IE vs FireFox! */
 margin-bottom: 12px;
}

#displayArea .button.highlight {
 color: #ffbf00;
 background: #4c4c4c;
}


.tiddler .button {
 color: #888;
}

.tiddler .button:hover,
.tiddler .button:active {
 color: #ffbf00;
 background-color: #4c4c4c;
 border-bottom: 1px solid #4c4c4c; /* No dotted line in buttons */
}

.viewer {
 color: #FFF;
}

.viewer table{
 background: transparent;
 color: #fff;
 border: 1px solid;
}

.viewer th {
 background-color: #4c4c4c;
 color: #fff;
}

.viewer hr {
 color: #666;
}

.viewer input, 
.viewer select {
 font-family: "Lucida Console","Courier New",Courier,monospace;
 font-size: 1.0em; 
/** Looks bad on IE6
 padding-left:4px;
 color: #ddd;
 background-color: #4c4c4c;
 border: 1px solid #ffbf00;
**/
}

.viewer .sortheader {
 font-weight: normal;
}

.viewer pre, 
.viewer code {
 color: #ddd;
 background-color: #4c4c4c;
 border: 1px solid #ffbf00;
}

.viewer .button:hover,
.viewer .button:active {
 border: 1px solid #4c4c4c; /* Needed to avoid button size changing */
}

.viewer .fileList table {
 border-color: #ff7f00;
 margin-bottom: 0px;
}

/* For Share your Sky only */
.viewer .fileList tr {
 border: none;
}

.viewer .fileList td, 
.viewer .fileList th {
 border: 0;
 padding: 2px 8px 2px 8px;
}
 
.viewer .noBorder table,
.viewer .noBorder th,
.viewer .noBorder tr,
.viewer .noBorder td, 
.viewer iframe {
 border: 0;
}

.viewer .noBorder #sm_thumb { /* For sysmon thumbnail */
 border: 1px solid #000080;
 padding: 0px;
}

/* End Share Your Sky */

.toolbar {
 color: #4c4c4c;
}

.footer {
 color: #ddd;
}

.selectedTiddler .footer {
 color: #888;
}

.editor textarea, 
.editor input {
 border: 1px solid #ffbf00;
 background-color: #ffffcc;
}

.editorFooter {
 color: #aaa;
}

.tab{
 -moz-border-radius-topleft: 3px;
 -moz-border-radius-topright: 3px;
}

.tagging,
.tagged {
 background: #4c4c4c;
 border: 1px solid #4c4c4c;
}

.selected .tagging,
.selected .tagged{
 background: #000;
 border: 1px solid #ffbf00;
}

.tagging .button,
.tagged .button{
 color: #ffbf00;
 border: 0;
 padding: 0;
}

.tagging .button:hover,
.tagged .button:hover{
 background: transparent;
}

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

.tagClear{
 margin-top: 1em; /* clear: both; Clint's IE fix part 2 now in TW 2.1.2 */
}

.highlight, 
.marked {
 background-color: #000080;
 color: #ffffff;
}

.cascade {
 background: #4c4c4c;
 color: #ddd;
 border: 1px solid #ffbf00;
}

/*}}}*/
/***
!XP ~NavBar Style Overrides
***/
/*{{{*/
.topItem {
 background: url("im/fire-classic-up.png") no-repeat 0 0;
 color: #ffbf00;
}

.topItemOver {
 background: url("im/fire-classic-up-on.png") no-repeat 0 0;
 color: #ffffff;
}

.topItemClose {
 background: url("im/fire-classic-down.png") no-repeat 0 0;
 color: #ffbf00;
}

.topItemCloseOver {
 background: url("im/fire-classic-down-on.png") no-repeat 0 0;
 color: #ffffff;
}

.subItem, 
.subSubItem, 
.subItemOver, 
.subSubItemOver {
 color: #ffffff;
}

.dropMenu {
 background-color: #4c4c4c;
 color: #000;
 border: 1px solid;
 border-color: #4c4c4c #ff7f00 #ff7f00 #ff7f00;
}
/*}}}*/
/***
!System Status Display Styles
***/
/*{{{*/
div.progBarBg {
 position: relative;
 height: 0.75em;
 background-color: #300000;
}

div.progBarFg {
 position: absolute;
 overflow: hidden;
 height: 0.75em;
 width: 0px;
 background-color: #ff7f00;
}

td.telemetry {
 font-family: "Lucida Console","Courier New",Courier,monospace;
 font-size: 1em;
 background-color: #300000;
 white-space: pre;
 color: #600000;
 // "off" state overridden by inner <span> tag: s;
}

span.telemActive {
 color: #ccccff;
}

span.telemWarn {
 color: #ff0000;
}

span.telemOff {
 color: #600000; /* Match color in td.telemetry */
}

td.telemlabel {
 white-space: nowrap;
}

textarea.scriptlog {
 border: 1px solid #ffbf00;
 margin: 0;
 padding: 0.5em;
 background: #300000;
 color: #ffffff;
 font-family: "Lucida Console","Courier New",Courier,monospace !important;
 font-size: 1em !important;
 white-space: pre;
 line-height: 110%;
}
sidebar borders to 1px. Added Clint Checketts' IE CSS hack to permit the .tiddler CSS to work correctly. How'd he EVER figure that out?
''2006.09.30 [rbd]'' Fix "dotted-line removal" change above so buttons in viewer don't change size when highlighted. This made flickering buttons! Improve table colors in general, fix appearance of sortable table headers, add custom fileList class for the file list tables used in ~SyS.
''2006.10.08 [rbd]'' Much more work over last 10 days, add styles for System Monitor.
''2006.10.23 [rbd]'' Remove height from <input> and <select>, was scrunching buttons. Style <input> and <select> colors to match the rest. OOPS, looks like hell on IE.
''2006.10.27 [rbd]'' Fix colors of SelectThemePlugin button and popup highlight. See inline comments for location.
''2006.10.31 [rbd]'' Reorganize.
''2006.11.07 [rbd]'' Faint border for sysmon thumbnail
''2006.11.21 [rbd]'' Add .collapsedTitle for folded tiddlers
<<<
!Colors Used
*@@bgcolor(#ff7f00):color(#000): #ff7f00@@
*@@bgcolor(#ffbf00):color(#000): #ffbf00@@
*@@bgcolor(#fff):color(#000): #fff@@
*@@bgcolor(#4c4c4c):color(#fff): #4c4c4c@@
*@@bgcolor(#5f5f5f):color(#fff): #5f5f5f@@
*@@bgcolor(#333):color(#fff): #333@@
*@@bgcolor(#666):color(#fff): #666@@
*@@bgcolor(#000030):color(#fff): #000030@@
*@@bgcolor(#000080):color(#fff): #000080@@
*@@bgcolor(#000):color(#fff): #000@@
*@@bgcolor(#000040):color(#fff): #000040@@
*@@bgcolor(#888):color(#fff): #888@@
*@@bgcolor(#ddd):color(#000): #ddd@@
*@@bgcolor(#ffe72f):color(#000): #ffe72f@@
*@@bgcolor(#300000):color(#fff): #300000@@
*@@bgcolor(#600000):color(#fff): #600000@@
*@@bgcolor(#ffffcc):color(#000): #ffffcc@@
*@@bgcolor(#fffacd):color(#000): #fffacd@@

!Generic Layout Rules 
***/
/*{{{*/
body {
 background: #303060;
 position: static; /*Clint's IE fix part 1 (part 2 in TW now) */
}

textarea {
 font-family: courier !important; /* Fixed point font for editing */
}


.title{
 color: #fffacd;
 border-bottom: 1px dashed #333;
}

.subtitle {
 color: #666;
}

.collapsedTitle {
 color: #888;
 font-size: 1.3em;
 font-weight: bold;
}

h1, h2, h3, h4, h5 {
 color: #fffacd;
 background-color: #000040;
 border-top: 1px solid #333;
 border-bottom: 1px solid #333;
}
/*}}}*/
/***
!Link styles
***/
/*{{{*/
a,
a.button,
#mainMenu a.button,
#sidebarOptions .sliderPanel a {
 color: #ffbf00;
 border: 0;
}
a:hover,
a.button:hover,
#mainMenu a.button:hover,
#sidebarOptions .sliderPanel a:hover
#sidebarOptions .sliderPanel a:active {
 color: #ff7f00;
 border: 0;
 border-bottom: #ff7f00 1px dashed;
 background: transparent;
 text-decoration: none;
}

#sidebarOptions a {
 margin: 0;
 color: #ffbf00;
 border: 0;
}

#sidebarOptions a:active {
 color: #ffbf00;
 background-color: transparent;
}

#sidebarOptions a:hover {
 color: #4c4c4c;
 background-color: #ffbf00;
}

#sidebarTabs .tabContents a, 
#popup a {
 color: #ffbf00;
}

#messageArea a:link,
#messageArea a:visited {
 color: #ffbf00;
 text-decoration: none;
}

#messageArea a:hover, 
#messageArea a:active {
 color: #ff7f00;
}

#messageArea .messageToolbar a {
 border: 1px solid #ffbf00;
 background: #4c4c4c;
}

.headerForeground a {
 color: #fff;
}

.toolbar a.button {
 border: 0;
}

.editorFooter a {
 border: 0;
}
/*}}}*/
/***
!Header styles
***/
/*{{{*/
.header{
 border-bottom: 1px solid #ffbf00;
 color: #fff;
}

.header a:hover {
 border-bottom: 1px dashed #fff;
}

.headerForeground, 
.headerShadow {
 padding: 2.5em 0em 1em 1em;
}

#searchBar { 
  float: right; 
  margin-top: 1em;
  margin-right: 1em; 
  font-size: 0.9em; 
} 
#searchBar .button { 
  margin-right: 0.5em; 
  border: none; 
}

/*}}}*/
/***
!Main menu styles
***/
/*{{{*/
#mainMenu {
 color: #fff;
}

#mainMenu h1 {
 font-size: 1.1em;
}

#mainMenu li,
#mainMenu ul {
 list-style: none;
 margin: 0;
 padding: 0;
}
/*}}}*/
/***
!Sidebar styles 
***/
/*{{{*/
#sidebar {
 right: 0;
 color: #fff;
 border: 1px solid #ffbf00;
 border-width: 0 0 1px 1px;
}

#sidebarOptions {
 background-color: #4c4c4c;
 padding: 0;
}


#sidebarOptions .sliderPanel {
 background-color: #333;
 margin: 0;
}

#sidebarOptions input {
 border: 1px solid #ffbf00;
 background-color: #ffffcc;
}

#sidebarTabs .tabUnselected:hover,
#sidebarTabs .tabContents {
 background-color: #666;
}

#sidebarOptions .highlight {
 color: #4c4c4c;
 background-color: #ffbf00;
}

.listTitle {
 color: #fff;
}


/* Special for SelectThemePlugin when 
 leaving popup open and mousing away*/
#sidebarTabs {
 background-color: #4c4c4c;
}

#sidebarTabs .tabSelected {
 padding: 3px 3px;
 cursor: default;
 color: #ffbf00;
 background-color: #666;
}

#sidebarTabs .tabUnselected {
 color: #ffbf00;
 background-color: #5f5f5f;
 padding: 0 4px;
}

#sidebarTabs .tabContents a:hover {
 color: #ff7f00;
 background: transparent;
}

#sidebarTabs .txtMoreTab .tabUnselected {
 color: #ffbf00;
 background: #5f5f5f;
}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents {
 color: #ffbf00;
 background: #4c4c4c;
}

/*}}}*/
/***
!General tab styles
***/
/*{{{*/

.tab.tabUnselected {
 background-color: #666;
}

.tab.tabSelected,
.tab.tabSelected:hover {
 color: #ffbf00;
 border: 0;
 background-color: #4c4c4c;
 cursor: default;
}

.tab.tabUnselected:hover {
 color: #ffbf00;
 border: 0;
 background-color: #4c4c4c;
}

.tabContents {
 background-color: #4c4c4c;
 border: 0;
}

.tabContents .tabUnselected{
 background: #5f5f5f;
}

.tabContents .tab:hover, 
.tabContents .tabContents, 
.tabContents .tabSelected {
 background: #666;
}

/*}}}*/
/***
!Message area styles
***/
/*{{{*/
#messageArea {
 background-color: #666;
 color: #fff;
 border: 2px solid #ffbf00;
}


/*}}}*/
/***
!Popup styles 
***/
/*{{{*/
#popup {
 color: #fff;
 background-color: #4c4c4c;
 border: 1px solid #ffbf00;
}

#popup a:hover {
 background: transparent;
 color: #ff7f00;
 border: 0;
}

#popup hr {
 color: #ffbf00;
 background: #ffbf00;
}

/* Special for SelectTheme popmenu */
#popup .currentlySelected {
 color: #4c4c4c;
 background: #ffbf00;
}
/*}}}*/
/***
!Tiddler Display styles
***/
/*{{{*/
/** LOSER ON IE6 without Clint's IE fix (see body section at top!) **/
.tiddler {
 background: #000030;
 border: 1px solid #000080;
 padding-bottom: 8px;
 margin-left: 8px; /* Vastly different on IE vs FireFox! */
 margin-bottom: 12px;
}

#displayArea .button.highlight {
 color: #ffbf00;
 background: #4c4c4c;
}


.tiddler .button {
 color: #888;
}

.tiddler .button:hover,
.tiddler .button:active {
 color: #ffbf00;
 background-color: #4c4c4c;
 border-bottom: 1px solid #4c4c4c; /* No dotted line in buttons */
}

.viewer {
 color: #FFF;
}

.viewer table{
 background: transparent;
 color: #fff;
 border: 1px solid;
}

.viewer th {
 background-color: #4c4c4c;
 color: #fff;
}

.viewer hr {
 color: #666;
}

.viewer input, 
.viewer select {
 font-family: "Lucida Console","Courier New",Courier,monospace;
 font-size: 1.0em; 
/** Looks bad on IE6
 padding-left:4px;
 color: #ddd;
 background-color: #4c4c4c;
 border: 1px solid #ffbf00;
**/
}

.viewer .sortheader {
 font-weight: normal;
}

.viewer pre, 
.viewer code {
 color: #ddd;
 background-color: #4c4c4c;
 border: 1px solid #ffbf00;
}

.viewer .button:hover,
.viewer .button:active {
 border: 1px solid #4c4c4c; /* Needed to avoid button size changing */
}

.viewer .fileList table {
 border-color: #ff7f00;
 margin-bottom: 0px;
}

/* For Share your Sky only */
.viewer .fileList tr {
 border: none;
}

.viewer .fileList td, 
.viewer .fileList th {
 border: 0;
 padding: 2px 8px 2px 8px;
}
 
.viewer .noBorder table,
.viewer .noBorder th,
.viewer .noBorder tr,
.viewer .noBorder td, 
.viewer iframe {
 border: 0;
}

.viewer .noBorder #sm_thumb { /* For sysmon thumbnail */
 border: 1px solid #000080;
 padding: 0px;
}

/* End Share Your Sky */

.toolbar {
 color: #4c4c4c;
}

.footer {
 color: #ddd;
}

.selectedTiddler .footer {
 color: #888;
}

.editor textarea, 
.editor input {
 border: 1px solid #ffbf00;
 background-color: #ffffcc;
}

.editorFooter {
 color: #aaa;
}

.tab{
 -moz-border-radius-topleft: 3px;
 -moz-border-radius-topright: 3px;
}

.tagging,
.tagged {
 background: #4c4c4c;
 border: 1px solid #4c4c4c;
}

.selected .tagging,
.selected .tagged{
 background: #000;
 border: 1px solid #ffbf00;
}

.tagging .button,
.tagged .button{
 color: #ffbf00;
 border: 0;
 padding: 0;
}

.tagging .button:hover,
.tagged .button:hover{
 background: transparent;
}

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

.tagClear{
 margin-top: 1em; /* clear: both; Clint's IE fix part 2 now in TW 2.1.2 */
}

.highlight, 
.marked {
 background-color: #000080;
 color: #ffffff;
}

.cascade {
 background: #4c4c4c;
 color: #ddd;
 border: 1px solid #ffbf00;
}

.twocolumns { display:block; -moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%;}

/*}}}*/
/***
!XP ~NavBar Style Overrides
***/
/*{{{*/
.topItem {
 background: url("im/fire-classic-up.png") no-repeat 0 0;
 color: #ffbf00;
}

.topItemOver {
 background: url("im/fire-classic-up-on.png") no-repeat 0 0;
 color: #ffffff;
}

.topItemClose {
 background: url("im/fire-classic-down.png") no-repeat 0 0;
 color: #ffbf00;
}

.topItemCloseOver {
 background: url("im/fire-classic-down-on.png") no-repeat 0 0;
 color: #ffffff;
}

.subItem, 
.subSubItem, 
.subItemOver, 
.subSubItemOver {
 color: #ffffff;
}

.dropMenu {
 background-color: #4c4c4c;
 color: #000;
 border: 1px solid;
 border-color: #4c4c4c #ff7f00 #ff7f00 #ff7f00;
}
/*}}}*/
/***
!System Status Display Styles
***/
/*{{{*/
div.progBarBg {
 position: relative;
 height: 0.75em;
 background-color: #300000;
}

div.progBarFg {
 position: absolute;
 overflow: hidden;
 height: 0.75em;
 width: 0px;
 background-color: #ff7f00;
}

td.telemetry {
 font-family: "Lucida Console","Courier New",Courier,monospace;
 font-size: 1em;
 background-color: #300000;
 white-space: pre;
 color: #600000;
 // "off" state overridden by inner <span> tag: s;
}

span.telemActive {
 color: #ccccff;
}

span.telemWarn {
 color: #ff0000;
}

span.telemOff {
 color: #600000; /* Match color in td.telemetry */
}

td.telemlabel {
 white-space: nowrap;
}

textarea.scriptlog {
 border: 1px solid #ffbf00;
 margin: 0;
 padding: 0.5em;
 background: #300000;
 color: #ffffff;
 font-family: "Lucida Console","Courier New",Courier,monospace !important;
 font-size: 1em !important;
 white-space: pre;
 line-height: 110%;
}

/*}}}*/
/***
!Footer styles /% ============================================================= %/
***/
/*{{{*/

#ContentFooter {background:#000; color:#0f0; clear:both; padding:0.5em 1em; text-align:center;}
#ContentFooter a {color: #fff; border-bottom: 10px dotted #0f0;}
#ContentFooter a:hover { color: #fff; background-color:#f00;}
/*}}}*/

/***
!Horizontal Main Menu Style Mods /% ============================================================= %/
***/
/*{{{*/

#displayArea { margin: 1em 15.5em 0em 1em; /* neutralize default margins */ }

#mainMenu {
	position: static; width: auto; /* neutralize default settings */
	overflow: auto; /* contain floats */ border-bottom: 1px solid #303060; padding: 0;
	text-align: left; color: #c000f0; background-color: #303060; font-size: 0.8em; }

#mainMenu a,
#mainMenu .button,
#mainMenu .tiddlyLink { display: block; float: left; margin: 0; padding: 0.2em 0.75em;
	                font-size: 1.15em; font-weight: bold; color: #8080f0; }

#mainMenu a:hover,
#mainMenu .button:hover,
#mainMenu .tiddlyLink:hover { background-color: #303060; color: #ff7f00; }

#mainMenu br { 	display: none; }

/*}}}*/
!Local Access
If you left ACP running and enabled the web server as directed in ACP's Server Setup help file, this page should have displayed without any scripting errors. If so, the URL for your ACP web pages is shown below (it may take a few seconds to appear): 
|!http://127.0.0.1/|
If you have a static IP address, this will be your observatory's home page URL from now on. You'll need the username and password you set up for yourself. 

#Click the above link. A browser should appear showing a username/password login box. 
#Enter your username and password and click OK. 
#If all went well, you should now see your observatory's home page. Note the observatory name you filled into Observatory preferences page is automatically inserted into the HTML for this page. 
|!NOTE|
|If you don't see your home page, see [[Troubleshooting the Servers]].|

Next, test the FTP server. The URL is: 
|!ftp://127.0.0.1/|
#Click the above link. Your browser or other FTP program should prompt you with a login dialog. 
#Enter your username and password and click OK. 
#If all went well, you should now see the ~WebDocs subfolder under the ACP installation area. Don't worry, your FTP users cannot access most of these files, nor can they access any web content files anywhere. 
|!NOTE|
|If FTP login is not successful, see [[Troubleshooting the Servers]].|

Now proceed to [[Enabling Network Access]] 
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.focusmax.org]]|
<html><div align="center"><iframe src ="http://www.focusmax.org" width="100%" align="center" height="600">< /></div></html>}}}
----
from: ''Tom Krajci''

!Before you start using ~FocusMax, have you:
|- Installed the latest ASCOM platform?|[[ASCOM standards org]]|
|- Installed the latest .NET updates?|[[ASCOM Platform Updates]]|
|- Installed the ASCOM focuser driver?|[[ASCOM Focuser Drivers]]|
|- Configured the ASCOM focuser driver to allow the focuser to move over its entire travel range?||

| NOTE – These initial tutorials get you familiar with ~FocusMax's main features: V curves and auto focusing. After that you can refine your focuser setup and re-run V curves if necessary. Don't expect perfection the first time out. Learn a little, improve a little. Repeat as needed. |
!Where is the brightest star on my imager's frame?
*Start ~FocusMax, but do not run the first light Wizard or the V curve tool.
*Connect to your focuser.
*Select the Focus Tab (lower left of ~FocusMax main window), and press the Find button.  ~FocusMax will take a binned, full-frame exposure, find the brightest star in the frame, and then take an unbinned sub frame centered on this brightest star.
*Look at the two graphics in the lower left of the ~FocusMax main window.  The left one shows the position of the star in the imager's full frame as a red dot.  The right one shows an integrated curve of the star's light from one edge to the other.
!Manual focuser movement
Click on the Jog button on the upper right of the ~FocusMax main window.  The Jog dialog box will appear.  It shows the current focuser position in the upper right, and allows you to move the focuser manually in one of two ways.  You can specifiy an amount to move (such as 100 steps) in or out (lower left data entry box), or you can enter a Move To destination value in the lower right data entry box.

Get comfortable with your focuser.  Jog it in and out various distances, and try to Move To several destinations.  Does your focuser move in (drawtube extension get smaller) when you command a jog in, or does it move out instead?

Does the focuser move over its entire physical travel range?

When you command a move to position 0, does the focuser reach one extreme of its travel?  (~FocusMax, and ASCOM standards, do not allow the use of negative focuser positions.  If needed, reset your focuser position.)
!Manual focus
Use the Find button on the ~FocusMax main window, Focus tab.  Note the value of HFD that's reported for this star image.  The smaller the HFD value, the tighter the focus.

Use the Jog dialog box to manually move the focuser, and after every move, press the Expose button (next to the Find button on the ~FocusMax main window) to make a new HFD measurement.  You don't need absolutely perfect focus, but don't let the star look like a bloated blob.
!Look at the log file
Along the top row of the ~FocusMax main window, click on Open, Log.  A new window will appear, and this is the log.  It contains much useful information that you can review while ~FocusMax is working, or later the next morning.  Information includes star location, flux value (total brightness), exposure time, filter used, HFD measurements, and derived values for V curves, and focus positions.

Look at the log entries for the last few times you pressed the Find and Expose buttons.  Is the star flux at least 100,000, but not more than about 500,000?  If yes, then you have a star of suitable brightness to use for V curves, and focusing. The focuser will not work well if the image of the star is saturated. 
!OK, now you can run the First Light Wizard
If you have manually set a pretty good focus, then you can run the First Light Wizard – in the upper row of commands in the ~FocusMax main window.

The First Light Wizard starts with the star near best focus, and makes repeated HFD measurments as it moves the focuser away from best focus. Based on that analysis, it has a pretty good idea of the focuser range it must use to make a V curve...and so it makes one V curve run. Finally, with the data derived from the V curve (slopes, and position intercept difference) it performs an autofocus run and ends with the star at best focus.

Start the First Light Wizard. Sit back and watch the log file as the First Light Wizard runs. You'll see the initial small HFD values get larger as the focuser is moved away from your initial, manual focus. Once HFD values grow to about 30 – 40, ~FocusMax knows enough about your focuer and optical system to do a full V curve run. You'll then see the focuser move through a larger range of travel, and the HFD values will start large, get smaller as it passes through best focus, and then get large again. At the end of the V curve run, ~FocusMax will determine LS (left slope), RS (right slope), and PID (position intercept difference), and report it in the log. (This data will also be placed in your system focuser profile to use again.) Lastly, an autofocus run will be performed.  Again, watch the log.  The focuser will be moved away from focus, with the goal being an HFD that is close to the Focus Start HFD (Setup tab), and the default value for this is 20.  Once this has been achieved, the focuser will be moved to the Near Focus HFD (default value is 10).  

At this point ~FocusMax will take several exposures (default number is 5) to make repeated HFD measurements that are averaged together.  This average HFD value will be used along with the LS/RS/PID data to determine the location of best focus.  The best focus position will be reported in the log, the focuser will move to that position, and then take a final exposure to measure a final HFD.  If this value is smaller than the max HFD (Features tab, default value is 5), a successful focus is declared and ~FocusMax is finished with the First Light Wizard.
!Don't blindly trust the software
Now that ~FocusMax has finished the First Light Wizard, maximize the log window and look it over.  Did the log show that:
*star flux values are at least 100,000 but not more than 500,000?
*HFD values started small (at your manual focus), and then increased to about 30 – 40?
*V curve HFD values started at a large value (30 – 40), decreased to a minimum (passed through best focus), and then increased again to a large value?
*are the V curve values for LS and RS about the same...within about 1% of each other?
*is the V curve PID value 'right sized'?  For a smaller, shorter focal length system (small refractor), PID may be less than 10, but probably not more than 20.   For a longer focal length, larger aperture system (SCT's) PID may be as big as 50 or 60.  
*focus run moves to Start HFD, then moves to Near Focus HFD, takes several HFD measurements, and determines location of best focus?
*does the final star image look like it's in good focus?  Use your imager to take a short exposure, full-frame image for further verification.
If all these things happened, odds are good that you got a useable first V curve.  You can use ~FocusMax at this point to get pretty good focus.  As you get more comfortable with the software, you can continue to tweak and optimize your focuser setup, and take more V curves.
!Improve your focuser setup
Now that you have a good V curve, look at the graphic plot of points (click on the V Curve button), and/or look at the log.  The two 'wings' of the V curve should be slanted lines.  In the middle of the plot, near best focus, the plot deviates from the linear wings and will have a rounded bottom.

What is the smallest HFD value in the V curve plot that is still on the linear wings?  If, for example, it's 5, then increase that value by about ¼ and use that value for your near focus HFD (Setup tab)...which would be 6 .  And increase the near focus HFD by about 1/3 to use as your Focus Start HFD...which would be 8.

What is the smallest HFD value in your V curve plot?  If, for example, it's near 2.5, then increase that value by ½ and use that for Focus Routine Max HFD (Features tab)...which would be 4.

Think about how your focuser mechanically operates.  Just about every focuser has backlash, but if you set it up properly in ~FocusMax, this problem can be minimized.  One way to deal with backlash is to have the focuser move up against gravity during the focus run. In the Setup tab you can choose the appropriate move direction that will move the focuser up during the focus run.  (With SCT's or refractors this is an easy scenario, but with a Newtonian telescope on a German mount you may have situations where the focuser orientation swaps up for down.  In that case you may have to live with a focuser that moves down some of the time.)

Should you have backlash compensation enabled?  (System tab).  Since most focusers have backlash, the answer is almost always yes.  How much backlash do you have?  That varies from model to model.  Measure it, or find someone with the same model that has measured it.  What direction to choose for backlash compensation?  Again, moving up against gravity is a good starting point.

Look at your V curve extreme HFD values at both ends of the run.  Were they about the same value (within about 10%)?  If not, make sure you set up future V curve runs to eliminate this problem.
!Setting up subsequent V curve runs
After performing one successful V curve run, ~FocusMax will do a pretty good job of determining focus, but it's prudent (and does not take much time) to make more V curve runs to increase the precision of your values for LS, RS, and PID.

Look at the log entry for the first V curve run.  If your smallest HFD was around 2 or 1.5, then you probably have a short focal length system of not-large aperture (several inches).  In that case, you can set up subsequent V curve runs so that maximum HFD is around 25.

If your smallest HFD was around 3 to 5, then you probably have a longer focal length system of moderate aperture (6 – 8 inches or more).  In that case, you can set up subsequent V curve runs so that maximum HFD is around 35 to 40.

If you perform these V curve runs in the evening, when air temperature often is still dropping rapidly (which has an impact on focus position), consider making V curves with no more than 30 points, and only one image at each point...but take a larger number (perhaps 15 to 20) of V curves.

If you perform the V curve runs when there is little change in air temperature, it is not as risky to use more points in the V curve and to average several HFD readings at each point.  This means you don't have to take as many V curves, perhaps 10.

Trial and error may be needed to set the V curve end points (or half width and center point) to get the desired maximum HFD at both ends of the run.  If you perform an auto focus first, the focus position is automatically entered as the center value in the V Curve Sequence dialog box.  

Once you have collected enough V curves, you can review their quality graphically, discard bad data, and end up with averaged values for LS, RS, and PID that are used in your system profile.  
!Measuring your critical focus zone (CFZ)
Theory and formulas exist to describe the critical focus zone (CFZ), but they assume perfect optics and seeing.  You can use ~FocusMax to measure your actual CFZ.  This is useful for more than one reason.  

You can compare your total system performance to the ideal.  (Short focal length, small-aperture systems tend to be closer to the ideal than long focal length, large-aperture systems.)  You can determine what focuser step size to use when running focus convergence.  And when you measure your system's focus change versus temperature, you can determine how much temperature change you can tolerate before you must refocus.

Use the V Curve Sequence dialog box, and look at log entries for some recent V curves.  Set up a V curve run that only covers a range of focus positions to give max HFD values no greater than the value you determined for Near Focus HFD.  (This means we will look at the non-linear part of the V curve.)

Use a larger number of points in the V curve – perhaps 60.  If air temperature is dropping rapidly, take several of these V curves.  If air temperature is not changing much, then you can average several HFD measurements at each point, and only take one V curve.

After the run is complete, look at the plot graphically.  You can probably identify the position of best focus and minimum HFD, but you'll also see that to the left and right of this position the HFD values stay pretty close to the minimum value for some span of focuser positions.  (This is a subjective assessment.)  How much increase in HFD can you tolerate before you consider focus to be unacceptable?  If you have a tight tolerance (for example HFD increases no more than 20% over the minimum value), then your CFZ will be a smaller range of focuser travel.  If you have a looser, more forgiving tolerance (for example HFD increases up to 40% over the minimum value), then your CFZ will be a larger range of focuser travel.  

Don't forget to discard/deselect this V curve run from the system profile.  (You will probably see that this V curve gave noticeably different LS and RS values, and that PID is much larger.)
!Setting up Focus Convergence
Focus convergence is a useful ~FocusMax method that can deal with poorer than average seeing, wind, etc.  But you must specify the step width to use...and that is why you measured your CFZ in the previous section.

How large is your CFZ, in focuser steps?  As an example, we'll assume it's 60.  (This value may be typical of a small SCT.  A small, short focus refractor would probably have a smaller CFZ.)

Choose a value that is some fraction of your CFZ.  (You probably don't need to use a value smaller than 1/10th, but don't go larger than about ¼.  Again, this is a subjective decision, and you can always change it later.)  This will be your step size for Focus Convergence.

For now, use the default of 5 samples, and default skew value of 1.

Enable Focus Convergence on the features tab, open the focus histogram and focus position windows, and the log, and then perform a focus run.  Watch what happens.

Previously, ~FocusMax would always use the same number of HFD measurements to determine focus.  With focus convergence there is no set number of HFD measures.  Instead, the criteria of X consecutive HFD measurements (that are averaged together) that fall within Y focus steps must be met.

If seeing is steady and the air is calm, the focus position window (showing mean focus position) plot will quickly converge to a certain value.  If seeing is not as good, or breezes are pushing the scope around, the convergence to one focus position will take longer.

If you watch the log you may also notice an occasional entry that states that a certain HFD measurement has been rejected  because it was a skewed measurement.  ~FocusMax will use the statistics of several HFD measurements to determine a mean value and standard deviation.  If you set up focus convergence so that 5 samples are required, then the first 5 HFD measurements are used to determine these statistics, and any skew/rejection can start happening on the 6th (and subsequent) HFD measurement.
----
^^This tutorial is reproduced here with the permission of Tom Krajci, Cloudcroft NM.  Copyright &copy; 2011.^^
{{borderless{
|[[Click here to open in a new browser tab|http://www.flemingastrophotography.com/focusmax.html]]|
<html><div align="center"><iframe src ="http://www.flemingastrophotography.com/focusmax.html" width="100%" align="center" height="600">< /></div></html>}}}
----
This script will automatically determine the focus offsets of all of your filters with respect to a user-specified reference filter. The offset values are displayed at the end of the script on the console, and written into a file called "~FilterInfo.txt." This is very useful if you have ~FocusMax installed and ~AutoFocus enabled in ACP.

Here are all the [[Standard ACP Scripts]].
----
{{borderless{
|[[Click here to open in a new browser tab|http://bf-astro.com/eXcalibrator/excalibrator.htm]]|
<html><div align="center"><iframe src ="http://bf-astro.com/eXcalibrator/excalibrator.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://tdc-www.harvard.edu/software/catalogs/gsc_act_all.htm]]|
<html><div align="center" style="background-color:white"><iframe src ="http://tdc-www.harvard.edu/software/catalogs/gsc_act_all.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://gsc.dc3.com]]|
<html><div align="center" style="background-color:white"><iframe src ="http://gsc.dc3.com" width="100%" align="center" height="300">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://gsss.stsci.edu/webservices/GSC2/GSC2WebForm.aspx]]|
<html><div align="center"><iframe src ="http://gsss.stsci.edu/webservices/GSC2/GSC2WebForm.aspx" width="100%" align="center" height="700">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://galaxymap.org/cat/list/sharpless/1]]|
<html><div align="center"><iframe src ="http://galaxymap.org/cat/list/sharpless/1" width="100%" align="center" height="600">< /></div></html>}}}
----
*Here's further information on [[VOEvents]].
{{borderless{
|[[Click here to open in a new browser tab|http://gcn.gsfc.nasa.gov/]]|
<html><div align="center"><iframe src ="http://gcn.gsfc.nasa.gov/" width="100%" align="center" height="600">< /></div></html>}}}
----
Here's further information on [[VOEvents]].
<!--{{{-->
<div class='header' macro='gradient vert #201010 #603030'>
 <div class='headerShadow'>
 <span id='searchBar' macro="search"></span>
 <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
 <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
 </div>

 <div class='headerForeground'>
<!-- <span id='searchBar' macro="search"></span>
 <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 id='ContentFooter' refresh='content' tiddler='contentFooter'></div>
</div>
<!--}}}-->
/***
!Colors Used in this Sunset Style Sheet
| !Neutral | @@bgcolor(#fff):color(#000): #ffffff@@ | @@bgcolor(#ddd):color(#000): #dddddd@@ | @@bgcolor(#aaa):color(#000): #aaaaaa@@ | @@bgcolor(#888):color(#fff): #888888@@ | @@bgcolor(#666):color(#fff): #666666@@ | @@bgcolor(#5f5f5f):color(#fff): #5f5f5f@@ | @@bgcolor(#4c4c4c):color(#fff): #4c4c4c@@ | @@bgcolor(#333):color(#fff): #333333@@ | @@bgcolor(#000):color(#fff): #000000@@ |
| !Standard | @@bgcolor(#ffffcc):color(#000): #ffffcc@@ | @@bgcolor(#ffff88):color(#000): #ffff88@@ | @@bgcolor(#ffe72f):color(#000): #ffe72f@@ | @@bgcolor(#ffbf00):color(#000): #ffbf00@@ | @@bgcolor(#ff7f00):color(#000): #ff7f00@@ | @@bgcolor(#f00):color(#000): #f00@@ | @@bgcolor(#c000f0):color(#fff): #c000f0@@ | @@bgcolor(#00f000):color(#000): #00f000@@ |   |
| !Theme | @@bgcolor(#c09090):color(#000): #c09090@@ | @@bgcolor(#c08080):color(#000): #c08080@@ | @@bgcolor(#804040):color(#fff): #804040@@ | @@bgcolor(#603030):color(#fff): #603030@@ | @@bgcolor(#502020):color(#fff): #502020@@ | @@bgcolor(#401010):color(#fff): #401010@@ | @@bgcolor(#300000):color(#fff):#300000@@ |   |   |
!Generic Layout Rules 
***/
/*{{{*/
@font-face {
  font-family: 'Xirod';
  src: url('RefDocs/Xirod.ttf') format('truetype');
}

body { 
  background: #603030; 			        /* !!! */
  position: static; 				/*Clint's IE fix part 1 (part 2 in TW now) */ 
}

textarea { 
  font-family: courier !important; 	        /* Fixed point font for editing */ 
}

.title{ 
  color: #fffacd; 
  border-bottom: 1px dashed #333; 
}

.subtitle { 
  color: #666; 
}

.collapsedTitle { 
  color: #888; 
  font-size: 1.3em; 
  font-weight: bold; 
}

h1, h2, h3, h4, h5 { 
  color: #ffff88;
  background-color: #300000;   			/* !!! */
  border-top: 1px solid #300000;		/* !!! */
  border-bottom: 1px solid #300000; 		/* !!! */
}

.tagged { 
  display:none; 
}
/*}}}*/
/***
!Link styles
***/
/*{{{*/
a, 
a.button, 
#mainMenu a.button, 
#sidebarOptions .sliderPanel a {
  color: #ffbf00;  
  border: 0; 
}

a:hover, 
a.button:hover, 
#mainMenu a.button:hover, 
#sidebarOptions .sliderPanel a:hover, 
#sidebarOptions .sliderPanel a:active {
  color: #ff7f00;
  border: 0;
  border-bottom: none;  			/* !!! */
  background: transparent;
  text-decoration: none;
}

#sidebarOptions a {
  margin: 0;
  color: #ffbf00;
  border: 0;
}

#sidebarOptions a:active {
  color: #ffbf00;
  background-color: transparent;
}

#sidebarOptions a:hover {
  color: #4c4c4c;
  background-color: #ffbf00;
}

#sidebarTabs .tabContents a, 
#popup a {
  color: #ffbf00;
}

#messageArea a:link,
#messageArea a:visited {
  color: #ffbf00;
  text-decoration: none;
}

#messageArea a:hover, 
#messageArea a:active {
  color: #ff7f00;
}

#messageArea .messageToolbar a {
  border: 1px solid #ffbf00;
  background: #4c4c4c;
}

.headerForeground a {
  color: #fff;
}

.toolbar a.button {
  border: 0;
}

.editorFooter a {
  border: 0;
}
/*}}}*/
/***
!Header styles
***/
/*{{{*/
.header{
  border-bottom: 1px solid #603030;	        /* !!! */
  color: #fff;
}

.header a:hover {
  border-bottom: none ;  			/* !!! */
}

.headerForeground, 
.headerShadow {
  padding: 2.5em 0em 1em 1em;
}

.siteTitle {
  color: #300000;
  font-family: Xirod; 
  font-size: 3em; 
  text-shadow: 2px -2px 3px white;
}

.siteSubtitle {
  color: #d0a0a0;
}
#searchBar { 
  float: right; 
  margin-top: 1em;
  margin-right: 1em; 
  font-size: 0.9em; 
} 

#searchBar .button { 
  margin-right: 0.5em; 
  border: none; 
}

/*}}}*/
/***
!Main menu styles
***/
/*{{{*/
#mainMenu {
  color: #fff;
}

#mainMenu h1 {
 font-size: 1.1em;
}

#mainMenu li,
#mainMenu ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
/*}}}*/
/***
!Sidebar styles 
***/
/*{{{*/
#sidebar {
  right: 0;
  color: #fff;
  border: 1px solid #300000;    /* !!!   was ffbf00 */
  border-width: 0 0 1px 1px;
}

#sidebarOptions {
  background-color: #502020;  /* !!!   was 4c4c4c */
  padding: 0;
}


#sidebarOptions .sliderPanel {
  background-color: #401010;     /* !!!   was 333 */
  margin: 0;
}

#sidebarOptions input {
  border: 1px solid #ffbf00;
  background-color: #ffffcc;
}

#sidebarTabs .tabUnselected:hover,
#sidebarTabs .tabContents {
  background-color: #502020;      /* !!!   was 666 */
}

#sidebarOptions .highlight {
  color: #4c4c4c;
  background-color: #ffbf00;
}

.listTitle {
  color: #c08080;      /* !!!   was fff */
}


/* Special for SelectThemePlugin when leaving popup open and mousing away*/
#sidebarTabs {
  background-color: #502020;         /* !!!   was 4c4c4c */
}

#sidebarTabs .tabSelected { 
  padding: 3px 3px; 
  cursor: default; 
  color: #ffbf00; 
  background-color: #502020;      /* !!!   was 666 */ 
}

#sidebarTabs .tabUnselected { 
  color: #ffbf00; 
  background-color: #603030;      /* !!!   was 5f5f5f */ 
  padding: 0 4px; 
}

#sidebarTabs .tabContents a:hover { 
  color: #ff7f00; 
  background: transparent; 
}

#sidebarTabs .txtMoreTab .tabUnselected { 
  color: #ffbf00; 
  background: #603030;         /* !!!   was 5f5f5f */
}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents { 
  color: #ffbf00; 
  background: #502020;           /* !!!   was 4c4c4c */
}
/*}}}*/
/***
!General tab styles
***/
/*{{{*/

.tab.tabUnselected {
  background-color: #666;
}

.tab.tabSelected,
.tab.tabSelected:hover {
 color: #ffbf00;
  border: 0;
  background-color: #4c4c4c;
  cursor: default;
}

.tab.tabUnselected:hover {
  color: #ffbf00;
  border: 0;
  background-color: #4c4c4c;
}

.tabContents {
  background-color: #4c4c4c;
  border: 0;
}

.tabContents .tabUnselected{
  background: #5f5f5f;
}

.tabContents .tab:hover, 
.tabContents .tabContents, 
.tabContents .tabSelected {
  background: #666;
}
/*}}}*/
/***
!Message area styles
***/
/*{{{*/
#messageArea {
  background-color: #666;
  color: #fff;
  border: 2px solid #ffbf00;
}
/*}}}*/
/***
!Popup styles 
***/
/*{{{*/
#popup {
  color: #fff;
  background-color: #4c4c4c;
  border: 1px solid #ffbf00;
}

#popup a:hover {
  background: transparent;
  color: #ff7f00;
  border: 0;
}

#popup hr {
  color: #ffbf00;
  background: #ffbf00;
}

/* Special for SelectTheme popmenu */
#popup .currentlySelected {
  color: #4c4c4c;
  background: #ffbf00;
}
/*}}}*/
/***
!Tiddler Display styles
***/
/*{{{*/
/** LOSER ON IE6 without Clint's IE fix (see body section at top!) **/
.tiddler {
  background: #401010;   			/* !!! */
  border: 3px solid #502020;			/* !!! */
  padding-bottom: 8px;
  margin-left: 8px; 				/* Vastly different on IE vs FireFox! */
  margin-bottom: 12px;
}

#displayArea .button.highlight {
  color: #ffbf00;
  background: #4c4c4c;
}

.tiddler .button {
  color: #888;
}

.tiddler .button:hover,
.tiddler .button:active {
  color: #ffbf00;
  background-color: #4c4c4c;
  border-bottom: 1px solid #4c4c4c;              /* No dotted line in buttons */
}

.viewer {
  color: #FFF;
}

.viewer table{
  background: #603030;  			/* !!! */
  color: #fff
  border: 1px solid;
}

.viewer th {
  background-color: #4c4c4c;
  color: #fff;
}

.viewer hr {
  color: #666;
}

.viewer input, 
.viewer select {
  font-family: "Lucida Console","Courier New",Courier,monospace;
  font-size: 1.0em; 
/** Looks bad on IE6
  padding-left:4px;
  color: #ddd;
  background-color: #4c4c4c;
  border: 1px solid #ffbf00;
**/
}

.viewer .sortheader {
  font-weight: normal;
}

.viewer pre, 
.viewer code {
  color: #ddd;
  background-color: #603030  			/* !!! */
  border: 1px solid #ffbf00;
}

.viewer .button:hover,
.viewer .button:active {
  border: 1px solid #4c4c4c; 			/* Needed to avoid button size changing */
}

.viewer .fileList table {
  border-color: #ff7f00;
  margin-bottom: 0px;
}

/* For Share your Sky only */
.viewer .fileList tr {
  border: none;
}

.viewer .fileList td, 
.viewer .fileList th {
  border: 0;
  padding: 2px 8px 2px 8px;
}
 
.viewer .noBorder table,
.viewer .noBorder th,
.viewer .noBorder tr,
.viewer .noBorder td, 
.viewer iframe {
  border: 0;
}

.viewer .noBorder #sm_thumb { 			/* For sysmon thumbnail */
  border: 1px solid #804040;  			/* !!! */
  padding: 0px;
}
/* End Share Your Sky */

.toolbar {
  color: #4c4c4c;
}

.footer {
  color: #ddd;
}

.selectedTiddler .footer {
  color: #888;
}

.editor textarea, 
.editor input {
  border: 1px solid #ffbf00;
  background-color: #ffffcc;
}

.editorFooter {
  color: #aaa;
}

.tab{
  -moz-border-radius-topleft: 3px;
  -moz-border-radius-topright: 3px;
}

.tagging,
.tagged {
  background: #4c4c4c;
  border: 1px solid #4c4c4c;
}

.selected .tagging,
.selected .tagged{
  background: #000;
  border: 1px solid #ffbf00;
}

.tagging .button,
.tagged .button{
  color: #ffbf00;
  border: 0;
  padding: 0;
}

.tagging .button:hover,
.tagged .button:hover {
  background: transparent;
}

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

.tagClear{
  margin-top: 1em;
}

.highlight, 
.marked {
  background-color: #800000;
  color: #ffffff;
}

.cascade {
  background: #4c4c4c;
  color: #ddd;
  border: 1px solid #ffbf00;
}

.stretch img {
  width:100%; 
} 

.twocolumns { 
  display:block; 
  -moz-column-count:2; 
  -moz-column-gap:1em; 
  -moz-column-width:50%;
}
/*}}}*/
/***
!XP ~NavBar Style Overrides
***/
/*{{{*/
.topItem {
  background: url("im/fire-classic-up.png") no-repeat 0 0;
  color: #ffbf00;
}

.topItemOver {
  background: url("im/fire-classic-up-on.png") no-repeat 0 0;
  color: #ffffff;
}

.topItemClose {
  background: url("im/fire-classic-down.png") no-repeat 0 0;
  color: #ffbf00;
}

.topItemCloseOver {
  background: url("im/fire-classic-down-on.png") no-repeat 0 0;
  color: #ffffff;
}

.subItem, 
.subSubItem, 
.subItemOver, 
.subSubItemOver {
  color: #ffffff;
}

.dropMenu {
  background-color: #4c4c4c;
  color: #000;
  border: 1px solid;
  border-color: #4c4c4c #ff7f00 #ff7f00 #ff7f00;
}
/*}}}*/
/***
!Footer styles /% ============================================================= %/
***/
/*{{{*/

#ContentFooter {
  background: #603030; 				/* !!! */
  color:#0f0; 
  clear:both; 
  padding:0.5em 1em; 
  text-align:center;
}

#ContentFooter a {
  color: #fff; 
  border-bottom: 10px dotted #f00;		/* !!! */
}	

#ContentFooter a:hover {
  color: #fff;
  background-color:#f00;
}
.textcenter {
  text-align:center;
}
/*}}}*/
/***
!Horizontal Main Menu Style Mods /% ============================================================= %/
***/
/*{{{*/

#mainMenu a.button.HideSideBarButton {
  color: #f08080;
}

#mainMenu a.button.HideSideBarButton:hover {
  color: #ffbf00;
}

#displayArea { 
  margin: 1em 15.5em 0em 1em; 			/* neutralize default margins */ 
}

#mainMenu {
  position: static; 
  width: auto; 					/* neutralize default settings */
  overflow: auto; 				/* contain floats */ 
  border-bottom: 1px solid #603030;		/* !!! */ 
  padding: 0;
  text-align: left; 
  color: #c000f0; 
  background-color: #603030;			/* !!! */ 
  font-size: 0.8em; 
}

#mainMenu a,
#mainMenu .button,
#mainMenu .tiddlyLink { 
  display: block; 
  float: left; margin: 0; 
  padding: 0.2em 0.75em;
  font-size: 1.15em; 
  font-weight: bold; 
  color: #f08080; 
}

#mainMenu a:hover,
#mainMenu .button:hover,
#mainMenu .tiddlyLink:hover { 
  background-color: #603030;			/* !!! */
  color: #ff7f00; 
}

#mainMenu br {
  display: none; 
}

/*}}}*/
!Introduction
Details and one-time setup information are accessible from the help file of the ACP application itself and from the [[ACP Help]] files in this Reference Guide. If you are connected to the internet now (broadband is best), you can also watch the ACP ''[[Videos|https://www.youtube.com/DC3Dreams]]''. These provide a great jump-start in understanding how ACP works, and what it can do for you. 

To see why __we have focused on the web interface for routine use__, see these videos: [[Acquiring a Color Series]], and this one, [[Introducing TheSky HD (iOS) with Built-in ACP Control]].

|!Notes|
|If you don't yet know about the free ''[[ACP Planner|http://acp.dc3.com/planner.html]]'', this application provides an assisted process for creating an observing plan. Planner can also work in conjunction with either of [[TheSky]] or [[Starry Night Pro]] planetarium programs. For routine use, unless you are an advanced science observer, you really should use Planner to generate your plans!|
||
|You can jump start your knowledge of ACP and ~MaxIm by using the simulators. Go to [[Using the Simulators for Test & Practice]] for an overview.|
||

Each of the links below will open a new window to provide high-level descriptions. 

>[[Software and Catalog Installation]]
>[[Site Information]]
>[[Enabling the ACP Pointing Corrector]]
>[[Optimizing Pointing Exposures]]
>[[File/Folder Customization Tool]]
----
|[[Australia Weather]] - Three-hour IR color loop from the Bureau of Meteorology|
|[[Indian Ocean Basin Weather]] - METEOSAT 7 IR imagery loop|
|[[Europe Weather]] - Forecast for astronomy from Sat24|
|[[North America Weather]] - Forecast for astronomy from the Meteorological Service of Canada|
|[[China Weather]] - Eastern Asia/Hong Kong 24-hour loop|
|[[US Weather by zipcode]] - 48-hour National Weather Service graphical forecast @@color:#f00;^^~~^^NEW^^~~^^@@|
|[[NOAA Space Weather Prediction Center]] - U.S. Gov't. Space Weather Bureau @@color:#f00;^^~~^^NEW^^~~^^@@|
----
{{borderless{
|[[Click here to open in a new browser tab|http://fits.gsfc.nasa.gov/]]|
<html><div align="center"><iframe src ="http://fits.gsfc.nasa.gov/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|https://www.google.com/earth/]]|
<html><div align="center"><iframe src ="https://www.google.com/earth/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.iota.timerson.net]]|
<html><div align="center"><iframe src ="http://www.iota.timerson.net" width="100%" align="center" height="600">< /></div></html>}}}
----
<!--{{{-->
<div class='header' macro='gradient vert #102010 #306030'>
 <div class='headerShadow'>
 <span id='searchBar' macro="search"></span>
 <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
 <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
 </div>

 <div class='headerForeground'>
<!-- <span id='searchBar' macro="search"></span>
 <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 id='ContentFooter' refresh='content' tiddler='contentFooter'></div>
</div>
<!--}}}-->
/***
!Colors Used in this Green Style Sheet
| !Neutral | @@bgcolor(#fff):color(#000): #ffffff@@ | @@bgcolor(#ddd):color(#000): #dddddd@@ | @@bgcolor(#aaa):color(#000): #aaaaaa@@ | @@bgcolor(#888):color(#fff): #888888@@ | @@bgcolor(#666):color(#fff): #666666@@ | @@bgcolor(#5f5f5f):color(#fff): #5f5f5f@@ | @@bgcolor(#4c4c4c):color(#fff): #4c4c4c@@ | @@bgcolor(#333):color(#fff): #333333@@ | @@bgcolor(#000):color(#fff): #000000@@ |
| !Standard | @@bgcolor(#ffffcc):color(#000): #ffffcc@@ | @@bgcolor(#ffff88):color(#000): #ffff88@@ | @@bgcolor(#ffe72f):color(#000): #ffe72f@@ | @@bgcolor(#ffbf00):color(#000): #ffbf00@@ | @@bgcolor(#ff7f00):color(#000): #ff7f00@@ | @@bgcolor(#f00):color(#000): #f00@@ | @@bgcolor(#c000f0):color(#fff): #c000f0@@ | @@bgcolor(#00f000):color(#000): #00f000@@ |   |
| !Theme | @@bgcolor(#90c090):color(#000): #90c090@@ | @@bgcolor(#80c080):color(#000): #80c080@@ | @@bgcolor(#408040):color(#fff): #408040@@ | @@bgcolor(#306030):color(#fff): #306030@@ | @@bgcolor(#205020):color(#fff): #205020@@ | @@bgcolor(#104010):color(#fff): #104010@@ | @@bgcolor(#003000):color(#fff):#003000@@ |   |   |
!Generic Layout Rules 
***/
/*{{{*/
@font-face {
  font-family: 'Xirod';
  src: url('RefDocs/Xirod.ttf') format('truetype');
}

body { 
  background: #306030; 			        /* !!! */
  position: static; 				/*Clint's IE fix part 1 (part 2 in TW now) */ 
}

textarea { 
  font-family: courier !important; 	        /* Fixed point font for editing */ 
}

.title{ 
  color: #fffacd; 
  border-bottom: 1px dashed #333; 
}

.subtitle { 
  color: #666; 
}

.collapsedTitle { 
  color: #888; 
  font-size: 1.3em; 
  font-weight: bold; 
}

h1, h2, h3, h4, h5 { 
  color: #ffff88; 				/* !!! */
  background-color: #003000; 		/	* !!! */
  border-top: 1px solid #003000;		/* !!! */
  border-bottom: 1px solid #003000; 		/* !!! */
}

.tagged { 
  display:none; 
}
/*}}}*/
/***
!Link styles
***/
/*{{{*/
a, 
a.button, 
#mainMenu a.button, 
#sidebarOptions .sliderPanel a {
  color: #ffbf00;  
  border: 0;
}

a:hover, 
a.button:hover, 
#mainMenu a.button:hover, 
#sidebarOptions .sliderPanel a:hover, 
#sidebarOptions .sliderPanel a:active {
  color: #ff7f00;
  border: 0;
  border-bottom: none;  			/* !!! */
  background: transparent;
  text-decoration: none;
}

#sidebarOptions a {
  margin: 0;
  color: #ffbf00;
  border: 0;
}

#sidebarOptions a:active {
  color: #ffbf00;
  background-color: transparent;
}

#sidebarOptions a:hover {
  color: #4c4c4c;
  background-color: #ffbf00;
}

#sidebarTabs .tabContents a, 
#popup a {
  color: #ffbf00;
}

#messageArea a:link,
#messageArea a:visited {
  color: #ffbf00;
  text-decoration: none;
}

#messageArea a:hover, 
#messageArea a:active {
  color: #ff7f00;
}

#messageArea .messageToolbar a {
  border: 1px solid #ffbf00;
  background: #4c4c4c;
}

.headerForeground a {
  color: #fff;
}

.toolbar a.button {
  border: 0;
}

.editorFooter a {
  border: 0;
}
/*}}}*/
/***
!Header styles
***/
/*{{{*/
.header{
  border-bottom: 1px solid #306030;	        /* !!! */
  color: #fff;
}

.header a:hover {
  border-bottom: none ;  			/* !!! */
}

.headerForeground, 
.headerShadow {
  padding: 2.5em 0em 1em 1em;
}

.siteTitle {
  color: #003000;
  font-family: Xirod; 
  font-size: 3em; 
  text-shadow: 2px -2px 3px white;
}

.siteSubtitle {
  color: #90c090;
}

#searchBar { 
  float: right; 
  margin-top: 1em;
  margin-right: 1em; 
  font-size: 0.9em; 
} 

#searchBar .button { 
  margin-right: 0.5em; 
  border: none; 
}

/*}}}*/
/***
!Main menu styles
***/
/*{{{*/
#mainMenu {
  color: #fff;
}

#mainMenu h1 {
  font-size: 1.1em;
}

#mainMenu li,
#mainMenu ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
/*}}}*/
/***
!Sidebar styles 
***/
/*{{{*/
#sidebar {
  right: 0;
  color: #fff;
  border: 1px solid #003000;    /* !!!   was ffbf00 */
  border-width: 0 0 1px 1px;
}

#sidebarOptions {
  background-color: #205020;
  padding: 0;
}


#sidebarOptions .sliderPanel {
  background-color: #104010;
  margin: 0;
}

#sidebarOptions input {
  border: 1px solid #ffbf00;
  background-color: #ffffcc;
}

#sidebarTabs .tabUnselected:hover,
#sidebarTabs .tabContents {
  background-color: #205020;
}

#sidebarOptions .highlight {
  color: #4c4c4c;
  background-color: #ffbf00;
}

.listTitle {
  color: #80c080;
}


/* Special for SelectThemePlugin when leaving popup open and mousing away*/
#sidebarTabs {
  background-color: #205020;
}

#sidebarTabs .tabSelected { 
  padding: 3px 3px; 
  cursor: default; 
  color: #ffbf00; 
  background-color: #205020; 
}

#sidebarTabs .tabUnselected { 
  color: #ffbf00; 
  background-color: #306030; 
  padding: 0 4px; 
}

#sidebarTabs .tabContents a:hover { 
  color: #ff7f00; 
  background: transparent; 
}

#sidebarTabs .txtMoreTab .tabUnselected { 
  color: #ffbf00; 
  background: #306030; 
}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents { 
  color: #ffbf00; 
  background: #205020; 
}
/*}}}*/
/***
!General tab styles
***/
/*{{{*/

.tab.tabUnselected {
  background-color: #666;
}

.tab.tabSelected,
.tab.tabSelected:hover {
  color: #ffbf00;
  border: 0;
  background-color: #4c4c4c;
  cursor: default;
}

.tab.tabUnselected:hover {
  color: #ffbf00;
  border: 0;
  background-color: #4c4c4c;
}

.tabContents {
  background-color: #4c4c4c;
  border: 0;
}

.tabContents .tabUnselected{
  background: #5f5f5f;
}

.tabContents .tab:hover, 
.tabContents .tabContents, 
.tabContents .tabSelected {
  background: #666;
}
/*}}}*/
/***
!Message area styles
***/
/*{{{*/
#messageArea {
  background-color: #666;
  color: #fff;
  border: 2px solid #ffbf00;
}
/*}}}*/
/***
!Popup styles 
***/
/*{{{*/
#popup {
  color: #fff;
  background-color: #4c4c4c;
  border: 1px solid #ffbf00;
}

#popup a:hover {
  background: transparent;
  color: #ff7f00;
  border: 0;
}

#popup hr {
  color: #ffbf00;
  background: #ffbf00;
}

/* Special for SelectTheme popmenu */
#popup .currentlySelected {
  color: #4c4c4c;
  background: #ffbf00;
}
/*}}}*/
/***
!Tiddler Display styles
***/
/*{{{*/
/** LOSER ON IE6 without Clint's IE fix (see body section at top!) **/
.tiddler {
  background: #104010;   			/* !!! */
  border: 3px solid #205020;			/* !!! */
  padding-bottom: 8px;
  margin-left: 8px; 				/* Vastly different on IE vs FireFox! */
  margin-bottom: 12px;
}

#displayArea .button.highlight {
  color: #ffbf00;
  background: #4c4c4c;
}

.tiddler .button {
  color: #888;
}

.tiddler .button:hover,
.tiddler .button:active {
  color: #ffbf00;
  background-color: #4c4c4c;
  border-bottom: 1px solid #4c4c4c;              /* No dotted line in buttons */
}

.viewer {
  color: #FFF;
}

.viewer table{
  background: #306030;  			/* !!! */
  color: #fff;
  border: 1px solid;
}

.viewer th {
  background-color: #4c4c4c;
  color: #fff;
}

.viewer hr {
  color: #666;
}

.viewer input, 
.viewer select {
  font-family: "Lucida Console","Courier New",Courier,monospace;
  font-size: 1.0em; 
/** Looks bad on IE6
  padding-left:4px;
  color: #ddd;
  background-color: #4c4c4c;
  border: 1px solid #ffbf00;
**/
}

.viewer .sortheader {
  font-weight: normal;
}

.viewer pre, 
.viewer code {
  color: #ddd;
  background-color: #306030  			/* !!! */
  border: 1px solid #ffbf00;
}

.viewer .button:hover,
.viewer .button:active {
  border: 1px solid #4c4c4c; 			/* Needed to avoid button size changing */
}

.viewer .fileList table {
  border-color: #ff7f00;
  margin-bottom: 0px;
}

/* For Share your Sky only */
.viewer .fileList tr {
  border: none;
}

.viewer .fileList td, 
.viewer .fileList th {
  border: 0;
  padding: 2px 8px 2px 8px;
}
 
.viewer .noBorder table,
.viewer .noBorder th,
.viewer .noBorder tr,
.viewer .noBorder td, 
.viewer iframe {
  border: 0;
}

.viewer .noBorder #sm_thumb { 			/* For sysmon thumbnail */
  border: 1px solid #408040;  			/* !!! */
  padding: 0px;
}
/* End Share Your Sky */

.toolbar {
  color: #4c4c4c;
}

.footer {
  color: #ddd;
}

.selectedTiddler .footer {
  color: #888;
}

.editor textarea, 
.editor input {
  border: 1px solid #ffbf00;
  background-color: #ffffcc;
}

.editorFooter {
  color: #aaa;
}

.tab{
  -moz-border-radius-topleft: 3px;
  -moz-border-radius-topright: 3px;
}

.tagging,
.tagged {
  background: #4c4c4c;
  border: 1px solid #4c4c4c;
}

.selected .tagging,
.selected .tagged{
  background: #000;
  border: 1px solid #ffbf00;
}

.tagging .button,
.tagged .button{
  color: #ffbf00;
  border: 0;
  padding: 0;
}

.tagging .button:hover,
.tagged .button:hover {
  background: transparent;
}

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

.tagClear{
  margin-top: 1em;
}

.highlight, 
.marked {
  background-color: #000080;
  color: #ffffff;
}

.cascade {
  background: #4c4c4c;
  color: #ddd;
  border: 1px solid #ffbf00;
}

.stretch img {
  width:100%; 
} 

.twocolumns { 
  display:block; 
  -moz-column-count:2; 
  -moz-column-gap:1em; 
  -moz-column-width:50%;
}
/*}}}*/
/***
!XP ~NavBar Style Overrides
***/
/*{{{*/
.topItem {
  background: url("im/fire-classic-up.png") no-repeat 0 0;
  color: #ffbf00;
}

.topItemOver {
  background: url("im/fire-classic-up-on.png") no-repeat 0 0;
  color: #ffffff;
}

.topItemClose {
  background: url("im/fire-classic-down.png") no-repeat 0 0;
  color: #ffbf00;
}

.topItemCloseOver {
  background: url("im/fire-classic-down-on.png") no-repeat 0 0;
  color: #ffffff;
}

.subItem, 
.subSubItem, 
.subItemOver, 
.subSubItemOver {
  color: #ffffff;
}

.dropMenu {
  background-color: #4c4c4c;
  color: #000;
  border: 1px solid;
  border-color: #4c4c4c #ff7f00 #ff7f00 #ff7f00;
}
/*}}}*/
/***
!Footer styles /% ============================================================= %/
***/
/*{{{*/

#ContentFooter {
  background: #306030; 				/* !!! */
  color:#000; 
  clear:both; 
  padding:0.5em 1em; 
  text-align:center;
}

#ContentFooter a {
  color: #fff; 
  border-bottom: 10px dotted #0f0;		/* !!! */
}

#ContentFooter a:hover {
  color: #fff;
  background-color:#f00;
}
.textcenter {
  text-align:center;
}
/*}}}*/

/***
!Horizontal Main Menu Style Mods /% ============================================================= %/
***/
/*{{{*/

#mainMenu a.button.HideSideBarButton {
  color: #80f080;
}

#mainMenu a.button.HideSideBarButton:hover {
  color: #ffbf00;
}

#displayArea { 
  margin: 1em 15.5em 0em 1em; 			/* neutralize default margins */ 
}

#mainMenu {
  position: static; 
  width: auto; 					/* neutralize default settings */
  overflow: auto; 				/* contain floats */ 
  border-bottom: 1px solid #306030;		/* !!! */ 
  padding: 0;
  text-align: left; 
  color: #c000f0; 
  background-color: #306030;			/* !!! */ 
	font-size: 0.8em; 
}

#mainMenu a,
#mainMenu .button,
#mainMenu .tiddlyLink { 
  display: block; 
  float: left; margin: 0; 
  padding: 0.2em 0.75em;
  font-size: 1.15em; 
  font-weight: bold; 
  color: #80c080; 
}

#mainMenu a:hover,
#mainMenu .button:hover,
#mainMenu .tiddlyLink:hover { 
  background-color: #306030;			/* !!! */
  color: #ff7f00; 
}

#mainMenu br {
  display: none; 
}

/*}}}*/
[[Minor Planet Astrometry]]
[[Minor Planet Photometry]]
----
The process is essentially the same as what would be done for creating flats, darks and biases for the main camera.
!Collecting the Data
The difference is that you have to select the autoguider camera instead of the main camera. The selection will be different depending on whether you have a separate autoguider or a dual-chip camera. It's also different between ~MaxIm version 5 and ~MaxIm version 4. @@color:#ff0;You'll need to do the following three steps for each binning you want to use for the autoguider.@@ Darks and biases you can take on a cloudy night. Flats require clear skies or other uniform illumination.

#Take a large number of bias images - maybe thirty or a hundred, they go pretty fast, since there's no exposure time associated with them, just the readout time. Save all of them in a folder you have set up called, perhaps, "Calibration Images."
#Then take a pile of "darks" at 10-second exposure each - maybe 30 or a hundred of them. The more you take will ensure you have better noise reduction when they get merged. Put these all in the same "Calibration Images" folder. (I suggested 10 seconds since most autoguiding images are not anywhere near that long. If you anticipate longer autoguiding exposures, then make your darks at least as long.)
#Then on a clear day/dusk, run a series of flats using the autoguider as the "main" camera. @@color:#ff0;You'll need some of them for each filter you expect to use.@@ Flats need to be exposed to the right level so that you don't run up into the saturated part of the CCD response. For a 64,000 ADU saturation, I'd take them at 30,000 or so, maybe 35,000. If you use binning 2, the time it takes will not be too long, but you probably won't have time enough to do regular flats on the same evening. Put all flats in the "Calibration Images" folder.
!Processing the Data
So now all of these images are in one place, in your Calibration Images folder. Go to the Set Calibration menu in ~MaxIm. Here point the "Source Folder" at your folder. Press "Auto Generate" and when that's done, press "Replace with Masters." This step combines all the individual images appropriately. As an example, if you have five filters, three binnings and 200 images total (including darks and biases), there are created just 15 masters when this process finishes - one for each of the five filters at each of the three binnings. Because guiding chips have different sizes than the imaging chip, these masters will not be confused with the masters you made for your imaging  camera. Furthermore, these autoguider masters will have the right FITS header information so that when you go to calibrate a single autoguider image, the correct master will be applied to do the calibration.

One difference from regular camera calibration images, though, might be that your exposures for "darks" could be 300 or 600 seconds, or longer, if you expect to take regular images with that kind of integration time. But you only need 10 seconds or so for the autoguider camera. If your guide camera is cooled, you'll want a calibration set for each particular cooled temperature you expect to operate it at, or if it's uncooled, then at a few different ambient temperatures.
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
{{borderless{
|[[Click here to open in a new browser tab|http://www.handsonuniverse.org]]|
<html><div align="center"><iframe src ="http://www.handsonuniverse.org" width="100%" align="center" height="600">< /></div></html>}}}
----
Scroll down the list to find your area of interest.  Clicking the link may open the .dat file in a pop-up browser window. Right-clicking, followed by "Save link as..." or "Copy to folder..." will download the document to your computer, where it can be opened in Notepad without changing the document suffix.
*Additional fields are posted in [[Sumner Photometry Fields]].
*Here's a spreadsheet of [[383 Henden fields mapped to RA/Dec]] that has an interactive plot of the field locations. 
----
{{borderless{
|[[Click here to open in a new browser tab|ftp://ftp.aavso.org/public/calib/]]|
<html><div align="center"><iframe src ="ftp://ftp.aavso.org/public/calib/" width="100%" align="center" height="400">< /></div></html>}}}
----
From: ''Rob Capon''

ACP and Scheduler offer two different ways to autofocus, and you can take your choice:

#Within ACP, if you focus for each object, it will do an autofocus star search within 15 degrees of the object, but typically will be much closer. So in that case, you can set the Scheduler periodic autofocus to 0 hours (which will turn it off), and you can focus per object. That is, when you enter your Projects into Scheduler, check the "Autofocus" box.
#Within Scheduler, you can set the periodic autofocus in the Scheduler/Configure menu. In that case, you want autofocus unchecked in your individual Scheduler projects. When Scheduler autofocuses, it does three things of note:
*It focuses at high altitude, typically 70-80 degrees.
*It focuses at T=0, and then periodically according to your setting. (T=0 when you start up, and every two hours thereafter.)
*If the first autofocus fails, it will go back to the previous focus position, image your first object, then attempt another autofocus even if T < 2 hours.

Rob's tested it both ways, and he will tell you it works MUCH better for him using Scheduler's periodic autofocus rather than ACP's nearby focus. The reason is that focusing at high altitude is much more reliable. If you're shooting something at Altitude = 20, the autofocus is less reliable as you focus through the greater air mass. So a better approach is to use the Scheduler periodic autofocus, and leave the autofocus boxes unchecked in Scheduler projects.
----
!The ACP ~CoordinateTransform Object

!!Remarks
This object implements coordinate transformations between equatorial (RA/Dec) and topocentric (Alt/Az) coordinates. The transformation is valid for a particular latitude and sidereal time. When you create a ~CoordinateTransform object (using the Util.~NewCT() or Util.~NewCTHereAndNow() methods), the object is set for the specified latitude and sidereal time. You can then repeatedly set coordinates of one type then retrieve the transformed coordinates of the other type. 

|!NOTE|
|Whenever you change one of the coordinate properties, the transformation is recalculated. For example, if you change the Altitude property, the ~RightAscension, ~HourAngle, and Declination properties are immediately recalculated.|

The transformations are very easy to do with this object. For example, to transform between these systems using your current geographic location and time: 
*Use Util.~NewCThereAndNow() to get a new ~CoordinateTransform object set up for your current geographic location and time. 
*Set the coordinate properties you know, for example RA/Dec 
*Get the coordinate properties you don't know, for example Az/Elev, for example: 

{{{
Set ct = Util.NewCThereAndNow()
ct.RightAscension = 8.32658
ct.Declination = 21.41097
Console.PrintLine "Azimuth = " & ct.Azimuth
Console.PrintLine "Elevation = & " ct.Elevation
}}}

You can also get a "blank" ~CoordinateTransform object and initialize it with any arbitrary geographic position and time. 
|This does not do corrections for atmospheric refraction. The equatorial coordinates are for the local posiition and epoch -- they not corrected for precession and/or nutation. Use the ~NOVAS-Com object (shipped with ACP) for working with J2000 coordinates, and use ASCOM's refraction method for refractivity corrections.|

----
Courtesy of Jim ~McMillan and Bob Denny
----
If your guiding imager is particularly noisy, you can benefit by having ~MaxIm subtract a dark frame from the guider's images. Due to a limitation in ~MaxIm DL/CCD, you cannot use its "simple auto-dark" for this. Instead, you must create dark and bias frames for your guider and use ~MaxIm's "full calibration" mode for the guider imager. (However, calibration must be "none" if you are using an AO.)

To build a calibration set for the guider camera, you create a library of darks at the longest guide exposure you'll use, at the nominal ambient temperature, and you'll create bias frames, too. Remember, you don't need to take exposures at different exposure lengths. And as long as your dark images are longer than the longest expected exposure during guiding, and if you take bias frames, ~MaxIm will scale the dark frame appropriately and apply it to the guiding frame.

A typical approach, then, is to take a half-dozen darks at the longest expected guider exposure, say five or ten seconds, and a half-dozen bias images (zero seconds). These images are taken with the guider camera. Load these images into ~MaxIm's Calibration Wizard, and create a "master" calibration frame. See also [[Guider-chip Calibration]].
----
~PinPoint selects the star to guide from. Every once in a while, ~PinPoint has a difficult time distinguishing from a bright galaxy core and a real star. So when trying to autoguide in a field where there's bright galaxy, ~PinPoint may select the galaxy core as the preferred guide star. Often this is due to less than perfect focusing. So, one suggestion is to check your focus first. 

If you're comfortable using a text editor to change ACP scripts, a little tricker fix is to make a small modification in ~AcquireSupport.wsc. Find:

|For i = 1 To ~StarList.Count|

At this point in the code ACP is looking at each star as measured on the initial guide exposure and listing them from brightest to dimmest. In this loop, ACP selects the first star to guide on that meets the appropriate criteria (SNR, not a double star, not too close to the edge). Since the first "star" that meets the criteria might be a galaxy center, you can get it to skip the galaxy and select the second star instead by changing it to:

|For i = 2 To ~StarList.Count|

When using "2" it will likely never select a galaxy center again. If it's still a problem, change it to 3, and so forth. 

By the way, this technique works fine with a large guider FOV where there will be plenty of suitable guide stars. This won't work if you're using a small guider FOV where there might only be one suitable star to begin with.
|!Note|
|When editing, make a copy of the original first; then use a text editor like Notepad, Notepad++ or ~PSPad to make the changes. (Notepad++ and ~PSPad are editors that have line numbers in the left margin.)|
----
This tip is from Jim ~McMillan
! 
Logging ~FocusMax activity into the ACP run log is a feature of ~FocusMax. The log information from ~FocusMax is inserted into your ACP run log, allowing you to see its activity right inline with the rest of the run's activity.

To enable this feature in version 3, in ~FocusMax select the Open menu, Options (at the bottom of the menu). At the bottom of the Options window that will appear, check the box "Send log text to ACP". That's all there is to it!

For version 4, select the Open menu, Preferences tab. In the new window select General. Then check the box in the upper-right corner "Send Log to ACP."
----
This description is edited from a post by ACP user Niel Fleming on the SBIG Yahoo group, October 18, 2006. It is still relevant today.
!Here's how to set it up and use it, without invoking the ~FocusMax wizard

~FocusMax uses the left and right focus slopes, called V-curves, to determine the best focus. This is far more accurate than trying to "snoop' around for the best focus point.
*Slew to a 4th-6th magnitude star This is actually an important step. Too bright or too dim a star will not give good V-curve results.
*After you connect to your focuser, find a way to settle it more or less in the middle of its range. For example, the Optec ~TCF-S has a range of 7000 steps, so set it for 3500 to start, right in the middle. Then, use the telescope's manual focus to focus things as well as possible. This will allow the focuser and ~FocusMax to have equal latitude in and outside of focus. This will be a one-time step.
*In ~FocusMax (FM), on the setup tab (at the bottom), tell the system if you will be focusing in or focusing out to come to focus. It's a purely personal preference, but 'in' may be better so that the focuser is pulling up against the weight of the camera. 
*Now click on ~V-Curve tab at the top, and the ~V-curve window will pop up. 
*You will see two columns or methods of defining the V-curve parameters. In the first column (called, "end points"), you can specify the start and end points of the ~V-curve run, along with the step increment. With the ~TCF-S, it has 7000 steps. If I were successful at having the initial manual focus point set more or less at 3500, then I might set the start at 4500, and the end at 2500, with maybe a step increment of 50. This will give a V- curve of 40 steps (step size = 50). This first run will be done by specifying the start and end points. (The second method is the "half width" column, and we'll get to that later.) 
*Click on the 'Run' button, and you will start your first ~V-curve run.
*FM will move the focuser to 4500, measure the half flux diameter (HFD) of the star, move the focuser in 50 position points, do it again, and again, until it gets to 2500...the end of the run. Visually, you will see the "~V-curve" on the screen, as it starts out measuring the fuzzy stars, gets sharper as it nears 3500, then gets fuzzy again as it hits 2500.
*At the end of the run, FM will take a moment to calculate the "slopes". The right side of the curve has a slope, and intercepts the '0' on the X-axis at the bottom at one value - like 3562. The left side of the slope similarly has a slope, and intercepts the '0' axis at the bottom with a slightly different value, e.g., 3470. This first V-curve run will be sloppy. The difference of where the left and right slopes intersect the X-axis is called the Position Intercept Difference, or 'PID'. With good optics and a good focuser, the agreement will approach 6-decimal between the left and right slopes, or about a value of 2-3 for the PID. It is mere microns away from perfect focus.
*Go back to the main window and click on the Focus button on the Focus tab. FM will now do a quick run to do an initial focus. We  are not done - this is just for the next step.
*FM does NOT sniff around the bottom of the curve/tip of the V to "snoop" for the best focus position, as one might logically think. It instead uses one side of the V-curve slope, figures out where it is on that slope, and calculates the best focus position.
*FM will do an initial focus run and populate this value into the V-curve window in the "Half Width" column, in the "Center" value. Remember method #2 from above? Time to use it. For this, and all subsequent V-curve runs, we will allow FM to populate the "Center" value with the last focus value, and tell it the step value to use. So, if the focus point (Center) were to be 3500, and the half width is 1000 (amount on each side of focus), with a step size of 50, then again you would have 40 measurement points on your next V-curve.
*Run the next V-curve. After you have done one or two V-curve runs, increase both the width (e.g., 1500 instead of 1000), and decrease the step size (from 50 to 20). This will increase the range over which the focus is being measured, as well as the number of points on the curve. This will lead to more accurate results. You will need a minimum of 12 good V-curve runs to get a good V-curve model!
*You will notice that the wider your selection, and the smaller step size you use, the more accurate will be your V-curve, and the more closely will the left and right sides of the V's intercept '0' at the same point.
*After you have done 12-14 V-curves, you can delete the original inaccurate ones. Keep the good, accurate, ones.
*This whole process is one-time. Once you have a set of V- Curves, FM will generate superb, repeatable focus results.
*If you ever change your system, like adding in a reducer, you need to go under "file" to create a new system profile, so that the data from the two different setups does not get mixed up with one another. You can load the appropriate ~V-Curve file for each setup that you have.

For those with temperature-finicky scopes like an FSQ or TOA, frequent refocusing now becomes easy. Slew to the target, calibrate the scope for autoguiding. Then slew to a nearby 4th magnitude star (there are plenty, after all), and do a focus run. (This is not a V-curve run; we did all of that already.) A focus run takes about a minute. If you're using ~TheSky, I just click on the "Slew Prior" button, and the scope goes right back to the target object. To refocus, just click on that "Slew Prior" button to switch between the target object and the 4th magnitude star. ACP fully automates this entire process.
----
The help file says the #AUTOFOCUS directive will "Automatically refocus the optical system before each filter group in the filter group for this target." Does the first occurrence of "filter group" in that sentence refer to a group of filters that have focus offsets relative to the same reference filter? 

In a simple plan such as the following, assuming that filterinfo.txt offsets are specified, will autofocus be invoked once for the plan, or once per repeat, or what?

|!Example Plan|
|#Repeat 3|
|#autofocus|
|#Filter Red,Clear,Green,Blue|
|#Binning 2,1,2,2|
|#Count 5,8,5,10|
|#Interval 180,240,180,180|
|M 51|

*If focus offsets are specified, then #AUTOFOCUS causes an autofocus once for the target per set, regardless of repeat (one time in this example). 
*If focus offsets aren't specified, then an autofocus occurs once per filter in the filter group for the target, per repeat per set (twelve times in this example).
----
!What happens
When the #CHILL <temp> directive is encountered in a plan, the imager's temperature setpoint is changed to the given temperature (deg. C). After the change, #CHILL waits for up to 15 minutes (a running plan is suspended!) for the cooler to reach a temperature within 2 degrees of the setpoint, and maintaining it for 60 seconds. The plan will continue after either reaching the right temperature or after 15 minutes, whichever is shorter.

 #CHILL is actually a type of target, so you can #WAIT... before it, have the imager cooled or warmed, then #WAIT... again so that imaging starts up later.

ACP tells the camera to go to a certain value, for example -20°C. Then ACP polls the camera and asks for the actual temperature. If the camera reports back that it's reached that value, and it stays there within 2°C for 60 seconds, it returns to the plan in progress. If the camera can't reach that temperature after 15 minutes, it writes a line to the console/log, and continues running the rest of the plan.

!Effect on bias, dark and flat frames
Bias, dark and flat frames have both a ~SET-TEMP and a ~CCD-TEMP value written into the FITS header. The masters calibration frames constructed from these, however, only have the ~SET-TEMP value. So if #CHILL sets the set point at -40°C (for example), and you take bias, dark and flat frames at that set point but the real temperature is only -17°C, the master calibration frames created from them will claim to be -40°C masters and not -17°C masters.

You should select reasonable target #CHILL temperatures you can be assured your kit can achieve, anticipating what the nighttime ambient temperatures might be.

See also all the other [[Directives]].
----
Whether you use [[Starry Night Pro]] or [[TheSky]], ACP Planner works in basically the same way. You work in the planetarium, selecting targets to observe, and these are added to the "collector". As you add targets, you also specify the images to be taken. ACP Planner constantly recomputes the time needed to observe each target in the collector's list.

As you roll time back and forth (using the mouse wheel or Starry Night's Graph tool), targets move across the sky and a "guide display" tells you whether there's an active observation at the time, or how long it will be until the next observation will start, or that the remainder of the night is free. Thus, you can easily visualize which targets are in a favorable position at what times, how much time is available to insert a target between ones already selected, or start a new one at the end of the list.

When you're finished adding targets and setting up observations, simply save the observing plan (File/Save As...). At this point, if you have ACP installed, and it is ready for automated imaging, you can have your plan started automatically. Or you can save it for later running or uploading to a remote ACP observatory. Load the Plan into ACP or upload it to the remote ~ACP-based observatory and start it. That's all there is to it!

Here's a diagram that shows how the pieces fit together:

[img[RefDocs/PlannerSchema.png]]
----
[[Download ACP Planner]]
Courtesy of Jim ~McMillan
----
@@color:#0f0;ACP's simple focus routine works like this:@@

1) Selects a suitable star within 5 degrees of the current target, eliminates doubles according to the database, and stays on the same side of the meridian.
2) It slews/centers the star to focus on and gives control to FM to focus.
3) If FM fails to achieve focus, it returns the focuser to the original position.
4) FM gives control back to ACP.
5) ACP slews back to the original target and centers it.

The only time ACP's focus routine (should) fail is because the database says the star ACP selects isn't a double but it really is. In this case, ~FocusMax usually won't focus properly. There is at least one known target (GSC 1.1) where this happens - NGC 891.

@@color:#0f0;~AcquireStar works like this@@ (and there are a couple of variants depending on how you set ~AcquireStar up):

1) ACP calls ~AcquireStar. ACP gives up control at this point.
2) ~AcquireStar selects 3 stars to focus on (with some additional control vs ACP).
3) ~AcquireStar slews (and perhaps centers), on the selected star and starts to focus.
4) If focus is achieved, ~AcquireStar slews back to the original target (perhaps centers), then gives control back to ACP.
5) If focus is not achieved, ~AcquireStar tries to focus on the 2nd star, then the 3rd star. If successful on one of those 2 stars, it does #4) above.
6) If focus is never achieved, it returns the focuser to the original position, then does #4 above.

There are 2 things to consider with respect to using ~AcquireStar:

1) Time. Even if ~AcquireStar works on the first star, it takes longer (maybe 25%-50%).
2) It requires setting up ~AcquireStar correctly - e.g. the data in the ~AcquireStar setup must match the setup in ACP, telescope driver, ~MaxIm, etc. It's just another place to keep track of - or where things can go wrong.

That said, you'll have virtually 100% reliability if you use ~AcquireStar.

I think it's fair to say that if you need 100% reliability, use ~AcquireStar. Use ACP's focus process if you're ok with something (perhaps) not quite 100% reliable due to database problems.

Personally, I use ACP's routine for all objects except NGC 891. If I image that target, I use ~AcquireStar.
----
(There's more now!  see the [[Exoplanet Catalog]])
{{borderless{
|[[Click here to open in a new browser tab|http://xkcd.com/1071/]]|
<html><div align="center"><iframe src ="http://xkcd.com/1071/" width="100%" align="center" height="600">< /></div></html>}}}
----
!How to Search
*Click on the green box "Enter Site here."
*Type the name or coordinates of an object of interest into the "search box" at the top of the page and click on the Search button. If a name is used, the request is sent to a name resolver, which returns the coordinates and an image size that are used for the search.
*The "Cart" is merely the place to gather images for downloading - there is no charge.
*See also this [[Hubble Legacy Archives Tutorial]]
----
{{borderless{
|[[Click here to open in a new browser tab|http://hla.stsci.edu/]]|
<html><div align="center"><iframe src ="http://hla.stsci.edu/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://hubblesource.stsci.edu/services/articles/2005-02-10/]]|
<html><div align="center"><iframe src ="http://hubblesource.stsci.edu/services/articles/2005-02-10/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cbat.eps.harvard.edu/HowToReportDiscovery.html]]|
<html><div align="center"><iframe src ="http://www.cbat.eps.harvard.edu/HowToReportDiscovery.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.lunar-occultations.com/iota/iotandx.htm]]|
<html><div align="center"><iframe src ="http://www.lunar-occultations.com/iota/iotandx.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
A sky-limited sub-exposure tells you the minimum time that you should shoot for to optimize S/N in your images. Note that while you may not be able to achieve this exposure under some circumstances, it's not a disaster if you don't: you can always increase S/N by capturing and stacking more sub-frames to compensate.

To calculate the length of a sky-limited sub-exposure, you can use one of the on-line calculators. Here's a [[CCDWare online calculator]]. Gain is usually fixed on SBIG cameras. You can find out what yours is by examining the FITS header of an image. Look for EGAIN value.

Here is another [[Starizona web site]] that may help you get a better understanding of the technical details of image S/N.
----
|METEOSAT 7 IR imagery - 11 images on 6-hour time increments|
{{borderless{
|[[Click here to open in a new browser tab|http://tropic.ssec.wisc.edu/real-time/imagemain.php?&basin=indian&sat=m5&prod=irn]]|
<html><div align="center"><iframe src ="http://tropic.ssec.wisc.edu/real-time/imagemain.php?&basin=indian&sat=m5&prod=irn" width="100%" align="center" height="600">< /></div></html>}}}
----
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.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|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.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2008.06.11 [1.9.3] added $(...) function as 'shorthand' convenience syntax for document.getElementById()
2008.03.03 [1.9.2] corrected declaration of wikifyPlainText() for 'TW 2.1.x compatibility fallback' (fixes Safari "parse error")
2008.02.23 [1.9.1] in onclick function, use string instead of array for 'bufferedHTML' attribute on link element (fixes IE errors)
2008.02.21 [1.9.0] 'onclick' scripts now allow returned text (or document.write() calls) to be wikified into a span that immediately follows the onclick link.  Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed).  Thanks to Xavier Verges for suggestion and preliminary code.
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 9, revision: 3, date: new Date(2008,6,11)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\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) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // 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 = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // there is script code
				if (show) // show inline script code in tiddler output
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // 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",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place){"+fixup+"\n};_out(this);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run inline script code
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var code="function _out(place){"+fixup+"\n};_out(w.output);"
					try { var out=eval(code); } catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // $(...) function: 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=="undefined") { // avoid redefinition
function $() {
	var elements=new Array();
	for (var i=0; i<arguments.length; i++) {
		var element=arguments[i];
		if (typeof element=='string') element=document.getElementById(element);
		if (arguments.length==1) return element;
		elements.push(element);
	}
	return elements;
}
}
//}}}
/***
|Name|InlineJavascriptPluginInfo|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.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|documentation|
|Requires||
|Overrides||
|Description|Documentation for InlineJavascriptPlugin|
''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
<<<
This plugin adds wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be recognized as embedded javascript code.
<script show>
	/* javascript code goes here... */
</script>Every time the tiddler content is rendered, the javascript code is automatically evaluated, allowing you to invoke 'side-effect' processing and/or produce dynamically-generated content that is then inserted into the tiddler content, immediately following the script (see below).  By including the optional ''show'' keyword as the final parameter in a {{{<script>}}} marker, the plugin will also include the script source code in the output that it displays in the tiddler.  This is helpful when creating examples for documentation purposes (such as used in this tiddler!)

__''Deferred execution from an 'onClick' link''__
<script label="click here" title="mouseover tooltip text" key="X" show>
	/* javascript code goes here... */
	alert('you clicked on the link!');
</script>
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, and a {{{key="X"}}} parameter to specify an //access key// (which must be a //single// letter or numeric digit only).

__''Loading scripts from external source files''__
<script src="URL" show>
	/* optional javascript code goes here... */
</script>You can also load javascript directly 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.

In addition to loading the javascript from the external file, you can also use this feature to invoke javascript code contained within the {{{<script>...</script>}}} markers.  This code is invoked //after// the external script file has been processed, and can make immediate use of the functions and/or global variables defined by the external script file.
>Note: To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that is rendered as soon as your TiddlyWiki document is opened, such as MainMenu.  For example: put your {{{<script src="..."></script>}}} syntax into a separate 'library' tiddler (e.g., LoadScripts), and then add {{{<<tiddler LoadScripts>>}}} to MainMenu so that the library is loaded before any other tiddlers that rely upon the functions it defines. 
>
>Normally, loading external javascript in this way does not produce any direct output, and should not have any impact on the appearance of your MainMenu.  However, if your LoadScripts tiddler contains notes or other visible content, you can suppress this output by using 'inline CSS' in the MainMenu, like this: {{{@@display:none;<<tiddler LoadScripts>>@@}}}
<<<
!!!!!Creating dynamic tiddler content and accessing the ~TiddlyWiki DOM
<<<
An important difference between TiddlyWiki inline 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()}}} (or {{{document.writeln()}}}) 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 instead will //completely replace the entire ~TiddlyWiki document in your browser window (which is clearly not a good thing!)//.  In order to allow scripts to use {{{document.write()}}}, the plugin automatically converts and buffers all HTML output so it can be safely inserted into your tiddler content, immediately following the script.

''Note that {{{document.write()}}} can only be used to output "pure HTML" syntax.  To produce //wiki-formatted// output, your script should instead return a text value containing the desired wiki-syntax content'', which will then be automatically rendered immediately following the script.  If returning a text value is not sufficient for your needs, the plugin also provides an automatically-defined variable, 'place', that gives the script code ''direct access to the //containing DOM element//'' into which the tiddler output is being rendered.  You can use this variable to ''perform direct DOM manipulations'' that can, for example:
* generate wiki-formatted output using {{{wikify("...content...",place)}}}
* vary the script's actions based upon the DOM element in which it is embedded
* access 'tiddler-relative' DOM information using {{{story.findContainingTiddler(place)}}}
Note:
''When using an 'onclick' script, the 'place' element actually refers to the onclick //link text// itself, instead of the containing DOM element.''  This permits you to directly reference or modify the link text to reflect any 'stateful' conditions that might set by the script.  To refer to the containing DOM element from within an 'onclick' script, you can use "place.parentNode" instead.
<<<
!!!!!Instant "bookmarklets"
<<<
You can also use an 'onclick' link to define a "bookmarklet": a small piece of javascript that can be ''invoked directly from the browser without having to be defined within the current document.''  This allows you to create 'stand-alone' commands that can be applied to virtually ANY TiddlyWiki document... even remotely-hosted documents that have been written by others!!  To create a bookmarklet, simply define an 'onclick' script and then grab the resulting link text and drag-and-drop it onto your browser's toolbar (or right-click and use the 'bookmark this link' command to add it to the browser's menu).

Notes:
*When writing scripts intended for use as bookmarklets, due to the ~URI-encoding required by the browser, ''you cannot not use ANY double-quotes (") within the bookmarklet script code.''
*All comments embedded in the bookmarklet script must ''use the fully-delimited {{{/* ... */}}} comment syntax,'' rather than the shorter {{{//}}} comment syntax.
*Most importantly, because bookmarklets are invoked directly from the browser interface and are not embedded within the TiddlyWiki document, there is NO containing 'place' DOM element surrounding the script.  As a result, ''you cannot use a bookmarklet to generate dynamic output in your document,''  and using {{{document.write()}}} or returning wiki-syntax text or making reference to the 'place' DOM element will halt the script and report a "Reference Error" when that bookmarklet is invoked.  
Please see [[InstantBookmarklets]] for many examples of 'onclick' scripts that can also be used as bookmarklets.
<<<
!!!!!Special reserved function name
<<<
The plugin 'wraps' all inline javascript code 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.
<<<
!!!!!$(...) 'shorthand' function
<<<
As described by Dustin Diaz [[here|http://www.dustindiaz.com/top-ten-javascript/]], the plugin defines a 'shorthand' function that allows you to write:
{{{
$(id)
}}}
in place of the normal standard javascript syntax:
{{{
document.getElementById(id)
}}}
This function is provided merely as a convenience for javascript coders that may be familiar with this abbreviation, in order to allow them to save a few bytes when writing their own inline script code.
<<<
!!!!!Examples
<<<
simple dynamic output:
><script show>
	document.write("The current date/time is: "+(new Date())+"<br>");
	return "link to current user: [["+config.options.txtUserName+"]]\n";
</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).getAttribute("tiddler");
	var size=store.getTiddlerText(title).length;
	return title+" is using "+size+" bytes";
</script>
dynamic output from an 'onclick' script, using {{{document.write()}}} and/or {{{return "..."}}}
><script label="click here" show>
	document.write("<br>The current date/time is: "+(new Date())+"<br>");
	return "link to current user: [["+config.options.txtUserName+"]]\n";
</script>
creating an 'onclick' button/link that accesses the link text AND the containing tiddler:
><script label="click here" title="clicking this link will show an 'alert' box" key="H" show>
	if (!window.story) window.story=window;
	var txt=place.firstChild.data;
	var tid=story.findContainingTiddler(place).getAttribute('tiddler');
	alert('Hello World!\nlinktext='+txt+'\ntiddler='+tid);
</script>
dynamically setting onclick link text based on stateful information:
>{{block{
{{{
<script label="click here">
	/* toggle "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.innerHTML=on?"enable":"disable";
	config.txtSomething=on?"OFF":"ON";
	return "\nThe current value is: "+config.txtSomething;
</script><script>
	/* initialize onclick link text based on current "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.lastChild.previousSibling.innerHTML=on?"disable":"enable";
</script>
}}}
<script label="click here">
	/* toggle "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.innerHTML=on?"enable":"disable";
	config.txtSomething=on?"OFF":"ON";
	return "\nThe current value is: "+config.txtSomething;
</script><script>
	/* initialize onclick link text based on current "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.lastChild.innerHTML=on?"enable":"disable";
</script>
}}}
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function inlineJavascriptDemo() { alert('Hello from demo.js!!') } }}}
>>{{{displayMessage('InlineJavascriptPlugin: demo.js has been loaded');}}}
>note: When using this example on your local system, you will need to download the external script file from the above URL and install it into the same directory as your document.
>
><script src="demo.js" show>
	return "inlineJavascriptDemo() function has been defined"
</script>
><script label="click to invoke inlineJavascriptDemo()" key="D" show>
	inlineJavascriptDemo();
</script>
<<<
!!!!!Revisions
<<<
2008.06.11 [1.9.3] added $(...) function as 'shorthand' convenience syntax for document.getElementById()
2008.03.03 [1.9.2] corrected declaration of wikifyPlainText() for 'TW 2.1.x compatibility fallback' (fixes Safari "parse error")
2008.02.23 [1.9.1] in onclick function, use string instead of array for 'bufferedHTML' attribute on link element (fixes IE errors)
2008.02.21 [1.9.0] 'onclick' scripts now allow returned text (or document.write() calls) to be wikified into a span that immediately follows the onclick link.  Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed).  Thanks to Xavier Verges for suggestion and preliminary code.
2008.02.14 [1.8.1] added backward-compatibility for use of wikifyPlainText() in ~TW2.1.3 and earlier
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 [1.8.0] added support for key="X" syntax to specify custom access key definitions
2007.12.15 [1.7.0] autogenerate URI encoded HREF on links for onclick scripts.  Drag links to browser toolbar to create bookmarklets.  IMPORTANT NOTE: place is NOT defined when scripts are used as bookmarklets.  In addition, double-quotes will cause syntax errors.  Thanks to Paul Reiber for debugging and brainstorming.
2007.11.26 [1.6.2] when converting "document.write()" function calls in inline code, allow whitespace between "write" and "(" so that "document.write ( foobar )" is properly converted.
2007.11.16 [1.6.1] when rendering "onclick scripts", pass label text through wikifyPlainText() to parse any embedded wiki-syntax to enable use of HTML entities or even TW macros to generate dynamic label text.
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 Udo Borkowski
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 Bradley Meck
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
<<<
/***
|''Name:''|InlineSlidersPlugin|
|''Description:''|super light weight plugin for inline sliders|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#InlineSlidersPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.0|
|''Date:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.2|

!!Usage
* Create sliders inline using a {{{<slider label>text of slider</slider>}}} syntax
* Also supports a {{{+++++ =====}}} syntax
* Please note
* Example:
+++++ Demo
This is an example slider
=====
***/
// /%
//!BEGIN-PLUGIN-CODE
config.formatters.unshift( {
        name: "inlinesliders",
        match: "\\+\\+\\+\\+\\+|\\<slider",
        lookaheadRegExp: /(?:\+\+\+\+\+|<slider) (.*?)(?:>?)\n((?:.|\n)*?)\n(?:=====|<\/slider>)/mg,
        handler: function(w)
        {
                this.lookaheadRegExp.lastIndex = w.matchStart;
                var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
                if(lookaheadMatch && lookaheadMatch.index == w.matchStart )
                        {
                        var btn = createTiddlyButton(w.output,lookaheadMatch[1] + " "+"\u00BB",lookaheadMatch[1],this.onClickSlider,"button sliderButton");
                        var panel = createTiddlyElement(w.output,"div",null,"sliderPanel inlineSlider");
                        panel.style.display = "none";
                        panel.raw = lookaheadMatch[2];
                        w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
                        }
        },
        onClickSlider : function(e)
        {
                if(!e) var e = window.event;
                var n = this.nextSibling;
                removeChildren(n);
                wikify(n.raw,n);
                n.style.display = (n.style.display=="none") ? "block" : "none";
                return false;
        }
});
setStylesheet("div.inlineSlider {margin-left:1em; padding:0 0.5em;}","InlineSliderStyles");
//!END-PLUGIN-CODE
// %/
!Using the MS Office Script Debugger
| !NOTE |
| Microsoft has removed the script debugger from Office 2010 and later and no longer supports it. The following instructions pertain to Office 2007 and earlier. |
 The Office script debugger can be used outside Office as a general purpose script debugger. Here are the instructions for installation:

1. First, install the Office script debugger. In the Office setup program, click Add or Remove Features, then select
|!Office Tools|
|HTML Source Editing <-- INSTALL|
|Web Scripting <-- INSTALL|
|Web Debugging <-- INSTALL (Office 2007 only)|

2. Once this installation is complete, you'll have the debugger installed.
!!Office 2010
The Script Debugger is not available in Office 2010. 
!!Office 2007
Create a shortcut to ~MSE7.EXE (the debugger) and CSDEBUG.CHM (the help file for the debugger) on your desktop or start menu. On my system, these ended up at:
|C:\Program Files  or  Program Files (x86)\Common Files\Microsoft Shared\Office12\~MSE7.EXE|
|C:\Program Files\Microsoft Office\Office12\1033\CSDEBUG.CHM (Online Help is better)|
The Office 2007 Help system, accessible from the Help menu on the debugger, is better, so you probably should just start it and select Help to get info. 
!!Office 2003
Create a shortcut to ~MSE7.EXE (the debugger) and ~MSE10.CHM (the help file for the debugger) on your desktop or start menu. On my system, these ended up at:
|C:\Program Files\Microsoft Office\Office11\~MSE7.EXE|
|C:\Program Files\Microsoft Office\Office11\1033\~MSE10.CHM|
!!Office 2000
Create a shortcut to MSE.EXE (the debugger) and ~CSOF98.COL (the help file for the debugger) on your desktop or start menu. On my system, these ended up at:
|C:\Program Files\Visual Studio\Common\IDE\~IDE98\MSE.EXE|
|C:\Program Files\Visual Studio\Common\IDE\~IDE98\MSE\1033\~CSOF98.COL|
These may end up at some other location on your system if you don't have Visual Studio installed.

3. Now open the Office debugger. Select the Tools menu, Options... and under Debugger, check General/~Just-In-Time-Debugger, Script/Attach to programs running on this machine, as well as Script/~Just-In-Time-Debugging. The Office 2007 version of this has just one selection, under Tools, Options, Debugging, ~Just-In-Time, Script. Make sure this is enabled.  Exit from MSE.

@@color:#ff0;The debugger functions as a script editor also, nicer than Notepad. Try opening a document from the File menu and see what happens.@@

To force a break into the debugger, put a Stop statement into your script (~VBScript, for ~JScript use "debugger;"). When you hit the Stop/debugger' statement or encounter an error, you'll get a "do you want to debug?" alert. Answer Yes and you'll be in the MSE debugger with the source showing.

You cannot edit the source at that point (it's not VB!), but you can inspect variables, step through the code, etc. To get past a line that raises an error, use the "Set Next Statement" button to move the execution point past the statement, and if needed type in a corrected statement in the Immediate window.

| !@@color:#F00;TROUBLESHOOTING@@ |
| If something does not work properly, try to resolve the problem following the "Troubleshooting" section of the ACP Help file, under the Scripting Guide/The MS Office Script Debugger. |
----
!Debugging 
ACP normally does not start a script debugger when there is an error in a script or ASP page. Instead, it traps the error and prints an error message and traceback to the ACP console. To enable debugging within ACP, turn on the "Enter debugger on script errors" switch on the Debugging tab of ACP's Preferences dialog. Before doing this, however, you must have installed and configured a script-capable debugger.

An excellent tool for debugging ACP scripts is the the debugger included with Microsoft Visual Studio 2015 Community Edition (recommended) for debugging scripts. Note that this edition (recommended) is free from Microsoft (a huge corporate change with great benefit). 

If you don't want to install the (huge) Visual Studio, there is still hope! You can look here to see if any of these will help: [[Install the Microsoft Office script debugger]].

There are a few tricks that will save you a load of headaches when debugging with either tool:

*To enable the debugger in ACP, turn on the Enter Debugger on Errors option on the Debugging tab of Preferences. 
*To put a breakpoint into your source code, use a "''Stop''" statement in ~VBScript, and a "''debugger;''" statement in ~JScript. 
*To inspect a variable in ~VBScript, type "? variable" in the debugger command window. For ~JScript, just type the variable name in the command window (no '?'). 
*You can call a function from the debugger's command window. Any valid expression in the script's language may be entered into the command window. This is really useful! 
*If you change a script, you must start it from scratch. You cannot change a script while it is executing. 
*When using the Windows Scripting Host (cscript/wscript) instead of ACP's console, the debugger will trap errors in your script only if you type &slash;&slash;D on the cscript command line when running the script. Yes there are two slashes on that option (and other Windows Script Host options). 
*When using the Windows Scripting Host, to start your script in the debugger, add the &slash;&slash;X option. 
!Debugging With Visual Studio
The debugging facilities in Visual Studio 2015 Community Edition include the ability to debug Windows Scripts. Instructions for configuring and using Visual Studio for script debugging are given below: 
#Start up Visual Studio without invoking a solution. 
#In the Tools menu, select Options. This will open the Options window. 
#In the left hand pane, select the Debugging category. This will reveal the debugging options. 
#Select ~Just-In-Time. This will display ~Just-In-Time debugging options in the right hand pane. 
#Enable ~Just-In-Time debugging for Script, then click OK. 
#Exit from VS.NET. 
After doing the above, VS.NET will automatically pop up and offer to debug your script if you enabled debugging in ACP or used the &slash;&slash;D command line option in Windows Script Host. For general information on debugging scripts, see Scripting Guide - Debugging. See the help for your version of Visual Studio on using its debugger. 

Visual Studio functions as a script editor also, nicer than Notepad. Try opening a VBS or JS document from the File menu and see what happens.

{{borderless{
|[[Click here to open in a new browser tab|https://en.wikipedia.org/wiki/International_Celestial_Reference_Frame]]|
<html><div align="center"><iframe src ="https://en.wikipedia.org/wiki/International_Celestial_Reference_Frame" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|https://en.wikipedia.org/wiki/International_Celestial_Reference_System]]|
<html><div align="center"><iframe src ="https://en.wikipedia.org/wiki/International_Celestial_Reference_System" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|https://www.youtube.com/v/6c_V6lWC3RI]]|
<html><div align="center"><iframe src ="https://www.youtube.com/v/6c_V6lWC3RI" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://ssd.jpl.nasa.gov/sbdb.cgi]]|
<html><div align="center"><iframe src ="http://ssd.jpl.nasa.gov/sbdb.cgi" width="100%" align="center" height="60">< /></div></html>}}}
----
{{borderless{
|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.w3schools.com/jsref/default.asp]]&nbsp;&raquo;|
<html><div align="center"><iframe src ="http://www.w3schools.com/jsref/default.asp" width="100%" align="center" height="600"></iframe></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.mistisoftware.com/astronomy/index.htm]]|
<html><div align="center"><iframe src ="http://www.mistisoftware.com/astronomy/index.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.grinderphoto.se/]]|
<html><div align="center"><iframe src ="http://www.grinderphoto.se/" width="100%" align="center" height="600">< /></div></html>}}}
----
*An example using the [[MathSVGPlugin]]
*Mouse around near the axes!

<div class='SVGgraph' options='scales:[-6,6],coords:"polar"'>
function f(x){return a*cos(x);}

function g(x){return b*sin(x);}

function moveit() {
  var angle = getAngle();
  parametricPlot(f,g,{max:angle,id:"ell",stroke:"darkorange",strokewidth:2});
  path([[-c,0],[a*cos(angle),b*sin(angle)],[c,0]],{id:"gen",stroke:"blue",strokewidth:1,strokedasharray:"5,5"});
image('RefDocs/comet.png',{id:"Earth",origin:[a*cos(angle),b*sin(angle)],width:36,height:27});
}

setAction("mousemove",moveit);
axes({ticklabels:false, stroke:"white"});
var a = 5;
var b = 2.5;
var c = sqrt(a*a-b*b);
dot([-c,0],{id:"sol",marker:"*",size:25,markerstroke:"#FFD500",label:"Sol",pos:"S", fontfill:"white"});
dot([c,0],{marker:"*",size:8,markerstroke:"#666"});
</div>
{{borderless{
|[[Click here to open in a new browser tab|http://adsbit.harvard.edu/cgi-bin/nph-iarticle_query?1983AJ%2E%2E%2E%2E%2E88%2E%2E439L]]|
<html><div align="center"><iframe src ="http://adsbit.harvard.edu/cgi-bin/nph-iarticle_query?1983AJ%2E%2E%2E%2E%2E88%2E%2E439L" width="100%" align="center" height="600">< /></div></html>}}}
{{borderless{
|[[Click here to open in a new browser tab|http://adsabs.harvard.edu/abs/1983AJ.....88..439L]]|
<html><div align="center"><iframe src ="http://adsabs.harvard.edu/abs/1983AJ.....88..439L" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://adsbit.harvard.edu/cgi-bin/nph-iarticle_query?1992AJ%2E%2E%2E%2E104%2E%2E340L]]|
<html><div align="center"><iframe src ="http://adsbit.harvard.edu/cgi-bin/nph-iarticle_query?1992AJ%2E%2E%2E%2E104%2E%2E340L" width="100%" align="center" height="600">< /></div></html>}}}
{{borderless{
|[[Click here to open in a new browser tab|http://adsabs.harvard.edu/abs/1992AJ....104..340L]]|
<html><div align="center"><iframe src ="http://adsabs.harvard.edu/abs/1992AJ....104..340L" width="100%" align="center" height="600">< /></div></html>}}}
----
*Read his original refereed publications at [[Landolt 1983]] and [[Landolt 1992]] (big articles, but quick download)
*Read an article containing additional photometric standard fields called [[Stetson Standards]]
*Read this article about [[Photometric Accuracy of the USNO A2.0 Catalog]] determined from Landolt standards
*Download this as an Excel [[Landolt Standards Spreadsheet]]
----
*Here's an online table of Landolt Standards close to the equator, with pointers to finding charts:
{{borderless{
|[[Click here to open in a new browser tab|http://www.eso.org/sci/observing/tools/standards/Landolt/]]|
<html><div align="center"><iframe src ="http://www.eso.org/sci/observing/tools/standards/Landolt/" width="100%" align="center" height="600">< /></div></html>}}}
----
|!Close this window after download completes|
{{borderless{
<html><div align="center"><iframe src ="RefDocs/Landolt.xls" width="100%" align="center" height="30">< /></div></html>}}}
----
!January 16, 2017
| This is a single HTML web page, about 1.5MB at this point (February 2017), containing the total contents of this new edition of the Reference Guide as it is today. The document will download to and open in your browser. It may take a few moments depending on your particular connection to and through the Internet. If you have tabbed browsing, you can open the ACP application (click "Use Web Browser" in the ACP control panel) in one tab and keep this Reference Guide open in another. Links to web-based documents and pages should open rather quickly. There are some links to .pdf documents that may load a bit more slowly.<br><br>Here's the URL: http://solo.dc3.com/ar/ACPRefGuide.html |
This thirtieth update is a total refresh of the entire Reference Guide, including
*Checking for errors in all hyperlinked web pages and documents, and updating them and repairing or removing broken ones
*Removing the miniBrowser and replacing all web page accesses with an <iframe ... /> construct.
*Updating all items related to ACP help files and instruction, to be current with ACP Expert version 8.1. 
**This includes adding online HTML versions of the help files for [[ACP 8.1]], the [[ACP Programmer's Reference]], [[ACP Active Server Pages]], [[PinPoint Programmer's Reference]], [[ASCOM Telescope 2 (for ACP Hub)]], [[POTH Help File]], [[PipeHub Help File]], [[ScopeSim Help File]], [[Windows Scripting (Microsoft)]], [[Agent Programming (Microsoft)]], [[ACP Planner]],  [[Scheduler 8.1]], [[RTML 2.3]] and the [[ASCOM Platform 6]].
*Removing obsoleted and deprecated items no longer relevant to ACP Expert v8.1.
*Including useful items related to ACP Scheduler v8.1
*Adding links to new information and websites about the following subjects: 
**[[Release Notes for v8.1]]
**[[AboutTime]]
**[[Acquiring a Color Series]]
**[[Catalogs Supported by WCS Tools]]
**[[Comet Ephemeris Service]]
**[[CSS Reference]]
**[[Custom File and Folder Names (Scheduler)]] ([[Custom File and Folder Names (ACP)]] already exists)
**[[Dark Sky Finder]]
**[[Download 2011 version of ACP Log Analyzer]]
**[[Download 2013 version of ACP Horizon Editor]]
**[[Exoplanet Transit Query Service Form]]
**[[FITS World Coordinate System]]
**[[FocusMax Tutorial - II]]
**[[Google Earth]]
**[[How Scheduler Focuses]]
**[[Introducing TheSky HD (iOS) with Built-in ACP Control]]
**[[Javascript Reference]]
**[[Rob Capon]]
**[[Scheduler-Specific Tips]]
**[[SDSS DR13 Finding Charts]] -- updated from ~DR5
**[[Substitution Tokens (Scheduler)]]
**[[Using ACP Configuration Profiles]]
**[[Washington Double Star Catalog Listing]]
**[[DC-3 Dreams Communication Center]]
**[[Enabling Network Access]]
**[[ACP Utilities]]
**[[MaxIm DL Utilities]]
Summary of all [[Reference Guide Updates]]
[[nextUpdate?]]
----
~~^^~~TW Core 2.6.2~~^^~~
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/

//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};

config.formatters.push(
{
	name: "legacyStrikeByChar",
	match: "==",
	termRegExp: /(==)/mg,
	element: "strike",
	handler: config.formatterHelpers.createElementAndWikify
});

} //# end of "install only once"
//}}}
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/lists/Dangerous.html]]|
<html><div align="center"><iframe src ="http://www.cfa.harvard.edu/iau/lists/Dangerous.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/lists/RecentSupernovae.html]]|
<html><div align="center"><iframe src ="http://www.cfa.harvard.edu/iau/lists/RecentSupernovae.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://exoplanet.eu/catalog-all.php]]|
<html><div align="center"><iframe src ="http://exoplanet.eu/catalog-all.php" width="100%" align="center" height="600">< /></div></html>}}}
----
*IR
{{borderless{
|[[Click here to open in a new browser tab|http://weather.msfc.nasa.gov/GOES/goeseastconusir.html]]|
<html><div align="center"><iframe src ="http://weather.msfc.nasa.gov/GOES/goeseastconusir.html" width="100%" align="center" height="600">< /></div></html>}}}
----
This is the up-to-date list of orbital elements for observable comets, for <<today "MMM DD, YYYY">>, from the Center for Astrophysics at Harvard.
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/Ephemerides/Comets/Soft00Cmt.txt]]|
<html><div align="center" style="background-color:white"><iframe src ="http://www.cfa.harvard.edu/iau/Ephemerides/Comets/Soft00Cmt.txt" width="100%" align="center" height="600">< /></div></html>}}}
----
|!Get your ~MPCORBcr.DAT here!|
{{borderless{
|[[Click here to open in a new browser tab|http://mpcorb.klet.org/]]|
<html><div align="center" style="background-color:white"><iframe src ="http://mpcorb.klet.org/" width="100%" align="center" height="600">< /></div></html>}}}
----
[[ACP Reference Guide]]

[[ACP Comm Center]]
''[[Videos|https://www.youtube.com/user/DC3Dreams]]''
[[ACP Architecture]]
[[ACP Website]]
[[Site Map]]
[[Register Your Observatory]]
[[ACP Help]]
<<toggleSideBar " " "Don't click here" show>>
!Overall Format
Plan files are text files. Each line of a plan file must be one of the following: 
*[[Directives]] (a line beginning with '#') 
*Target specifications
*Comment (a line beginning with ';') These are echoed into the log file (though sometimes at unexpected times due to ACP's slew-ahead logic!) 
Typically, a plan will consist of some directives followed by a target, some more directives, another target, etc. Lines may be indented by tabs or spaces. Any leading or trailing tabs or spaces are disregarded when each line is read from the file. Comments beginning with ';' may appear anywhere in a live line, and will be ignored. 
!Target Specifications
The heart of a plan file is its target specification lines. Most commonly, each target specification line contains three pieces of information: 
#The name of the target, 
#The J2000 right ascension of the target, and 
#The J2000 declination of the target. 
Other information may be in the line, but it is ignored. One special type of target specification contains the orbital elements of a minor planet or comet, allowing ~AcquireImages.js to calculate its position at the precise time of the exposure, and optionally perform orbital tracking (if the mount supports it) to follow the motion of the object. Another special target specification contains ephemerides for a near-earth object. In this case, you supply several ephemeris records, spaced 1 or 2 hours apart, and ACP will perform a Lagrange interpolation on the positions to determine a precise position and velocity (for orbital tracking) of the NEO.

ACP and ~AcquireImages.js accept target specifications in several formats. These target specifications may be freely intermixed within a single plan file. They are: 
*''Deep sky object or major planet name:'' If you specify only a name (nothing more on the target line) ACP will first try to match it to a major planet name and calculate an instant ephemeris for the time of the image. Otherwise it will attempt to find the object in its [[Deep Sky Catalog]] and retrieve the coordinates. Note that the catalog name and number must be separated by a space (e.g. "M 51", "PGC 12345"). 
|!NOTE: Use the Slew or Sync (catalog) button to open a window in which you can search the deep sky catalog. For details on how to search, see ACP [[Deep Sky Catalog]]. There are over 70,000 deep sky objects.|
*''"MP" followed by minor planet name:'' If you have installed and built the fast-lookup database based on MPCORB.DAT, the Minor Planet Center's orbital elements database, you can simply give the minor planet designation (packed or unpacked), number, or name, and ACP will retrieve the orbital elements from this database, then calculate coordinates for the exposure time. Look at the readme.txt file in C:\Program Files\Common Files\ASCOM\MPCORB for instructions.
*''Simple tab-delimited format:'' Use this with objects for which you know the J2000 coordinates. This is really easy, but not as easy as just supplying the name as described above!
*''Asteroid or Comet:'' 1-Line orbital elements from the IAU Minor Planet Center. This is a bit time-consuming because you have to get the elements for each of your targets from the MPC. For minor planets (not comets), see above.
*''~Near-Earth Object Ephemerides:'' from the IAU Minor Planet Center. (see [[NEOCP Ephemerides]])
!Mixing Old and New Target Formats 
Previous versions of ACP did not have support for filter groups. ACP will still run these old format plans, however in general you cannot mix old and new formats within a single plan. If you specify any target with more than one filter group, you must specify #Count, #Binning, #Interval, and (if you have filters) #Filter explicitly for the first target in the old format. 
!!!Example
{{{
#Filter Red,Clear,Green,Blue
#Binning 2,1,2,2
#Count 5,8,5,10
#Interval 180,240,180,180
M 51
#Count 1        ; Reset these to one filter group
#Filter Clear
#Binning 1
#Interval 120
M 13
#interval 240
M 21
}}}
----
/***
|''Name:''|MathSVGPlugin|
|''Description:''|This plugin translates a subset of the LaTeX math notation to MathML with a customisable  image fallback when MathML is not supported. It also provides an easy way to produce mathematical SVG graphics with dynamical features and animation.|
|''Version:''|1.4.5|
|''Date:''|2011-04-27|
|''Source:''|http://www.math.ist.utl.pt/~psoares/MathSVG.html|
|''Author:''|Paulo Soares|
|''License:''|[[GNU Lesser General Public License|http://www.gnu.org/licences/lgpl.html]]|
|''~CoreVersion:''|2.1.3 (unless you load MathSVGPluginComp, which requires v 2.5.0)|
|''Require:''|[[JQuery 1.6.2|http://jquery.com/]] and the [[jQuery bValidator plugin|http://code.google.com/p/bvalidator/]] v0.55 or later|
!Original copyright notice
{{{
ASCIIMathML.js
==============
Version 2.1 Oct 8, 2008, (c) Peter Jipsen http://www.chapman.edu/~jipsen
This version extends ASCIIMathML.js with LaTeXMathML.js and ASCIIsvg.js.
Latest version at http://www.chapman.edu/~jipsen/mathml/ASCIIMathML.js
If you use it on a webpage, please send the URL to jipsen@chapman.edu

The LaTeXMathML modifications were made by Douglas Woodall, June 2006.
(for details see header on the LaTeXMathML part in middle of file)
Extensive clean-up and improvements by Paulo Soares, Oct 2007.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT 
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 
(at http://www.gnu.org/licences/lgpl.html) for more details.
}}}
!~MathSVG code (minified)
***/
//{{{
Math.sec=function(a){return 1/Math.cos(a)};Math.csc=function(a){return 1/Math.sin(a)};Math.cot=function(a){return 1/Math.tan(a)};Math.asec=function(a){return Math.acos(1/a)};Math.acsc=function(a){return Math.asin(1/a)};Math.acot=function(a){return Math.atan(1/a)};Math.sinh=function(a){return(Math.exp(a)-Math.exp(-a))/2};Math.cosh=function(a){return(Math.exp(a)+Math.exp(-a))/2};Math.tanh=function(a){return(Math.exp(a)-Math.exp(-a))/(Math.exp(a)+Math.exp(-a))};Math.sech=function(a){return 1/Math.cosh(a)};Math.csch=function(a){return 1/Math.sinh(a)};Math.coth=function(a){return 1/Math.tanh(a)};Math.asinh=function(a){return Math.log(a+Math.sqrt(a*a+1))};Math.acosh=function(a){return Math.log(a+Math.sqrt(a*a-1))};Math.atanh=function(a){return Math.log((1+a)/(1-a))/2};Math.sech=function(a){return 1/Math.cosh(a)};Math.csch=function(a){return 1/Math.sinh(a)};Math.coth=function(a){return 1/Math.tanh(a)};Math.asech=function(a){return Math.acosh(1/a)};Math.acsch=function(a){return Math.asinh(1/a)};Math.acoth=function(a){return Math.atanh(1/a)};Math.sign=function(a){return(a===0?0:(a<0?-1:1))};Math.step=function(a,c,b){return(a<0?(b?b:0):(c?c:1))};Math.root=function(a,b){return Math.pow(a,1/b)};Math.factorial=function(b){if(b===0){return 1}if(b<0){if((b%1)===0){return}if(b>-1){return Math.factorial(b+1)/(b+1)}return -Math.PI/(Math.factorial(-1-b)*Math.sin(Math.PI*b))}var a=b;if((b%1)===0){while(b>1){b=b-1;a=a*b}}else{a=Math.exp((b+0.5)*Math.log(b+1)-b-b*(0.1121105+b*0.08106103)/(1.452342+b*(2.410858+b)))}return a};Math.Gamma=function(a){return Math.factorial(a-1)};Math.Beta=function(a,b){return Math.Gamma(a)*Math.Gamma(b)/Math.Gamma(a+b)};Math.C=function(a,b){var c=1/((a+1)*Math.Beta(b+1,a-b+1));return c};Math.truncate=function(a,c){var b=c||0;return Math.floor(a*Math.pow(10,b))/Math.pow(10,b)};Math.randomString=function(a,g){var f=(g||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz").split("");var e=[],c=Math.random;var d=f.length;for(var b=0;b<a;b++){e[b]=f[0|c()*d]}return e.join("")};Math.runif=function(d,c,f){var e=f||0;return Math.truncate((c+Math.pow(10,-e)-d)*Math.random()+d,e)};Math.rnormal=function(a,b){a=a||0;b=b||1;var d=0,c=0;while(d*c===0){d=Math.random();c=Math.random()}return b*(Math.sqrt(-2*Math.log(d))*Math.cos(2*Math.PI*c))+a};(function(){var a=jQuery.fn.attr,b="http://www.w3.org/2000/svg";jQuery.fn.attr=function(m,l){var g=this.length;if(!g){return this}for(var f=0;f<g;f++){var c=this[f];if(c.namespaceURI===b){if(l!==undefined){c.setAttribute(m,l)}else{if($.isArray(m)){var d=m.length,e={};while(d--){var k=m[d];var h=c.getAttribute(k);if(h||h==="0"){h=isNaN(h)?h:h-0}e[k]=h}return e}else{if(typeof m==="object"){for(v in m){c.setAttribute(v,m[v])}}else{var h=c.getAttribute(m);if(h||h==="0"){h=isNaN(h)?h:h-0}return h}}}}else{return a.apply(this,arguments)}}return this}}());var MSVG=function($){var cal=["\uD835\uDC9C","\u212C","\uD835\uDC9E","\uD835\uDC9F","\u2130","\u2131","\uD835\uDCA2","\u210B","\u2110","\uD835\uDCA5","\uD835\uDCA6","\u2112","\u2133","\uD835\uDCA9","\uD835\uDCAA","\uD835\uDCAB","\uD835\uDCAC","\u211B","\uD835\uDCAE","\uD835\uDCAF","\uD835\uDCB0","\uD835\uDCB1","\uD835\uDCB2","\uD835\uDCB3","\uD835\uDCB4","\uD835\uDCB5","\uD835\uDCB6","\uD835\uDCB7","\uD835\uDCB8","\uD835\uDCB9","\u212F","\uD835\uDCBB","\u210A","\uD835\uDCBD","\uD835\uDCBE","\uD835\uDCBF","\uD835\uDCC0","\uD835\uDCC1","\uD835\uDCC2","\uD835\uDCC3","\u2134","\uD835\uDCC5","\uD835\uDCC6","\uD835\uDCC7","\uD835\uDCC8","\uD835\uDCC9","\uD835\uDCCA","\uD835\uDCCB","\uD835\uDCCC","\uD835\uDCCD","\uD835\uDCCE","\uD835\uDCCF"];var frk=["\uD835\uDD04","\uD835\uDD05","\u212D","\uD835\uDD07","\uD835\uDD08","\uD835\uDD09","\uD835\uDD0A","\u210C","\u2111","\uD835\uDD0D","\uD835\uDD0E","\uD835\uDD0F","\uD835\uDD10","\uD835\uDD11","\uD835\uDD12","\uD835\uDD13","\uD835\uDD14","\u211C","\uD835\uDD16","\uD835\uDD17","\uD835\uDD18","\uD835\uDD19","\uD835\uDD1A","\uD835\uDD1B","\uD835\uDD1C","\u2128","\uD835\uDD1E","\uD835\uDD1F","\uD835\uDD20","\uD835\uDD21","\uD835\uDD22","\uD835\uDD23","\uD835\uDD24","\uD835\uDD25","\uD835\uDD26","\uD835\uDD27","\uD835\uDD28","\uD835\uDD29","\uD835\uDD2A","\uD835\uDD2B","\uD835\uDD2C","\uD835\uDD2D","\uD835\uDD2E","\uD835\uDD2F","\uD835\uDD30","\uD835\uDD31","\uD835\uDD32","\uD835\uDD33","\uD835\uDD34","\uD835\uDD35","\uD835\uDD36","\uD835\uDD37"];var bbb=["\uD835\uDD38","\uD835\uDD39","\u2102","\uD835\uDD3B","\uD835\uDD3C","\uD835\uDD3D","\uD835\uDD3E","\u210D","\uD835\uDD40","\uD835\uDD41","\uD835\uDD42","\uD835\uDD43","\uD835\uDD44","\u2115","\uD835\uDD46","\u2119","\u211A","\u211D","\uD835\uDD4A","\uD835\uDD4B","\uD835\uDD4C","\uD835\uDD4D","\uD835\uDD4E","\uD835\uDD4F","\uD835\uDD50","\u2124","\uD835\uDD52","\uD835\uDD53","\uD835\uDD54","\uD835\uDD55","\uD835\uDD56","\uD835\uDD57","\uD835\uDD58","\uD835\uDD59","\uD835\uDD5A","\uD835\uDD5B","\uD835\uDD5C","\uD835\uDD5D","\uD835\uDD5E","\uD835\uDD5F","\uD835\uDD60","\uD835\uDD61","\uD835\uDD62","\uD835\uDD63","\uD835\uDD64","\uD835\uDD65","\uD835\uDD66","\uD835\uDD67","\uD835\uDD68","\uD835\uDD69","\uD835\uDD6A","\uD835\uDD6B"];var CONST=0,UNARY=1,BINARY=2,INFIX=3,LEFTBRACKET=4,RIGHTBRACKET=5,SPACE=6,UNDEROVER=7,DEFINITION=8,LEFTRIGHT=9,TEXT=10,BIG=11,STRETCHY=13,MATRIX=14;var symbols=[{input:"\\varepsilon",tag:"mi",output:"\u025B",ttype:CONST},{input:"\\varsigma",tag:"mi",output:"\u03C2",ttype:CONST},{input:"\\vartheta",tag:"mi",output:"\u03D1",ttype:CONST},{input:"\\varphi",tag:"mi",output:"\u03D5",ttype:CONST},{input:"\\varpi",tag:"mi",output:"\u03D6",ttype:CONST},{input:"\\varrho",tag:"mi",output:"\u03F1",ttype:CONST},{input:"\\alpha",tag:"mi",output:"\u03B1",ttype:CONST},{input:"\\beta",tag:"mi",output:"\u03B2",ttype:CONST},{input:"\\gamma",tag:"mi",output:"\u03B3",ttype:CONST},{input:"\\delta",tag:"mi",output:"\u03B4",ttype:CONST},{input:"\\epsilon",tag:"mi",output:"\u03B5",ttype:CONST},{input:"\\zeta",tag:"mi",output:"\u03B6",ttype:CONST},{input:"\\eta",tag:"mi",output:"\u03B7",ttype:CONST},{input:"\\theta",tag:"mi",output:"\u03B8",ttype:CONST},{input:"\\iota",tag:"mi",output:"\u03B9",ttype:CONST},{input:"\\kappa",tag:"mi",output:"\u03BA",ttype:CONST},{input:"\\lambda",tag:"mi",output:"\u03BB",ttype:CONST},{input:"\\mu",tag:"mi",output:"\u03BC",ttype:CONST},{input:"\\nu",tag:"mi",output:"\u03BD",ttype:CONST},{input:"\\xi",tag:"mi",output:"\u03BE",ttype:CONST},{input:"\\omicron",tag:"mi",output:"\u03BF",ttype:CONST},{input:"\\pi",tag:"mi",output:"\u03C0",ttype:CONST},{input:"\\rho",tag:"mi",output:"\u03C1",ttype:CONST},{input:"\\sigma",tag:"mi",output:"\u03C3",ttype:CONST},{input:"\\tau",tag:"mi",output:"\u03C4",ttype:CONST},{input:"\\upsilon",tag:"mi",output:"\u03C5",ttype:CONST},{input:"\\phi",tag:"mi",output:"\u03C6",ttype:CONST},{input:"\\chi",tag:"mi",output:"\u03C7",ttype:CONST},{input:"\\psi",tag:"mi",output:"\u03C8",ttype:CONST},{input:"\\omega",tag:"mi",output:"\u03C9",ttype:CONST},{input:"\\Alpha",tag:"mo",output:"\u0391",ttype:CONST},{input:"\\Beta",tag:"mo",output:"\u0392",ttype:CONST},{input:"\\Gamma",tag:"mo",output:"\u0393",ttype:CONST},{input:"\\Delta",tag:"mo",output:"\u0394",ttype:CONST},{input:"\\Epsilon",tag:"mo",output:"\u0395",ttype:CONST},{input:"\\Zeta",tag:"mo",output:"\u0396",ttype:CONST},{input:"\\Eta",tag:"mo",output:"\u0397",ttype:CONST},{input:"\\Theta",tag:"mo",output:"\u0398",ttype:CONST},{input:"\\Iota",tag:"mo",output:"\u0399",ttype:CONST},{input:"\\Kappa",tag:"mo",output:"\u039A",ttype:CONST},{input:"\\Lambda",tag:"mo",output:"\u039B",ttype:CONST},{input:"\\Mu",tag:"mo",output:"\u039C",ttype:CONST},{input:"\\Nu",tag:"mo",output:"\u039D",ttype:CONST},{input:"\\Xi",tag:"mo",output:"\u039E",ttype:CONST},{input:"\\Omicron",tag:"mo",output:"\u039F",ttype:CONST},{input:"\\Pi",tag:"mo",output:"\u03A0",ttype:CONST},{input:"\\Rho",tag:"mo",output:"\u03A1",ttype:CONST},{input:"\\Sigma",tag:"mo",output:"\u03A3",ttype:CONST},{input:"\\Tau",tag:"mo",output:"\u03A4",ttype:CONST},{input:"\\Upsilon",tag:"mo",output:"\u03A5",ttype:CONST},{input:"\\Phi",tag:"mo",output:"\u03A6",ttype:CONST},{input:"\\Chi",tag:"mo",output:"\u03A7",ttype:CONST},{input:"\\Psi",tag:"mo",output:"\u03A8",ttype:CONST},{input:"\\Omega",tag:"mo",output:"\u03A9",ttype:CONST},{input:"\\frac12",tag:"mo",output:"\u00BD",ttype:CONST},{input:"\\frac14",tag:"mo",output:"\u00BC",ttype:CONST},{input:"\\frac34",tag:"mo",output:"\u00BE",ttype:CONST},{input:"\\frac13",tag:"mo",output:"\u2153",ttype:CONST},{input:"\\frac23",tag:"mo",output:"\u2154",ttype:CONST},{input:"\\frac15",tag:"mo",output:"\u2155",ttype:CONST},{input:"\\frac25",tag:"mo",output:"\u2156",ttype:CONST},{input:"\\frac35",tag:"mo",output:"\u2157",ttype:CONST},{input:"\\frac45",tag:"mo",output:"\u2158",ttype:CONST},{input:"\\frac16",tag:"mo",output:"\u2159",ttype:CONST},{input:"\\frac56",tag:"mo",output:"\u215A",ttype:CONST},{input:"\\frac18",tag:"mo",output:"\u215B",ttype:CONST},{input:"\\frac38",tag:"mo",output:"\u215C",ttype:CONST},{input:"\\frac58",tag:"mo",output:"\u215D",ttype:CONST},{input:"\\frac78",tag:"mo",output:"\u215E",ttype:CONST},{input:"\\pm",tag:"mo",output:"\u00B1",ttype:CONST},{input:"\\mp",tag:"mo",output:"\u2213",ttype:CONST},{input:"\\triangleleft",tag:"mo",output:"\u22B2",ttype:CONST},{input:"\\triangleright",tag:"mo",output:"\u22B3",ttype:CONST},{input:"\\cdot",tag:"mo",output:"\u22C5",ttype:CONST},{input:"\\star",tag:"mo",output:"\u22C6",ttype:CONST},{input:"\\ast",tag:"mo",output:"\u002A",ttype:CONST},{input:"\\times",tag:"mo",output:"\u00D7",ttype:CONST},{input:"\\div",tag:"mo",output:"\u00F7",ttype:CONST},{input:"\\circ",tag:"mo",output:"\u2218",ttype:CONST},{input:"\\bullet",tag:"mo",output:"\u2022",ttype:CONST},{input:"\\oplus",tag:"mo",output:"\u2295",ttype:CONST},{input:"\\ominus",tag:"mo",output:"\u2296",ttype:CONST},{input:"\\otimes",tag:"mo",output:"\u2297",ttype:CONST},{input:"\\bigcirc",tag:"mo",output:"\u25CB",ttype:CONST},{input:"\\oslash",tag:"mo",output:"\u2298",ttype:CONST},{input:"\\odot",tag:"mo",output:"\u2299",ttype:CONST},{input:"\\land",tag:"mo",output:"\u2227",ttype:CONST},{input:"\\wedge",tag:"mo",output:"\u2227",ttype:CONST},{input:"\\lor",tag:"mo",output:"\u2228",ttype:CONST},{input:"\\vee",tag:"mo",output:"\u2228",ttype:CONST},{input:"\\cap",tag:"mo",output:"\u2229",ttype:CONST},{input:"\\cup",tag:"mo",output:"\u222A",ttype:CONST},{input:"\\sqcap",tag:"mo",output:"\u2293",ttype:CONST},{input:"\\sqcup",tag:"mo",output:"\u2294",ttype:CONST},{input:"\\uplus",tag:"mo",output:"\u228E",ttype:CONST},{input:"\\amalg",tag:"mo",output:"\u2210",ttype:CONST},{input:"\\bigtriangleup",tag:"mo",output:"\u25B3",ttype:CONST},{input:"\\bigtriangledown",tag:"mo",output:"\u25BD",ttype:CONST},{input:"\\dag",tag:"mo",output:"\u2020",ttype:CONST},{input:"\\dagger",tag:"mo",output:"\u2020",ttype:CONST},{input:"\\ddag",tag:"mo",output:"\u2021",ttype:CONST},{input:"\\ddagger",tag:"mo",output:"\u2021",ttype:CONST},{input:"\\lhd",tag:"mo",output:"\u22B2",ttype:CONST},{input:"\\rhd",tag:"mo",output:"\u22B3",ttype:CONST},{input:"\\unlhd",tag:"mo",output:"\u22B4",ttype:CONST},{input:"\\unrhd",tag:"mo",output:"\u22B5",ttype:CONST},{input:"\\sum",tag:"mo",output:"\u2211",ttype:UNDEROVER},{input:"\\prod",tag:"mo",output:"\u220F",ttype:UNDEROVER},{input:"\\bigcap",tag:"mo",output:"\u22C2",ttype:UNDEROVER},{input:"\\bigcup",tag:"mo",output:"\u22C3",ttype:UNDEROVER},{input:"\\bigwedge",tag:"mo",output:"\u22C0",ttype:UNDEROVER},{input:"\\bigvee",tag:"mo",output:"\u22C1",ttype:UNDEROVER},{input:"\\bigsqcap",tag:"mo",output:"\u2A05",ttype:UNDEROVER},{input:"\\bigsqcup",tag:"mo",output:"\u2A06",ttype:UNDEROVER},{input:"\\coprod",tag:"mo",output:"\u2210",ttype:UNDEROVER},{input:"\\bigoplus",tag:"mo",output:"\u2A01",ttype:UNDEROVER},{input:"\\bigotimes",tag:"mo",output:"\u2A02",ttype:UNDEROVER},{input:"\\bigodot",tag:"mo",output:"\u2A00",ttype:UNDEROVER},{input:"\\biguplus",tag:"mo",output:"\u2A04",ttype:UNDEROVER},{input:"\\int",tag:"mo",output:"\u222B",ttype:CONST},{input:"\\oint",tag:"mo",output:"\u222E",ttype:CONST},{input:":=",tag:"mo",output:":=",ttype:CONST},{input:"\\lt",tag:"mo",output:"<",ttype:CONST},{input:"\\gt",tag:"mo",output:">",ttype:CONST},{input:"\\ne",tag:"mo",output:"\u2260",ttype:CONST},{input:"\\neq",tag:"mo",output:"\u2260",ttype:CONST},{input:"\\le",tag:"mo",output:"\u2264",ttype:CONST},{input:"\\leq",tag:"mo",output:"\u2264",ttype:CONST},{input:"\\leqslant",tag:"mo",output:"\u2264",ttype:CONST},{input:"\\ge",tag:"mo",output:"\u2265",ttype:CONST},{input:"\\geq",tag:"mo",output:"\u2265",ttype:CONST},{input:"\\geqslant",tag:"mo",output:"\u2265",ttype:CONST},{input:"\\equiv",tag:"mo",output:"\u2261",ttype:CONST},{input:"\\ll",tag:"mo",output:"\u226A",ttype:CONST},{input:"\\gg",tag:"mo",output:"\u226B",ttype:CONST},{input:"\\doteq",tag:"mo",output:"\u2250",ttype:CONST},{input:"\\prec",tag:"mo",output:"\u227A",ttype:CONST},{input:"\\succ",tag:"mo",output:"\u227B",ttype:CONST},{input:"\\preceq",tag:"mo",output:"\u227C",ttype:CONST},{input:"\\succeq",tag:"mo",output:"\u227D",ttype:CONST},{input:"\\subset",tag:"mo",output:"\u2282",ttype:CONST},{input:"\\supset",tag:"mo",output:"\u2283",ttype:CONST},{input:"\\subseteq",tag:"mo",output:"\u2286",ttype:CONST},{input:"\\supseteq",tag:"mo",output:"\u2287",ttype:CONST},{input:"\\sqsubset",tag:"mo",output:"\u228F",ttype:CONST},{input:"\\sqsupset",tag:"mo",output:"\u2290",ttype:CONST},{input:"\\sqsubseteq",tag:"mo",output:"\u2291",ttype:CONST},{input:"\\sqsupseteq",tag:"mo",output:"\u2292",ttype:CONST},{input:"\\sim",tag:"mo",output:"\u223C",ttype:CONST},{input:"\\simeq",tag:"mo",output:"\u2243",ttype:CONST},{input:"\\approx",tag:"mo",output:"\u2248",ttype:CONST},{input:"\\cong",tag:"mo",output:"\u2245",ttype:CONST},{input:"\\Join",tag:"mo",output:"\u22C8",ttype:CONST},{input:"\\bowtie",tag:"mo",output:"\u22C8",ttype:CONST},{input:"\\in",tag:"mo",output:"\u2208",ttype:CONST},{input:"\\ni",tag:"mo",output:"\u220B",ttype:CONST},{input:"\\owns",tag:"mo",output:"\u220B",ttype:CONST},{input:"\\propto",tag:"mo",output:"\u221D",ttype:CONST},{input:"\\vdash",tag:"mo",output:"\u22A2",ttype:CONST},{input:"\\dashv",tag:"mo",output:"\u22A3",ttype:CONST},{input:"\\models",tag:"mo",output:"\u22A8",ttype:CONST},{input:"\\perp",tag:"mo",output:"\u22A5",ttype:CONST},{input:"\\smile",tag:"mo",output:"\u2323",ttype:CONST},{input:"\\frown",tag:"mo",output:"\u2322",ttype:CONST},{input:"\\asymp",tag:"mo",output:"\u224D",ttype:CONST},{input:"\\notin",tag:"mo",output:"\u2209",ttype:CONST},{input:"\\begin{eqnarray}",output:"X",ttype:MATRIX,invisible:true},{input:"\\begin{array}",output:"X",ttype:MATRIX,invisible:true},{input:"\\\\",output:"}&{",ttype:DEFINITION},{input:"\\end{eqnarray}",output:"}}",ttype:DEFINITION},{input:"\\end{array}",output:"}}",ttype:DEFINITION},{input:"\\big",tag:"mo",output:"X",atval:"1.2",ttype:BIG},{input:"\\Big",tag:"mo",output:"X",atval:"1.8",ttype:BIG},{input:"\\bigg",tag:"mo",output:"X",atval:"2.3",ttype:BIG},{input:"\\Bigg",tag:"mo",output:"X",atval:"2.9",ttype:BIG},{input:"\\left",tag:"mo",output:"X",ttype:LEFTBRACKET},{input:"\\right",tag:"mo",output:"X",ttype:RIGHTBRACKET},{input:"{",output:"{",ttype:LEFTBRACKET,invisible:true},{input:"}",output:"}",ttype:RIGHTBRACKET,invisible:true},{input:"(",tag:"mo",output:"(",atval:"1",ttype:STRETCHY},{input:"[",tag:"mo",output:"[",atval:"1",ttype:STRETCHY},{input:"\\lbrack",tag:"mo",output:"[",atval:"1",ttype:STRETCHY},{input:"\\{",tag:"mo",output:"{",atval:"1",ttype:STRETCHY},{input:"\\lbrace",tag:"mo",output:"{",atval:"1",ttype:STRETCHY},{input:"\\langle",tag:"mo",output:"\u2329",atval:"1",ttype:STRETCHY},{input:"\\lfloor",tag:"mo",output:"\u230A",atval:"1",ttype:STRETCHY},{input:"\\lceil",tag:"mo",output:"\u2308",atval:"1",ttype:STRETCHY},{input:")",tag:"mo",output:")",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"]",tag:"mo",output:"]",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rbrack",tag:"mo",output:"]",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\}",tag:"mo",output:"}",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rbrace",tag:"mo",output:"}",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rangle",tag:"mo",output:"\u232A",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rfloor",tag:"mo",output:"\u230B",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rceil",tag:"mo",output:"\u2309",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"|",tag:"mo",output:"\u2223",atval:"1",ttype:STRETCHY},{input:"\\|",tag:"mo",output:"\u2225",atval:"1",ttype:STRETCHY},{input:"\\vert",tag:"mo",output:"\u2223",atval:"1",ttype:STRETCHY},{input:"\\Vert",tag:"mo",output:"\u2225",atval:"1",ttype:STRETCHY},{input:"\\mid",tag:"mo",output:"\u2223",atval:"1",ttype:STRETCHY},{input:"\\parallel",tag:"mo",output:"\u2225",atval:"1",ttype:STRETCHY},{input:"/",tag:"mo",output:"/",atval:"1.01",ttype:STRETCHY},{input:"\\backslash",tag:"mo",output:"\u2216",atval:"1",ttype:STRETCHY},{input:"\\setminus",tag:"mo",output:"\\",ttype:CONST},{input:"\\!",tag:"mspace",atname:"width",atval:"-0.167em",ttype:SPACE},{input:"\\,",tag:"mspace",atname:"width",atval:"0.167em",ttype:SPACE},{input:"\\>",tag:"mspace",atname:"width",atval:"0.222em",ttype:SPACE},{input:"\\:",tag:"mspace",atname:"width",atval:"0.222em",ttype:SPACE},{input:"\\;",tag:"mspace",atname:"width",atval:"0.278em",ttype:SPACE},{input:"~",tag:"mspace",atname:"width",atval:"0.333em",ttype:SPACE},{input:"\\quad",tag:"mspace",atname:"width",atval:"1em",ttype:SPACE},{input:"\\qquad",tag:"mspace",atname:"width",atval:"2em",ttype:SPACE},{input:"\\prime",tag:"mo",output:"\u2032",ttype:CONST},{input:"'",tag:"mo",output:"\u02B9",ttype:CONST},{input:"''",tag:"mo",output:"\u02BA",ttype:CONST},{input:"'''",tag:"mo",output:"\u2034",ttype:CONST},{input:"''''",tag:"mo",output:"\u2057",ttype:CONST},{input:"\\ldots",tag:"mo",output:"\u2026",ttype:CONST},{input:"\\cdots",tag:"mo",output:"\u22EF",ttype:CONST},{input:"\\vdots",tag:"mo",output:"\u22EE",ttype:CONST},{input:"\\ddots",tag:"mo",output:"\u22F1",ttype:CONST},{input:"\\forall",tag:"mo",output:"\u2200",ttype:CONST},{input:"\\exists",tag:"mo",output:"\u2203",ttype:CONST},{input:"\\Re",tag:"mo",output:"\u211C",ttype:CONST},{input:"\\Im",tag:"mo",output:"\u2111",ttype:CONST},{input:"\\aleph",tag:"mo",output:"\u2135",ttype:CONST},{input:"\\hbar",tag:"mo",output:"\u210F",ttype:CONST},{input:"\\ell",tag:"mo",output:"\u2113",ttype:CONST},{input:"\\wp",tag:"mo",output:"\u2118",ttype:CONST},{input:"\\emptyset",tag:"mo",output:"\u2205",ttype:CONST},{input:"\\infty",tag:"mo",output:"\u221E",ttype:CONST},{input:"\\surd",tag:"mo",output:"\\sqrt{}",ttype:DEFINITION},{input:"\\partial",tag:"mo",output:"\u2202",ttype:CONST},{input:"\\nabla",tag:"mo",output:"\u2207",ttype:CONST},{input:"\\triangle",tag:"mo",output:"\u25B3",ttype:CONST},{input:"\\therefore",tag:"mo",output:"\u2234",ttype:CONST},{input:"\\angle",tag:"mo",output:"\u2220",ttype:CONST},{input:"\\diamond",tag:"mo",output:"\u22C4",ttype:CONST},{input:"\\Diamond",tag:"mo",output:"\u25C7",ttype:CONST},{input:"\\neg",tag:"mo",output:"\u00AC",ttype:CONST},{input:"\\lnot",tag:"mo",output:"\u00AC",ttype:CONST},{input:"\\bot",tag:"mo",output:"\u22A5",ttype:CONST},{input:"\\top",tag:"mo",output:"\u22A4",ttype:CONST},{input:"\\square",tag:"mo",output:"\u25AB",ttype:CONST},{input:"\\Box",tag:"mo",output:"\u25A1",ttype:CONST},{input:"\\wr",tag:"mo",output:"\u2240",ttype:CONST},{input:"\\arccos",tag:"mi",output:"arccos",ttype:UNARY,func:true},{input:"\\arcsin",tag:"mi",output:"arcsin",ttype:UNARY,func:true},{input:"\\arctan",tag:"mi",output:"arctan",ttype:UNARY,func:true},{input:"\\arg",tag:"mi",output:"arg",ttype:UNARY,func:true},{input:"\\cos",tag:"mi",output:"cos",ttype:UNARY,func:true},{input:"\\cosh",tag:"mi",output:"cosh",ttype:UNARY,func:true},{input:"\\cot",tag:"mi",output:"cot",ttype:UNARY,func:true},{input:"\\coth",tag:"mi",output:"coth",ttype:UNARY,func:true},{input:"\\csc",tag:"mi",output:"csc",ttype:UNARY,func:true},{input:"\\deg",tag:"mi",output:"deg",ttype:UNARY,func:true},{input:"\\det",tag:"mi",output:"det",ttype:UNARY,func:true},{input:"\\dim",tag:"mi",output:"dim",ttype:UNARY,func:true},{input:"\\exp",tag:"mi",output:"exp",ttype:UNARY,func:true},{input:"\\gcd",tag:"mi",output:"gcd",ttype:UNARY,func:true},{input:"\\hom",tag:"mi",output:"hom",ttype:UNARY,func:true},{input:"\\inf",tag:"mo",output:"inf",ttype:UNDEROVER},{input:"\\ker",tag:"mi",output:"ker",ttype:UNARY,func:true},{input:"\\lg",tag:"mi",output:"lg",ttype:UNARY,func:true},{input:"\\lim",tag:"mo",output:"lim",ttype:UNDEROVER},{input:"\\liminf",tag:"mo",output:"liminf",ttype:UNDEROVER},{input:"\\limsup",tag:"mo",output:"limsup",ttype:UNDEROVER},{input:"\\ln",tag:"mi",output:"ln",ttype:UNARY,func:true},{input:"\\log",tag:"mi",output:"log",ttype:UNARY,func:true},{input:"\\max",tag:"mo",output:"max",ttype:UNDEROVER},{input:"\\min",tag:"mo",output:"min",ttype:UNDEROVER},{input:"\\Pr",tag:"mi",output:"Pr",ttype:UNARY,func:true},{input:"\\sec",tag:"mi",output:"sec",ttype:UNARY,func:true},{input:"\\sin",tag:"mi",output:"sin",ttype:UNARY,func:true},{input:"\\sinh",tag:"mi",output:"sinh",ttype:UNARY,func:true},{input:"\\sup",tag:"mo",output:"sup",ttype:UNDEROVER},{input:"\\tan",tag:"mi",output:"tan",ttype:UNARY,func:true},{input:"\\tanh",tag:"mi",output:"tanh",ttype:UNARY,func:true},{input:"\\gets",tag:"mo",output:"\u2190",ttype:CONST},{input:"\\leftarrow",tag:"mo",output:"\u2190",ttype:CONST},{input:"\\to",tag:"mo",output:"\u2192",ttype:CONST},{input:"\\rightarrow",tag:"mo",output:"\u2192",ttype:CONST},{input:"\\leftrightarrow",tag:"mo",output:"\u2194",ttype:CONST},{input:"\\uparrow",tag:"mo",output:"\u2191",ttype:CONST},{input:"\\downarrow",tag:"mo",output:"\u2193",ttype:CONST},{input:"\\updownarrow",tag:"mo",output:"\u2195",ttype:CONST},{input:"\\Leftarrow",tag:"mo",output:"\u21D0",ttype:CONST},{input:"\\Rightarrow",tag:"mo",output:"\u21D2",ttype:CONST},{input:"\\Leftrightarrow",tag:"mo",output:"\u21D4",ttype:CONST},{input:"\\iff",tag:"mo",output:"~\\Longleftrightarrow~",ttype:DEFINITION},{input:"\\Uparrow",tag:"mo",output:"\u21D1",ttype:CONST},{input:"\\Downarrow",tag:"mo",output:"\u21D3",ttype:CONST},{input:"\\Updownarrow",tag:"mo",output:"\u21D5",ttype:CONST},{input:"\\mapsto",tag:"mo",output:"\u21A6",ttype:CONST},{input:"\\longleftarrow",tag:"mo",output:"\u27F5",ttype:CONST},{input:"\\longrightarrow",tag:"mo",output:"\u27F6",ttype:CONST},{input:"\\longleftrightarrow",tag:"mo",output:"\u27F7",ttype:CONST},{input:"\\Longleftarrow",tag:"mo",output:"\u27F8",ttype:CONST},{input:"\\Longrightarrow",tag:"mo",output:"\u27F9",ttype:CONST},{input:"\\Longleftrightarrow",tag:"mo",output:"\u27FA",ttype:CONST},{input:"\\longmapsto",tag:"mo",output:"\u27FC",ttype:CONST},{input:"\\sqrt",tag:"msqrt",output:"sqrt",ttype:UNARY},{input:"\\root",tag:"mroot",output:"root",ttype:BINARY},{input:"\\frac",tag:"mfrac",output:"/",ttype:BINARY},{input:"\\bfrac",tag:"mfrac",output:"/",ttype:BINARY},{input:"\\stackrel",tag:"mover",output:"stackrel",ttype:BINARY},{input:"\\atop",tag:"mfrac",output:"",ttype:INFIX},{input:"\\choose",tag:"mfrac",output:"",ttype:INFIX},{input:"\\over",tag:"mfrac",output:"/",ttype:INFIX},{input:"_",tag:"msub",output:"_",ttype:INFIX},{input:"^",tag:"msup",output:"^",ttype:INFIX},{input:"\\mbox",tag:"mtext",output:"mbox",ttype:TEXT},{input:"\\acute",tag:"mover",output:"\u00B4",ttype:UNARY,acc:true},{input:"\\grave",tag:"mover",output:"\u0060",ttype:UNARY,acc:true},{input:"\\breve",tag:"mover",output:"\u02D8",ttype:UNARY,acc:true},{input:"\\check",tag:"mover",output:"\u02C7",ttype:UNARY,acc:true},{input:"\\dot",tag:"mover",output:".",ttype:UNARY,acc:true},{input:"\\ddot",tag:"mover",output:"..",ttype:UNARY,acc:true},{input:"\\mathring",tag:"mover",output:"\u00B0",ttype:UNARY,acc:true},{input:"\\vec",tag:"mover",output:"\u2192",ttype:UNARY,acc:true},{input:"\\overrightarrow",tag:"mover",output:"\u2192",ttype:UNARY,acc:true},{input:"\\overleftarrow",tag:"mover",output:"\u2190",ttype:UNARY,acc:true},{input:"\\hat",tag:"mover",output:"\u005E",ttype:UNARY,acc:true},{input:"\\widehat",tag:"mover",output:"\u0302",ttype:UNARY,acc:true},{input:"\\tilde",tag:"mover",output:"~",ttype:UNARY,acc:true},{input:"\\widetilde",tag:"mover",output:"\u02DC",ttype:UNARY,acc:true},{input:"\\bar",tag:"mover",output:"\u203E",ttype:UNARY,acc:true},{input:"\\overbrace",tag:"mover",output:"\u23B4",ttype:UNARY,acc:true},{input:"\\overline",tag:"mover",output:"\u00AF",ttype:UNARY,acc:true},{input:"\\underbrace",tag:"munder",output:"\u23B5",ttype:UNARY,acc:true},{input:"\\underline",tag:"munder",output:"\u00AF",ttype:UNARY,acc:true},{input:"\\displaystyle",tag:"mstyle",atname:"displaystyle",atval:"true",ttype:UNARY},{input:"\\textstyle",tag:"mstyle",atname:"displaystyle",atval:"false",ttype:UNARY},{input:"\\scriptstyle",tag:"mstyle",atname:"scriptlevel",atval:"1",ttype:UNARY},{input:"\\scriptscriptstyle",tag:"mstyle",atname:"scriptlevel",atval:"2",ttype:UNARY},{input:"\\mathrm",tag:"mtext",output:"text",ttype:TEXT},{input:"\\textrm",tag:"mtext",output:"text",ttype:TEXT},{input:"\\mathbf",tag:"mstyle",atname:"mathvariant",atval:"bold",ttype:UNARY},{input:"\\textbf",tag:"mstyle",atname:"mathvariant",atval:"bold",ttype:UNARY},{input:"\\mathit",tag:"mstyle",atname:"mathvariant",atval:"italic",ttype:UNARY},{input:"\\textit",tag:"mstyle",atname:"mathvariant",atval:"italic",ttype:UNARY},{input:"\\mathtt",tag:"mstyle",atname:"mathvariant",atval:"monospace",ttype:UNARY},{input:"\\texttt",tag:"mstyle",atname:"mathvariant",atval:"monospace",ttype:UNARY},{input:"\\mathsf",tag:"mstyle",atname:"mathvariant",atval:"sans-serif",ttype:UNARY},{input:"\\mathbb",tag:"mstyle",atname:"mathvariant",atval:"double-struck",ttype:UNARY,codes:bbb},{input:"\\mathcal",tag:"mstyle",atname:"mathvariant",atval:"script",ttype:UNARY,codes:cal},{input:"\\mathfrak",tag:"mstyle",atname:"mathvariant",atval:"fraktur",ttype:UNARY,codes:frk}];var names=[];var mathVariant="italic";if(!document.createElementNS){document.createElementNS=function(link,type){return this.createElement(type)}}function compareNames(x,y){if(x.input>y.input){return 1}else{return -1}}function refreshSymbols(){var len=symbols.length;symbols.sort(compareNames);for(var i=0;i<len;i++){names[i]=symbols[i].input}}function strim(str,n){return $.trim(str.slice(n))}function createElementXHTML(elType){return document.createElementNS("http://www.w3.org/1999/xhtml",elType)}function position(str,n){var pos=$.inArray(str,names.slice(n));if(pos<0){var narr=names.concat([str]);narr.sort();pos=$.inArray(str,narr.slice(n))}return n+pos}function getSymbol(str){var k=0;var j=0;var mk;var st;var tagst;var match="";var more=true;var sLen=str.length;for(var i=1;i<=sLen&&more;i++){st=str.slice(0,i);j=k;k=position(st,j);if(k<names.length&&str.slice(0,names[k].length)==names[k]){match=names[k];mk=k;i=match.length}more=k<names.length&&str.slice(0,names[k].length)>=names[k]}if(match!==""){return symbols[mk]}k=1;st=str.slice(0,1);if("0"<=st&&st<="9"){tagst="mn"}else{tagst=(("A">st||st>"Z")&&("a">st||st>"z")?"mo":"mi")}return{input:st,tag:tagst,output:st,ttype:CONST}}function parseSexpr(str){var symbol,node,result,result2,i,st,newFrag=document.createDocumentFragment();var ch,newst,text="";symbol=getSymbol(str);if(symbol===null||symbol.ttype==RIGHTBRACKET){return[null,str,null]}if(symbol.ttype==DEFINITION){str=symbol.output+strim(str,symbol.input.length);symbol=getSymbol(str);if(symbol===null||symbol.ttype==RIGHTBRACKET){return[null,str,null]}}if(symbol.ttype==CONST&&symbol.tag=="mi"&&str!=""){while(symbol.ttype==CONST&&symbol.tag=="mi"&&str!=""){text+=symbol.output;str=strim(str,symbol.input.length);symbol=getSymbol(str)}node=createMmlNode("mi",document.createTextNode(text));node.setAttribute("mathvariant",mathVariant);return[node,str,"mi"]}else{str=strim(str,symbol.input.length)}switch(symbol.ttype){case SPACE:node=createMmlNode(symbol.tag);node.setAttribute(symbol.atname,symbol.atval);return[node,str,symbol.tag];case UNDEROVER:return[createMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];case CONST:node=createMmlNode(symbol.tag,document.createTextNode(symbol.output));return[node,str,symbol.tag];case STRETCHY:node=createMmlNode(symbol.tag,document.createTextNode(symbol.output));if(symbol.input=="|"||symbol.input=="\\vert"||symbol.input=="\\|"||symbol.input=="\\Vert"){node.setAttribute("lspace","0em");node.setAttribute("rspace","0em")}node.setAttribute("maxsize",symbol.atval);if(symbol.rtag!==null){return[node,str,symbol.rtag]}else{return[node,str,symbol.tag]}break;case BIG:var atval=symbol.atval;symbol=getSymbol(str);if(symbol===null){return[null,str,null]}str=strim(str,symbol.input.length);node=createMmlNode(symbol.tag,document.createTextNode(symbol.output));node.setAttribute("minsize",atval);node.setAttribute("maxsize",atval);return[node,str,symbol.tag];case LEFTBRACKET:if(symbol.input=="\\left"){symbol=getSymbol(str);if(symbol!==null){if(symbol.input=="."){symbol.invisible=true}str=strim(str,symbol.input.length)}}result=parseExpr(str,true,false);if(symbol===null||(typeof symbol.invisible=="boolean"&&symbol.invisible)){node=createMmlNode("mrow",result[0])}else{node=createMmlNode("mo",document.createTextNode(symbol.output));node=createMmlNode("mrow",node);node.appendChild(result[0])}return[node,result[1],result[2]];case MATRIX:if(symbol.input=="\\begin{array}"){var mask="";symbol=getSymbol(str);str=$.trim(str);if(symbol===null){mask="l"}else{str=strim(str,symbol.input.length);if(symbol.input!="{"){mask="l"}else{do{symbol=getSymbol(str);if(symbol!==null){str=strim(str,symbol.input.length);if(symbol.input!="}"){mask=mask+symbol.input}}}while(symbol!==null&&symbol.input!==""&&symbol.input!="}")}}result=parseExpr("{"+str,true,true);node=createMmlNode("mtable",result[0]);mask=mask.replace(/l/g,"left ");mask=mask.replace(/r/g,"right ");mask=mask.replace(/c/g,"center ");node.setAttribute("columnalign",mask);node.setAttribute("displaystyle","false");return[node,result[1],null]}else{result=parseExpr("{"+str,true,true);node=createMmlNode("mtable",result[0]);node.setAttribute("columnalign","right center left");node.setAttribute("displaystyle","true");node=createMmlNode("mrow",node);return[node,result[1],null]}break;case TEXT:if(str.charAt(0)=="{"){i=str.indexOf("}")}else{i=0}if(i==-1){i=str.length}st=str.slice(1,i);node=createMmlNode(symbol.tag,document.createTextNode(st));newFrag.appendChild(node);str=strim(str,i+1);return[createMmlNode("mrow",newFrag),str,null];case UNARY:if(symbol.atname=="mathvariant"){mathVariant=symbol.atval}result=parseSexpr(str);if(result[0]===null){return[createMmlNode(symbol.tag,document.createTextNode(symbol.output)),str]}if(typeof symbol.func=="boolean"&&symbol.func){st=str.charAt(0);if(st=="^"||st=="_"||st==","){return[createMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag]}else{node=createMmlNode("mrow",createMmlNode(symbol.tag,document.createTextNode(symbol.output)));node.appendChild(result[0]);return[node,result[1],symbol.tag]}}if(symbol.input=="\\sqrt"){return[createMmlNode(symbol.tag,result[0]),result[1],symbol.tag]}else{if(typeof symbol.acc=="boolean"&&symbol.acc){node=createMmlNode(symbol.tag,result[0]);var output=symbol.output;var node1=createMmlNode("mo",document.createTextNode(output));if(symbol.input=="\\vec"||symbol.input=="\\check"){node1.setAttribute("maxsize","1.2")}if(symbol.input=="\\underbrace"||symbol.input=="\\underline"){node1.setAttribute("accentunder","true")}else{node1.setAttribute("accent","true")}node.appendChild(node1);if(symbol.input=="\\overbrace"||symbol.input=="\\underbrace"){node.ttype=UNDEROVER}return[node,result[1],symbol.tag]}else{if(typeof symbol.codes!="undefined"){for(i=0;i<result[0].childNodes.length;i++){if(result[0].childNodes[i].nodeName=="mi"||result[0].nodeName=="mi"){st=(result[0].nodeName=="mi"?result[0].firstChild.nodeValue:result[0].childNodes[i].firstChild.nodeValue);newst="";for(var j=0;j<st.length;j++){ch=st.charCodeAt(j);if(ch>64&&ch<91){newst=newst+symbol.codes[ch-65]}else{if(ch>96&&ch<123){newst=newst+symbol.codes[ch-71]}}}if(result[0].nodeName=="mi"){result[0]=createMmlNode("mo").appendChild(document.createTextNode(newst))}else{result[0].replaceChild(createMmlNode("mo").appendChild(document.createTextNode(newst)),result[0].childNodes[i])}}}}node=createMmlNode(symbol.tag,result[0]);node.setAttribute(symbol.atname,symbol.atval);if(symbol.input=="\\scriptstyle"||symbol.input=="\\scriptscriptstyle"){node.setAttribute("displaystyle","false")}return[node,result[1],symbol.tag]}}break;case BINARY:result=parseSexpr(str);if(result[0]===null){return[createMmlNode("mo",document.createTextNode(symbol.input)),str,null]}result2=parseSexpr(result[1]);if(result2[0]===null){return[createMmlNode("mo",document.createTextNode(symbol.input)),str,null]}if(symbol.input=="\\root"||symbol.input=="\\stackrel"){newFrag.appendChild(result2[0])}newFrag.appendChild(result[0]);if(symbol.input=="\\frac"||symbol.input=="\\bfrac"){newFrag.appendChild(result2[0])}node=createMmlNode(symbol.tag,newFrag);if(symbol.input=="\\bfrac"){node.setAttribute("bevelled","true")}return[node,result2[1],symbol.tag];case INFIX:str=strim(str,symbol.input.length);return[createMmlNode("mo",document.createTextNode(symbol.output)),str,symbol.tag];default:return[createMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag]}}function parseIexpr(str){var symbol,sym1,sym2,node,result,tag,underover;sym1=getSymbol(str);result=parseSexpr(str);node=result[0];str=result[1];tag=result[2];symbol=getSymbol(str);if(symbol.ttype==INFIX){str=strim(str,symbol.input.length);result=parseSexpr(str);if(result[0]===null){result[0]=createMmlNode("mo",document.createTextNode("\u25A1"))}str=result[1];tag=result[2];if(symbol.input=="_"||symbol.input=="^"){sym2=getSymbol(str);tag=null;underover=((sym1.ttype==UNDEROVER)||(node.ttype==UNDEROVER));if((symbol.input=="_"&&sym2.input=="^")||(symbol.input=="^"&&sym2.input=="_")){str=strim(str,sym2.input.length);var res2=parseSexpr(str);str=res2[1];tag=res2[2];node=createMmlNode((underover?"munderover":"msubsup"),node);if(symbol.input=="_"){node.appendChild(result[0]);node.appendChild(res2[0])}else{node.appendChild(res2[0]);node.appendChild(result[0])}}else{if(symbol.input=="_"){node=createMmlNode((underover?"munder":"msub"),node);node.appendChild(result[0])}else{node=createMmlNode((underover?"mover":"msup"),node);node.appendChild(result[0])}}node=createMmlNode("mrow",node)}else{node=createMmlNode(symbol.tag,node);if(symbol.input=="\\atop"||symbol.input=="\\choose"){node.setAttribute("linethickness","0ex")}node.appendChild(result[0]);if(symbol.input=="\\choose"){node=createMmlNode("mfenced",node)}}}return[node,str,tag]}function parseExpr(str,rightbracket,matrix){var symbol,node,result,i,tag,newFrag=document.createDocumentFragment();do{str=$.trim(str);result=parseIexpr(str);node=result[0];str=result[1];tag=result[2];symbol=getSymbol(str);if(node){if((tag=="mn"||tag=="mi")&&symbol!==null&&typeof symbol.func=="boolean"&&symbol.func){var space=createMmlNode("mspace");space.setAttribute("width","0.167em");node=createMmlNode("mrow",node);node.appendChild(space)}if(tag=="mstyle"){mathVariant="italic"}newFrag.appendChild(node)}}while((symbol.ttype!=RIGHTBRACKET)&&symbol!==null&&symbol.output!=="");tag=null;if(symbol.ttype==RIGHTBRACKET){if(symbol.input=="\\right"){str=strim(str,symbol.input.length);symbol=getSymbol(str);if(symbol!==null&&symbol.input=="."){symbol.invisible=true}if(symbol!==null){tag=symbol.rtag}}if(symbol!==null){str=strim(str,symbol.input.length)}var len=newFrag.childNodes.length;if(matrix&&len>0&&newFrag.childNodes[len-1].nodeName=="mrow"){var pos=[];var m=newFrag.childNodes.length;for(i=0;matrix&&i<m;i=i+2){pos[i]=[];node=newFrag.childNodes[i];for(var j=0;j<node.childNodes.length;j++){if(node.childNodes[j].firstChild&&node.childNodes[j].firstChild.nodeValue=="&"){pos[i][pos[i].length]=j}}}var row,frag,n,k,table=document.createDocumentFragment();for(i=0;i<m;i=i+2){row=document.createDocumentFragment();frag=document.createDocumentFragment();node=newFrag.firstChild;n=node.childNodes.length;k=0;for(j=0;j<n;j++){if(typeof pos[i][k]!="undefined"&&j==pos[i][k]){node.removeChild(node.firstChild);row.appendChild(createMmlNode("mtd",frag));k++}else{frag.appendChild(node.firstChild)}}row.appendChild(createMmlNode("mtd",frag));if(newFrag.childNodes.length>2){newFrag.removeChild(newFrag.firstChild);newFrag.removeChild(newFrag.firstChild)}table.appendChild(createMmlNode("mtr",row))}return[table,str]}if(typeof symbol.invisible!="boolean"||!symbol.invisible){node=createMmlNode("mo",document.createTextNode(symbol.output));newFrag.appendChild(node)}}return[newFrag,str,tag]}function createMmlNode(t,frag){var node=document.createElementNS("http://www.w3.org/1998/Math/MathML",t);if(frag){$(node).append(frag)}return node}var SVG,canvas;var collection=[];function createSVGElement(elType){return document.createElementNS("http://www.w3.org/2000/svg",elType)}function getSVGElement(id,el){var res={node:null,newEl:false};if(id){id=SVG.id+"_"+id;res.node=$("#"+id)[0]}if(!res.node){res.node=createSVGElement(el);if(id){res.node.id=id}res.newEl=true}return res}function openGroup(id,clear){var newEl=getSVGElement(id,"g");appendSVG(newEl);canvas=$("#"+SVG.id+"_"+id)[0];if(clear){$(canvas).empty()}}function closeGroup(){canvas=$("#"+SVG.id+"_Canvas")[0]}function appendSVG(elmt){if(elmt.newEl){$(canvas).append(elmt.node)}}function addButton(parent,text,title,func,id){var node=createElementXHTML("span");node.className="svgButton";node.title=title;node.onclick=func;if(id){node.id=id}$(node).append(text);$(node).css({paddingRight:"0.5em",paddingLeft:"0.5em",fontSize:"1em",fontFamily:"monospace",background:"blue",color:"yellow",cursor:"pointer"});$(node).mouseover(function(){$(this).css({background:"yellow",color:"blue"})});$(node).mouseout(function(){$(this).css({background:"blue",color:"yellow"})});$(parent).append(node);return parent}function pictureAttributes(){this.id=null;this.stroke="blue";this.strokewidth=1;this.strokeopacity=1;this.strokedasharray="none";this.fill="none";this.fillopacity=1;this.fixed=false;this.fontstyle="normal";this.fontfamily="serif";this.fontweight="normal";this.fontsize=12;this.fontstroke="none";this.fontstrokewidth=1;this.fontstrokeopacity=1;this.fontstrokedasharray="none";this.fontfill="black";this.fontfillopacity=1;this.sector=false;this.largearc=0;this.marker="o";this.orient="auto";this.size=8;this.units="userSpaceOnUse";this.markerstroke="blue";this.markerstrokewidth=1;this.markerstrokeopacity=1;this.markerstrokedasharray="none";this.markerfill="none";this.markerfillopacity=1;this.sweep=0;this.rx=0;this.ry=0;this.closed=false;this.curve="";this.direction=[1,0];this.ticklabels="";this.pos="";this.points=200;this.backgroundcolor="none";this.backgroundopacity=1}function pictureObject(){this.id=null;this.src="";this.width=320;this.height=null;this.factor=1;this.xmin=-5;this.xmax=5;this.ymin=null;this.ymax=null;this.xunitlength=null;this.yunitlength=null;this.origin=[0,0];this.mouse=[null,null];this.coords="cartesian";this.drag=null;this.pan=true;this.locked=false;this.attr=new pictureAttributes()}function drawPicture(){$(canvas).empty();$("#"+SVG.id+" .svgMarker").remove();SVG.attr=new pictureAttributes();try{this.code=function(){with(Math){eval(SVG.src)}}();this.code=null}catch(err){var errstr;if(typeof err=="object"){errstr=err.name+" "+err.message+" "+err.number+" "+err.description}else{errstr=err}alert(errstr+"\n"+SVG.src)}collection[SVG.id]=SVG}function setOptions(atr){for(var i in atr){SVG.attr[i]=atr[i]}}function getOptions(attr,options,prefix){var pref=prefix||"";if(typeof attr=="string"){return(options[pref+attr]==undefined?SVG.attr[pref+attr]:options[pref+attr])}else{var i,newAttr={},len=attr.length,item;for(i=0;i<len;i++){item=attr[i];newAttr[item]=options[pref+item]==undefined?SVG.attr[pref+item]:options[pref+item]}return newAttr}}function setAction(evt,fn,id){if(!$.isFunction(fn)){return}var node=id?$("#"+SVG.id+"_"+id):$("#"+SVG.id);$(node).bind(evt,fn)}function getAngle(p){p=p||[0,0];var res=Math.atan2(SVG.mouse[1]-p[1],SVG.mouse[0]-p[0]);res=(res<0)?res+2*Math.PI:res;return res}function getDistance(p){p=p||[0,0];return Math.sqrt(Math.pow(SVG.mouse[0]-p[0],2)+Math.pow(SVG.mouse[1]-p[1],2))}function updateButton(){var obj=$("#SVGtoolbar #SVGupdateButton");if(obj.text()=="Edit"){obj.text("Update");obj.attr("title","Update picture");$("#SVGsrc").val(SVG.src).css("display","block")}else{SVG.src=$("#SVGsrc").val();drawPicture()}}function closeEditor(){$("#SVGtoolbar").slideUp();$("#SVGsrc").val("");SVG.locked=false}function switchTo(evt){var name=evt.currentTarget.id;if(SVG.id==name||SVG.locked){return false}SVG=collection[name];canvas=$("#"+SVG.id+"_Canvas")[0];return false}function onWheel(evt){if(SVG.locked){return false}evt=evt||window.event;var factor=1;evt.preventDefault();evt.stopPropagation();if(evt.wheelDelta){factor=(evt.wheelDelta>0)?0.8:1.25}else{if(evt.detail){factor=(evt.detail<0)?0.8:1.25}}if(evt.altKey){resize(factor)}else{zoom(factor)}return false}function onClick(evt){if(SVG.locked){return false}if(evt.button===0){if(evt.shiftKey){$("#SVGtoolbar #SVGupdateButton").text("Update");$("#SVGsrc").val(SVG.src);$("#SVGtoolbar").css({top:evt.pageY,left:evt.pageX}).slideDown();SVG.locked=true;evt.stopImmediatePropagation()}else{if(SVG.pan){SVG.drag=[evt.clientX,evt.clientY];document.body.style.cursor="move"}}}return false}function onDrop(evt){if(SVG.drag==null){return false}document.body.style.cursor="default";var xlen=(SVG.drag[0]-evt.clientX)/SVG.xunitlength;var ylen=(-SVG.drag[1]+evt.clientY)/SVG.yunitlength;SVG.drag=null;if(xlen!=0||ylen!=0){setScales([SVG.xmin+xlen,SVG.xmax+xlen,SVG.ymin+ylen,SVG.ymax+ylen])}return false}function setScales(scales){if(scales){SVG.xmin=scales[0];SVG.xmax=scales[1];SVG.ymin=scales[2];SVG.ymax=scales[3]}SVG.xunitlength=SVG.width/(SVG.xmax-SVG.xmin);SVG.yunitlength=SVG.height/(SVG.ymax-SVG.ymin);SVG.origin=[-SVG.xmin*SVG.xunitlength,-SVG.ymin*SVG.yunitlength];drawPicture()}function getScales(scales){scales=scales||[];var res=[null,null,null,null,0];if(scales.length==0){res[0]=SVG.xmin;res[1]=SVG.xmax}if(scales.length>1){if(typeof scales[0]=="number"&&typeof scales[1]=="number"&&scales[1]>scales[0]){res[0]=scales[0];res[1]=scales[1];res[4]=4}else{res[0]=SVG.xmin;res[1]=SVG.xmax}}if(scales.length==4){if(typeof scales[2]=="number"&&typeof scales[3]=="number"&&scales[3]>scales[2]){res[2]=scales[2];res[3]=scales[3];res[4]+=8}}return res}function resize(factor){SVG.factor=(SVG.factor*factor).toFixed(3);SVG.width/=factor;SVG.height/=factor;var picture=$("#"+SVG.id);picture.attr("width",SVG.width);picture.attr("height",SVG.height);var parent=picture[0].parentNode;if(parent.nodeName=="DIV"){parent.style.width=SVG.width+"px";parent.style.height=SVG.height+"px"}var node=$("#"+SVG.id+"ClipPath")[0].firstChild;$(node).attr("d","M0,0 "+SVG.width+",0 "+SVG.width+","+SVG.height+" 0,"+SVG.height);setScales()}function zoom(factor,center){var px,py;if(center){px=(SVG.xmax+SVG.xmin)*0.5;py=(SVG.ymax+SVG.ymin)*0.5}else{px=SVG.mouse[0];py=SVG.mouse[1]}SVG.factor=(SVG.factor*factor).toFixed(3);var dx=(SVG.xmax-SVG.xmin)*factor;var dy=(SVG.ymax-SVG.ymin)*factor;var xmin=(1-factor)*px+factor*SVG.xmin;var ymin=(1-factor)*py+factor*SVG.ymin;setScales([xmin,xmin+dx,ymin,ymin+dy])}function updateCartesianCoord(){if(!SVG.locked){$("#"+SVG.id+"_Coords").text("("+SVG.mouse[0].toFixed(2)+", "+SVG.mouse[1].toFixed(2)+")")}return false}function updatePolarCoord(){if(!SVG.locked){$("#"+SVG.id+"_Coords").text("("+getDistance().toFixed(2)+", "+getAngle().toFixed(2)+")")}return false}function getPosition(evt){var a=[null,null];var off=$(evt.currentTarget.parentNode).offset();a[0]=(evt.pageX-off.left-SVG.origin[0])/SVG.xunitlength;a[1]=(SVG.height-SVG.origin[1]-evt.pageY+off.top)/SVG.yunitlength;return a}function updatePosition(evt){SVG.mouse=getPosition(evt);return false}function removeCoord(){$("#"+SVG.id+"_Coords").text("");return false}function tracker(pos,options){options=options||{};var coords=options.coords||SVG.coords;var func=(coords=="polar")?updatePolarCoord:updateCartesianCoord;options.id="Coords";options.fixed=true;text(pos,"",options);setAction("mousemove",func);setAction("mouseout",removeCoord)}function exportSVG(){var svg="<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n";svg+=$("#"+SVG.id).parent().html();svg=svg.replace(/&nbsp;/g,"");svg=svg.replace(/><(?!\/)/g,">\n<");$("#SVGtoolbar #SVGupdateButton").text("Edit").attr("title","Edit script");$("#SVGsrc").val(svg).css("display","block")}function toSVG(p){var x=p[0]*SVG.xunitlength+SVG.origin[0];var y=SVG.height-p[1]*SVG.yunitlength-SVG.origin[1];return[x,y]}function toSVGPair(p){var q=toSVG(p);return q[0]+" "+q[1]}function setStrokeAndFill(node,options,prefix){var attributes=["stroke","strokewidth","strokedasharray","strokeopacity","fill","fillopacity"];var attr=getOptions(attributes,options,prefix);var elem=$(node);elem.attr("stroke",attr.stroke);elem.attr("stroke-width",attr.strokewidth/SVG.factor);elem.attr("stroke-dasharray",attr.strokedasharray);elem.attr("stroke-opacity",attr.strokeopacity);elem.attr("fill",attr.fill);elem.attr("fill-opacity",attr.fillopacity)}function button(p,q,txt,action,options){options=options||{};options.id=(options.id||Math.randomString(8));rect(p,q,options);setAction("click",action,options.id);options.fill=null;options.fillopacity=1;options.id+="_t";text([(p[0]+q[0])*0.5,(p[1]+q[1])*0.5],txt,options);setAction("click",action,options.id)}function setMarkers(obj,options){var markerChars="o*sSx+<>|";var attributes=["marker","size","units","orient","markerstroke","markerstrokewidth","markerstrokeopacity"];var attr=getOptions(attributes,options);var node,node2,i,id,pos=["marker-start","marker-mid","marker-end"];var lim=attr.marker.length;for(i=0;i<lim;i++){var type=attr.marker.charAt(i);if(type=="-"||markerChars.indexOf(type)<0){continue}id=(options.id||Math.randomString(8))+"Marker_"+markerChars.indexOf(type);node=$("#"+SVG.id+"_"+id);if(node.length===0){node=$(getSVGElement(id,"marker").node);node.attr("class","svgMarker");node.attr("viewBox","0 0 10 10");node.attr("refX",5);node.attr("refY",5);node.attr("orient",attr.orient);node.attr("markerUnits",attr.units);switch(type){case"*":case"o":node2=$(createSVGElement("circle"));node2.attr("cx",5);node2.attr("cy",5);node2.attr("r",4);break;case">":node2=$(createSVGElement("path"));node2.attr("d","M0 0 L10 5 L0 10 z");node.attr("refX",10);break;case"<":node2=$(createSVGElement("path"));node2.attr("d","M10 0 L10 10 L0 5 z");node.attr("refX",0);break;case"x":node2=$(createSVGElement("path"));node2.attr("d","M0 0 L10 10 M0 10 L10 0");break;case"+":node2=$(createSVGElement("path"));node2.attr("d","M5 0 L5 10 M0 5 L10 5");break;case"|":node2=$(createSVGElement("path"));node2.attr("d","M5 0 L5 10");break;case"S":case"s":node2=$(createSVGElement("rect"));node2.attr("x",0);node2.attr("y",0);node2.attr("width",10);node2.attr("height",10)}setStrokeAndFill(node2,options,"marker");node2.attr("stroke-width",attr.markerstrokewidth);if("*<>S".indexOf(type)>-1){node2.attr("fill",attr.markerstroke);node2.attr("fill-opacity",attr.markerstrokeopacity)}node.append(node2);$("#"+SVG.id+"_Defs").append(node)}node.attr("markerWidth",attr.size/SVG.factor);node.attr("markerHeight",attr.size/SVG.factor);$(obj).attr(pos[i],"url(#"+SVG.id+"_"+id+")")}}function setLabels(p,options){var i,point=[0,0],pos;var label=(typeof options.label=="string")?[options.label]:options.label;var labelpos=getOptions("pos",options);labelpos=(typeof labelpos=="string")?[labelpos]:labelpos;var poslen=labelpos.length;var size=options.size||SVG.attr.size;var dx=(0.5*size/SVG.xunitlength)/SVG.factor;var dy=(0.5*size/SVG.yunitlength)/SVG.factor;for(i=0;i<label.length;i++){options.isLabel="_label"+i;point[0]=p[i][0];point[1]=p[i][1];pos=(poslen>i)?labelpos[i].toUpperCase():pos;if(/E/.test(pos)){point[0]+=dx}if(/W/.test(pos)){point[0]-=dx}if(/N/.test(pos)){point[1]+=dy}if(/S/.test(pos)){point[1]-=dy}options.pos=pos;text(point,label[i],options)}}function line(p,q,options){options=options||{};options.closed=false;options.curve="";path([p,q],options)}function dot(p,options){options=options||{};var direction=getOptions("direction",options);var q=[p[0]+direction[0]/SVG.xunitlength,p[1]+direction[1]/SVG.yunitlength];var st="M"+toSVGPair(p)+" "+toSVGPair(q);var elmt=getSVGElement(options.id,"path");var elem=$(elmt.node);elem.attr("d",st);elem.attr("stroke","none");setMarkers(elem,options);appendSVG(elmt);if(options.label){setLabels([p],options)}}function path(list,options,append){options=options||{};var i,elmt=getSVGElement(options.id,"path");var attr=getOptions(["curve","closed"],options);var len=list.length;if(len>0){var node=$(elmt.node);var st=(append&&!elmt.newEl)?elmt.node.getAttribute("d"):"";st+="M"+toSVGPair(list[0])+" "+attr.curve;for(i=1;i<len;i++){st+=toSVGPair(list[i])+" "}if(attr.closed){st+="Z"}node.attr("d",st);setStrokeAndFill(node,options);if(options.marker){setMarkers(node,options)}appendSVG(elmt);if(options.label){setLabels(list,options)}}}function rotate(id,angle,options){if(!id||!angle){return}var node=$("#"+SVG.id+"_"+id)[0];if(node){options=options||{};var center=options.center?toSVG(options.center):SVG.origin;angle=-angle*180/Math.PI;var transform=node.getAttribute("transform")||"";transform="rotate("+angle+" "+center+") "+(options.replace?"":transform);$(node).attr("transform",transform)}}function translate(id,delta,options){if(!id||!delta){return}var node=$("#"+SVG.id+"_"+id)[0];if(node){options=options||{};delta=toSVG(delta);var transform=node.getAttribute("transform")||"";transform="translate("+(delta[0]-SVG.origin[0])+"  "+(SVG.origin[1]+delta[1]-SVG.height)+") "+(options.replace?"":transform);$(node).attr("transform",transform)}}function curve(list,options){options=options||{};options.curve=options.curve||"T";path(list,options)}function circle(center,radius,options){ellipse(center,radius,radius,options)}function loop(p,options){options=options||{};var d=options.direction||[1,0];options.curve="C";options.closed=false;path([p,[p[0]+d[0],p[1]+d[1]],[p[0]-d[1],p[1]+d[0]],p],options)}function arc(options){options=options||{};var start=options.start;var end=options.end;var center=options.center;var startangle=options.startangle;var endangle=options.endangle;var st="M",elmt=getSVGElement(options.id,"path");var attr=getOptions(["largearc","sweep","closed","sector"],options);var radius=options.radius;if(center!=null&&startangle!=null&&endangle!=null&&radius!=null){start=[radius*Math.cos(startangle)+center[0],radius*Math.sin(startangle)+center[1]];end=[radius*Math.cos(endangle)+center[0],radius*Math.sin(endangle)+center[1]]}if(start==null||end==null){return}if(!radius){var v=[end[0]-start[0],end[1]-start[1]];radius=Math.sqrt(v[0]*v[0]+v[1]*v[1])}if(attr.sector){st+=toSVGPair(center)+" "}st+=toSVGPair(start)+" A"+radius*SVG.xunitlength+","+radius*SVG.yunitlength+" 0 "+attr.largearc+","+attr.sweep+" "+toSVGPair(end);if(attr.sector||attr.closed){st+=" z"}var node=$(elmt.node);node.attr("d",st);setStrokeAndFill(node,options);if(options.marker){setMarkers(node,options)}appendSVG(elmt);if(options.label){setLabels([start,end],options)}}function sector(options){if(!options.center||!options.startangle||!options.endangle||!options.radius){return}options.sector=true;arc(options)}function ellipse(center,rx,ry,options){options=options||{};var elmt=getSVGElement(options.id,"ellipse");center=toSVG(center);var node=$(elmt.node);node.attr("cx",center[0]);node.attr("cy",center[1]);node.attr("rx",rx*SVG.xunitlength);node.attr("ry",ry*SVG.yunitlength);setStrokeAndFill(node,options);appendSVG(elmt)}function polygon(list,options){options=options||{};options.closed=true;path(list,options)}function rect(p,q,options){options=options||{};var elmt=getSVGElement(options.id,"rect");var attr=getOptions(["rx","ry"],options);var node=$(elmt.node);node.attr("x",toSVG(p)[0]);node.attr("y",toSVG(q)[1]);node.attr("width",(q[0]-p[0])*SVG.xunitlength);node.attr("height",(q[1]-p[1])*SVG.yunitlength);node.attr("rx",attr.rx*SVG.xunitlength);node.attr("ry",attr.ry*SVG.yunitlength);setStrokeAndFill(node,options);appendSVG(elmt)}function text(p,st,options){options=options||{};var id=options.id;var attr=getOptions(["fontstyle","fontfamily","fontweight","fontfill","fontsize","fixed","pos"],options);if(id&&options.isLabel){id+=options.isLabel}var pos=attr.pos.toUpperCase();if(!attr.fixed){attr.fontsize/=SVG.factor}var elem,node,dx,dy,latex=false,str=$.trim(st.toString()),q=toSVG(p);if(str.charAt(0)=="$"){str=str.substr(1,str.length-2);latex=true}if(latex){if(p[0]>SVG.xmax||p[0]<SVG.xmin||p[1]>SVG.ymax||p[1]<SVG.ymin){return}node=createElementXHTML("div");node.style.position="absolute";node.style.left="-1000px";node.style.top="-1000px";$("body").append(node);var math=MSVG.parseMath(str,true,attr.fontsize+"px",attr.fontfill);var mathNode=$(node);mathNode.append($(math).clone());dx=-node.offsetWidth/2;dy=-node.offsetHeight/2;if(/N/.test(pos)){dy=-node.offsetHeight}if(/S/.test(pos)){dy=0}if(/E/.test(pos)){dx=0}if(/W/.test(pos)){dx=-node.offsetWidth}var width=mathNode.width(),height=mathNode.height();mathNode.remove();q[0]+=dx;q[1]+=dy;var elmt=getSVGElement(id,"foreignObject");elem=$(elmt.node);elem.empty().append(math);elem.attr("width",width);elem.attr("height",height)}else{var baseline="middle",textanchor="middle";if(/E/.test(pos)){textanchor="start"}if(/W/.test(pos)){textanchor="end"}if(/N/.test(pos)){baseline="text-after-edge"}if(/S/.test(pos)){baseline="text-before-edge"}var elmt=getSVGElement(id,"text");elem=$(elmt.node);elem.empty().text(str);elem.attr("font-style",attr.fontstyle);elem.attr("font-family",attr.fontfamily);elem.attr("font-weight",attr.fontweight);elem.attr("font-size",attr.fontsize);elem.attr("text-anchor",textanchor);elem.attr("dominant-baseline",baseline);setStrokeAndFill(elem,options,"font")}elem.attr("x",q[0]);elem.attr("y",q[1]);appendSVG(elmt)}function image(url,options){options=options||{};var elmt=getSVGElement(options.id,"image");var elem=$(elmt.node);var height=options.height?options.height/SVG.factor:SVG.height;var width=options.width?options.width/SVG.factor:SVG.width;var origin=toSVG(options.origin||[SVG.xmin,SVG.ymin]);var pos=(options.pos||"").toUpperCase();var x=origin[0]-width*0.5;var y=origin[1]-height*0.5;if(/N/.test(pos)){y-=height*0.5}if(/S/.test(pos)){y+=height*0.5}if(/E/.test(pos)){x+=width*0.5}if(/W/.test(pos)){x-=width*0.5}elem.attr("x",x);elem.attr("y",y);elem.attr("width",width);elem.attr("height",height);elem.attr("preserveAspectRatio","none");elmt.node.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",url);appendSVG(elmt)}function grid(options){options=options||{};var dx,dy,x,y,k;var orig=options.origin||[0,0];var id=options.id||"Grid";options.stroke=options.stroke||"grey";options.strokewidth=(options.strokewidth||SVG.attr.strokewidth*0.5);var coords=options.coords||SVG.coords;var lim=getScales(options.scales);openGroup(id,true);lim[2]=(typeof lim[2]=="number")?lim[2]:SVG.ymin;lim[3]=(typeof lim[3]=="number")?lim[3]:SVG.ymax;if(coords=="polar"){dx=options.dx||1;dy=options.dy||3;var limit=Math.max(Math.abs(lim[0]),Math.abs(lim[1]),Math.abs(lim[2]),Math.abs(lim[3]));for(x=dx;x<limit;x+=dx){circle(orig,x,options)}if(dy>1){for(y=1;y<dy;y++){k=Math.tan(y*Math.PI/(2*dy));line([lim[0],(lim[0]-orig[0])*k+orig[1]],[SVG.xmax,(lim[1]-orig[0])*k+orig[1]],options);line([lim[0],-(lim[0]-orig[0])*k+orig[1]],[SVG.xmax,-(lim[1]-orig[0])*k+orig[1]],options)}}}else{dx=options.dx||1;dy=options.dy||dx;for(x=orig[0];x<SVG.xmax;x+=dx){if(x>lim[0]&&x<lim[1]){line([x,lim[2]],[x,lim[3]],options)}}for(x=orig[0]-dx;x>SVG.xmin;x-=dx){if(x>lim[0]&&x<lim[1]){line([x,lim[2]],[x,lim[3]],options)}}for(y=orig[1];y<SVG.ymax;y+=dy){if(y>lim[2]&&y<lim[3]){line([lim[0],y],[lim[1],y],options)}}for(y=orig[1]-dy;y>SVG.ymin;y-=dy){if(y>lim[2]&&y<lim[3]){line([lim[0],y],[lim[1],y],options)}}}closeGroup()}function axes(options){options=options||{};options.marker="-|"+(options.marker?options.marker.charAt(0):"-");var i,x,y,start,stop,label;var dx=options.dx||1;var dy=options.dy||dx;var id=options.id||"Axes";var fontsize=getOptions("fontsize",options);var coords=options.coords||SVG.coords;var orig=(coords=="polar")?[0,0]:(options.origin||[0,0]);var ddx=options.decx||Math.max(0,-Math.floor(Math.log(dx)/Math.log(10)));var ddy=options.decy||Math.max(0,-Math.floor(Math.log(dy)/Math.log(10)));options.stroke=options.stroke||"black";options.strokewidth=(options.strokewidth||SVG.attr.strokewidth*0.5);options.markerstroke=options.stroke;options.markerstrokewidth=options.strokewidth;openGroup(id,true);var lim=getScales(options.scales);lim[2]=lim[2]||SVG.ymin;lim[3]=lim[3]||SVG.ymax;if($.isArray(options.xticks)){var xticks=options.xticks.sort();var list2=[[lim[0],orig[1]]];label=[""];for(i=0;i<xticks.length;i++){list2.push([xticks[i],orig[1]]);label.push(String(xticks[i].toFixed(ddx)))}list2.push([lim[1],orig[1]]);label.push("")}else{var list1=[],label1=[];var list2=[],label2=[];start=SVG.xmin+0.25*dx;stop=SVG.xmax-0.25*dx;i=1;var cand,leftExit=0,rightExit=0;while(leftExit*rightExit==0){cand=orig[0]+i*dx;if(cand>start){if(cand<stop){list1.push([cand,orig[1]]);label1.push(String(cand.toFixed(ddx)))}else{rightExit=1}}cand=orig[0]-i*dx;if(cand<stop){if(cand>start){list2.push([cand,orig[1]]);label=(coords=="polar")?"":cand.toFixed(ddx);label2.push(String(label))}else{leftExit=1}}i++}list1.push([lim[1],orig[1]]);label1.push("");list2.push([lim[0],orig[1]]);label2.push("");list2.reverse();list2=list2.concat(list1);label2.reverse();label=label2.concat(label1)}if(options.ticklabels!=false){options.label=label;options.pos="S"}path(list2,options);if($.isArray(options.yticks)){var yticks=options.yticks.sort();var list2=[[orig[0],lim[2]]];label=[""];for(i=0;i<yticks.length;i++){list2.push([orig[0],yticks[i]]);label.push(String(yticks[i].toFixed(ddy)))}list2.push([orig[0],lim[3]]);label.push("")}else{list1=[],label1=[];list2=[];label2=[];start=SVG.ymin+0.25*dy;stop=SVG.ymax-0.25*dy;i=1;leftExit=0;rightExit=0;while(leftExit*rightExit==0){cand=orig[1]+i*dy;if(cand>start){if(cand<stop){list1.push([orig[0],cand]);label1.push(String(cand.toFixed(ddy)))}else{rightExit=1}}cand=orig[1]-i*dy;if(cand<stop){if(cand>start){list2.push([orig[0],cand]);label=(coords=="polar")?"":cand.toFixed(ddy);label2.push(String(label))}else{leftExit=1}}i++}list1.push([orig[0],lim[3]]);label1.push("");list2.push([orig[0],lim[2]]);label2.push("");list2.reverse();list2=list2.concat(list1);label2.reverse();label=label2.concat(label1)}if(options.ticklabels!=false){options.label=label;options.pos="W"}options.stroke=options.markerstroke;path(list2,options);closeGroup()}function list(fun,tmin,tmax,options){var inc=(tmax-tmin)/getOptions("points",options);if(inc<=0||fun.length==0){return}var t,pth,g=[],xt,yt;for(t=1;t>=0;t--){if($.isFunction(fun[t])){g[t]=fun[t]}else{if(typeof fun[t]=="string"){with(Math){eval("g["+t+"] = function(x){return "+fun[t]+"}")}}else{return}}}if(g.length<2){return}pth=[];for(t=tmin;t<=tmax;t+=inc){xt=g[0](t);yt=g[1](t);if(isFinite(xt)&&isFinite(yt)){pth[pth.length]=[xt,yt]}}return pth}function plot(fun,options){options=options||{};var append,pth,steps=options.steps||[];var n_steps=steps.length;options.closed=false;options.curve="";var xmin=(options.min==null)?SVG.xmin:Math.max(SVG.xmin,options.min);var xmax=(options.max==null)?SVG.xmax:Math.min(SVG.xmax,options.max);if(n_steps===0){pth=list(["x",fun],xmin,xmax,options);if(pth){path(pth,options)}}else{options.id=options.id||Math.randomString(6);steps.sort();var steps_a=[];steps_a.push(xmin);for(i=0;i<n_steps;i++){if(steps[i]>xmin&&steps[i]<xmax){steps_a.push(steps[i])}}steps_a.push(xmax);n_steps=steps_a.length-1;for(i=0;i<n_steps;i++){xmax=steps_a[i+1];xmin=steps_a[i];pth=list(["x",fun],xmin,xmax,options);append=(i>0);if(pth){path(pth,options,append)}}}}function area(fun1,fun2,options){options=options||{};options.curve="";options.closed=true;var xmin=(options.min==null)?SVG.xmin:options.min;var xmax=(options.max==null)?SVG.xmax:options.max;var pth1=list(["x",fun1],xmin,xmax,options);var pth2=list(["x",fun2],xmin,xmax,options);if(pth1&&pth2){pth1=pth1.concat(pth2.reverse());path(pth1,options)}}function polarPlot(fun,options){var g1,g2;if(typeof fun=="string"){with(Math){eval("g1 = function(x){return ("+fun+")*cos(x)}");eval("g2 = function(x){return ("+fun+")*sin(x)}")}}else{if($.isFunction(fun)){with(Math){eval("g1 = function(x){return fun(x)*cos(x)}");eval("g2 = function(x){return fun(x)*sin(x)}")}}}parametricPlot(g1,g2,options)}function parametricPlot(fun1,fun2,options){options=options||{};options.closed=false;options.curve="";var xmin=(options.min==null)?0:options.min;var xmax=(options.max==null)?2*Math.PI:options.max;var pth=list([fun1,fun2],xmin,xmax,options);if(pth){path(pth,options)}}function slopeField(fun,options){options=options||{};var g=fun;if(typeof fun=="string"){with(Math){eval("g = function(x,y){return "+fun+"}")}}var gxy,x,y,u,v,dz;var dx=(options.dx==null)?1:options.dx;var dy=(options.dy==null)?1:options.dy;dz=Math.sqrt(dx*dx+dy*dy)/6;var xmin=Math.ceil(SVG.xmin/dx);var ymin=Math.ceil(SVG.ymin/dy);for(x=xmin;x<=SVG.xmax;x+=dx){for(y=ymin;y<=SVG.ymax;y+=dy){gxy=g(x,y);if(!isNaN(gxy)){if(Math.abs(gxy)=="Infinity"){u=0;v=dz}else{u=dz/Math.sqrt(1+gxy*gxy);v=gxy*u}line([x-u,y-v],[x+u,y+v],options)}}}}return{showFormulaOnMouseOver:false,latexImages:false,latexConverter:"http://chart.apis.google.com/chart?cht=tx&chs=1x0&chf=bg,s,FFFFFF00&chco=000000&chl=",mathColor:"",mathFontSize:"",mathFontFamily:"",define:function(oldstr,newstr){if(MSVG.latexImages){return}if((typeof oldstr)=="string"){oldstr=[oldstr];newstr=[newstr]}var i,len=oldstr.length;if(len!=newstr.length){return}for(i=0;i<len;i++){symbols=symbols.concat([{input:"\\"+oldstr[i],tag:"mo",output:newstr[i],ttype:DEFINITION}])}refreshSymbols()},parseMath:function(str,displaystyle,size,color){if(str===null){return null}str=str.replace(/_([^\{])/gm,"_{$1}");str=str.replace(/\^([^\{])/gm,"^{$1}");var frag=parseExpr(str.replace(/^\s+/g,""),false,false)[0];var node=createMmlNode("mstyle",frag);$(node).attr({displaystyle:displaystyle,mathcolor:color||MSVG.mathColor,mathsize:size||MSVG.mathFontSize,fontfamily:MSVG.mathFontFamily});node=createMmlNode("math",node);if(MSVG.showFormulaOnMouseOver){$(node).attr({title:str.replace(/\s+/g," ")})}return node},parseMathExternal:function(str,displaystyle,size,color){if(str===null){return null}var node=createElementXHTML("img");var snip=MSVG.latexConverter+str;$(node).attr({src:snip});if(MSVG.showFormulaOnMouseOver){$(node).attr({title:str.replace(/\s+/g," ")})}return node},generic:function(){if(!$.browser.mozilla){MSVG.latexImages=true}if(MSVG.latexImages){MSVG.parseMath=MSVG.parseMathExternal}else{refreshSymbols()}

if(!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")){MSVG.initPictures=MSVG.removePictures}},removePictures:function(obj){var pictures=obj?$(obj):$(".SVGgraph");$(pictures).each(function(){var that=$(this);this.id=null;that.empty();that.css({color:"red",background:"yellow"});that.text("Missing picture: your  browser does not support inline SVG");window.setTimeout(function(){that.remove()},10000)})},initPictures:function(obj){var options,scales,qnode,node,node2,status,elem;var pictures=obj?$(obj):$(".SVGgraph");$(pictures).each(function(){var that=$(this);status=0;SVG=new pictureObject();options=$(this).attr("options");that.removeAttr("id");if(options){with(Math){eval("options={"+options+"}")}setOptions(options)}else{options={}}if(options.pan==false){SVG.pan=false}SVG.coords=options.coords||SVG.coords;SVG.src=$.trim($(this).text());that.empty();if(typeof options.width=="number"&&options.width>0){SVG.width=options.width;status+=1}if(typeof options.height=="number"&&options.height>0){SVG.height=options.height;status+=2}var scales=getScales(options.scales);SVG.xmin=scales[0];SVG.xmax=scales[1];SVG.ymin=scales[2];SVG.ymax=scales[3];status+=scales[4];SVG.height=options.height;if(status%4!=0){SVG.width=options.width}if(!SVG.width){SVG.width=1.6*SVG.height}else{if(!SVG.height){SVG.height=0.625*SVG.width}}if(status<8){SVG.ymax=0.5*SVG.height*(SVG.xmax-SVG.xmin)/SVG.width;SVG.ymin=-SVG.ymax}else{if(status<12){SVG.xmax=0.5*SVG.width*(SVG.ymax-SVG.ymin)/SVG.height;SVG.xmin=-SVG.xmax}}if(status==12||status==13){SVG.height=SVG.width*(SVG.ymax-SVG.ymin)/(SVG.xmax-SVG.xmin)}else{if(status==14){SVG.width=SVG.height*(SVG.xmax-SVG.xmin)/(SVG.ymax-SVG.ymin)}}SVG.id=options.id||Math.randomString(16);qnode=createSVGElement("svg");elem=$(qnode);qnode.id=SVG.id;elem.attr("xmlns","http://www.w3.org/2000/svg");elem.attr("xmlns:ev","http://www.w3.org/2001/xml-events");elem.attr("xmlns:xlink","http://www.w3.org/1999/xlink");elem.attr("version","1.1");elem.attr("baseProfile","full");if(options.border){elem.attr("style","border:"+options.border)}node=createSVGElement("clipPath");node.id=SVG.id+"ClipPath";node2=createSVGElement("path");$(node).append(node2);elem.attr("clip-path","url(#"+SVG.id+"ClipPath)");node2=createSVGElement("defs");node2.id=SVG.id+"_Defs";$(node2).append(node);$(qnode).append(node2);node2=createSVGElement("g");node2.id=SVG.id+"_Canvas";$(qnode).append(node2);that.append(qnode);this.style.position="relative";if(!(this.nodeName=="SPAN")){setAction("mousemove",updatePosition);if(SVG.pan){setAction("mouseup",onDrop)}if(window.addEventListener){var evt=$.browser.mozilla?"DOMMouseScroll":"mousewheel";qnode.addEventListener(evt,onWheel,false)}}setAction("mousedown",onClick);setAction("mouseover",switchTo);canvas=$("#"+SVG.id+"_Canvas")[0];resize(1)});if(pictures.length>0&&$("#SVGtoolbar").length===0){node=createElementXHTML("span");node.id="SVGtoolbar";node.style.position="absolute";node.style.textAlign="left";node.style.zIndex=10;node=addButton(node,"X","Close editor",closeEditor);node=addButton(node,"Update","Update picture",updateButton,"SVGupdateButton");node=addButton(node,"SVG","View SVG code",exportSVG);node=addButton(node,"-","Zoom out",function(){zoom(1.25,true)});node=addButton(node,"+","Zoom in",function(){zoom(0.8,true)});node=addButton(node,"\u2191","Enlarge picture",function(){resize(0.8)});node=addButton(node,"\u2193","Reduce picture",function(){resize(1.25)});$(node).append("<br />");node2=createElementXHTML("textarea");$(node2).attr({id:"SVGsrc",rows:8,cols:60});$(node).append(node2);$(node).hide();$("body").append(node)}}}}(jQuery);
//}}}
/***
!~TiddlyWiki formatters
***/
//{{{
if(!version.extensions.MathSVGPlugin) { //# ensure that the plugin is only installed once
version.extensions.MathSVGPlugin = {installed: true};
MSVG.generic();

config.formatterHelpers.MathSVGHelper = function(z) {
  if(z.tiddler && MSVG.noMathTag && jQuery.inArray(MSVG.noMathTag,z.tiddler.tags)>-1) return;
  this.lookaheadRegExp.lastIndex = z.matchStart;
  var lookaheadMatch = this.lookaheadRegExp.exec(z.source);
  if(lookaheadMatch){
    var eq = MSVG.parseMath(lookaheadMatch[1],this.displaystyle);
    if(this.displaystyle){
      var node = createTiddlyElement(z.output,"div");
      node.style.textAlign='center';
      node.appendChild(eq);
      z.output.appendChild(node);
    } else {z.output.appendChild(eq);}
    z.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
  }
}

config.formatters.push( {
  name: "clatex",
  match: "\\$\\$",
  lookaheadRegExp: /\$\$((?:.|\n)*?)\$\$/mg,
  displaystyle: true,
  handler: config.formatterHelpers.MathSVGHelper
})

config.formatters.push( {
  name: "clatex2",
  match: "\\\\\\\[",
  lookaheadRegExp: /\\\[((?:.|\n)*?)\\\]/mg,
  displaystyle: true,
  handler: config.formatterHelpers.MathSVGHelper
})

config.formatters.push( {
  name: "latex",
  match: "\\$",
  lookaheadRegExp: /\$((?:.|\n)*?)\$/mg,
  displaystyle: false,
  handler: config.formatterHelpers.MathSVGHelper
})

config.formatters.push( {
  name: "latex2",
  match: "\\\\\\\(",
  lookaheadRegExp: /\\\(((?:.|\n)*?)\\\)/mg,
  displaystyle: false,
  handler: config.formatterHelpers.MathSVGHelper
})

config.formatters.push( {
  name: "graph",
  match: "<div",
  lookaheadRegExp: /<div.+SVGgraph.+?>((?:.|\n)*?)<\/div>/mg,
  handler: function(z){
    if(z.tiddler && MSVG.noSvgTag && jQuery.inArray(MSVG.noSvgTag,z.tiddler.tags)>-1) return;
    this.lookaheadRegExp.lastIndex = z.matchStart;
    var lookaheadMatch = this.lookaheadRegExp.exec(z.source);
    if(lookaheadMatch){
      var text = lookaheadMatch[0].replace('<div','<div id="currentGraph"');
      jQuery(z.output).append(text);
      MSVG.initPictures("#currentGraph");
      z.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
    }
  }
})

config.formatters.push( {
  name: "inlineGraph",
  match: "<span",
  lookaheadRegExp: /<span.+SVGgraph.+?>((?:.|\n)*?)<\/span>/mg,
  handler: function(z){
    if(z.tiddler && MSVG.noSvgTag && jQuery.inArray(MSVG.noSvgTag,z.tiddler.tags)>-1) return;
    this.lookaheadRegExp.lastIndex = z.matchStart;
    var lookaheadMatch = this.lookaheadRegExp.exec(z.source);
    if(lookaheadMatch){
      var text = lookaheadMatch[0].replace('<span','<span id="currentGraph"');
      jQuery(z.output).append(text);
      MSVG.initPictures("#currentGraph");
      z.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
    }
  }
})

}
//}}}
/***
The script should not be edited. All available options can be set by the following variables:
***/
//{{{
//MSVG.showFormulaOnMouseOver = false; //show LaTeX code on mouse over the equation
//MSVG.latexImages = false; //set to true to force the use of an external converter
//MSVG.latexConverter = "http://www.yourequations.com/eq.latex?"; //link to external converter
//MSVG.mathColor = "green"; //font color
//MSVG.mathFontSize = ""; //font size
//MSVG.mathFontFamily = ""; //font family
//}}}
/***
New symbols or commands can be defined here:
***/
//{{{
 var commands = ["nle","R","diagup","varnothing","ind","DD"];
 var symbols = ["\u2270","\u211D","\u2571","\u2205","\u2AEB","\\frac{d}{dr}"];
 MSVG.define(commands,symbols);
//}}}
{{borderless{
|[[Click here to open in a new browser tab|http://www.telescopes.cc/default.htm]]|
<html><div align="center"><iframe src ="http://www.telescopes.cc/default.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cyanogen.com/video/Autoguiding%20-%201024%20x%20768.html]]|
<html><div align="center"><iframe src ="http://www.cyanogen.com/video/Autoguiding%20-%201024%20x%20768.html" width="100%" align="center" height="600">< /></div></html>}}}
----
@@color:#0F0;~~~MaxIm DL is a trademark of Diffraction Limited.  Videos are Copyright © 2008, Diffraction Limited~~@@
{{borderless{
|[[Click here to open in a new browser tab|http://www.cyanogen.com/video/Calibration%20Tutorial%20-%201024%20x%20768.html]]|
<html><div align="center"><iframe src ="http://www.cyanogen.com/video/Calibration%20Tutorial%20-%201024%20x%20768.html" width="100%" align="center" height="600">< /></div></html>}}}
----
@@color:#0F0;~~~MaxIm DL is a trademark of Diffraction Limited.  Videos are Copyright © 2008, Diffraction Limited~~@@
{{borderless{
|[[Click here to open in a new browser tab|http://www.cyanogen.com/]]|
<html><div align="center"><iframe src ="http://www.cyanogen.com/" width="100%" align="center" height="600">< /></div></html>}}}
----
*from ''John Winfield''
{{borderless{
|[[Click here to open in a new browser tab|http://winfij.com/maximdl.html]]|
<html><div align="center"><iframe src ="http://winfij.com/maximdl.html" width="100%" align="center" height="600">< /></div></html>}}}
----
!Fundamentals
Learn how to view and save images in ~MaxIm DL. Includes important information on CCD image bit depth, and how this affects the screen display and file formats. Watch [[MaxIm Fundamentals]].
!Autoguiding
Learn the basics of autoguiding with ~MaxIm DL. Includes focusing, calibrating, guiding, and graphical track logs. Watch [[MaxIm Autoguiding]].
!Calibration
Learn how fast and convenient it is to perform image calibration with ~MaxIm DL. Watch [[MaxIm Calibration]].

----
@@color:#0F0;~~~MaxIm DL is a trademark of Diffraction Limited.  Videos are Copyright © 2008-2009, Diffraction Limited~~@@
{{borderless{
|[[Click here to open in a new browser tab|http://www.cyanogen.com/video/Fundamentals%20Tutorial%20-%201024%20x%20768.html]]|
<html><div align="center"><iframe src ="http://www.cyanogen.com/video/Fundamentals%20Tutorial%20-%201024%20x%20768.html" width="100%" align="center" height="600">< /></div></html>}}}
----
@@color:#0F0;~~~MaxIm DL is a trademark of Diffraction Limited.  Videos are Copyright © 2008, Diffraction Limited~~@@
{{borderless{
|[[Click here to open in a new browser tab|http://www.cyanogen.com/help/maximdl/MaxIm-DL.htm#Introduction.htm]]|
<html><div align="center"><iframe src ="http://www.cyanogen.com/help/maximdl/MaxIm-DL.htm#Introduction.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cyanogen.com/point_main.php]]|
<html><div align="center"><iframe src ="http://www.cyanogen.com/point_main.php" width="100%" align="center" height="600">< /></div></html>}}}
----
*Here is the ordered list known as the [[Messier Marathon Search Sequence]], or click links in the page below.
*See how ACP Scheduler performed in the ''[[Denny Messier Marathon|http://scheduler.dc3.com/marathon.html]]''.
----
{{borderless{
|[[Click here to open in a new browser tab|http://messier.seds.org/xtra/marathon/marathon.html]]|
<html><div align="center" style="background-color:white"><iframe src ="http://messier.seds.org/xtra/marathon/marathon.html" width="100%" align="center" height="600">< /></div></html>}}}
----
*See the general description of the [[Messier Marathon]].
----
{{borderless{
|[[Click here to open in a new browser tab|http://messier.seds.org/xtra/marathon/marath1.html]]|
<html><div align="center" style="background-color:white"><iframe src ="http://messier.seds.org/xtra/marathon/marath1.html" width="100%" align="center" height="600">< /></div></html>}}}
----
MAST supports a variety of astronomical data archives, with a primary focus on scientifically related data sets in the optical, ultraviolet, and near-infrared parts of the spectrum. The MAST web site is basically organized by mission, with each mission having it's own home page. There is no cost involved in retrieving data from MAST.
{{borderless{
|[[Click here to open in a new browser tab|http://archive.stsci.edu/index.html]]|
<html><div align="center"><iframe src ="http://archive.stsci.edu/index.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/info/Astrometry.html]]|
<html><div align="center"><iframe src ="http://www.cfa.harvard.edu/iau/info/Astrometry.html" width="100%" align="center" height="600">< /></div></html>}}}
----
|!NOTE: Links will open in a new browser tab|
{{twocolumns{
<html>
<body>
<div>
      <h4>MPC Operations Status</h4>
<ul>
<li>Processing <a href="http://minorplanetcenter.net/iau/info/MPCOpStatus.html" target="_blank">(Info)</a>
<li>ECS: Accessible
<li><a href="http://minorplanetcenter.net/iau/MPCStatus.html" target="_blank">MPC Status Page</a>
</ul>

      <h4>Observer Services (NEOs)</h4>
<ul>
<li><a href="http://minorplanetcenter.net/iau/NEO/TheNEOPage.html" target="_blank">NEO Services Overview</a>
<li><a href="http://minorplanetcenter.net/iau/NEO/toconfirm_tabular.html" target="_blank">NEO Confirmation</a>
<li><a href="http://minorplanetcenter.net/iau/NEO/PossNEO.html" target="_blank">NEO Ratings</a>
<li><a href="http://minorplanetcenter.net/iau/NEO/TheNEOPage.html" target="_blank">NEO Page</a>
<li><a href="http://www.minorplanetcenter.net/cgi-bin/neaobs.cgi" target="_blank">NEO Observation Planning Aid</a>
<li><a href="http://www.minorplanetcenter.net/cgi-bin/checkneo.cgi" target="_blank">NEOChecker</a>
<li><a href="http://www.minorplanetcenter.net/cgi-bin/checkneocmt.cgi" target="_blank">NEOCMTChecker</a>
<li><a href="http://minorplanetcenter.net/NEOCPblog/" target="_blank">NEOCP Blog</a>
<li><a href="http://minorplanetcenter.net/neocp_obs/" target="_blank">Recent NEOCP Observations</a>
</ul>

      <h4>Observer Services</h4>
<ul>
<li><a href="http://minorplanetcenter.net/iau/services/WebCSAccess.html" target="_blank">Services Overview</a>
<li><a href="http://minorplanetcenter.net/iau/MPEph/MPEph.html" target="_blank">Minor Planet &amp; Comet Ephem.</a>
<li><a href="http://minorplanetcenter.net/iau/NatSats/NaturalSatellites.html" target="_blank">Natural Satellite Ephemerides</a>
<li><a href="http://minorplanetcenter.net/iau/MPEph/NewObjEphems.html" target="_blank">New Object Ephemerides</a>
<li><a href="http://www.minorplanetcenter.net/cgi-bin/checkmp.cgi" target="_blank">MPChecker</a>
<li><a href="http://www.minorplanetcenter.net/cgi-bin/checkcmt.cgi" target="_blank">CMTChecker</a>
<li><a href="http://minorplanetcenter.net/iau/SpaceJunk/SpaceJunk.html" target="_blank">Distant Artificial Satellites</a>
<li><a href="http://minorplanetcenter.net/iau/lists/Customize.html" target="_blank">Observing List Customizer</a>
<li><a href="http://minorplanetcenter.net/iau/SkyCoverage.html" target="_blank">Sky Coverage</a>
</ul>

      <h4>Databases</h4>
<ul>
<li><a " href="http://minorplanetcenter.net/db_search" target="_blank">MPC Database</a>
<li><a " href="http://minorplanetcenter.net/light_curve" target="_blank">Light Curve Database</a>
</ul>

      <h4>Orbital Elements</h4>
<ul>
<li><a href="http://minorplanetcenter.net/iau/Ephemerides/EphemOrbEls.html" target="_blank">Orbital Elements Overview</a>
<li><a href="http://minorplanetcenter.net/iau/MPCORB.html" target="_blank">MPCORB</a>
<li><a href="http://minorplanetcenter.net/iau/Ephemerides/SoftwareEls.html" target="_blank">Orbital Elements for Programs</a>
<li><a href="http://minorplanetcenter.net/iau/ECS/MPCAT/MPCAT.html" target="_blank">MPCAT</a>
<li><a href="http://minorplanetcenter.net/iau/ECS/MPCUPDATE/MPCUPDATE.html" target="_blank">MPCUPDATE</a>
</ul>

      <h4>Astrometric Observations</h4>
<ul>
<li><a href="http://minorplanetcenter.net/iau/ECS/MPCAT-OBS/MPCAT-OBS.html" target="_blank">MPCAT-OBS</a>
<li><a href="http://minorplanetcenter.net/db_search" target="_blank">MPCOBS</a>
</ul>

      <h4>Publications</h4>
<ul>
<li><a href="http://minorplanetcenter.net/iau/services/MPCServices.html" target="_blank">Publications Overview</a>
<li><a href="http://minorplanetcenter.net/mpec/RecentMPECs.html" target="_blank">MPECs</a>
<li><a href="http://minorplanetcenter.net/iau/ECS/MPCArchive/MPCArchive_TBL.html" target="_blank">MPC Archive</a>
<li><a href="http://minorplanetcenter.net/iau/rss/mpc_feeds.html" target="_blank">MPC RSS Feeds</a>
<li><a href="http://www.cbat.eps.harvard.edu/rss/cbat_feeds.html" target="_blank">CBAT RSS Feeds</a>
</ul>

      <h4>Documentation</h4>
<ul>
<li><a href="http://minorplanetcenter.net/iau/MPC_Documentation.html" target="_blank">Documentation Overview</a>
<li><a href="http://minorplanetcenter.net/iau/info/TechInfo.html" target="_blank">Tech Info</a>
<li><a href="http://minorplanetcenter.net/iau/info/Astrometry.html" target="_blank">Minor Body Astrometry</a>
<li><a href="http://minorplanetcenter.net/iau/WhatsNew.html" target="_blank">What's New</a>
</ul>

      <h4>Lists and Plots</h4>
<ul>
<li><a href="http://minorplanetcenter.net/iau/lists/Lists.html" target="_blank">Lists and Plots Overview</a>
<li><a href="http://minorplanetcenter.net/iau/Ephemerides/CritList/index.html" target="_blank">Critical-List Minor Planets</a>
<li><a href="http://minorplanetcenter.net/iau/lists/MPLists.html" target="_blank">Minor Planets</a>
<li><a href="http://minorplanetcenter.net/iau/lists/CometLists.html" target="_blank">Comets</a>
<li><a href="http://minorplanetcenter.net/iau/Animations/Animations.html" target="_blank">Animations</a>
</ul>

      <h4>General</h4>
<ul>
<li><a href="http://minorplanetcenter.net/blog/" target="_blank">MPC Blog</a>
<li><a href="http://minorplanetcenter.net/iau/ContactUs.html" target="_blank">Contact Us</a>
<li><a href="http://minorplanetcenter.net/iau/TheIndex.html" target="_blank">Index</a>
<li><a href="http://minorplanetcenter.net/iau/MPCSiteMap.html" target="_blank">Site Map</a>
</ul>

      <h4>Links</h4>
<ul>
<li><a href="http://minorplanetcenter.net/" target="_blank">Minor Planet Center</a>
<li><a href="http://www.cbat.eps.harvard.edu/index.html" target="_blank">Central Bureau for Astro. Tel.</a>
<li><a href="http://www.csc.eps.harvard.edu/index.html" target="_blank">Cometary Science Archive</a>
<li><a href="http://www.cfa.harvard.edu/sao/" target="_blank">Smithsonian Astro. Obs.</a>
</ul>
</div>
</body>
</html>
}}}
{{borderless{
|[[Click here to open in a new browser tab|http://cfa-www.harvard.edu/iau/NEO/ToConfirm.html]]|
<html><div align="center"><iframe src ="http://cfa-www.harvard.edu/iau/NEO/ToConfirm.html" width="100%" align="center" height="600">< /></div></html>}}}
----
*The IAU Minor Planet Center has an MP Checker service. Use Visual ~PinPoint to do a manual designation on the suspected minor planet. You might have to re-scan with really low sigma. Let VPP produce a MPC report. Copy and paste it into the big box on the MP Checker and click the "these observations" radiobutton, and it will tell you what asteroid(s) it thinks they are.
*For planning purposes, you can also enter any given RA and Dec to get a list of asteroids in the neighborhood.
{{borderless{
|[[Click here to open in a new browser tab|http://www.minorplanetcenter.net/cgi-bin/checkmp.cgi]]|
<html><div align="center"><iframe src ="http://www.minorplanetcenter.net/cgi-bin/checkmp.cgi" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/MPEph/MPEph.html]]|
<html><div align="center"><iframe src ="http://www.cfa.harvard.edu/iau/MPEph/MPEph.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.minorplanet.info/ObsGuides/Misc/photometryguide.htm]]|
<html><div align="center"><iframe src ="http://www.minorplanet.info/ObsGuides/Misc/photometryguide.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
This ~ACP-provided script is useful if you happen to own Software Bisque's version of Patrick Wallace's the TPOINT Telescope Analysis Software. This script will convert a ~MaxPoint calibration file into a ~TPOINT-importable text file. Thus, you can transfer a pointing model generated by ~MaxPoint into TPOINT's analysis program. For more information, see [[Analyzing With TPOINT]].

Here are all the [[Standard ACP Scripts]].
----
Here’s an example of how to change ''Utility Tasks'' (in the ACP web environment) to be able to start scripts located in the Scripts folder in ACP.

This example implements a hypothetical script to slew the telescope to the zenith as part of a new ''Custom Utilities'' section. This new section is added near the bottom of the existing ''Utility Tasks'' item. What is shown here in white is the existing code; what is added is shown in yellow or green.
 
 In the ACP authoring environment, open the ''Utility Tasks'' item for editing. Toward the end, you see lines of code that look like those illustrated below. Either add the lines of code as indicated in yellow or green, or you can copy and paste an ''&#42;&#60;html&#62; … &#60;&#47;html&#62;'' block from the existing code and change the pertinent parts. The white code is unchanged:
----
...
&#42;&#60;html&#62;&#60;a id="utilSimpleLoop"  
href="javascript:;" 
op="Simple Loop.vbs"&#62;Test the script console's logging and interrupts with a simple looping script&#60;&#47;a&#62;
&#60;&#47;html&#62; &#60;&#60;slider "" "~SimpleLoopInfoSlider" Info&#62;&#62;

@@color:yellow;&#33;&#33;Custom Utilities@@	@@color:green;''&#47;&#47;<-- Adds this new section title''@@
@@color:yellow;&#42;&#60;html&#62;&#60;a id="@@@@color:green;utilZenith@@@@color:yellow;"@@	@@color:green;''&#47;&#47;<-- Any name, for example "utilZenith," but same as below''@@
@@color:yellow;href="javascript:;"  
op="@@@@color:green;~SlewToZenith.vbs@@@@color:yellow;"&#62;@@@@color:green;Slew the telescope to the zenith@@@@color:yellow;&#60;&#47;a&#62;@@@@color:green;&#47;&#47;''<-- Name the script to run, change description too.''@@
@@color:yellow;&#60;&#47;html&#62; &#60;&#60;slider "" "@@@@color:green;~ZenithSlewInfoSlider@@@@color:yellow;" Info&#62;&#62;@@	@@color:green;''&#47;&#47;<-- Name the “help” slider file''@@

&#60;script&#62;
 function _utilOnComplete(text, params) {
 displayMessage(text);
 }
 function _util(e) {
 if(!e) e = window.event;
 var op = resolveTarget(e).getAttribute("op");
 var qs = op ? "?" + op : "";
 ~DC3.Ajax.sendRequest("GET", "/ac/arunscript.asp" + qs, "", _utilOnComplete, null);
 }
 var elem;
&#47;&#47;Must wire up onclick() at run time
…
document.getElementById("utilSyncScope").onclick=_util;
@@color:yellow;document.getElementById("''@@color:green;utilZenith@@''").onclick=_util;@@@@color:green;  ''&#47;&#47;<-- This line can go anywhere in this block''@@
document.getElementById("utilAutoFocus").onclick=_util;
document.getElementById("utilCalibrate").onclick=_util;
...
----

In addition, the following infoSlider is needed to explain the work. This is optional. If you don’t want a help file, then omit the &#60;&#60;''slider ... ''&#62;&#62; part in the above code: 
 
~ZenithSlewInfoSlider (with tags: Help,  ~UserContent, and  hideUser)
 
It might be described like this, "This script slews the scope to within a few arcminutes of the zenith. When the script is done, it turns tracking off so the telescope remains pointed close to zenith."
 
To add more, simply add another ''&#42;&#60;html&#62; … &#60;&#47;html&#62;'' block for your next script and add another .onclick line. When you’re done, click on “save to web” in the right sidebar. Close the authoring environment and reload the regular observatory web page.  
Here's an interesting set of web pages constructed by Bruce L. Gary, Hereford AZ.
These lead you step-by-step through the task of transforming instrumental stellar magnitudes derived from CCD images to the standard BVRI system.

[[Big Photometry Web Page]] - dated Jan 9, 2005

[[Photometry for Dummies]] - updated Sep 2, 2007

[[Differential Photometry Alternative Equations]] - dated Mar 25, 2009
----
from: ''Dick Berg''
----
This script uses the ACP environment to facilitate constructing the mosaic. It writes a complete plan to the default plan folder. The plan can be further edited by hand if necessary. The plan building process is logged in the default log folder. The camera and telescope must be connected.

The script senses if there are filters available and, if not, skips a filter selection. If you do not have a "~RotatorInfo.txt" file in the ACP root file, the script also skips a rotator position angle selection.

When run, the completed plan will image an area of the sky located at the image center coordinates, with a matrix of images from 1x1 up to 7x7 in any size and combination, with a specified overlap of between 15% and 40%, and rotation angle 0-360. The algorithm for generating the matrix images' center coordinates does work for a 1x1 matrix, although you probably wouldn't want to use this script that way. However, you might want to have a single row or single column of images, like 4x1 or 1x7.

Unzip the downloaded file and put the .vbs file in the "ACP Obs Control/Scripts" folder and run it from the control panel. You can run this script in the simulation or live mode, building a plan, and then running that plan in the simulation or the live mode.

This script can also work in the remote web environment, but that requires modifications to the Utility Tasks interface in your copy of ACP.

[[Download Mosaic NxM Script]]
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
The ''JPL HORIZONS'' on-line solar system data and ephemeris computation service provides access to key solar system data and flexible production of highly accurate ephemerides for solar system objects (as of January 2017:  725775 asteroids, 3442 comets, 178 planetary satellites, 8 planets, the Sun, L1, L2, select spacecraft, and system barycenters). HORIZONS is provided by the Solar System Dynamics Group of the Jet Propulsion Laboratory. 
----
{{borderless{
|[[Click here to open in a new browser tab|http://ssd.jpl.nasa.gov/?horizons]]|
<html><div align="center"><iframe src ="http://ssd.jpl.nasa.gov/?horizons" width="100%" align="center" height="60">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://exoplanetarchive.ipac.caltech.edu/index.html]]|
<html><div align="center"><iframe src ="http://exoplanetarchive.ipac.caltech.edu/index.html" width="100%" align="center" height="600">< /></div></html>}}}
----
*The IAU Minor Planet Center has an NEO Checker service. Use Visual ~PinPoint to do a manual designation on the suspected NEO. You might have to re-scan with really low sigma. Let VPP produce a MPC report. Copy and paste it into the big box on the NEO Checker and click the "these observations" radio button, and it will tell you what asteroid(s) it thinks they are.
*For planning purposes, you can also enter any given RA and Dec to get a list of asteroids in the neighborhood.
{{borderless{
|[[Click here to open in a new browser tab|http://www.minorplanetcenter.net/cgi-bin/checkneo.cgi]]|
<html><div align="center"><iframe src ="http://www.minorplanetcenter.net/cgi-bin/checkneo.cgi" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/Ephemerides/Unusual/index.html]]|
<html><div align="center"><iframe src ="http://www.cfa.harvard.edu/iau/Ephemerides/Unusual/index.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.swpc.noaa.gov/]]|
<html><div align="center"><iframe src ="http://www.swpc.noaa.gov/" width="100%" align="center" height="600">< /></div></html>}}}
----
!NEO Ephemerides
A near-earth object listed on the [[Minor Planet Center's Near Earth Object Confirmation Page (NEOCP)]] will not have orbital elements available. Instead, the MPC publishes short-term ephemerides on the NEOCP. You can retrieve the ephemerides for one or more ~NEOs and construct target specifications for each. 
|NOTE: The format of NEO Ephemeris target specifications is strict. You must follow the directions explicitly or your plan will fail on the bad specifications.|
You must set up the NEOCP ephemeris generator web page with the following options in order to get ephemeris lines in the expected format (all of these options are ''vital''): 
*''Geocentric'' observing point 
*Ephemeris Interval of ''1 hour'' 
*''Decimal'' coordinate format 
*Motions in ''"/hr'' 
*Separate RA and Dec ''coordinate'' rates (not sky rates!) 
*''Full'' output (not brief!) 
The length of the resulting ephemeris lines should be exactly 65 characters (ignoring any uncertainty hyperlinks that may be present!). If not, you picked the wrong options above. A typical ephemeris line from the MPC should like this (''this is not the target specification format!''):

{{{2004 10 27 02    01.6915    -40.095    126.8  18.7  -69.29  -2.51}}}

Once you have the NEO ephemerides displayed on your browser, select from 4 to 6 lines (spaced two hours apart) that will provide data for the entire night (so you don't have to know just when ACP will observe the NEO). Then build your ACP target specification as: 
#A 10-character target name (add spaces to make it 10-characters) 
#Exactly one space 
#The first 35 characters of the first ephemeris line (Time, RA, Dec only) 
#A "|" 
#The first 35 characters of the next ephemeris line (use the one for 2 hours later than the first) 
#... and so on, for 4 to 6 lines. 
This may seem complex, but once you get it, it's actually straightforward. Here is an example ACP plan target line for NEO A123456789 (hypothetical!) with 4 ephemeris records spaced 2 hours apart: 

^^{{{A123456789 2004 10 27 02    01.6915    -40.095|2004 10 27 04    01.6834    -40.167|2004 10 27 06    01.6689    -40.301|2004 10 27 08    01.6721    -40.462}}}^^

This target specification format is the most demanding of care and accuracy of any of ACP's target lines. The benefit is that your NEO images will be at precisely the coordinates predicted by the MPC, and if you use orbital tracking, your scope will move to track the motion of the NEO during the exposure. 
----
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|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||
|Options|##Configuration|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

// 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");

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				var defopen=lookaheadMatch[1];
				var cookiename=lookaheadMatch[2];
				var header=lookaheadMatch[3];
				var panelwidth=lookaheadMatch[4];
				var transient=lookaheadMatch[5];
				var hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (label) {
					var parts=label.trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (openlabel) {
					var parts=openlabel.trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=defopen!=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
				}
				btn.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

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

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);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		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 && (!hasClass(theSlider,'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 floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// 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")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	return false;
}
//}}}
//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		p=p.parentNode;
	}
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider 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 stop handler so sliderPanel/floatingPanel 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);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
{{borderless{
|[[Click here to open in a new browser tab|http://www.skysurvey.org]]|
<html><div align="center"><iframe src ="http://www.skysurvey.org" width="100%" align="center" height="600">< /></div></html>}}}
----
A collection of astrophotography websites from the great imagers of the modern night.

| [[Adam Block]] | Caelum Observatory and the Mount Lemmon ~SkyCenter |
| [[Rob Capon]] | Charlottesville, VA |
| [[Russell Croman]] | Fine Photographs of Celestial Wonders |
| [[R. Jay GaBany]] | Cosmotography (with pointers to numerous other astrophotographers) |
| [[Robert Gendler]] | The Universe in Color |
| [[Steve Mazlin]] | Fourth Dimension Astro-imaging |
| [[Jim Misti]] | Misti Mountain Observatory and image for you to practice on |
| [[Nick Risinger]] | The Photopic Skysurvey |
| [[Matt Russell]] | Your Digital Universe |
| [[Bill McLaughlin]] | Images from the Night Sky |
| [[Jonas Grinde]] | Large-scale annotated images of numerous galaxies and nebulae |
| [[Steve Reilly]] | Dogwood Ridge Observatory |
| [[Dean Salman]] | Deep Sky Remote Observatory |

[[Hubble Legacy Archives]] -- Archive of images collected by the Hubble Space Telescope over the years
[[Hubble Legacy Archives Tutorial]] -- Find out how to access the archive and (with practice) produce your own rendered images.
----
{{borderless{
|[[Click here to open in a new browser tab|http://weather.gc.ca/astro/clds_vis_animation_e.html?id=se&utc=00]]|
<html><div align="center"><iframe src ="http://weather.gc.ca/astro/clds_vis_animation_e.html?id=se&utc=00" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://weather.gc.ca/astro/clds_vis_animation_e.html?id=sw&utc=00]]|
<html><div align="center"><iframe src ="http://weather.gc.ca/astro/clds_vis_animation_e.html?id=sw&utc=00" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://weather.gc.ca/astro/seeing_animation_e.html?utc=00]]|
<html><div align="center"><iframe src ="http://weather.gc.ca/astro/seeing_animation_e.html?utc=00" width="100%" align="center" height="600">< /></div></html>}}}
----
|Here are weather forecasts for astronomy compiled by the Meteorological Service of Canada. Click on one of the "direction" buttons on the following pages to activate the animation controls. The first image will be one at 15h UT, followed by up to 44 subsequent images.|

| !Cloud Cover at 1-hr intervals | !Seeing at 3-hr intervals |
| [[North America (Eastern) Cloud Cover]] | [[North America Seeing]] |
| [[North America (Western) Cloud Cover]] | |

See also [[Unisys Weather]]
See also [[Local Clouds (Middle Atlantic Region)]]
----
{{borderless{
|[[Click here to open in a new browser tab|http://en.wikipedia.org/wiki/Nutation]]|
<html><div align="center"><iframe src ="http://en.wikipedia.org/wiki/Nutation" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://cfa-www.harvard.edu/iau/Ephemerides/Comets/]]|
<html><div align="center"><iframe src ="http://cfa-www.harvard.edu/iau/Ephemerides/Comets/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.cfa.harvard.edu/iau/Ephemerides/Distant/index.html]]|
<html><div align="center"><iframe src ="http://www.cfa.harvard.edu/iau/Ephemerides/Distant/index.html" width="100%" align="center" height="600">< /></div></html>}}}
----
Here are links to the ephemerides and orbital elements for currently-observable objects of the following kind:

|[[Observable Distant Minor Planets]]|
|[[Observable Comets]]|
|[[Critical-list Numbered Minor Planets]]|
|[[NEO and Unusual Minor Planets]]|
|[[List of Potentially Hazardous Asteroids]]|
----
!ACP Plan Checker
When you install ACP, an icon is placed on your desktop labeled ACP Plan Checker. This useful tool provides you a way to check an ACP Observing Plan (see [[Making Observing Plans]]) for validity before submitting it for a run. It will detect many types of errors, including invalid directives, bad coordinate or orbital element formats, missing arguments on directives. etc. It will also detect conflicting directives such as a plan with both #chain and #shutdown.

|NOTE:  The Plan Checker does not check all of the errors that are checked at run start by the ''~AcquireImages.js'' script. The Plan Checker is designed to run on a system that doesn't have ACP installed. However ''~AcquireImages.js'' by definition is running on a system with ACP, so it can do deeper checking. Be aware that Plan Checker is a good tool for detecting most errors, but you may still find more obscure errors at the start of a plan.|
!How to Use Plan Checker
Drag and drop a plan file on to the ACP Plan Checker icon (recommended for ease of use). You can also double-click the icon, in which case you'll see a popup "ease of use" message telling you that you can drag and drop and asking if you want to browse for the file. Clicking Yes will show the file browser where you can select the plan to check. Shortly thereafter, a Notepad window will appear containing either a list of errors in the plan, or if the plan is error-free, a detailed dump of the plan's observing requests. 
----
!!!Click on the links to open the web pages
|[[Global Weather]] - Satellite imagery of the Earth from various viewpoints|

|[[383 Henden fields mapped to RA/Dec]] - links to a downloadable spreadsheet with an interactive map|
|[[AAVSO]] - American Association of Variable Star Observers|
|[[AAVSO Charts]] - The AAVSO Variable Star Plotter|
|[[Aladin]] - An interactive software sky atlas allowing the user to visualize digitized astronomical images, superimpose entries from astronomical catalogues or databases, and interactively access related data and information from the Simbad database, the VizieR service and other archives for all known sources in the field|
|[["Anywhere" Plate Solver]] aka [[Astrometry.net]] - Upload your image and have it plate-solved - no starting values required. This tool is incorporated in ACP versions 7 & 8|
|[[APASS Data]] - The AAVSO Photometric ~All-Sky Survey - ~19M stars with accurate positions and accurate B, V, g', r', i' photometry|
|[[Arp Catalog]]  - The Arp Catalog of Peculiar Galaxies (1966) archive with query capability; and a link to images of each|
|[[Asteroid Occultations]] - Everything you need for observing occultations of stars by asteroids|
|[[Astronomical Catalogs and Catalog Formats]] - searching and mapping tools within 24 catalogs at the SAO Telescope Data Center|
|[[Astrophysics Source Code Library]] - free on-line registry for 600+ source codes of interest to astronomers and astrophysicists|
|[[An Atlas of O-C Diagrams of Eclipsing Binaries]] - A total of 1,140 binaries for which at least 20 minima had been timed|
|[[Auroral Ovals]] - animated graphics of the current extent and forecast position of the auroral ovals in both hemispheres|
|[[Catalog and Atlas of Cataclysmic Variables]] - contains the latest information on the cataclysmic variable stars|
|[[Center for Backyard Astrophysics]] - A global network of small telescopes dedicated to photometry of cataclysmic variables|
|[[Eclipsing Binary Times of Minima]] - A downloadable Excel spreadsheet for computing minima predictions for 2303 eclipsing binaries|
|[[Exoplanet Catalog]] - The interactive catalog of extra-Solar planets|
|[[Exoplanet Transit Database]] - Predicted transit times for exoplanets at your location|
|[[G2V Image Calibration]] - a tool (called "eXcalibrator") to identify white stars (solar-type) for white-balancing R,G,B imagery|
|[[Gamma-ray Bursters]] - The Gamma ray bursts Coordinates Network -- Notices, Circulars and Reports|
|[[Grazing Occultations]] - Predictions and maps for grazing occultations of stars by the Moon|
|[[Guide to Minor Planet Astrometry & Photometry]] - For those interested in undertaking CCD observing programs|
|[[Henden Photometry Fields]] - Reference stars for developing transformations for extinction correction and/or transforms to standard photometric systems (e.g. UBVRI), and for comparison stars for variables and comets|
|[[Hubble Legacy Archives]] - A repository for observations from most of Hubble's instruments|
|[[Hubble Legacy Archives Tutorial]] - Using FITS Liberator and Photoshop to process HLA imagery|
|[[IAU Central Bureau for Astronomical Telegrams]] - Clearinghouse for dissemination of information on transient astronomical events|
|[[IOTA]] - The International Occultation Timing Association|
|[[Landolt Special Areas Catalogs]] - UBVRI photometry of many areas of the sky along the celestial equator|
|[[List of Recent Supernovae]] - Details on supernovae that have occurred since the start of 2014|
|[[List of Stars with Confirmed Extrasolar Planets]] - There are 2004 planets listed, along with other astrophysical data for each system|
|[[JPL Small-Body Database Browser]] - JPL provides data and visualizations for all known asteroids and many comets.|
|[[Messier Marathon]] - An approach to seeing all the Messier objects in one evening!|
|[[Mikulski Archive for Space Telescopes (MAST)]] - A variety of astronomical data archives, with a primary focus on scientifically related data sets|
|[[Minor Planet Center Links (All)]]  @@color:#F00;~~^^~~NEW~~^^~~@@ - Table of Contents for all Minor Planet Center resources|
|[[Minor Planet Checker]] - a resource for comparing your observations with known minor planets|
|[[Minor Planet Ephemeris Service]] - An ephemeris generator geared toward observers|
|[[NASA Exoplanet Archive]] - NASA website for the Kepler mission|
|[[NASA Ephemeris Generator]] - NASA/JPL's HORIZON system to generate ephemerides for solar-system bodies - asteroids, comets, planetary satellites, planets, the Sun, L1, L2, select spacecraft, and system barycenters|
|[[NEO Checker]] - a resource for comparing your observations with known minor planets|
|[[NOAA Space Weather Prediction Center]] - The official U. S. Government space weather bureau|
|[[Observable Solar System Objects]] - Orbital elements and ephemerides of observable minor planets, comets, ~NEOs, distant minor planets, critical-list numbered minor planets, unusual minor planets and bright minor planets|
|[[SDSS DR13 Finding Charts]] - Returns a JPEG image centered on //(ra,dec)//, of size //(height x width)//  where the image is scaled to an arbitrary //(scale)//|
|[[Sharpless Catalog]] - The Sharpless 2nd Catalog of ~H-II Regions (1959) archive with query capability. see also [[Galaxy Map]]|
|[[SIMBAD]] - Basic data, cross-identifications, bibliography and measurements for astronomical objects outside the solar system|
|[[Sky-Map.org]] - An online, detailed star sky map|
|[[STSci Digitized Sky Survey]] - all-sky photographic survey, digitized and available in either FITS or GIF formats. Also available through [[Aladin]]|
|[[STEREO]] - 3D views of the sun and the heliosphere|
|[[Third Reference Catalog of Bright Galaxies (RC3)]]  - Galaxies with diam>1 arcmin, B-band magnitudes <15.5, and redshift<15,000 km/s|
|[[VizieR]] - Browse through the world's most complete collection of astronomical catalogs|
|[[The Whole NGC]] - Images of all 7,900 NGC galaxies from the Digitized Sky Survey|
| |
----
!!!Click on the links to open the web pages
*Earth and Weather
**[[Global Weather]]
**[[Auroral Ovals]]
*Observer's Tools
**[[Aladin]]
**[["Anywhere" Plate Solver]]
**[[Dark Sky Finder]]
**[[G2V Image Calibration]]
**[[IAU Central Bureau for Astronomical Telegrams]]
**[[Mikulski Archive for Space Telescopes (MAST)]]
**[[SIMBAD]]
**[[VizieR]]
*Catalogs & Charts
**[[AAVSO Charts]]
**[[APASS Data]]
**[[Arp Catalog]]
**[[Astronomical Catalogs and Catalog Formats]]
**[[Catalog and Atlas of Cataclysmic Variables]]
**[[Landolt Special Areas Catalogs]]
**[[SDSS DR13 Finding Charts]]
**[[Saguaro Astronomy Club (SAC) V8.1 catalog]]
**[[Sharpless Catalog]] 
**[[Sky-Map.org]]
**[[STSci Digitized Sky Survey]]
**[[Third Reference Catalog of Bright Galaxies (RC3)]]
*Photometry Standards
**[[APASS Data]]
**[[G2V Image Calibration]]
**[[Henden Photometry Fields]]
**[[Sumner Photometry Fields]]
**[[Landolt Special Areas Catalogs]]
**[[Photometry and the UCAC3 Catalog]]
*Solar System
**[[Guide to Minor Planet Astrometry & Photometry]]
**[[JPL Small-Body Database Browser]]
**[[Minor Planet Center Links (All)]]
**[[Minor Planet Checker]]
**[[Minor Planet Ephemeris Service]]
**[[NEO Checker]]
**[[Observable Solar System Objects]]
*Occultations
**[[Asteroid Occultations]]
**[[Grazing Occultations]]
*Organizations
**[[AAVSO]]
**[[Center for Backyard Astrophysics]]
**[[IOTA]]
*Stars and Milky Way
**[[An Atlas of O-C Diagrams of Eclipsing Binaries]]
**[[Eclipsing Binary Times of Minima]]
**[[Exoplanet Catalog]]
**[[Exoplanet Transit Query Service Form]]
**[[Gamma-ray Bursters]]
**[[List of Recent Supernovae]]
**[[List of Stars with Confirmed Extrasolar Planets]]
*Extragalactic
**[[Hubble Legacy Archives]]
**[[Messier Marathon]]
**[[The Whole NGC]]
*Software
**[[Astrophysics Source Code Library]]
<<accordion>>
----
Go to [[Observing Tools Online]] for more details
Pointing exposures are typically taken through a clear or open filter, and typically taken at binnings greater than 1. This maximizes the number of stars seen in the image for a given exposure time. Said another way, this ensures that there are an adequate number of stars in the image to "guarantee" that ~PinPoint will get a correct solution for the image coordinates and other astrometric values.

In order to __optimize__ the pointing exposure, it's necessary to determine the length of the exposure that yields an image with stars reaching to the magnitude limit of the available catalog used by ~PinPoint. This is done by taking a series of manual exposures through the clear filter (or no filter), at the binning determined by ACP, and seeing which time give an image matching the magnitude limit of the catalog reference.

For example, the Guide Star Catalog contains stars down to 17th magnitude. If an image's faintest detected stars are fainter than mag 17, the pointing exposure time should be decreased. Since the GSC reference catalog does not have stars fainter than mag 17, it's unnecessary to expose for an image that has stars fainter than mag 17. Likewise, if your image's faintest star is brighter than mag 17, then the pointing exposure time needs to be increased. In this case, especially with a small FOV, there may be too few stars available for solving the plate.

When the right exposure time is determined, that value is entered into the ACP/Preferences/~PinPoint tab as the "Exp. interval".
----
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/POTHHelp.html]]|
<html><div align="center"><iframe src ="RefDocs/HelpFiles/POTHHelp.html" width="100%" align="center" height="600">< /></div></html>}}}
----
<!--{{{-->
<div class='header' macro='gradient vert #300000 #900000'>
  <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 id='ContentFooter' refresh='content' tiddler='contentFooter'></div>

<!--}}}-->
/%
!info
|Name|PaletteMaker|
|Source|http://www.TiddlyTools.com/#PaletteMaker|
|Version|1.2.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|Type|transclusion|
|Description|edit/create ColorPalette using interactive grid/list|
Usage
<<<
{{{
<<tiddler PaletteMaker with: PaletteName GridName noList noGrid allowOther>>
}}}
*''~PaletteName'' (default=ColorPalette)<br>specifies a tiddler containing {{{name:value}}} slices that assign names to color values
*''~GridName'' (default=[[216-color 'web safe' grid|http://en.wikipedia.org/wiki/Web_colors#Web-safe_colors]])<br>specifies a tiddler (or section) that defines a table, where each table cell contains one of:
**a 3-digit #RGB or 6-digit #RRGGBB color value
**an [[X11 Color Name|http://en.wikipedia.org/wiki/X11_color_names]]
**another valid CSS attribute value (see ''allowOther'', below)
*''noList'' //or// ''noGrid''<br>omits the palette listbox or color grid to provide a more compact layout
*''allowOther''<br>permit non-color CSS attribute values to be entered/selected, e.g., {{{url('images/somefile.jpg')}}}
<<<
Notes:
<<<
*{{block{
You can use "-" as placeholders for the default values of ''~PaletteName'' and/or ''~GridName'':
{{{
<<tiddler PaletteMaker with: - - nogrid>>
}}}
}}}
*{{block{
The grid/list are rendered with 'float:left' styles so content that follows will be rendered next to them.  To show your content below the grid/list display, embed an //empty// 'tagClear' CSS wrapper after the PaletteMaker:
{{{
<<tiddler PaletteMaker ...>>{{tagClear{
}}} 
}}}
You can also customize the default styles contained in [[PaletteMakerStyles]]:
<<tiddler PaletteMaker##showcode with: styles>>
}}}
*The default color grid definition is:<br><<tiddler PaletteMaker##showcode with: colorgrid>>
<<<
Examples
<<<
Edit ColorPalette (allow non-color values to be entered):
{{{<<tiddler PaletteMaker with: - - allowOther>>}}}
<<tiddler PaletteMaker##show with: - - allowOther>>{{tagClear{
}}}
Create/edit NewPalette using a 16-color 'rainbow' and/or shades of gray (no list):
{{{<<tiddler PaletteMaker with: NewPalette PaletteMaker##grayscale noList>>}}}
<<tiddler PaletteMaker##show with: NewPalette PaletteMaker##grayscale noList>>
{{{<<tiddler PaletteMaker with: NewPalette PaletteMaker##rainbow noList>>}}}
<<tiddler PaletteMaker##show with: NewPalette PaletteMaker##rainbow noList>>
<<<
!showcode
<<tiddler PaletteMaker##out with: {{store.getTiddlerText('PaletteMaker##$1')}}>>
!out
{{{
$1
}}}
!end

!colorgrid
|white		||   |   |   |   |   |   |FC0|F90|F60|F30|   |   |   |   |   |   ||FFF|
|black		||9C0|   |   |   |   |C90|FC3|FC6|F96|F63|C30|   |   |   |   |C03||EEE|
|red		||CF0|CF3|330|660|990|CC0|FF0|C93|C63|300|600|900|C00|F00|F36|F03||DDD|
|orange		||9F0|CF6|9C3|663|993|CC3|FF3|960|930|633|933|C33|F33|C36|F69|F06||CCC|
|yellow		||6F0|9F6|6C3|690|996|CC6|FF6|963|630|966|C66|F66|903|C39|F6C|F09||BBB|
|green		||3F0|6F3|390|6C0|9F3|CC9|FF9|C96|C60|C99|F99|F39|C06|906|F3C|F0C||AAA|
|blue		||0C0|3C0|360|693|9C6|CF9|FFC|FC9|F93|FCC|F9C|C69|936|603|C09|303||999|
|darkmagenta	||3C3|6C6|0F0|3F3|6F6|9F9|CFC|   |   |   |C9C|969|939|909|636|606||888|
|violet		||060|363|090|393|696|9C9|   |   |   |FCF|F9F|F6F|F3F|F0F|C6C|C3C||777|
|darkred	||030|0C3|063|396|6C9|9FC|CFF|39F|9CF|CCF|C9F|96C|639|306|90C|C0C||666|
|darkorange	||0F3|3F6|093|0C6|3F9|9FF|9CC|06C|69C|99F|99C|93F|60C|609|C3F|C0F||555|
|gold		||0F6|6F9|3C6|096|6FF|6CC|699|036|369|66F|66C|669|309|93C|C6F|90F||444|
|darkgreen	||0F9|6FC|3C9|3FF|3CC|399|366|069|039|33F|33C|339|336|63C|96F|60F||333|
|darkblue	||0FC|3FC|0FF|0CC|099|066|033|39C|36C|00F|00C|009|006|003|63F|30F||222|
|indigo		||0C9|   |   |   |   |09C|3CF|6CF|69F|36F|03C|   |   |   |   |30C||111|
|darkviolet	||   |   |   |   |   |   |0CF|09F|06F|03F|   |   |   |   |   |   ||000|
!grayscale
|FFF|EEE|DDD|CCC|BBB|AAA|999|888|777|666|555|444|333|222|111|000|
!rainbow
|black|white|red|orange|yellow|green|blue|darkmagenta|violet|darkred|darkorange|gold|darkgreen|darkblue|indigo|darkviolet|
!end

!styles
/*{{{*/
.colorgrid table
	{ float:left; margin:0 !important; border:0 !important; }
.colorgrid table, .colorgrid tr, .colorgrid th, .colorgrid tbody
	{ color:black; border:0 !important; }
.colorgrid td
	{ height:16px; width:16px; text-align:center; padding:0; line-height:100%; }
.colorgrid select
	{ float:left; margin-left:16px; font-size:80%; height:255px; }
/*}}}*/
!end

!code
<<tiddler {{
config.shadowTiddlers.PaletteMakerStyles=store.getTiddlerText('PaletteMaker##styles');
setStylesheet(store.getTiddlerText('PaletteMakerStyles'),'paletteMakerStyles');
window.paletteMaker = {
	getColor: function(t){ if (!t||!t.length) return null;
		var s=document.createElement('span').style;
		try { s.color='#'+t; if (s.color.length) return '#'+t; }
		catch(e) { try{ s.color=t; } catch(e){ return null; } return t; } // IE 
		s.color=t; return s.color.length?t:null; // FF
	},
	getTextColor: function(t){ 
		t=this.getColor(t);
		if (!t||!t.length||!t.startsWith('#')) return 'black'; // BAD COLOR or X11 COLOR NAME
		var rgb=t.substr(1).split(''); var long=t.length>=6;
		function h2d(h){return '0123456789ABCDEF'.indexOf(h?h.toUpperCase():'');};
		var r=h2d(rgb[0]); var g=h2d(rgb[long?2:1]); var b=h2d(rgb[long?4:2]);
		if (r<0||g<0||b<0||r+g+b>=15) return 'black'; // BAD RGB or BRIGHT COLOR
		return 'white'; // DARK COLOR
	},
	getPalette: function(palette) {
		var pal={};
		var slices=store.calcAllSlices(palette);
		for (var s in slices) {
			var color=slices[s].toUpperCase().replace(/#/,'');
			if (!pal[color]) pal[color]=new Array();
			pal[color].push(s);
		}
		return pal;
	},
	drawGrid: function(place,grid,palette,opts) {
		var pm=window.paletteMaker; // abbrev
		removeChildren(place);
		if (!opts.contains('NOGRID')) wikify(store.getTiddlerText(grid,''),place);
		if (!opts.contains('NOLIST')) var s=pm.drawList(place,
			{ palette:palette,min:0,max:0,edit:true,callback:pm.callback,place:place,opts:opts });
		var pal=pm.getPalette(palette);
		var cells=place.getElementsByTagName('td');
		for (var i=0; i<cells.length; i++) { var td=cells[i];
			td.style.border=0;
			var txt=getPlainText(td).trim(); if (!txt.length) continue;
			var c=pm.getColor(txt); if (!c && !opts.contains('ALLOWOTHER')) continue;
			if (c) { td.style.backgroundColor=c; td.innerHTML=''; td.style.fontSize='70%'; }
			td.title=c||txt;
			td.style.cursor=c?'crosshair':'pointer';
			td.params={ palette:palette, min:0, max:15, edit:true, callback:pm.callback,
				place:place, grid:grid,	opts:opts, pick:c||txt };
			if (pal[txt.toUpperCase()]) {
				td.params.names=pal[txt.toUpperCase()];
				td.title+='='+td.params.names.join(', ');
				if (c) { td.style.color=pm.getTextColor(c); td.innerHTML='&radic;'; }
			}
			td.onclick=function(ev) { ev=ev||window.event;
				var p=Popup.create(this); if(!p)return false;
				p.className+=' sticky smallform';
				var s=window.paletteMaker.drawList(p,this.params);
				s.style.fontSize='80%'; Popup.show(); s.focus();
				ev.cancelBubble=true; if(ev.stopPropagation)ev.stopPropagation();
				return false;
			};
		}
	},
	drawList: function(here,p) {
		var pm=window.paletteMaker; // abbrev
		var s=createTiddlyElement(here,'select');
		s.params=p;
		s.options[s.length]=new Option(p.palette+':','_view');
		s.options[s.length-1].title='open '+p.palette;
		if (p.edit && p.pick!==undefined) {
			var c=pm.getColor(p.pick);
			s.options[s.length]=new Option('+Add this color...','_add');
			if (c) s.options[s.length-1].style.backgroundColor=c;
			if (c) s.options[s.length-1].style.color=pm.getTextColor(c);
			s.options[s.length-1].title=p.pick;
		}
		var colors=store.calcAllSlices(p.palette);
		for (var x in colors) {
			var c=pm.getColor(colors[x]);
			var prefix=p.names&&p.names.contains(x)?'=':'\xA0\xA0';
			s.options[s.length]=new Option(prefix+x,colors[x]);
			if (c) s.options[s.length-1].style.backgroundColor=c;
			if (c) s.options[s.length-1].style.color=pm.getTextColor(c)
			s.options[s.length-1].title=(!c?'other: "':'')+colors[x]+(!c?'"':'');
		}
		s.size=p.min&&s.length<p.min?p.min:p.max&&s.length>p.max?p.max:s.length;
		s.onclick=function(ev){ ev=ev||window.event;
			var name=this.options[this.selectedIndex].text.replace(/[\xA0=]+/,'').trim();
			if (this.params.callback) this.params.callback(this,name,this.value,this.params);
			return false;
		};
		s.onkeyup=function(ev){ ev=ev||window.event;
			if (ev.keyCode==13) { this.onclick(); Popup.remove(); }
			if (ev.keyCode==27) Popup.remove();
			return false;
		};
		return s;
	},
	callback: function(here,name,val,p){
		var pm=window.paletteMaker; // abbrev
		if (!val.length) return;
		var pick=p.pick!==undefined?p.pick:val;
		if (val=='_view') {
			story.displayTiddler(story.findContainingTiddler(this.place),p.palette);
			Popup.remove();
			return false;
		} else if (val=='_add') {
			var msg='Enter a new name for "'+pick+'"';
			name=prompt(msg,'');
			var slices=store.calcAllSlices(p.palette);
			while (name && slices[name])
				name=prompt('"'+name+'" is already in use\n'+msg,name);
		} else if (p.edit) {
			var allow=p.opts.contains('ALLOWOTHER');
			var msg='Change "'+name+'" from "'+val+'" to:';
			pick=prompt(msg,pick);
			while (pick && !pm.getColor(pick)) {
				var err='"'+pick+'" is not a recognized color\n\xa0';
				if (!allow) err+='Please try again\n\n';
				else err+='Press OK to use this value anyway\n\n';
				var pre=pick; pick=prompt(err+msg,pick);
				if (pre==pick && allow) break;
			}
		} else {
			// TBD: callback without editing
			Popup.remove();	return false;
		}
		here.selectedIndex=0;
		if (!name||!pick) return false;
		pm.set(p.palette,name.replace(/ /g,''),pick);
		pm.drawGrid(p.place,p.grid,p.palette,p.opts);
		Popup.remove();
		return false;
	},
	set: function(palette,name,newval) {
		var tid=store.getTiddler(palette);
		if (!tid) { var tid=new Tiddler(); tid.text=store.getTiddlerText(palette,''); }
		var oldval=store.getTiddlerSlice(palette,name)||'';
		var pattern="((?:^|\\n)(?:[\\'\\/]{0,2})~?(?:"
			+name.escapeRegExp()
			+")\\1\\:[\\t\\x20]*)(?:"
			+oldval.escapeRegExp()
			+")([\\t\\x20]*(?:\\n|$))";
		var t=tid.text; var match=t.match(new RegExp(pattern));
		if (match) {
			var pos=t.indexOf(match[0]);
			var newText=t.substr(0,pos)+
				match[1]+newval+match[2]+
				t.substr(pos+match[0].length);
		} else { // place new slice at top of list or start of tiddler
			var match=t.match(store.slicesRE);
			var pos=t.indexOf(match?match[0]:'');
			var newText=t.substr(0,pos)
				+name+': '+newval+(t.length?'\n':'')
				+t.substr(pos);
		}
		var who=config.options.txtUserName; var when=new Date();
		if (config.options.chkForceMinorUpdate)
			{ var who=tid.modifier; var when=tid.modified; }
		displayMessage('setting "'+palette+'::'+name+'" to "'+newval+'"');
		store.saveTiddler(palette,palette,newText,who,when,tid.tags,tid.fields);
		story.refreshTiddler(palette,null,true);
	}
};
'';}}>>
!end

!show
<<tiddler {{
	var opts=[]
	var palette=('$1'!='$'+'1' && '$1'!='-')?'$1':'ColorPalette';
	var grid   =('$2'!='$'+'2' && '$2'!='-')?'$2':'PaletteMaker##colorgrid';
	opts.push('$3'.toUpperCase());
	opts.push('$4'.toUpperCase());
	opts.push('$5'.toUpperCase());
	if (!place.lastChild||!hasClass(place.lastChild,'colorgrid')) {
		var wrapper=createTiddlyElement(place,'span',null,'colorgrid');
		window.paletteMaker.drawGrid(wrapper,grid,palette,opts);
	}
'';}}>>
!end

%/<<tiddler PaletteMaker##code>>/%
%/<<tiddler {{var src='PaletteMaker'; src+(tiddler&&tiddler.title==src?'##info':'##show');}}
	with: [[$1]] [[$2]] [[$3]] [[$4]] [[$5]]>>
{{borderless{
|[[Click here to open in a new browser tab|http://en.wikipedia.org/wiki/Parallax#Stellar_parallax]]|
<html><div align="center"><iframe src ="http://en.wikipedia.org/wiki/Parallax#Stellar_parallax" width="100%" align="center" height="600">< /></div></html>}}}
----
|NOTE: Clicking on the plot below does not work.|
{{borderless{
|[[Click here to open in a new browser tab|http://quasars.org/docs/USNO_Landolt.htm]]|
<html><div align="center" style="background-color:white"><iframe src ="http://quasars.org/docs/USNO_Landolt.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
The [[UCAC3 Reference]] Catalog contains 100,766,420 stars in the range of (red) magnitude 7.5 to 16.3. It covers the whole sky. Of all the catalogs typically available to professional and amateur astronomers, the ~UCAC3 has one of the best, most uniform positional accuracies, in the neighborhood of &plusmn;20 milliarcseconds for any single object. But like most astrometric catalogs, the ~UCAC3 magnitudes are not photometrically accurate, with accuracies typically &plusmn;0.1 mag (m~~R~~). 

John Farrell determined the transformation to Johnson V and R magnitudes from ~UCAC3 aperture magnitudes, by comparing the ~UCAC3 catalog values of aperture magnitude with the Landolt V magnitudes, using the (~J-K) magnitudes derived from the 2MASS catalog as a color term, and then fitting an ordinary, photometric transformation equation of the form below to that data. His result for "V" is:

{{indent{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V = 0.939 ~~X~~ aMag~~~UCAC3~~ + 0.623 ~~X~~ (J~~2MASS~~ - K~~2MASS~~) + 0.512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)

with a similar relation for R: 

{{indent{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R = 0.940 ~~X~~ aMag~~~UCAC3~~ - 0.306 ~~X~~ (J~~2MASS~~ - K~~2MASS~~) + 0.480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)

aMag, J and K are all values available in the ~UCAC3 catalog. 

He writes: 

"Here, ''aMag'' is the ~UCAC3 aperture magnitude.  There is little difference between using the model magnitudes (fMag), but the aperture scatter seemed a little less at the faint magnitudes. Figure 1 is a summary of the results. The upper plot compares ~UCAC3 - V~~LANDOLT~~ with the fitted ~V-V~~LANDOLT~~. The lower plot is the same for R.  As you can see, the ~UCAC3 magnitude is quite close to V, and the fit significantly reduced the scatter because of the use of the color term. The ~UCAC3 magnitudes below V = 11&frac12;-12 appear to be systematically lower than the fainter ones. The ~UCAC3 magnitudes were calibrated with the Tycho II B~~T~~ and V~~T~~ magnitudes, which are all brighter than magnitude 12. Also, ~UCAC3 magnitudes brighter than 10 are suspect because of possible saturation so there was only a narrow magnitude range of Tycho II stars available for calibration."

|[img[refDocs/VRfits.jpg]]|
~~FIGURE 1.~~

"There is also a slight slope to the R data, which is easier to see since the scatter is smaller.  For R, the ~UCAC3 magnitudes are about 0.5 mag high, probably because the majority of stars in the Landolt catalog are reddish. The fit does a pretty good job of computing the proper magnitude.  I recall that Astrometrica simply adds 0.4 to the ~UCAC3 magnitudes to get R, which is not bad." Considering the scatter in the ~UCAC3 data and usually not knowing the colors of asteroids or other unknown objects, this transformation is good enough where precision photometry is not required.

In addition to John's work in this area, another study, [[Deriving a V Magnitude from UCAC3]], uses the LONEOS photometric catalog to supplement the Landolt standards. The LONEOS contains 17,000 stars, including all the Landolt standards, from various publications of photometry of open clusters, and magnitudes of AAVSO comparison stars. The author of this work, Hristo Pavlov, derived the following transformation:

{{indent{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V = 0.9166 ~~X~~ aMag~~~UCAC3~~ + 0.529 ~~X~~ (J~~2MASS~~ - K~~2MASS~~) + 0.83 &plusmn; 0.08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)

Figure 2 is the plot of this data:

|[img[refDocs/PavlovV.jpg]]|
~~FIGURE 2.~~

Figure 3 compares the same 476 ~UCAC3 stars using Farrell's computed V (blue dots) and Pavlov's computed V (red dots), using highly accurate Landolt photometry as the "known" V magnitude. The vertical axis is the difference of the V magnitude computed from equations (1) and (3) above, and the Landolt V, and the horizontal axis is the Landolt V magnitude. 

|[img[refDocs/PF-Comp.jpg]]|
~~FIGURE 3.~~
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
{{borderless{
|[[Click here to open in a new browser tab|http://brucegary.net/dummies/x.htm]]|
<html><div align="center"><iframe src ="http://brucegary.net/dummies/x.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
|!This is an HTML rendering of the ~PinPoint Programmer's Reference Help File that is provided with the ACP v8.1 and Visual ~PinPoint v6.0 software.|
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/PinPoint.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/PinPoint.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 1999-2013, Robert B. Denny, Mesa AZ^^
The term "residual" comes from the mathematical/statistical processes used to calculate the plate solution - that is, the plate scale, the orientation, the center coordinates, and the distortions of the image. In the FITS header, these terms are captured with names like "~CRVAL1," "~CDELT2" and the like, or "~CD1_1," etc. These terms are described in more detail in the document called [[FITS World Coordinate System]] (WCS).

The residuals are computed after the WCS plate solution is determined. It's a measure of how well that solution fits all the positions of the stars that were used in finding the solution. If the residual would be equal to zero, it would mean that the plate solution is perfect and fits the existing data exactly without any statistical errors. In practice, the actual residual will never be zero because we're talking about a statistical process. Usually there are many more reference stars available than are necessary, so the solution is "overdetermined." As a result, the residuals give one a sense of what the error is likely to be for any other "unknown" object's coordinates - for example, the position of an observed asteroid.  When the plate solution is derived from very few known stars, the residuals are likely to be larger than they would be when many stars are used in the solution. This increases the uncertainty in unknown objects' coordinates.

   Different images for the same star fields also result in different RA/DEC positions for the same objects, by small amounts. For example, with 25 images of the same object, the positions of the object are all slightly different. This comes about because each plate solution will always be slightly different for each image due to the different properties of each image, again in the numerical way described above.
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/PipeHubHelp.html]]|
<html><div align="center"><iframe src ="RefDocs/HelpFiles/PipeHubHelp.html" width="100%" align="center" height="600">< /></div></html>}}}
----
from: ''Mike Dodd''
----
{{borderless{
|[[Click here to open in a new browser tab|http://astronomy.mdodd.com/planalyzer.html]]|
<html><div align="center"><iframe src ="http://astronomy.mdodd.com/planalyzer.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://planewave.com/technology/software/]]|
<html><div align="center" style="background-color:white"
><iframe src ="http://planewave.com/technology/software/" width="100%" align="center" height="600">< /></div></html>}}}
----
/***
|Name|PlayerPlugin|
|Source|http://www.TiddlyTools.com/#PlayerPlugin|
|Version|1.1.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Embed a media player in a tiddler|
!!!!!Usage
<<<
{{{<<player [id=xxx] [type] [URL] [width] [height] [autoplay|true|false] [showcontrols|true|false] [extras]>>}}}

''id=xxx'' is optional, and specifies a unique identifier for each embedded player.  note: this is required if you intend to display more than one player at the same time.

''type'' is optional, and is one of the following: ''windows'', ''realone'', ''quicktime'', ''flash'', ''image'' or ''iframe''.  If the media type is not specified, the plugin automatically detects Windows, Real, QuickTime, Flash video or JPG/GIF images by matching known file extensions and/or specialized streaming-media transfer protocols (such as RTSP:).  For unrecognized media types, the plugin displays an error message.

''URL'' is the location of the media content

''width'' and ''height'' are the dimensions of the video display area (in pixels)

''autoplay'' or ''true'' or ''false'' is optional, and specifies whether the media content should begin playing as soon as it is loaded, or wait for the user to press the "play" button.  Default is //not// to autoplay.

''showcontrols'' or ''true'' or ''false'' is optional, and specifies whether the embedded media player should display its built-in control panel (e.g., play, pause, stop, rewind, etc), if any.  Default is to display the player controls.

''extras'' are optional //pairs// of parameters that can be passed to the embedded player, using the {{{<param name=xxx value=yyy>}}} HTML syntax.

''If you use [[AttachFilePlugin]] to encode and store a media file within your document, you can play embedded media content by using the title of the //attachment tiddler//'' as a parameter in place of the usual reference to an external URL.  When playing an attached media content, you should always explicitly specify the media type parameter, because the name used for the attachment tiddler may not contain a known file extension from which a default media type can be readily determined.
<<<
!!!!!Configuration
<<<
Default player size:
width: <<option txtPlayerDefaultWidth>> height: <<option txtPlayerDefaultHeight>>
<<<
!!!!!Examples
<<<
+++[Windows Media]...
Times Square Live Webcam
{{{<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>}}}
<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>
===
+++[RealOne]...
BBC London: Live and Recorded news
{{{<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>}}}
<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>
===
+++[Quicktime]...
America Free TV: Classic Comedy
{{{<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>}}}
<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>
===
+++[Flash]...
Asteroids arcade game
{{{<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>}}}
<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>
Google Video
{{{<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774               400 326>>}}}
<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774               400 326>>
YouTube Video
{{{<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>}}}
<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>
===
+++[Still Images]...
GIF (best for illustrations, animations, diagrams, etc.)
{{{<<player id=7 image images/meow.gif auto auto>>}}}
<<player id=7 image images/meow.gif auto auto>>
JPG (best for photographs, scanned images, etc.)
{{{<<player id=8 image images/meow2.jpg 200 150>>}}}
<<player id=8 image images/meow2.jpg 200 150>>
===
<<<
!!!!!Revisions
<<<
2008.05.10 [1.1.4] in handlers(), immediately return if no params (prevents error in macro).  Also, refactored auto-detect code to make type mapping configurable.
2007.10.15 [1.1.3] in loadURL(), add recognition for .PNG (still image), fallback to iframe for unrecognized media types
2007.08.31 [1.1.2] added 'click-through' link for JPG/GIF images
2007.06.21 [1.1.1] changed "hidecontrols" param to "showcontrols" and recognize true/false values in addition to 'showcontrols', added "autoplay" param (also recognize true/false values), allow "auto" as value for type param
2007.05.22 [1.1.0] added support for type=="iframe" (displays src URL in an IFRAME)
2006.12.06 [1.0.1] in handler(), corrected check for config.macros.attach (instead of config.macros.attach.getAttachment) so that player plugin will work when AttachFilePlugin is NOT installed.  (Thanks to Phillip Ehses for bug report)
2006.11.30 [1.0.0] support embedded media content using getAttachment() API defined by AttachFilePlugin or AttachFilePluginFormatters.  Also added support for 'image' type to render JPG/GIF still images
2006.02.26 [0.7.0] major re-write.  handles default params better.  create/recreate player objects via loadURL() API for use with interactive forms and scripts.
2006.01.27 [0.6.0] added support for 'extra' macro params to pass through to object parameters
2006.01.19 [0.5.0] Initial ALPHA release
2005.12.23 [0.0.0] Started
<<<
!!!!!Code
***/
//{{{
version.extensions.PlayerPlugin= {major: 1, minor: 1, revision: 4, date: new Date(2008,5,10)};

config.macros.player = {};
config.macros.player.html = {};
config.macros.player.handler= function(place,macroName,params) {
	if (!params.length) return; // missing parameters - do nothing
	var id=null;
	if (params[0].substr(0,3)=="id=") id=params.shift().substr(3);
	var type="";
	if (!params.length) return; // missing parameters - do nothing
	var p=params[0].toLowerCase();
	if (p=="auto" || p=="windows" || p=="realone" || p=="quicktime" || p=="flash" || p=="image" || p=="iframe")
		type=params.shift().toLowerCase();
	var url=params.shift(); if (!url || !url.trim().length) url="";
	if (url.length && config.macros.attach!=undefined) // if AttachFilePlugin is installed
		if ((tid=store.getTiddler(url))!=null && tid.isTagged("attachment")) // if URL is attachment
			url=config.macros.attach.getAttachment(url); // replace TiddlerTitle with URL
	var width=params.shift();
	var height=params.shift();
	var autoplay=false;
	if (params[0]=='autoplay'||params[0]=='true'||params[0]=='false')
		autoplay=(params.shift()!='false');
	var show=true;
	if (params[0]=='showcontrols'||params[0]=='true'||params[0]=='false')
		show=(params.shift()!='false');
	var extras="";
	while (params[0]!=undefined)
		extras+="<param name='"+params.shift()+"' value='"+params.shift()+"'> ";
	this.loadURL(place,id,type,url,width,height,autoplay,show,extras);
}

if (config.options.txtPlayerDefaultWidth==undefined) config.options.txtPlayerDefaultWidth="100%";
if (config.options.txtPlayerDefaultHeight==undefined) config.options.txtPlayerDefaultHeight="480"; // can't use "100%"... player height doesn't stretch right :-(

config.macros.player.typeMap={
	windows: ['mms', '.asx', '.wvx', '.wmv', '.mp3'],
	realone: ['rtsp', '.ram', '.rpm', '.rm', '.ra'],
	quicktime: ['.mov', '.qt'],
	flash: ['.swf', '.flv'],
	image: ['.jpg', '.gif', '.png'],
	iframe: ['.htm', '.html', '.shtml', '.php']
};

config.macros.player.loadURL=function(place,id,type,url,width,height,autoplay,show,extras) {

	if (id==undefined) id="tiddlyPlayer";
	if (!width) var width=config.options.txtPlayerDefaultWidth;
	if (!height) var height=config.options.txtPlayerDefaultHeight;
	if (url && (!type || !type.length || type=="auto")) { // determine type from URL
		u=url.toLowerCase();
		var map=config.macros.player.typeMap;
		for (var t in map) for (var i=0; i<map[t].length; i++)
			if (u.indexOf(map[t][i])!=-1) var type=t;
	}
	if (!type || !config.macros.player.html[type]) var type="none";
	if (!url) var url="";
	if (show===undefined) var show=true;
	if (!extras) var extras="";
	if (type=="none" && url.trim().length) type="iframe"; // fallback to iframe for unrecognized media types

	// adjust parameter values for player-specific embedded HTML
	switch (type) {
		case "windows":
			autoplay=autoplay?"1":"0"; // player-specific param value
			show=show?"1":"0"; // player-specific param value
			break;
		case "realone":
			autoplay=autoplay?"true":"false";
			show=show?"block":"none";
			height-=show?60:0; // leave room for controls
			break;
		case "quicktime":
			autoplay=autoplay?"true":"false";
			show=show?"true":"false";
			break;
		case "image":
			show=show?"block":"none";
			break;
		case "iframe":
			show=show?"block":"none";
			break;
	}

	// create containing div for player HTML
	// and add or replace player in TW DOM structure
	var newplayer = document.createElement("div");
	newplayer.playerType=type;
	newplayer.setAttribute("id",id+"_div");
	var existing = document.getElementById(id+"_div");
	if (existing && !place) place=existing.parentNode;
	if (!existing)
		place.appendChild(newplayer);
	else {
		if (place==existing.parentNode) place.replaceChild(newplayer,existing)
		else { existing.parentNode.removeChild(existing); place.appendChild(newplayer); }
	}

	var html=config.macros.player.html[type];
	html=html.replace(/%i%/mg,id);
	html=html.replace(/%w%/mg,width);
	html=html.replace(/%h%/mg,height);
	html=html.replace(/%u%/mg,url);
	html=html.replace(/%a%/mg,autoplay);
	html=html.replace(/%s%/mg,show);
	html=html.replace(/%x%/mg,extras);
	newplayer.innerHTML=html;
}
//}}}

// // Player-specific API functions: isReady(id), isPlaying(id), toggleControls(id), showControls(id,flag)

//{{{
// status values:
// Windows: 0=Undefined, 1=Stopped, 2=Paused, 3=Playing, 4=ScanForward, 5=ScanReverse
//          6=Buffering, 7=Waiting, 8=MediaEnded, 9=Transitioning, 10=Ready, 11=Reconnecting
// RealOne: 0=Stopped, 1=Contacting, 2=Buffering, 3=Playing, 4=Paused, 5=Seeking
// QuickTime: 'Waiting', 'Loading', 'Playable', 'Complete', 'Error:###'
// Flash: 0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete
config.macros.player.isReady=function(id)
{
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') return !((p.playState==0)||(p.playState==7)||(p.playState==9)||(p.playState==11));
	if (d.playerType=='realone') return (p.GetPlayState()>1);
	if (d.playerType=='quicktime') return !((p.getPluginStatus()=='Waiting')||(p.getPluginStatus()=='Loading'));
	if (d.playerType=='flash') return (p.ReadyState>2);
	return true;
}
config.macros.player.isPlaying=function(id)
{
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') return (p.playState==3);
	if (d.playerType=='realone') return (p.GetPlayState()==3);
	if (d.playerType=='quicktime') return (p.getPluginStatus()=='Complete');
	if (d.playerType=='flash') return (p.ReadyState<4);
	return false;
}
config.macros.player.showControls=function(id,flag) {
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') { p.ShowControls=flag; p.ShowStatusBar=flag; }
	if (d.playerType=='realone') { alert('show/hide controls not available'); }
	if (d.playerType=='quicktime')      // if player not ready, retry in one second
		{ if (this.isReady(id)) p.setControllerVisible(flag); else setTimeout('config.macros.player.showControls("'+id+'",'+flag+')',1000); }
	if (d.playerType=='flash') { alert('show/hide controls not available'); }
}
config.macros.player.toggleControls=function(id) {
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') var flag=!p.ShowControls;
	if (d.playerType=='realone') var flag=true; // TBD
	if (d.playerType=='quicktime') var flag=!p.getControllerVisible();
	if (d.playerType=='flash') var flag=true; // TBD
	this.showControls(id,flag);
}
config.macros.player.fullScreen=function(id) {
	var d=document.getElementById(id+"_div"); if (!d) return false;
	var p=document.getElementById(id); if (!p) return false;
	if (d.playerType=='windows') p.DisplaySize=3;
	if (d.playerType=='realone') p.SetFullScreen();
	if (d.playerType=='quicktime') { alert('full screen not available'); }
	if (d.playerType=='flash') { alert('full screen not available'); }
}
//}}}

// // Player HTML

//{{{
// placeholder (no player)
config.macros.player.html.none=' \
	<table id="%i%" width="%w%" height="%h%" style="background-color:#111;border:0;margin:0;padding:0;"> \
	<tr style="background-color:#111;border:0;margin:0;padding:0;"> \
	<td width="%w%" height="%h%" style="background-color:#111;color:#ccc;border:0;margin:0;padding:0;text-align:center;"> \
	&nbsp; \
	%u% \
	&nbsp; \
	</td></tr></table>';
//}}}

//{{{
// JPG/GIF/PNG still images
config.macros.player.html.image='\
	<a href="%u%" target="_blank"><img width="%w%" height="%h%" style="display:%s%;" src="%u%"></a>';
//}}}

//{{{
// IFRAME web page viewer
config.macros.player.html.iframe='\
	<iframe id="%i%" width="%w%" height="%h%" style="display:%s%;background:#fff;" src="%u%"></iframe>';
//}}}

//{{{
// Windows Media Player
// v7.1 ID: classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6
// v9	ID: classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95
config.macros.player.html.windows=' \
	<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;width:%w%;height:%h%px;" \
		classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" \
		codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" \
		align="baseline" border="0" \
		standby="Loading Microsoft Windows Media Player components..." \
		type="application/x-oleobject"> \
		<param name="FileName" value="%u%"> <param name="ShowControls" value="%s%"> \
		<param name="ShowPositionControls" value="1"> <param name="ShowAudioControls" value="1"> \
		<param name="ShowTracker" value="1"> <param name="ShowDisplay" value="0"> \
		<param name="ShowStatusBar" value="1"> <param name="AutoSize" value="1"> \
		<param name="ShowGotoBar" value="0"> <param name="ShowCaptioning" value="0"> \
		<param name="AutoStart" value="%a%"> <param name="AnimationAtStart" value="1"> \
		<param name="TransparentAtStart" value="0"> <param name="AllowScan" value="1"> \
		<param name="EnableContextMenu" value="1"> <param name="ClickToPlay" value="1"> \
		<param name="InvokeURLs" value="1"> <param name="DefaultFrame" value="datawindow"> \
		%x% \
		<embed src="%u%" style="margin:0;padding:0;width:%w%;height:%h%px;" \
			align="baseline" border="0" width="%w%" height="%h%" \
			type="application/x-mplayer2" \
			pluginspage="http://www.microsoft.com/windows/windowsmedia/download/default.asp" \
			name="%i%" showcontrols="%s%" showpositioncontrols="1" \
			showaudiocontrols="1" showtracker="1" showdisplay="0" \
			showstatusbar="%s%" autosize="1" showgotobar="0" showcaptioning="0" \
			autostart="%a%" autorewind="0" animationatstart="1" transparentatstart="0" \
			allowscan="1" enablecontextmenu="1" clicktoplay="0" invokeurls="1" \
			defaultframe="datawindow"> \
		</embed> \
	</object>';
//}}}

//{{{
// RealNetworks' RealOne Player
config.macros.player.html.realone=' \
	<table width="%w%" style="border:0;margin:0;padding:0;"><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \
	<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \
		CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \
		<PARAM NAME="CONSOLE" VALUE="player"> \
		<PARAM NAME="CONTROLS" VALUE="ImageWindow"> \
		<PARAM NAME="AUTOSTART" Value="%a%"> \
		<PARAM NAME="MAINTAINASPECT" Value="true"> \
		<PARAM NAME="NOLOGO" Value="true"> \
		<PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \
		<PARAM NAME="SRC" VALUE="%u%"> \
		%x% \
		<EMBED width="%w%" height="%h%" controls="ImageWindow" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;" \
			name="%i%" \
			src="%u%" \
			console=player \
			maintainaspect=true \
			nologo=true \
			backgroundcolor=#333333 \
			autostart=%a%> \
		</OBJECT> \
	</td></tr><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \
	<object id="%i%_controls" width="%w%" height="60" style="margin:0;padding:0;display:%s%" \
		CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \
		<PARAM NAME="CONSOLE" VALUE="player"> \
		<PARAM NAME="CONTROLS" VALUE="All"> \
		<PARAM NAME="NOJAVA" Value="true"> \
		<PARAM NAME="MAINTAINASPECT" Value="true"> \
		<PARAM NAME="NOLOGO" Value="true"> \
		<PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \
		<PARAM NAME="SRC" VALUE="%u%"> \
		%x% \
		<EMBED WIDTH="%w%" HEIGHT="60" NOJAVA="true" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;display:%s%" \
			controls="All" \
			name="%i%_controls" \
			src="%u%" \
			console=player \
			maintainaspect=true \
			nologo=true \
			backgroundcolor=#333333> \
		</OBJECT> \
	</td></tr></table>';
//}}}

//{{{
// QuickTime Player
config.macros.player.html.quicktime=' \
	<OBJECT ID="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \
		CLASSID="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" \
		CODEBASE="http://www.apple.com/qtactivex/qtplugin.cab"> \
		<PARAM name="SRC" VALUE="%u%"> \
		<PARAM name="AUTOPLAY" VALUE="%a%"> \
		<PARAM name="CONTROLLER" VALUE="%s%"> \
		<PARAM name="BGCOLOR" VALUE="#333333"> \
		<PARAM name="SCALE" VALUE="aspect"> \
		<PARAM name="SAVEEMBEDTAGS" VALUE="true"> \
		%x% \
		<EMBED name="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \
			SRC="%u%" \
			AUTOPLAY="%a%" \
			SCALE="aspect" \
			CONTROLLER="%s%" \
			BGCOLOR="#333333" \
			EnableJavaSript="true" \
			PLUGINSPAGE="http://www.apple.com/quicktime/download/"> \
		</EMBED> \
	</OBJECT>';
//}}}

//{{{
// Flash Player
config.macros.player.html.flash='\
	<object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \
		classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" \
		codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"> \
		<param name="movie" value="%u%"> \
		<param name="quality" value="high"> \
		<param name="SCALE" value="exactfit"> \
		<param name="bgcolor" value="333333"> \
		%x% \
		<embed name="%i%" src="%u%" style="margin:0;padding:0;" \
			height="%h%" width="%w%" quality="high" \
			pluginspage="http://www.macromedia.com/go/getflashplayer" \
			type="application/x-shockwave-flash" scale="exactfit"> \
		</embed> \
	</object>';
//}}}
<<plugins>>
{{borderless{
|[[Click here to open in a new browser tab|http://en.wikipedia.org/wiki/Precession_of_the_equinoxes]]|
<html><div align="center"><iframe src ="http://en.wikipedia.org/wiki/Precession_of_the_equinoxes" width="100%" align="center" height="600">< /></div></html>}}}
----
/***
|Name|PreviewPlugin|
|Source|http://www.TiddlyTools.com/#PreviewPlugin|
|Documentation|http://www.TiddlyTools.com/#PreviewPluginInfo|
|Version|1.8.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|add key-by-key wikified preview to any textarea input field|
Provides key-by-key ''LIVE PREVIEW'' of //formatted// tiddler content as you type input into a textarea (multi-line) edit field.
!!!!!Documentation
>see [[PreviewPluginInfo]]
!!!!!Configuration
<<<
Automatically freeze preview updates when a tiddler takes more than <<option txtPreviewAutoFreeze>> milliseconds to render.
<<<
!!!!!Revisions
<<<
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.11.18 [1.8.1] in config.commands.previewTiddler, changed alt command text to use character-based "psuedo-checkbox" instead of embedded html fragment
2007.09.27 [1.8.0] split TidIDE preview functionality into separate stand-alone plugin (see [[TidIDEPlugin]]).  
|please see [[TidIDEPluginInfo]] for additional revision details|
2006.04.15 [0.5.0] Initial ALPHA release. Converted from inline script.
<<<
!!!!!Code
***/
// // version info
//{{{
version.extensions.PreviewPlugin= {major: 1, minor: 8, revision: 1, date: new Date(2007,11,18)};
//}}}

// //  macro definition
//{{{
if (config.options.txtPreviewAutoFreeze==undefined)
	config.options.txtPreviewAutoFreeze=250; // limit (in milliseconds) for auto-freezing preview display

config.macros.preview = {
	renderMsg: "rendering preview...",
	timeoutMsg: " (> %0ms)",
	freezeMsg: " - preview is frozen.  Press [refresh] to re-display.",
	handler: function(place,macroName,params) {
		var hide=params[0]=="hide"; if (hide) params.shift();
		var field=params[0];
		var height=params[1]; if (!height) height=15;
		var here=this.findContainingForm(place);
		if (!here) here=story.findContainingTiddler(place);
		if (!here) here=place.parentNode;
		if (!here) here=place;
		var elems=here.getElementsByTagName("textarea");
		if (field) for (var e=0; e<elems.length; e++)  // find matching textarea (by fieldname)
			if (elems[e].getAttribute("edit")==field) var ta=elems[e];
		else
			if (elems.length) var ta=elems[elems.length-1]; // default to last rendered text area
		if (!ta) {
			var elems=here.getElementsByTagName("input");
			if (field) for (var e=0; e<elems.length; e++)  // find matching input field (by fieldname)
				if (elems[e].getAttribute("edit")==field) var ta=elems[e];
			else
				if (elems.length) var ta=elems[elems.length-1]; // default to last rendered input field
		}
		if (!ta) return false; // no textarea or input field found... do nothing...
		var id=(new Date().getTime()).toString()+Math.random(); // unique instance ID
		ta.id=id+"_edit";
		ta.setAttribute("previewid",id+"_preview");
		ta.saved_onkeyup=ta.onkeyup;
		ta.onkeyup=function(ev) {
			if (this.saved_onkeyup) this.saved_onkeyup.apply(this,arguments);
			config.macros.preview.render(this.id,this.getAttribute("previewid"));
		}
		var html=this.html.replace(/%previd%/g,id+"_preview")
		html=html.replace(/%srcid%/g,id+"_edit");
		html=html.replace(/%hide%/g,hide?"none":"block");
		html=html.replace(/%limit%/g,config.options.txtPreviewAutoFreeze);
		html=html.replace(/%frozen%/g,hide?"checked":"");
		html=html.replace(/%height%/g,height);
		html=html.replace(/%halfheight%/g,height/2);
		createTiddlyElement(place,"span").innerHTML=html;
		this.render(id+"_edit",id+"_preview");
	},
	findContainingForm: function(e) {
		while (e && e.nodeName.toLowerCase()!="form") e=e.parentNode;
		return e;
	},
	render: function(srcid,previd,force) {
		var value=document.getElementById(srcid).value;
		var panel=document.getElementById(previd);
		var f=this.findContainingForm(panel);
		if (!f || (f.freeze.checked && !force)) return;
		var p=panel.firstChild; var d=f.domview; var h=f.htmlview; if (!p||!d||!h) return;
		p.innerHTML="";
		f.status.value=this.renderMsg;
		var start=new Date();
		wikify(value.replace(/\r/g,''),p);
		var end=new Date();
		this.renderDOM(previd);
		this.renderHTML(previd);
		f.status.value="elapsed: "+(end-start+1)+"ms";
		// automatically suspend preview updates for slow rendering tiddlers
		if (end-start+1>config.options.txtPreviewAutoFreeze) {
			f.freeze.checked=true;
			f.status.value+=this.timeoutMsg.format([config.options.txtPreviewAutoFreeze]);
		}
		if (f.freeze.checked) f.status.value+=this.freezeMsg;
	},
	renderDOM: function(id) {
		var panel=document.getElementById(id);
		var f=this.findContainingForm(panel); if (!f) return;
		var p=panel.firstChild; var d=f.domview; var h=f.htmlview; if (!p||!d||!h) return;
		var height=p.getAttribute("height");
		p.style.height=((f.dom.checked||f.html.checked)?height/2:height)+"em";
		if (f.dom.checked) d.value=this.getNodeTree(p,"|  ");
		if (!d.style||!h.style) return;
		d.style.height=height/2+"em";
		d.style.display=f.dom.checked?"inline":"none";
		d.style.width=f.html.checked?"49.5%":"100%";
		h.style.width=f.dom.checked?"49.5%":"100%";
	},
	renderHTML: function(id) {
		var panel=document.getElementById(id);
		var f=this.findContainingForm(panel); if (!f) return;
		var p=panel.firstChild; var d=f.domview; var h=f.htmlview; if (!p||!d||!h) return;
		var height=p.getAttribute("height");
		p.style.height=((f.dom.checked||f.html.checked)?height/2:height)+"em";
		if (f.html.checked) h.value=this.formatHTML(p.innerHTML);
		if (!h.style||!d.style) return;
		h.style.height=height/2+"em";
		h.style.display=f.html.checked?"inline":"none";
		h.style.width=f.dom.checked?"49.5%":"100%";
		d.style.width=f.html.checked?"49.5%":"100%";
	},
	formatHTML: function(txt) {
		if (config.browser.isIE) return txt; // BYPASS - 4/24/2006 due to IE hang problem.  Will fix later...
		var out="";
		var indent="";
		var level=0;
		for (var i=0;i<txt.length;i++) {
			var c=txt.substr(i,1);
			if (c=="<") {
					if (txt.substr(i+1,1)=="/")  indent=indent.substr(0,indent.length-2);
				out+="\n"+indent;
				if (txt.substr(i+1,1)!="/" && txt.substr(i+1,3)!="br>" && txt.substr(i+1,2)!="p>" && txt.substr(i+1,3)!="hr>")  indent+="  ";
			}
			out+=c;
				if (c=="\n")
				out+=indent;
			if (c==">" && txt.substr(i+1,1)!="<")
				out+="\n"+indent;
		}
		return out;
	},
	getNodeTree: function(theNode,theIndent,showPath,inline,thePrefix,thePath)
	{
		if (!theNode) return "";
		if (!thePrefix) thePrefix="";
		if (!thePath) thePath="";
		var mquote='"'+(inline?"{{{":"");
		var endmquote=(inline?"}}}":"")+'"';
		// generate output for this node
		var out = thePrefix;
		if (showPath && thePath.length)
				out += (inline?"//":"")+thePath.substr(1)+":"+(inline?"//":"")+"\r\n"+thePrefix;
		if (theNode.className=="DOMViewer")
			return out+'[DOMViewer]\r\n'; // avoid self-referential recursion
		out += (inline?"''":"")+theNode.nodeName.toUpperCase()+(inline?"''":"");
		if (theNode.nodeName=="#text")
			out += ' '+mquote+theNode.nodeValue.replace(/\n/g,'\\n')+endmquote;
		if (theNode.className)
			out += ' class='+mquote+theNode.className+endmquote;
		if (theNode.type)
			out += ' type='+mquote+theNode.type+endmquote;
		if (theNode.id)
			out += ' id='+mquote+theNode.id+endmquote;
		if (theNode.name)
			out += " "+theNode.name+(theNode.value?"="+mquote+theNode.value+endmquote:"");
		if (theNode.href)
			out += ' href='+mquote+theNode.href+endmquote;
		if (theNode.src)
			out += ' src='+mquote+theNode.src+endmquote;
		if (theNode.attributes && theNode.getAttribute("tiddlyLink")!=undefined)
			out += ' tiddler='+mquote+theNode.getAttribute("tiddlyLink")+endmquote;
		out += "\r\n";
		// recursively generate output for child nodes
		thePath=thePath+"."+theNode.nodeName.toLowerCase();
		thePrefix=theIndent+thePrefix;
		for (var i=0;i<theNode.childNodes.length;i++)
		{
			var thisChild=theNode.childNodes.item(i);
			var theNum=(inline?"~~":"(")+(i+1)+(inline?"~~":")");
			out += this.getNodeTree(thisChild,theIndent,showPath,inline,thePrefix,thePath+theNum);
		}
		return out;
	},
	html: " <form style='width:100%'><span id='%previd%' editID='%srcid%' style='display:%hide%'><div class='viewer' \
			height='%height%' style='margin:0;margin-top:.5em;height:%height%em;overflow:auto;white-space:normal'> \
			&nbsp; \
			</div> \
		<!-- DOM and HTML viewers --> \
		<textarea name=domview cols=60 rows=12 wrap=off \
			onfocus='this.select()' style='display:none;width:100%;height:%halfheight%em;'></textarea><!-- \
		--><textarea name=htmlview cols=60 rows=12 wrap=off \
			onfocus='this.select()' style='display:none;width:100%;height:%halfheight%em;'></textarea> \
		<!-- status line, preview option checkboxes, run/refresh buttons --> \
		<table width='100%' style='border:0;padding:0;margin:0'><tr style='border:0;padding:0;margin:0'> \
		<td style='border:0;padding:0;margin:0'><!-- \
			--><input type=text name=status style='padding:0;width:100%;' \
				title='ELAPSED: time (in milliseconds) used to render tiddler content in preview display'><!-- \
		--></td><td style='width:1%;border:0;padding:0;margin:0;'><!-- \
			--><input type=text name=limit size='6' maxlength='6' style='padding:0;width:5em;text-align:center' \
				value='%limit%ms' title='TIME LIMIT: maximum rendering time (in milliseconds) before auto-freezing preview' \
				onfocus='this.select()' \
				onchange='var val=this.value.replace(/[^0-9]/g,\"\"); if (!val.length) val=this.defaultValue; \
					this.value=val+\"ms\"; config.options.txtPreviewAutoFreeze=val; saveOptionCookie(\"txtPreviewAutoFreeze\"); \
					this.form.freeze.checked=false; config.macros.preview.render(\"%srcid%\",\"%previd%\",true);'><!-- \
		--></td><td style='width:1%;border:0;padding:0;margin:0;'><!-- \
			--><input type=text name=height size='4' maxlength='4' style='padding:0;width:4em;text-align:center' \
				value='%height%em' title='HEIGHT: size (in \"ems\") of preview area, including controls' \
				onfocus='this.select()' \
				onchange='var val=this.value.replace(/[^0-9]/g,\"\");  if (!val.length) val=this.defaultValue; \
					this.value=val+\"em\"; document.getElementById(\"%previd%\").firstChild.setAttribute(\"height\",val); \
					config.macros.preview.render(\"%srcid%\",\"%previd%\",true)'><!-- \
		--></td><td style='width:1%;border:0;padding:0;margin:0;text-align:right;white-space:nowrap'> \
			<input type=checkbox name=dom style='display:inline;width:auto;margin:1px;' \
				title='show Document Object Model (DOM) information' \
				onclick='config.macros.preview.renderDOM(\"%previd%\");'>DOM \
			<input type=checkbox name=html style='display:inline;width:auto;margin:1px;' \
				title='show rendered HTML' \
				onclick='config.macros.preview.renderHTML(\"%previd%\");'>HTML \
			<input type=checkbox name=freeze style='display:inline;width:auto;margin:1px;' %frozen% \
				title='do not update preview display as changes are made' \
				onclick='var p=document.getElementById(\"%previd%\");  \
					if (this.checked) this.form.status.value+=config.macros.preview.freezeMsg; \
					else config.macros.preview.render(\"%srcid%\",\"%previd%\",true);'>freeze \
			<input type=button style='display:inline;width:auto;' value='refresh' \
				title='update preview display' \
				onclick='config.macros.preview.render(\"%srcid%\",\"%previd%\",true)'> \
		</td></tr></table> \
		</span></form>"
}
//}}}

// // toolbar definition
//{{{
config.commands.previewTiddler = {
	text: 'preview',
	tooltip: 'show key-by-key preview',
	text_alt: '\u221Apreview',
	handler: function(event,src,title) {
		var here=story.findContainingTiddler(src); if (!here) return;
		var elems=here.getElementsByTagName("span");
		for (var e=0; e<elems.length; e++) {
			if (elems[e].getAttribute("editid")) {
				var show=elems[e].style.display=="none";
				src.innerHTML=show?this.text_alt:this.text;
				elems[e].style.display=show?"block":"none";
				config.macros.preview.findContainingForm(elems[e]).freeze.checked=!show;
				if (show) config.macros.preview.render(elems[e].getAttribute("editid"),elems[e].id);
			}
		}
		return false;
	}
};
//}}}
{{borderless{
|[[Click here to open in a new browser tab|http://en.wikipedia.org/wiki/Proper_Motion]]|
<html><div align="center"><iframe src ="http://en.wikipedia.org/wiki/Proper_Motion" width="100%" align="center" height="600">< /></div></html>}}}
----
It's not too difficult to modify ACP's web interface to install the code needed to view web pages, and particularly web cameras, within ACP. The ''@@color:#ffbf00;ACP Reference Guide@@'' itself makes extensive use of the <iframe> to display the great variety of information. 

Let's tackle a web-cam, which is relatively easy. All these code changes are made through the browser interface to the authoring environment. If you make these changes using the browser on the local observatory computer that's running ACP, I find that Google Chrome won't save changes, so I have to use IE or Firefox. If I'm making changes to the remote location, then Firefox won't save changes, but IE and Google Chrome will. Go figure.

If you feel comfortable modifying the ACP web environment, here are the steps to follow to incorporate a webcam (wonderful that it's ~IP-addressable!) into ACP. I'd recommend that you start by going to the ''..\Public Documents\ACP Web Data\Doc Root'' folder' and saving a copy of the files called ''Author.html'' and ''index.asp'' in a safe place as backup recovery files. If anything goes wrong, you can always copy these directly back into the ..\Doc Root folder, overwriting the files there and restoring the original functionality.
*[[STEP ONE - Changing the Main Menu (left sidebar)]]
*[[STEP TWO - Add a new item that displays the webcam]]
*[[STEP THREE (simple) - Test it]]
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
{{borderless{
|[[Click here to open in a new browser tab|http://www.cosmotography.com/]]|
<html><div align="center"><iframe src ="http://www.cosmotography.com/" width="100%" align="center" height="600">< /></div></html>}}}
----
|!This is an HTML rendering of the RTML Help File included with ACP Scheduler version 8.1|
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/RTML23.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/RTML23.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 1999-<<today YYYY>>, Robert B. Denny, Mesa AZ^^
*An example using the [[MathSVGPlugin]]
*Click the picture to generate a new set of colorful dots. (NB: Each subsequent click takes longer to work.)
<div class='SVGgraph' options='width:400,height:400,scales:[-0.5,5.5,-0.5,5.5]'>
setAction("mousedown",drawPicture);
var c = new String("0123456789"+"abcdef");
var ma, mb, mc, d;
for(var j=0;j<300;j++){
ma=[runif(0,5,2),runif(0,5,2)]
mb=runif(0,1,2)
mc=runif(0.05,0.3,4)
d="#"+randomString(6,c);
circle(ma,mc,{stroke:"none",fill:d,fillopacity:mb})
}
</div>
----
(Information is somewhat dated)
{{borderless{
|[[Click here to open in a new browser tab|http://ad.usno.navy.mil/star/star_cats_rec.shtml]]|
}}}
----
{{borderless{
|[[Click here to open in a new browser tab|./RefDocs/V404Cyg.txt]]|
<html><div align="center" style="background-color:white"><iframe src ="./RefDocs/V404Cyg.txt" width="100%" align="center" height="600">< /></div></html>}}}
----
!Update Log

!!Thirtieth (January 16, 2017)
This thirtieth update is a total refresh of the entire [[ACP Reference Guide]], including
*Checking for errors in all hyperlinked web pages and documents, and updating them and repairing or removing broken ones
*Removing the miniBrowser and replacing all web page accesses with an <iframe ... /> construct.
*Updating all items related to ACP help files and instruction, to be current with ACP Expert version 8.1. 
**This includes adding online HTML versions of the help files for [[ACP 8.1]], the [[ACP Programmer's Reference]], [[ACP Active Server Pages]], [[PinPoint Programmer's Reference]], [[ASCOM Telescope 2 (for ACP Hub)]], [[POTH Help File]], [[PipeHub Help File]], [[ScopeSim Help File]], [[Windows Scripting (Microsoft)]], [[Agent Programming (Microsoft)]], [[ACP Planner]],  [[Scheduler 8.1]], [[RTML 2.3]] and the [[ASCOM Platform 6]].
*Removing obsoleted and deprecated items no longer relevant to ACP Expert v8.1.
*Including useful items related to ACP Scheduler v8.1
*Adding links to new information and websites about the following subjects: 
**[[Release Notes for v8.1]]
**[[AboutTime]]
**[[Acquiring a Color Series]]
**[[Catalogs Supported by WCS Tools]]
**[[Comet Ephemeris Service]]
**[[CSS Reference]]
**[[Custom File and Folder Names (Scheduler)]] -- [[Custom File and Folder Names (ACP)]] already exists
**[[Dark Sky Finder]]
**[[Download 2011 version of ACP Log Analyzer]]
**[[Download 2013 version of ACP Horizon Editor]]
**[[Exoplanet Transit Query Service Form]]
**[[FITS World Coordinate System]]
**[[FocusMax Tutorial - II]]
**[[Google Earth]]
**[[How Scheduler Focuses]]
**[[Introducing TheSky HD (iOS) with Built-in ACP Control]]
**[[Javascript Reference]]
**[[Rob Capon]]
**[[Scheduler-Specific Tips]]
**[[SDSS DR13 Finding Charts]] -- updated from ~DR5
**[[Substitution Tokens (Scheduler)]]
**[[Using ACP Configuration Profiles]]
**[[Washington Double Star Catalog Listing]]
**[[DC-3 Dreams Communication Center]]
**[[Enabling Network Access]]
**[[ACP Utilities]]
**[[MaxIm DL Utilities]]

!!Twenty-ninth (May 7, 2014)
This twenty-ninth update includes the following revised information and added capabilities:
*[[Day-Night World Map]] - the Sun, Moon and twilight zones portrayed on a world map
*[[Mikulski Archive for Space Telescopes (MAST)]] - A variety of astronomical data archives
* Updated the ACP 7 specifics related to [[Extended Filter Support]], [[Standard ACP Scripts]], [[Getting Started with ACP]], and [[Acquiring Images Automatically]]
* Added a link to [[Astrometry.net]] in the discussion of [[FindLostScope.js]] within [[Standard ACP Scripts]] 
* Tweaked the indexes [[Site Map (Alphabetic)]], [[Site Map]], and [[Site Map (Full)]]

!!Twenty-eighth (December 19th, 2013)
This twenty-eighth update includes the following revised information and added capabilities:
*[[Minor Planet Center Links (All)]] - all currently available links to all MPC web pages
*[[Astrophysics Source Code Library]] - free on-line registry for 600+ source codes of interest to astronomers and astrophysicists
*Revised the description of [[Custom File and Folder Names (ACP)]]

!!Twenty-seventh (April 20th, 2013)
This twenty-seventh update includes changes related to the release of ACP version 7, including the following revised information and added capabilities:
*[[Release Notes for v7.0]]
*[[Software & Calculators]] - useful functions relating to Julian time HJD conversions for Excel spreadsheets (from the Variable Stars South website)
*[[Catalog View]] - an extension for ACP for displaying a view of a selected catalog (e.g. USNO A2.0) at specified coordinates  (&alpha;, &delta;). 
*[[Systems of Time]] - brief definitions of the various time systems in use, as well as simple formulae for doing transformations
**[[A Time Tutorial]]
**[[USNO Systems of Time]]
*[[Default File Locations for User Data and Logs (v6 & v7)]]
*[[Double Star Astronomy]] - Useful information for double star observers
*[[Washington Double Star Catalog]]
*[[ACP Log Analyzer]] -  If you're not using this regularly, you're missing something really good
*[[NASA Exoplanet Archive]] - NASA's website for the Kepler mission
*[[NASA Ephemeris Generator]] - NASA/JPL's HORIZON system to generate ephemerides for solar-system bodies - asteroids, comets, NEO's and NEA's, planetary satellites, planets, the Sun, L1, L2, select spacecraft, and system barycenters
*[[NOAA Space Weather Prediction Center]] - the official U.S. Gov't space weather bureau
*[[STEREO]] - 3D views of the Sun and the heliosphere
*[[Hubble Legacy Archives Tutorial]] - Using FITS Liberator and Photoshop to process HLA imagery
* Updated [[ACP Horizon Editor Application]] - create an individual horizon for use with ACP

!!Twenty-sixth (April 15, 2012)
This twenty-sixth update includes the following revised information and added capabilities:
*As part of [[Observing Tools Online]],
**Added an additional link to the AAVSO's Photometric ~All-Sky Survey online access form website [[APASS]]
**Linked to a [[G2V Image Calibration]] tool you can download to color-balance RGB astrophotography
*Incorporated the [[File/Folder Customization Tool]] as part of [[Getting Started with ACP]]
*Added information about the soon-to-be-available ~UCAC4 catalog to [[Star Catalog Information]] and a link to the [[UCAC4 Reference]] page.
*Included an [["Anywhere" Plate Solver]] that will plate-solve an image, even if there's no estimated values!
*Brought the [[Site Map]], [[Site Map (Full)]] and [[Site Map (Alphabetic)]] up to date

!!Twenty-fourth (October 1, 2011)
This twenty-fourth update includes the following revised information and added capabilities:
*Added instructions for [[Modifying Utility Tasks to enable starting scripts]], in [[Customizing ACP]], describing how to add items to the utility tasks menu
*Added a plot of [[383 Henden fields mapped to RA/Dec]] in [[Observing Tools Online]], along with a pointer to a Henden Field interactive spreadsheet and interactive plot
*Updated some pages to incorporate some Version 6 Hotfix 2 changes
**New #WAITUNTIL directivefor sun down elevation, found in [[Directives that affect only the next target]]
**New #ALWAYSSOLVE directive, found in [[Directives that affect the plan as a whole]]
**Added [[Release Notes for v6.0]]
**Added [[Release Notes: Critical Changes for v6.0 Hot Fix 2]]

!!Twenty-third (July 31, 2011)
This twenty-third update includes the following revised information and added capabilities:
*Added a new [[Nifty Astrophotography]] page, showcasing a number of experts' astrophotography techniques and photographs
*Added a pointer to the [[Hubble Legacy Archives]] as part of [[Nifty Astrophotography]]
*Updated the link to Jörg Hanisch's [[ACP Horizon Editor Application]] website
*Updated information about the Tycho-2 catalog availability, and updated the download link to the [[DC-3 Tycho-2 Archive]]. See also: [[Where can I get a copy of the <...> catalog?]]
*Added a pointer to an [[Exoplanet Transit Times]] website that provides interactive exoplanet transit predictions
*Added a second [[Exoplanet Transit Database]] for predicted transit times of exoplanets from your location
*As part of [[Customizing ACP]], incorporated a link to a ~DC3 website providing details about [[Embedding an iframe into a Tiddler]]
*Provided additional instructions for [[Adding a Dropbox]] as part of [[Customizing ACP]]
*Repaired broken links to the ACP ''[[Videos|http://www.youtube.com/DC3Dreams]]'' and [[MaxIm DL Video Tutorials]]
*Added a page called [[Are there simple steps to processing images?]], in [[FAQs, Tips & Tricks]], edited from a Forum post by Jim ~McMillan

!!Twenty-second (February 4, 2011)
This twenty-second update includes the following revised information and added capabilities:
*Added related additional v6.0 [[Directives]]
*Added a [[FocusMax Tutorial]] (thanks to Tom Krajci, Cloudcroft NM) in the References part of the [[Technical Information]] page
*Added a description relevant to ''@@color:#ffbf00;Default File Locations for User Data and Logs (v6)@@''
*Added a website link to the [[Catalog and Atlas of Cataclysmic Variables]]
*Added a new FAQ about [[Fine Tuning ACP Dusk and Dawn Flats]]
*Added a new FAQ about [[What do I do when it's cloudy again?]]
*Updating the list of downloadable ACP updates: [[Where can I download the latest ACP updates?]]
*Repaired the link to the [[AAVSO Photometric All-Sky Survey (APASS)]] page
*Updated the link to the [[Exoplanet Catalog]] page
*Updated the link to Bob Denny's [[Videos]] website
*Updated the link to [[Download ACP Planner]]
*Updated the link to the [[FocusMax executable]] download
*Updated the link to the [[Landolt Special Areas Catalogs]]
*Updated the link to the [[MaxIm Autoguiding]] and [[MaxIm Calibration]] videos
*Added [[Release Notes for v6.0]]
*Website links have been validated and updated where needed
*Made a variety of smaller changes associated with the version 6.0 release.

!!Twenty-first (June 5, 2010)
This twenty-first update includes the following revised information and added capabilities:
*Added a discussion of [[Photometry and the UCAC3 Catalog]] in the [[Technical Information]] section
*Added a discussion of the ~UserActions capability, and a [[UserActions Example]]
*Indexed the ''@@color:#ffbf00;160 online websites@@'' [150 at the time I did this in June 2010]
*Updated the [[TiddlyWiki]] core software to version 2.6.0
*Updated the [[MathSVG package]] and provided three examples - [[Kepler]], [[AnimatedPendulum]] and [[RandomScatterPlot]]

!!Twentieth (May 15, 2010)
This twentieth update includes the following revised information and added capabilities:
*Added a new set of web pages, [[More Algorithms for CCD Stellar Photometry]], devoted to CCD photometry data reduction 
*A new layout for the menu bar
*Fixed some broken hyperlinks
*Updated ''@@color:#ffbf00;Version Information@@'' 
*Updated [[Catalog Comparison Images]] to include a ~UCAC3 simulated image
*Updated [[Where can I get a copy of the <...> catalog?]] to include the ~UCAC3, plus additional edits
*Added a web page about the [[AAVSO Photometric All-Sky Survey (APASS)]] in [[Technical Information]]
*Fixed a broken link to the [[official Tycho-2 home]]page

!!Nineteenth (February 5, 2010)
This nineteenth update includes the following revised information and added capabilities:

*Added information in [[FAQs, Tips & Tricks]] about [[How does ACP's focus routine work?]]
*Added a panel in [[FAQs, Tips & Tricks]] discussing [[How do I apply calibration to MaxIm guiding images?]]
*Added a panel in [[Technical Information]] discussing [[Ideal Exposure Calculators]]
*Added instructions in [[Technical Information]] to [[Put a Webcam Link in ACP's Web GUI]]
*Embedded a video player

!!Eighteenth (November 10, 2009)
This eighteenth update includes the following revised information and added capabilities:

*Added a link to ~Sky-Map.org
*Updated [[Star Catalog Information]] to include data about the new ~UCAC3 Reference catalog
*Added [[US Weather by zipcode]], a 48-hour National Weather Service graphical forecast
*Added a description of [[Sky Solve Application]]], in User-contributed apps and scripts, by John Winfield, to determine the precise center RA/Dec of almost any image, without having a clue about where the image is in the sky
*Added description of a new ACP script, ~AutoGuideTest.js, to [[Standard ACP Scripts]]
*Added #NOTIMECOMPRESS in [[Directives]]
*Added #DOMEFLATS in [[Directives]] that affect the plan as a whole
*Modified the #WAITUNTIL directive description in [[Directives]] that affect only the next target, to conform to the modified process
 
!!Seventeenth (September 10, 2009)
This seventeenth update includes the following new information and added capabilities:

*Added reference under [[Acquiring Images Automatically]] to online ephemerides for comets in the MPC 1-line format
*Added the [[Minor Planet Checker]] as a resource for comparing your observations with known minor planets
*[[Filters, CCDs and Star Colors]] describes how these components interact in producing an image at the telescope.
*Reorganized the [[Observing Tools Online]] including an [[Observing Tools Online (Abbreviated)]] version
*Reorganized the [[Site Map]]

!!Sixteenth (August 3, 2009)
This sixteenth update includes the following new information and added capabilities:

*Update the ~TiddlyWiki core software to version 2.5.2 (see [[TiddlyWiki Home Page]])
**This enables support for ~LaTeX and SVG graphics
**Add [[Observatory Horizon]] and [[Kepler]] and [[Two Graphs]] graphic examples
*Resynchronize specific ACP reference files to the latest ACP version & hotfix (~HF9).
**Revise [[Custom File and Folder Names (ACP)]]
**Rebuild and expand the [[Substitution Tokens (ACP)]] table for new custom file and folder names' tokens
*Update the reference file for "[[Rotated Guiding]]"
*Revise the format of the [[Directives]] page

!!Fifteenth (May 25, 2009)
This fifteenth update includes the following new information:

*A new ''@@color:#ffbf00;What's in this update?@@'' link
*[[World Coordinate System]] - The inside scoop on those "WCS" values in the FITS header
**[[WCSTools: Image World Coordinate System Utilities]] - With examples
**[[Creating a Mosaic World Coordinate System]] - A recipe for determining and applying WCS, with examples
**[[WCSTools Web page - package of programs and a library of utility subroutines]] - The "source" for the standard WCS code
**[[FITS World Coordinate Systems]] - Calabretta - an interesting, up-to-date set of additional references about WCS
**[[Goddard Space Flight Center web page all about FITS]] - Includes documentation for Version 3 of the FITS Standard
*[[Algorithms for CCD Stellar Photometry]]
*Revised [[Site Map]]
*Minor style changes

!!Fourteenth (April 1, 2009)
Here's another minor update (there was no 13th  ) . 
*I added another link in [[Observing Tools Online]] to a collection of astronomical catalogs, and I incorporated Jim ~McMillan's tip about avoiding a bright galaxy core as a guide star in [[FAQs, Tips & Tricks]] section.

!!Twelfth (February 28, 2009)
Here's another minor update.
*I've put more information in the [[Observing Tools Online]] section, including a comprehensive list of pointers to astronomical survey projects, aurora observations and predictions, and an update to the [[Landolt Standards Spreadsheet]] that provides direct access to the catalog, along with links to finding charts that open in a separate window.

!!Eleventh (January 17, 2009)
Here's another minor update. 
*I've included some other weather satellite sites, for Australia, eastern China and the Indian Ocean Basin. I know there are a few Australian ~ACPers, but I don't know about the Indian Ocean or eastern China! If there aren't, they certainly don't know what they're missing.

!!Tenth (January 11, 2009)
*I've added two new weather sites (in the [[Observing Tools Online]] section) - one for the Unisys North America weather data, and a second for the EUMETSAT views of the European continent and links to their various data sets.
*I've also added a link in the Main Menu (left sidebar) enable you to [[Register Your Observatory]]. This adds to a Google Earth .kml file you can download, showing where on the Earth users of ACP are located. (Google Earth not included )

!!Ninth (December 20, 2008)
*Another small but useful update, which adds Mike Dodd's [[Planalyzer]] to the "[[User-contributed apps and scripts]]".

!!Eighth (December 2, 2008)
*Here's yet another update, to include some information about the [[Messier Marathon]] (an early-March activity; plan now - see "[[Observing Tools Online]]") and other interesting stuff. The Messier Marathon is something that Bob accomplished in March 2004, using the ACP Scheduler program to optimize the observing sequence.

!!Seventh (November 21, 2008)
*I posted another small update, mainly improving the links to the astronomy weather sites (see [[Observing Tools Online]])

!!Sixth (November 16, 2008)
*I've added more material to the Reference Guide, including now information on [[SCT Collimation]], [[Minor Planet Astrometry]] and photometry and ephemeris service, weather items, and setting up [[FocusMax Autofocus Software]]. 

!!Fifth (November 11, 2008)
*There's another small update posted - includes Mike Dodd's analysis of the [[Feather Touch Focuser Adjustment]], and a discussion of the #CHILL directive.

!! Fourth (November 3, 2008)
*There's yet another update just posted - the newest items are all in the Observing Tools section, and include:
**[[Henden Photometry Fields]]
**[[IAU Central Bureau for Astronomical Telegrams]]
**[[List of Recent Supernovae]]
**[[Observable Solar System Objects]] - up-to-date orbital elements and ephemerides of observable minor planets, comets, ~NEOs, distant minor planets, critical-list numbered minor planets, unusual minor planets and bright minor planets.

!!Third (October 25, 2008)
*I've posted another update to the Reference Guide - newest items include a downloadable Excel spreadsheet you can use to generate predictions for [[Eclipsing Binary Times of Minima]]. Look in the Observer's Tools chapter. Other new things, too.

!!Second (October 13, 2008)
*Updated with additional changes, adds and updates. There are now 162 "pages" in total, with links to 74 external information sources.

!!First (October 6, 2008)
*Updated with more information (notably "[[Star Catalog Information]]"), and some minor restructuring.

!!Initial Publication (September 30, 2008)
I've been spending some time this Summer gathering and building a suite of tools and other resources for fellow ACP users to have available in a web-based environment. The framework is TiddlyWiki, which is the same framework that the ACP application web-based user interface lives in.
*With Bob's permission, I've put this web page up on one of his servers. Here's the URL: http://solo.dc3.com/ar/ACPRefGuide.html
*This is a single HTML web page, about 750KB at this point (Sep 2008), containing the total contents of this new Reference Guide as it is today. The document will download to and open in your browser. It may take a few moments depending on your particular connection to and through the Internet. If you have tabbed browsing, you can open the ACP application (click "Use Web Browser" in the ACP control panel) in one tab and keep this Reference Guide open in another. The plan is to integrate this Guide directly into the ACP web application itself.
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
	The form below is ready for you to fill in the pertinent information per the instructions on the page. After you submit your form, a script in the background does the format conversion to the Google Earth .kml schema. The master .kml file is updated immediately to include your observatory. You can submit a new or second entry, but you cannot edit or delete one you've already submitted. If you make a mistake I'll fix it if you [[let me know|mailto:richard.berg@verizon.net]].

	@@color:#0f0;Filling out and submitting the form is voluntary.@@ But it also means that you give your tacit approval to redistribute this information to any ACP customer. There's no intention of using it for any purpose other than as an illustration of where on Earth ACP is being used. Only those with access to the customer's parts of the Comm Center will be able to find and download the .kml file. The minimum information you need to provide is indicated by asterisks. If you want to associate a website with your placemark, please also fill in the URL.

	To use the .kml file, [[click here|http://acp.dc3.com/kml/ACPCustomers.kml]] to retrieve the file and save it someplace. Then start Google Earth, go to the File/Open... menu and select this .kml file to open it. It will show up in the "Temporary Places" part of the Google Earth menu. You can drag it up to the "My Places" section if you like.

|''@@color:#0f0;Remember - Western Hemisphere longitudes are NEGATIVE@@''|
{{borderless{
|[[Click here to open in a new browser tab|http://acp.dc3.com/google-earth.html]]|
<html><div align="center"><iframe src ="http://acp.dc3.com/google-earth.html" width="100%" align="center" height="600">< /></div></html>}}}
----
Best is to read the ACP Help file. Go to the Contents and select Using the Web Browser Interface/Getting Started/Step 5. Registering and Internet Name.
----
Most users will find that ACP serves their needs without adjustments. Most of the techniques described in this section involve editing the registry information for ACP. If you haven't used the registry editor before, please be aware that you need to be careful in what you do. As long as you restrict your editing to the data that belongs to ACP, you'll have no problems. I suggest you use the new style registry editor, regedit.exe (as opposed to regedt32.exe which is on NT/2K/XP). Here is a (slightly doctored) picture of regedit's main screen (for Windows XP). 

[img[RefDocs/Registry.png]]

The left side contains a tree display of the keys. Under each key there can be values. A value consists of a name and its data. Data items can be in several formats (string, binary, DWORD), but ACP uses only string format data for its configuration information. In each section, you will find data already there. You can use these data as samples. 

In the sections below, the key name refers to the sub-key under the Denny key as shown in the figure above. For example, the "Align Stars key" refers to (for Windows XP)
|~HKEY_LOCAL_MACHINE\SOFTWARE\Denny\ACP\~AlignStars|
or (for Windows 7/10)
|~HKEY_LOCAL_MACHINE\SOFTWARE\~Wow6432Node\Denny\ACP\~AlignStars|

!Alignment stars
''Key:'' Align Stars 
''Name:'' name of the alignment star 
''Value:'' J2000 Right Ascension (hours, decimal) and Declination (degrees, decimal) separated by a space 

This is the list of alignment stars is used in the Go window, Alignment Star list.

!Spoken startup greeting
''Key:'' General 
''Name:'' ~AgentGreeting 
''Value:'' text to speak when the program is first started 

This string is used as input to the text-to-speech engine when the program is first started. If you change this to the empty string (do not remove the entry), the spoken startup greeting is suppressed.

!Dome Slaving Interval
This sets the interval at which dome slaving checks the telescope position and, if needed, repositions the dome. The default is 10 seconds. If this value doesn't exist in the registry, create it. It is a ''string'' (~REG_SZ) value!

''Key:'' Dome 
''Name:'' ~SlavingInterval 
''Value:'' interval (sec) 

!Weather Check Interval
This sets the interval at which ACP checks the weather safe/unsafe condition. The default is 5 seconds. If this value doesn't exist in the registry, create it. It is a ''string'' (~REG_SZ) value!

''Key:'' General 
''Name:'' ~WeatherInterval 
''Value:'' interval (sec) 

!Pointing Model Folder
This has no effect if the normal "~MultiUser" mode is in effect. If you have overridden the Images, Plans, and Logs area in the ACP Preferences, Local User tab, this is the default folder used in Load Model and Save Model As...  This belongs to the local user, because web users have no access or use to this info. If this value doesn't exist in the registry, create it. It is a ''string'' (~REG_SZ) value!


''Key:'' ~UserData\local_user 
''Name:'' ~ModelDir 
''Value:'' full model file folder path 
----
/***
|Name|RelatedTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#RelatedTiddlersPlugin|
|Version|1.1.8|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|InlineJavascriptPlugin, NestedSlidersPlugin, StyleSheetShortcuts|
|Description|starting from a selected tiddler, display a list and/or tree of linked or transcluded tiddlers|
!!!!!Usage
<<<
Starting from a specified tiddler (default=current tiddler), {{{<<relatedTiddlers>>}}} recursively follows the internal links[] data to find all other tiddlers that are related to it by linking (e.g., {{{[[TiddlerName]]}}}) or used as macro parameter (e.g., {{{<<tiddler TiddlerName>>}}}).

The results can be displayed as a simple flat list of related tiddler titles, or as an indented tree diagram that shows the specific connections between the related tiddlers, and can be helpful for identifying clusters of interdependent tiddlers or simply generating an on-the-fly site map for quick discovery and navigation through complex or unfamiliar document content. 
//{{{
<<relatedTiddlers TiddlerName hideform "exclude list">>
//}}}
*''TiddlerName'' (optional)<br>specifies the starting tiddler (and hides the 'select a tiddler' form controls).  Use keyword ''here'' to specify the current tiddler.
*''hideform'' (optional)<br>when present, suppress display of 'select tiddler' droplist and buttons.
*''"exclude list"'' (optional)<br>space-separated list of tiddlers whose links should not be followed.  Use quotes or double-square brackets to ensure list is processed as a single parameter.
The plugin also defines two functions that can be called externally (from other plugins or scripts) to generate and retrieve either a list of links or a formatted "tree view":
>{{{var list=config.macros.relatedTiddlers.getList(start,exclude,callback);}}}
>{{{var tree=config.macros.relatedTiddlers.getTree(start,exclude,callback);}}}
where ''start'' and ''exclude'' are the same as the macro parameters described above, plus an optional reference to a callback function that allows you to generate an alternative list/tree, based on application-specific data (such tiddler references contained in tags or custom fields), rather than using the default "links" list, like this:
>{{block{
{{{
window.myCallback=function(tiddler) {
	var list=[];
	// ... fill the list based on the specified tiddler ...
	return list;
}
}}}
}}}
The function takes a tiddler object as input, and returns a list of tiddler titles that are //directly// linked (or otherwise related) to that specific tiddler.  {{{getList()}}} and {{{getTree()}}} then use this information to find all the //indirect// connections between tiddlers to produce the list or tree output.
<<<
!!!!!Configuration
<<<
<<option chkRelatedTiddlersShowList>> show list display
<<option chkRelatedTiddlersShowTree>> show tree display
<<option chkRelatedTiddlersZoom>> enable autosizing of tree display //(aka, "zoom" or "shrink-and-grow")//
don't follow links contained in these tiddlers: <<option txtRelatedTiddlersExclude>>
<<<
!!!!!Examples
<<<
{{smallform{<<relatedTiddlers>>}}}

Using getList()/getTree() public API from other scripts/plugins:
><script show>
	var start="About";
	var exclude=config.options.txtRelatedTiddlersExclude.readBracketedList();
	var callback=null;
	var list=config.macros.relatedTiddlers.getList(start,exclude,callback);
	var tree=config.macros.relatedTiddlers.getTree(start,exclude,callback);
	return "There are "+list.length+" tiddlers related to [["+start+"]]...\n"+tree;
</script>
<<<
!!!!!Revisions
<<<
2009.09.29 [1.1.8] in findRelatedTiddlers(), fixed recursion when using non-null callback
2007.11.11 [1.1.7] in findRelatedTiddlers(), refactored into separate getlinks(),<br>and added param for optional callback function that can be used to return an alternative set of links.<br>Also added API functions, getTree() and getList() for use by other scripts
2007.07.13 [1.1.6] performance optimizations, more code cleanup
2007.07.10 [1.1.5] extensive code cleanup
2007.07.08 [1.1.0] converted from inline script
2007.06.29 [1.0.0] started (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.RelatedTiddlersPlugin={major: 1, minor: 1, revision: 8, date: new Date(2009,9,29)};

// initialize 'autozoom' and 'exclude' tree options (defaults are not to zoom, and to follow all links)
if (config.options.chkRelatedTiddlersZoom===undefined)
	config.options.chkRelatedTiddlersZoom=false;
if (config.options.txtRelatedTiddlersExclude===undefined)
	config.options.txtRelatedTiddlersExclude='GettingStarted DefaultTiddlers';
if (config.options.chkRelatedTiddlersShowList===undefined)
	config.options.chkRelatedTiddlersShowList=true;
if (config.options.chkRelatedTiddlersShowTree===undefined)
	config.options.chkRelatedTiddlersShowTree=false;

config.macros.relatedTiddlers={
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {

		// create form with unique DOM element ID (using current timestamp)... permits multiple form instances
		var now=new Date().getTime();
		var span=createTiddlyElement(place,"span");
		span.innerHTML=this.form.format(["relatedTiddlers_form"+now]);
		var form=span.getElementsByTagName("form")[0]; // find form that we just created
		var target=createTiddlyElement(span,"div"); // create target block in which generated output will be placed

		// initialize droplist contents (all tiddlers except hidden ones)
		var tids=store.getTiddlers('title','excludeLists');
		for (i=0; i<tids.length; i++) form.list.options[form.list.options.length]=new Option(tids[i].title,tids[i].title,false,false);

		// initialize exclude field (space-separated list)
		if (config.options.txtRelatedTiddlersExclude) form.exclude.value=config.options.txtRelatedTiddlersExclude;

		// set starting tiddler, form display, and/or exclude list from macro params (if present) and then show the results!
		var root="";
		var hide=false;
		var exclude=config.options.txtRelatedTiddlersExclude;
		if (params[0]) root=params[0]; // TiddlerName
		if (params[1]) hide=(params[1].toLowerCase()=="hideform"); // keyword: "hideform" or "showform" (default)
		if (params[2]) exclude=params[2]; // list of tiddlers whose links should not be followed
		if (root=="here") { var tid=story.findContainingTiddler(place); if (tid) root=tid.getAttribute("tiddler"); }
		if (store.tiddlerExists(root)) {
			// NOTE:  don't hide form when running IE, where putting initial focus on hidden form creates an error
			if (!config.browser.isIE) form.style.display=hide?"none":"block"; // show/hide the controls
			form.list.value=root; // set the root
			form.exclude.value=exclude; // set 'exclude' field
			form.get.click(); // DISPLAY INITIAL RESULTS (if tiddler is selected)
		}
	},
	form:
		"<form id='%0' action='javascript:;' style='display:inline;margin:0;padding:0;' onsubmit='return false'><!-- \
		--><span class='fine' style='float:left;vertical-align:bottom;width:39.5%;'><i>find all tiddlers related to:</i></span><!-- \
		--><span class='fine' style='float:left;vertical-align:bottom;'><i>exclude links contained in:</i></span><!-- \
		--><div style='clear:both'><!-- \
		--><select name=list size=1 style='width:39.5%' onchange='this.form.get.click()'><!-- \
		--><option value=''>select a tiddler...</option><!-- \
		--></select><!-- \
		--><input type='text' option='txtRelatedTiddlersExclude' name='exclude' value='' style='width:40%' \
			title='enter the names of tiddlers whose links should NOT be followed' \
			onkeyup='if (event.keyCode==13) { this.blur(); this.form.get.click(); }'  \
			onchange='config.options[this.getAttribute(\"option\")]=this.value;saveOptionCookie(this.getAttribute(\"option\"));'><!-- \
		--><input type=button name=get value='get related' style='width:10%'  \
			onclick='config.macros.relatedTiddlers.show(this.form,this.form.nextSibling);'><!-- \
		--><input type=button name=done value='done' disabled style='width:10%'  \
			onclick='this.form.list.selectedIndex=0; this.form.get.click();'><!-- \
		--></div><!-- \
		--></form>",
	styles:
		".relatedTiddlers blockquote \
			{ border-left:1px dotted #999; margin:0 25px; padding-left:.5em; font-size:%0%; line-height:115%; } \
		.relatedTiddlers .borderleft \
			{ margin:0; padding:0; margin-left:1em; border-left:1px dotted #999; padding-left:.5em; } \
		.relatedTiddlers .fourcolumns \
			{ display:block; -moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%} \
		.relatedTiddlers a \
			{ font-weight:normal; } \
		.relatedTiddlers .bold, .relatedTiddlers .bold a \
			{ font-weight:bold; } \
		.relatedTiddlers .floatright \
			{ float:right; } \
		.relatedTiddlers .clear \
			{ clear:both; }	",
	toggleform:
		"{{floatright{<html><a href='javascript:;' class='button' title='show/hide tiddler selection droplist and buttons' \
		onclick='var here=story.findContainingTiddler(this); var tid=here?here.getAttribute(\"tiddler\"):\"\"; \
			var f=document.getElementById(\"%0\"); var hide=(f.style.display!=\"none\"); \
			f.style.display=hide?\"none\":\"inline\"; this.innerHTML=hide?\"show form\":\"hide form\"; return false;'>%1</a></html>}}}",
	treecheck:
		"{{floatright{@@display:none;<<option chkRelatedTiddlersShowTree>>@@<html><a href='javascript:;' class='button' onclick='this.parentNode.previousSibling.firstChild.click(); return false;'>tree view</a></html>}}}",
	tree:
		"{{clear{\n----\n}}} \
		{{floatright small{<<option chkRelatedTiddlersZoom>>autosize tree display}}} \
		{{fine{\n''tiddlers linked from or included by'' [[%0]]\n}}}%1",
	listcheck:
		"{{floatright{@@display:none;<<option chkRelatedTiddlersShowList>>@@<html><a href='javascript:;' class='button' onclick='this.parentNode.previousSibling.firstChild.click(); return false;'>list view</a></html>}}}",
	list:
		"{{clear{\n----\n}}} \
		{{fine{\n''tiddlers containing links to'' [[%0]]\n}}} \
		{{small fourcolumns borderleft{\n%1}}} \
		{{fine{\n''tiddlers linked from or included by'' [[%0]]\n}}} \
		{{borderleft{\n \
			{{fine{\n''bold''=//direct links//, plain=//indirect links//, ''...''=//links not followed//}}} \
			{{small fourcolumns{\n%2}}} \
		}}}",
	skipped:
		"<html><span title='links from %0 have NOT been followed'>...</span></html>",
	mouseover: function(ev) {
		this.saveSize=this.style.fontSize;
		this.style.fontSize='100%';
		this.style.borderLeftStyle='solid';
	},
	mouseout: function(ev) {
		this.style.fontSize=this.saveSize;
		this.style.borderLeftStyle='dotted';
	},
	findRelatedTiddlers: function(tid,tids,treeout,level,exclude,callback) { 
		// recursively build list of related tids (links and includes FROM the root tiddler) and generate treeview output
		var t=store.getTiddler(tid);
		if (!t || tids.contains(tid)) return tids; // tiddler already in results (or missing tiddler)... just return current results
		tids.push(t.title); // add tiddler to results
		var skip=exclude && exclude.contains(tid);
		treeout.text+=level+"[["+tid+"]]"+(skip?this.skipped.format([tid]):"")+"\n";
		if (skip) return tids; // branch is pruned... don't follow links
		var links=callback?callback(t):this.getLinks(t);
		for (var i=0; i<links.length; i++) tids=this.findRelatedTiddlers(links[i],tids,treeout,level+">",exclude,callback);
		return tids;
	},
	getLinks: function(tiddler) {
		if (!tiddler.linksUpdated) tiddler.changed();
		return tiddler.links;
	},
	getTree: function(start,exclude,callback) {
		// get related tiddlers and generate blockquote-indented tree output
		var list=[]; var tree={text:""}; var level="";
		list=this.findRelatedTiddlers(start,list,tree,level,exclude,callback);
		return tree.text;
	},
	getList: function(start,exclude,callback) {
		// get related tiddlers and generate blockquote-indented tree output
		var list=[]; var tree={text:""}; var level="";
		list=this.findRelatedTiddlers(start,list,tree,level,exclude,callback);
		return list;
	},
	show: function(form,target) {
		removeChildren(target); form.done.disabled=true; // clear any existing output and disable 'done' button
		var start=form.list.value; if (!start.length) return; // get selected starting tiddler.  If blank value (heading), do nothing

		// get related tiddlers and generate blockquote-indented tree output
		var rels=[]; var treeview={text:""}; var level="";
		var exclude=config.options.txtRelatedTiddlersExclude.readBracketedList();
		var rels=this.findRelatedTiddlers(start,rels,treeview,level,exclude);
		rels.shift(); // remove self from list
		rels.sort(); // sort titles alphabetically

		// generate list output
		var tid=store.getTiddler(start);
		var relsview=""; for (t=0; t<rels.length; t++) {
			relsview+=tid.links.contains(rels[t])?("{{bold{[["+rels[t]+"]]}}}"):("[["+rels[t]+"]]");
			if (exclude && exclude.contains(rels[t])) relsview+=this.skipped.format([rels[t]]);
			relsview+="\n";
		}
	
		// get references TO the root tiddler, add to related tiddlers and generate refsview output
		var refs=[]; var referers=store.getReferringTiddlers(start);
		for(var r=0; r<referers.length; r++)
			if(referers[r].title!=start && !referers[r].tags.contains("excludeLists")) refs.push(referers[r].title);
		var refcount=refs.length; var relcount=rels.length; // remember individual counts
		for (var r=0; r<refs.length; r++) rels.pushUnique(refs[r]); // combine lists without duplicates
		var total=rels.length; // get combined total
		var refsview="[["+refs.sort().join("]]\n[[")+"]]\n";
	
		// set custom blockquote styles for treeview
		setStylesheet(this.styles.format([config.options.chkRelatedTiddlersZoom?80:100]),'relatedTiddlers_styles');

		// assemble and render output
		var summary=(total?(total+" tiddler"+(total==1?" is":"s are")):"There are no tiddlers")+" related to: [["+start+"]]";
		var list=this.list.format([start,refsview.length?refsview:"//none//",relsview.length?relsview:"//none//"]);
		var tree=this.tree.format([start,treeview.text]);
		var toggle=this.toggleform.format([form.id,(form.style.display=='none'?'show form':'hide form')]);
		var sep="{{floatright{ | }}}";
		var showList=total && config.options.chkRelatedTiddlersShowList;
		var showTree=relcount && config.options.chkRelatedTiddlersShowTree;
		var out="{{relatedTiddlers{"+toggle+(relcount?sep+this.treecheck:"")+(total?sep+this.listcheck:"")+summary+(showList?list:"")+(showTree?tree:"")+"}}}";
		wikify(out,target);
		form.done.disabled=false; // enable 'done' button

		// add mouseover/mouseout handling to blockquotes (for autosizing)
		var blocks=target.getElementsByTagName("blockquote");
		for (var b=0; b<blocks.length; b++)
			{ blocks[b].onmouseover=this.mouseover; blocks[b].onmouseout=this.mouseout; }

		// add side-effect to checkboxes so that display is refreshed when a checkbox state is changed
		var checks=target.getElementsByTagName("input");
		for (var c=0; c<checks.length; c++) {
			if (checks[c].type.toLowerCase()!="checkbox") continue;
			checks[c].coreClick=checks[c].onclick; // save standard click handler
			checks[c].formID=form.id; // link checkbox with correponding form
			checks[c].onclick=function() { this.coreClick.apply(this,arguments); document.getElementById(this.formID).get.click(); }
		}
	}
}
//}}}
!Critical Changes:
The following critical changes may affect the way you use ACP:
#If you are upgrading from ACP 4.x, see the critical changes for 5.0, they are important. 
#~FocusMax 3.4.1 or later is now required. It is available on the ACP Home Page in the left margin. 
#If you use ACP's auto-calibration feature, the uncalibrated images will be saved with a name "Raw-xxxx". Be aware of this, as it increases disk space requirements. You can disable this with a simple edit to ~AcquireSupport.wsc. 
#The observatory is now immediately released for web users on script completion. This was done to prevent users from needlessly tying up the observatory, however it does allow another user to jump in and lock the observatory before the first user starts another run. 
#Autoguider start/resume failures no longer end the run. Instead, imaging continues unguided. This was done to prevent passage of "small clouds" from ending a run. Be aware that you may get images with unusable tracking, so you need to check your images to make sure they were guided and discard those that were not. 
#The Web interface files author.html and index.asp have been updated. If you customized the web UI, the installer saved a copy in ACP\~WebDocs\~UpgradeSavedContent. Your existing web UI should work fine, but you'll notice some weird stuff at the beginning of error responses from starting runs. If you steal the ~PostFormPlugin item from the new content and use it in your content, you'll get the ~LightBox alerts too. 
!Product Improvements
#The ~PinPoint 5.0 engine is now included. ~PinPoint 5 has improvements in plate solving speed and reliability as well as a new robust FWHM measurement feature (see below, adaptive autofocus). 
#Adaptive Autofocus, which has been a disappointing feature, is now all-new. It uses the ~PinPoint 5 FWHM measurement feature and no longer relies on ~MaxIm DL's HFD measurement. Along with this, the autofocus logic in general has been refactored and smoothed out. A side effect is that FWHM in arc seconds is reported in logs following plate solutions. HFD is no longer reported for images, only for the result of ~FocusMax focus runs. 
#A new directive ''#autoguide'' has been added. This will force the next target's images to be autoguided regardless of the exposure duration. It will force autoguiding whether the existing ACP Enable Autoguiding preference is on or off. 
#It is now possible to control the pre- and post-flip timing margins via a new config file ''~FlipConfig.txt''. This is now described in ACP Help, including the usage of negative flip margins to optimize auto-flip for mounts that will track past their westbound flip point. The German Mount Flipping page has been updated to include information on this. 
#It is now possible to control the amount of time reserved for auto-focus by ACP's auto-flip via the new file ~FlipConfig.txt. This is now described in ACP Help. The German Mount Flipping page has been updated to include information on this. 
#Twilight flats now have ~ROT_PA in their FITS headers if a rotator is in use. 
#When an image is auto-calibrated by ACP (~Auto-Cal preference or #calibrate directive), the original uncalibrated image is saved with a name "Raw-xxxx". You can disable this with a simple edit to ~AcquireSupport.wsc. 
#ACP now automatically releases the observatory for web use at the end of any script. This helps prevent people needlessly tying up the observatory. 
#Running a plan from the web interface (Multiple Objects, Observing Plan) now allows starting the plan before dusk and with the dome shutter closed. This permits plans to start in the afternoon and sequence shutter opening and cooler chilling. 
#The Rotator control applet now has separate controls for guiding polarity and rotation reversal. This provides increased flexibility in setting up various guiding systems. 
#The ~TargetStart() custom user action can now return a value of 2 to indicate that the current target is to be skipped (instead of ending the run). This was done for the Puckett Supernova Search to pause for re-shoots in the middle of a run. 
#The catalog selector now reflects the new catalog types supported by ~PinPoint 5: the USNO B1.0 and NOMAD. Either can be set to retrieve reference stars over the internet, and the B1.0 can be set to access a local disk-resident 80 Gigabyte catalog. 
#Autoguider startup failure, or failure during repeat sequences, no longer ends the run. Instead, imaging continues unguided for the current exposure, and the guider will be re-started for the next one. This was done to prevent passage of "small clouds" from ending a run. Be aware that you may get images with unusable tracking, so you need to check your images to make sure they were guided and discard those that were not. 
#Autoguiding re-starts are more robust now. If, during a filter sequence, the guider is found to have stopped, a pointing update is done (for internal guiders) and an attempt is made to restart it. If that fails, another pointing update is done (for internal guiders) and another attempt is made to start it. If all of this fails, imaging continues unguided (see previous item). 
#An updated USNO ~NOVAS-COM Vector Astrometry component is installed if needed. It has new ~Delta-T tables and a small correction to the z-vector of the Position Vector object. 
#For safety, ACP now forces tracking off after any script runs, if the script is run from the web. 
#If Scope Clears Closed Dome is set, the automatic shutter close on scope park will now take place without waiting for the scope to park, making response to weather safety events faster. The dome will start closing almost immediately. Another vote against roll-offs which don't clear the scope in unattended remote situations! Help for Dome Control has been updated to reflect this new feature. 
#A default ~ACP-Weather script is now included. It simply parks the scope, relying on Dome Preferences "Close and park/home when scope is parked by script" to close the shutter and park/home the dome. Weather help has been updated for this new feature. 
#The web user interface Single target forms now immediately report a "below the horizon" error. This is popped up in a ~LightBox (see next item). 
#Many problems when starting a run from the web forms or starting a plan from the web are now reported in a popup ~LightBox alert. 
!Bug Fixes
#Relative paths given with the #dir directive now work as documented. 
#Pointing images no longer call for HFD calculation, in fact, ~MaxIm's HFD is never used due to new FWHM based adaptive autofocus. 
#Weather safe/unsafe is now monitored in its own timer. This fixes the bug where weather could not interrupt a running script if "disable slew during image download" option was turned on. A side effect of turning on that option is the complete cessation of refresh/poll timer activity in ACP (to minimize CPU effects on flaky CCD imagers). With its own timer, the weather check is never disabled. 
#The Preferences form has been corrected to use explicitly the words "true" and "false" in the registry, preventing problems on non-English systems. 
#The web server now properly sets an ancient Expires: header on responses, preventing caching problems when used with systems whose local time is slightly behind that at the server/ACP end. 
#Auto-flip logic has been substantially rewritten, including fixing the lead time calculation (which was incorrectly using the autofocus time instead of the image time). The result is a much simpler and robust logic. lead time is separately checked for a periodic or adaptive autofocus that may have come due, then again for the upcoming image that may follow an autofocus. This way, the lead time is no longer ever the sum of those times. 
#Logic to prevent slew-ahead (after taking image) if scope doesn't clear closed shutter has been fixed. 
#A compact format #dark target consisting of a mixture of zero (bias) and non-zero (dark) image durations is now executed properly. 
#Bias exposures no longer produce voice output. The rapid-fire timing of bias frames was causing the voice to get way behind the action. 
#Slew completion is now positively checked after an auto-focus slew-back. 
#Tracking is now turned off for #chill, #domeopen, and #domeclose. 
#The plan compiler has been fixed so it no longer compiles -00:xx:xx into a positive number. 
#The plan compiler now compiles comet elements properly. 
#The plan compiler now permits #dawnflats and #shutdown to be in the same plan. This was already supported by ACP 5.0, where a #shutdown would be passed to ~AutoFlat via the sequence token, eliminating the need for #dawnshutdown in the flat plan. 
#The plan compiler nas been fixed for short-format #bias. All intervals in the image set are set to 0 now instead of just the first. 
#The ~FocusMax version check now looks at the Version property, and requires 3.4.1 or later (as required for ~PinPoint 5). 
#Script ending no longer unslaves the dome if it happens to be slewing at the time the script ends. Script end no longer issues a Halt to the dome. 
#~AutoFlat now properly deals with filter names containing spaces. 
#The exposure timing loop has been refactored and now includes checks every 10 seconds for image completion even in the "pre-wait" loop. Hopefully, this light activity with ~MaxIm won't disturb flaky CCD imagers. 
#If autoguiding is disabled in preferences, the plan compiler now generates an error on #afinterval. 
#If an #autofocus starts the plan, yet ~AutoFocus preference is off, a needless post-focus pointing update is no longer done. 
#During shutdown, cooler warm up now quits if the cooler hasn't reached +5 deg. C after 20 minutes. It is assumed that it's too cold for that. 
#AO recalibration rotation tolerance has been increased from 1 degree to 15 degrees. 
#The web UI's Multiple Objects Plan form has been fixed so that navigation from a sub folder to the top-level plans folder now works. 
!Known Issues 
#Just prior to release, a conflict was discovered with the new Internet Explorer 7 only when using it locally on the same system as ACP (remote users can use ~IE7 with no problems). Specifically, ACP can crash and exit due to hard errors in the new ~JScript 5.7 script engine that comes with ~IE7. Until we can resolve this, @@color:#ff0;we suggest you do not upgrade ~IE6 to ~IE7 on your observatory/ACP system@@. If you already have upgraded, try uninstalling ~IE7. Be sure to set a System Restore Point before doing so, as we have reports of uninstalling ~IE7 destabilizing the system. If you'd rather not uninstall ~IE7, you can try using the free ~FireFox browser when running the web interface in the observatory. Or just run your plans the old fashioned way using the ACP control system interface. As soon as we can resolve this issue, we'll release a free update if needed (though it may be resolved by an ~IE7 service pack). 
#The built-in FTP server can, under as yet unknown conditions, slow down the rest of ACP such that images may take longer than they should. Until we get this issue resolved, we suggest you do ~FTP-based downloading of images during non-observing times. If you need to do mass downloading of images (best done with FTP) during observing times, we suggest turning off ACP's internal FTP server and using one of the free Windows FTP servers such as ~FileZilla or Golden FTP Server (free version) on the ACP system. You will have to set up accounts for your users separately, and we strongly suggest you give them access only to their own images folder and subfolders! The internal FTP server is based on a 3rd party engine and we are working with the vendor to identify the problem. We hope to have a fix in the next release. 
#The Stop Dome Motion button of the Dome Control panel, the Stop Slew button, and scripted slew aborts may all fail to stop shutter opening/closing. This is not an ACP bug, but a problem with the Dome driver. It should stop shutter motion on a Dome.~AbortSlew call. But the Dome specification is not clear on that, thus most drivers don't do this. There is no defined call in the driver spec for stopping shutter motion. 
#Clicking on ACP while it is waiting for ~MaxIm or a telescope driver will sometimes cause a fatal runtime error in ACP "It is illegal to call out while in a message filter". This appears to be unavoidable under some circumstances, and is a quirk in the Microsoft Component Object Model inter-process messaging stuff. Moral: Don't click around or use your observatory computer for other stuff while doing a run. 
#The console display shown on some web pages is too big for 640 x 480 screens or when the browser is set for large type sizes. I don't want to shrink the console any more. I may move the buttons to the top of the console blue box, though. The best thing is to reduce the browser font size to 'smaller' or whatever. 
#If ~MaxIm DL fails, ACP will fail with an Automation Error. This is also true of any other ~EXE-based object server that may be in use. 
!Uninstalling the program
This program supports the standard Windows uninstall system. Locate the program name in the Add/Remove programs control panel and click the Add/Remove button. After the process completes, you may remove any files that may be left in the installation directory (for example, files you may have created there are not removed by uninstall). @@color:#ff0;Warning! Everything, including configuration settings, is removed when you uninstall!@@

Microsoft Agent is not designed to be uninstalled. It is considered a part of the operating system, and is delivered as a standard part of Windows 2000 and later. 
----
!Critical Changes:

''The following changes may affect the way you use ACP:''

#The two separate scripts folders have been merged into one master scripts folder that is shared by local and web usage. The old ~WebDocs\Scripts folder is now mapped by the ASP engine to the Scripts folder, and all web UI uses of ~plan-acquire.js have been changed to ~AcquireImages.js. The setup package detects an older configuration and changes it to the new scheme, renaming ~WebDocs\Scripts to preserve any custom scripts that may be in that folder.
#As of this version, the default location for ~WebDocs and ~WebLogs folders have moved to Windows "public" folders, under ACP Web Data, in folders named Doc Root and Server Logs, respectively. The location of these public folders differs on XP and Vista/7. On XP, they are under Shared Documents. On Vista/7, they are under Public Documents (under the Libraries category). This was done because it is no longer recommended to store user data in Program Files areas. The public documents location assures that the web root and logs are visible to ACP no matter who is logged into the system running ACP.
#Scheduler Users Only: This upgrade includes a new Interop.ACP.dll, the module that provides access to ACP for Scheduler. It is installed with ACP, in the same folder as ACP.exe. Copy this into the Scheduler's installation folder, normally Program Files\ACP Scheduler, replacing the older Interop.ACP.dll file that was there.
#Programmers Only: The ~ActiveX interfaces for ACP have changed. If you set a reference in one of your projects (early binding) to ACP, you will have to rebuild your project against ACP.exe from V6.0. If your project is .NET you can just replace the ACP interop assembly with the one described above. This does not affect scripts or programs which late bind (~CreateObject, new ~ActiveXObject, etc.).
!Product Improvements and Changes
#The plan language now supports a new #readoutmode directive, which can be used to control the imager's readout mode. This is mostly useful for activating the RBI "pre-flash" mode in imagers that support it.
#If the imager supports a readout mode whose name has "fast" in it, it will be used for pointing exposures to reduce overhead. Otherwise, the "normal" or default mode will be used. This prevents slow readout modes (RBI flood) from impacting pointing update times.
#The plan language now supports a new #defocus directive, specifying the number of focuser steps to move. This can be used to intentionally defocus just before acquiring a data image. Useful mostly for photometry work.
#The autoflat process can optionally slew to a "dew avoidance" position after acquiring flats. The feature (on or off) and the position are controlled by new directives in ~AutoFlatConfig.txt. See Automatic Flat Frames.
#The default locations of the ACP web document root and logs folders have been moved out of the Program Files\ACP Obs Control folder to the public documents folder. This was done for user friendliness and system security reasons. On XP these folders are under Shared Documents\ACP Web Data. On Vista and Win7, they are under Libraries\Documents\Public Documents\ACP Web Data. In both cases these locations are visible to anyone who may be logged into the system. The ACP documentation has been updated for this change. On an upgrade, the installer will leave the web documents where they already are.
#The ~AcquireImages.js observing logic script now reports internal details on each ~Auto-Flip calculation. This was added to assist in solving auto-flip timing issues.
#There is now an option to disable image-time aggregation for guide/no-guide decisions. It's on the Preferences Guiding tab.
#Bad values for the pointing/focus-reference filter (preferences, imaging) are now caught on plan startup.
#Bad filter numbers in ~FilterInfo.txt are now caught at plan startup.
#A manual abort will no longer cause the special script ~ACP-ScriptFail to run. The docs have been changed to reflect this.
#Each time ACP connects to a mount with a Telescope V2 driver, it reads the driver's ~EquatorialSystem property. If its value is equJ2000, it forces the Telescope Preferences setting "Scope needs local topocentric coordinates" to be false. This assures that research grade scopes which use J2000 always get coordinates in that equinox.
#The logic for finding a "bright star" used for autofocus etc. has been enhanced to read a file ~BadBrightStars.txt which contains a list of known bad bright star locations (by RA/Dec). Stars within 5 arc minutes of these coordinates are not considered for use.
#Inhibit attempt to guide pointing exposures for internal/OAG guiders. It will almost always fail. Log a message warning of this.
#The Microsoft Agent system for Windows Vista and 7 is now included in the ACP installer. Please note that there is no way to control the voice, and on Vista you're going to get the horrible "Sam" voice. On Windows 7, the "Anna" voice is used. The default character is now Peedy the Parrot since most post-XP people are running Win7 and the voice is female. You can choose Merlin if you want!
#The license key format has been changed to be more user-friendly. The new format consists of 6 groups of 4 alphanumeric characters, lower case only, no punctuation. This also solves the problem of ~GMail mangling serial numbers that have %n in them.
#The ACP "About" dialog now shows the Hot Fix level applied.
#The USNO ~UCAC3 catalog is now supported for plate solving. (see [[UCAC3 Reference]]}
#The observing logic has been altered to make it friendly to cloud data storage/sync services such as ~DropBox. This is great way to get images from a remote observatory.
#By default, ~AutoFlat run logs are now saved into the standard folders for log files (local user or web user) in an ~AutoFlat subfolder.
#It is now possible to specify a special folder where ~AutoFlat run logs are to be saved.
#The Share Your Sky! documentation (part of ACP Help) has new info on using ~DropBox to get data from a remote observatory.
#The web System Status now shows an image of the selected guide star as acquired at the final guide exposure. Clicking on this will show the complete guider image at that same exposure. These are created right before the guider is started.
#The size of the pop-up (light box) image preview in the web interface has been increased to 1024 bits (maximum) on the long side.
#The info on FTP usage in the web interface has been updated and greatly expanded. Instructions for connecting a Mac OS X system (Finder) to the FTP server have been added.
#The web System Status now displays a tracking error graph while guiding is active.
#The web System Status now displays the last FWHM from a plate solution of a data/final image.
#The web System Status now displays the guiding exposure interval while guiding.
#The web System Status now displays the progress of an observing plan: Sets, Targets, Repeats, Filters (~), and Counts.
#The web System Status now displays the progress of a flat plan: Dawn/Dusk, Filters (Flat Sets), and Counts.
#The web System Status now displays "Pointing Update" when doing a pointing update, instead of just "Observing". This helps track the progress of the plan.
#The web System Status now displays "Idle"when the imager is idle, instead of the confusing "shutter closed".
#The web System Status now displays the local time in addition to UTC.
#The web System Status exposure progress thermometer has been improved to more accurately show progress.
#The Welcome item in the web interface now has a Select Theme control, making it easier to see that you can change the colors of the display.
#The ~Sky-Map features have been removed from the Web interface. The service was not working out.
#The thumbnail and expanded preview images on the web interface are now shared between all users, so one user can see the images being acquired by another. In addition, thumbnail and preview image are produced when plans are run from the console, allowing web users to monitor console activity.
#If ACP's auto-calibration option is on, the auto-calibration check boxes on the Single Image and Color Series forms are pre-checked and disabled, and the tool tip indicates that observatory-wide auto-cal is in effect.
#The installer no longer offers to keep the local user data (plans, logs, images) under Program Files\ACP. This is strongly discouraged by Microsoft, and prohibited in secured systems. Once ACP is installed, it is still possible to configure local user data wherever you want.
#The ~DC-3 Dreams Remote Assistance tool is now included and is accessible from the Windows Start menu.
#The ~DC-3 Dreams Remote Assistance tool is now included in the pre-installed files for downloading from the observatory.
#The binning display on the web System Status display now reads n:1 instead of n:m (where m is the Y binning).
#The ~TestPointing script now reports alt/az and flip state (if GEM) for each test point. This will aid diagnosing pointing problems.
#When the pointing corrector is active, the initial sync will be sent to the scope after every (re)connect to the scope. This allows ACP to be kept running 24/7. The documentation now includes this info in the Pointing Corrector section.
#A plan directive and its argument can now be separated by tab(s) as well as space(s).
#Maximum unguided exposure interval can now be set as high as 1800 seconds (was limited to 600 seconds).
#The bright star logic now reports both the catalog ID and the J2000 coordinates of the chosen star.
#The ~AcquireSupport library now produces a file containing the Julian Date of the last successful auto focus. This is for Scheduler.
#The "new version available" logic has been improved to handle versions and hot fixes better. The limitation on the number of hot fixes no longer applies.
#The web interface System Status display shows Wind only above 8 Kt instead of 5 Kt.
#The user actions ~TargetStart and ~TargetEnd have been more fully described to include the parameters passed when ACP Scheduler is being used.
#The license entry form now takes the support/upgrade expiry date as three separate numbers, avoiding problems with localized date formats.
#The Plan Checker drag-and-drop icon has a new look and now works on 64-bit systems.
#The Guiding preference for "external guider" has been relabeled for clarity. It should be on only for a separate guide scope and is now labeled thusly.
#The horizon editor in Observatory preferences now has a max altitude of 90 degrees.
#The horizon editor in Observatory preferences no longer reports discontinuities.
#The documentation has been revised in multiple places to cover both internal and off-axis guiders.
#The Imaging preference Clear/Empty slot number has been relabeled for clarity, along with the tool tip. The documentation has been edited for the change in labeling of the Clear/Empty slot number.
#The web authoring interface now warns that you must refresh your browser before authoring. This appears in a light box popup.
#The pointing corrector documentation now explains how the auto-learning handles closely spaced mapping points.
#The web user interface now has the jQuery library integrated. It may be used in any ~JavaScript plug-ins, etc. A new item describing this feature, with links to other resources, has been added, and the Authoring menu lists this new item.
#The ~ActiveX interfaces for ACP have changed, to allow for new members to be added. See the critical change notice above. A new interop assembly (for Scheduler or other .NET programs) is now included with the installation.
#The documentation of ~FlipConfig has been clarified by improving the distinction between the meridian and the flip points.
#The Getting Started documentation no longer advises using Consistent Approach, and a warning has been included in the Consistent Approach doc advising against using it unless you really need it.
#Spiral Search is now documented as evil, to be avoided if at all possible.
#The web System Status guide error display fields have been widened so they don't cause the display to jump for negative values of guiding errors.
#The Single Image form now has a larger exposure interval field, 5 characters, like the Color Series form.
#The image simulator was adjusted to make the stars brighter.
#The installer now resets the Tip of Day count and sets it to show on ACP startup whenever an upgrade is done.
!Bug Fixes
#The dome slaving logic has been corrected so that it will not assume a pier flip when the mount tracks past its flip point (nominally the "meridian").
#Dome slaving state is now restored at script end/error to its state when the script was started. This prevents "Inhibit dome slaving while imaging" from causing slaving to be left off if there is an imaging or script error.
#Web server authentication now checks the registry data every time it is called. This allows it to pick up changes made to the account while the user is logged in 100% of the time. Needed by people who use aacountctrl.asp to disable an account while it is actively being used.
#The Sensor Angle setting for OAG is now honored for the AO. It was previously being honored only conventional OAG guiding.
#Documentation and program logic for the Flip Settings (Prefs, Telescope) have been fixed to indicate that these flip settings are needed for ACP auto-flip even if the mount reports its pier side info.
#The various active buttons in ACP Help (for example in Getting Started, the test buttons) now work correctly on Windows 64-bit systems (when launched from the start menu, they always worked when Help is launched from ACP's Help menu).
#It is now possible to disconnect a camera which has no cooling control from the web interface.
#The timing logic and clock displays can now cope with fractional-hour time zones such as South Australia (+9.5 hours).
#Fix image simulator so that catalog and other errors in ~PinPoint are caught and fail the run.
#The installer has been fixed to properly/reliably register ~AcquireSupport.wsc and Plan.wsc on 64-bit systems.
#An obscure timing bug that affected unguided dithering on scopes which cannot be synced, and whose settle time was near zero, has been fixed. The scope's coordinates are polled immediately upon completion of a slew.
#The console Slew/Sync (catalog) window has been fixed so slew failures won't appear to hang the program. The window now closes after the error is displayed.
#The ~AutoFlat script no longer slews to the "dew-avoidance" position at dusk if it is not "Safe to slew anywhere with dome/roof closed".
#An external call to Util.~WeatherConnected = True can no longer leave the refresh timer permanently frozen if weather is not configured or there is an error connecting to the weather server.
#The web server no longer deletes sessions when login authentication fails. Instead is leaves the sessions to time out on their own. This was done to compensate for browsers (Safari/~WebKit) which "occasionally" send unauthenticated requests resulting from AJAX operations, only to re-send the same request with authentication. This change avoids the loss of the session in that event.
#Error reporting of ~MaxIm's problem on auto calibration failure has been fixed.
#The cause of the Java user name/password popup that appeared when using Safari and Chrome has been removed.
#The value validation in ACP preferences now properly reports the allowed maximum value when an entered value exceeds the maximum.
#Some old and inaccurate info has been updated in the ~AutoFlat information.
#The Clarity weather display in the web interface now works for Clarity II (which has a changed property name).
#The account control ASP script aacountctrl.asp has been fixed so it gives the correct response for enable/disable account functions.
#When setting up standard flats through the web interface, if a single dusk/dawn plan is created, any separate disk and dawn ones are deleted. This prevents surprises.
#The sample minor planet plan that uses MPCORB has been corrected, it was missing the leading 'MP' in the syntax.
#Error reporting for the ~TargetStart user action has been fixed.
#The styling for file upload widgets in the web interface had been adjusted for Chrome, Android, Safari and iPhone browsers.
#A rare bug which causes ACP to immediately quit after starting has been fixed. Once in a blue moon, the ~TimeFormat setting in the registry ended up with non-numeric or out of range data in it.
#Dome slaving state is no longer saved and restored across a script invocation. This rendered dome slaving control by script useless!
#A problem where a resumed plan would skip past all images has been fixed. The resume-from-interrupted-plan logic was fixed for an edge case where the #quitat or #shutdownat time was reached with one of the loop counters being at its maximum (just exited from that loop).
#An ACP Telescope Hub client which disconnects the telescope will no longer actually disconnect the telescope unless it originally connected it and no other clients are connected.
#The documentation for the auto flat file/folder customizing template was missing $FLATSEQ. This has been corrected.
#Documentation relating to folder location for the web and FTP logs has been corrected.
#A recenter on data image solve will no longer do ~AutoFlip if the mount is not a GEM.
#The Tip of Day form was fixed so show the correct title.
#A missing utility script needed for the web interface's utility "looping test" is now installed.
!Known Issues
#If you have not installed ACP's Microsoft Agent/Voice option, and you are on Windows Vista or 7, you may get a "missing component" alert on exiting ACP. This is normal. Just click "The program ran OK" and the alert will disappear. You won't see it again.
#The built-in FTP server can, under as yet unknown conditions, slow down the rest of ACP such that images may take longer than they should. Until we get this issue resolved, we suggest you do ~FTP-based downloading of images during non-observing times. If you need to do mass downloading of images (best done with FTP) during observing times, we suggest turning off ACP's internal FTP server and using ~DropBox or one of the free Windows FTP servers such as ~FileZilla on the ACP system. You will have to set up accounts for your users separately, and we strongly suggest you give them access only to their own images folder and subfolders! The internal FTP server is based on a 3rd party engine and it's unlikely that the vendor will address the issue.
#The Stop Dome Motion button of the Dome Control panel, the Stop Slew button, and scripted slew aborts may all fail to stop shutter opening/closing. This is not an ACP bug, but a problem with the Dome driver. It should stop shutter motion on a Dome.~AbortSlew call. But the Dome specification is not clear on that, thus most drivers don't do this. There is no defined call in the driver spec for stopping shutter motion.
#Clicking on ACP while it is waiting for ~MaxIm or a telescope driver will sometimes cause a fatal runtime error in ACP "It is illegal to call out while in a message filter". This appears to be unavoidable under some circumstances, and is a quirk in the Microsoft Component Object Model inter-process messaging stuff. Moral: Don't click around or use your observatory computer for other stuff while doing a run.
#If ~MaxIm DL fails, ACP will fail with an Automation Error. This is also true of any other ~EXE-based object server that may be in use.

----
This major release includes many new features and improvements. Internal changes are such that older ~ACP-standard scripts (not observing plans, this means scripts) will not work. You must use the scripts that come with this version. Your own scripts, however, are almost certain to work OK. We have tried very hard to maintain the API and ~UserAction hooks as backwards compatible. Configuration files have been expanded and they are now in a new place (it will find your old ones for now). Read on, there are many changes!!
!Product Improvements and Changes
#The ~AutoFlat system now supports hands-off usage of ''~FlipFlat'' and ''~FlatMan'' variable brightness electroluminescent panels and screen or dome flats. The support is open enough that other panel types (with command line controls) can be used as well.
#To help sync lost mounts, all-sky plate solving has been included in the observing logic. If ~PinPoint fails to plate solve twice (with an offset), the Astrometry.net service will be used via its JSON webservice API to attempt an all-sky plate solution.
#ACP's settings, including its configuration files, can be saved and restored, allowing fast changes between configurations and transferring settings between systems.
#Pointing updates can now skip the reslew after a pointing update for internal and off-axis guiders. The Maximum Pointing Error setting (~PinPoint tab) is effective for all guider configurations.
#For an off-axis guider (as opposed to an internal/SBIG type), the guider is now left running across filter changes since the sensor is not behind the filters. This is an optimization that will save time and guarantee that all images in the series are precisely registered.
#The help on [[Customizing File and Folder Names]] now has a template generator that should help understand how the system works, and provide usable templates for many common situations.
#A new API call ''Util.~UnsafeSlewToAltAz()'' has been added. This allows positioning the telescope without regard for the horizon and tilt-up limits. This changed the API signature, making ACP 7 incompatible for early binding.
#It is now possible to specify focus star magnitude ranges for each filter, so brighter focus stars can be used for narrowband filters (when configuring the focus offsets or if per-filter routine use is desired). It also handles the situation for large telescopes with sensitive cameras which need fainter focus stars. See the relevant section in [[Using Filters]].
#The search range for focus stars has been increased to 15 degrees to allow for specifying brighter (and therefore more sparse) focus stars.
#Plan support for automatic orbital elements lookup from the MPC's observable comet database ''~Soft00Cmt.txt'' has been added. A target line starting with CT and followed by an observable comet's name or designation is all that's needed. This is analagous to the support for the minor planet elements database MPCORB that has existed in ACP for years. ''//is it a replacement? is it better?//''
#A new configuration control (Preferences, Autofocus tab) and a corresponding ACP API property ''Prefs.~AutoFocus.~ForcePerFilter'' have been added to allow users who want per-filter autofocusing even when there is a ''~FilterInfo.txt'' config file. This was added so these users can still specify the focus star magnitude range (in ~FilterInfo).
#The separate Rotator Controller app has been replaced by settings and API members within ACP. New API properties ''Prefs.~AutoGuiding.~SensorType'', ''Prefs.~AutoGuiding.~SensorAngle'', and ''Prefs.~AutoGuiding.~AdaptiveOptics'' have been added. A new object ''ACP.Rotator'' has been added as well. It is not a standard ASCOM Rotator interface - it is a wrapper with some special features and most ASCOM members missing.
#A new control for displaying coordinates in J2000 (for scopes that use local topo) has been added. If the scope has a J2000 controller, the checkbox is forced on and dimmmed.
#The ''~FlipConfig.txt'' file is no longer used. Instead, the old pre- and post-flip margins are now Prefs properties and are read by ~AcquireImages from there.
#When any script changes the ''Dome.Slaved'' property from False to True, an immediate call to slave (if needed) is made. This (among other things) will effect a slave call between images when the "Inhibit Slaving While Imaging" option is set.
#A new setting for weather, "Unsafe Time" forces weather to remain unsafe for a minimum amount of time. This defaults to 10 minutes, which is also the minimum. A new API ''~propertyWeather.~UnsafeTimeWaiting'' is available for UI use. It is used to change the color of the new WEATHER annunciator to yellow when in that wait time.
#The annunciator lights have been reorganized, and new ROTATOR and WEATHER lights have been added.
#The web system status display now reports exposure progress as well as total exposure time.
#When connecting the camera and when guiding is enabled, ACP now looks to see if ~MaxIm is set up to guide via one of its telescope-driven modes, and if so, it connects ~MaxIm to the telescope for guiding.
#The Getting Started documentation has been updated in many places to incorporate the improvements in ACP 7 and also to reflect general progress in the state of the art, particularly with Internet services.
#The web forms now have the ~MaxIm filter names and binning values available offline. This is done by making a cached copy of this info every time the camera is connected, then using this cached info for the forms.
#The web UI astro-imaging form now has a control for the "block time," the chunks of time into which the request for each color's images are divided.
#The web UI astro imaging form now has a field for specifying dithering amount (which is always in units of main imager pixels as of this release).
#The ~PinPoint settings for Minimum Brightness, Sigma, and Catalog Maximum Magnitude have been removed from the Preferences dialog (~PinPoint and Local User tabs). They are now located in the registry only and must be altered there if needed. The vast majority of users find that the default settings are fine.
#The scheduled observation submission form for ~Astro-Imaging now puts the sub-exposure time into the names of the Plans it generates.
#The guider detector size in the web UI Instruments item has been relabeled to show its true function (the dimensions of the last image taken by the guider, may be the track box size). This is how it works in ~MaxIm.
#ACP's configuration files are now kept in a public location Public Documents\ACP Config instead of the now-restricted Program Files area. Using the above facility to save and restore a profile will automatically move the config files to the new place.
#The licensing dialog has been moved to the Help menu and relabeled "Enter License."
#Cal frames (#dark and #bias) are now done during the last (or only) #set. This allows calibration frames to be put at the end of a long multi-set plan, for execution at the end of the evening.
#A new configuration control (Preferences, General tab) and a correcponding ACP API property ''Prefs.~CalFramesInAllSets'' have been added to control whether #dark and #bias images will be done within each set (old behavior) or just during the last (or only) set (new behavior).
#A new configuration control (Preferences, Imaging tab) and a corresponding ACP API property ''Prefs.Autoguiding.~SensorPlateScale'' have been added and documented to allow dithering in units of main imager pixels at all times.
#The #dither directive now always specifies main imager pixels for the dithering amount. The old behavior is preserved, however, if the Guider Plate Scale setting (Imaging preferences) is left blank.
#The #afinterval periodic autofocus interval feature now includes doing an autofocus at the start of the plan.
#The #chill directive now accepts an optional second argument, the temperature tolerance. This allows ACP to support high-precision photometry applications that require tight temperature tolerances. You can put one of these before every target!
#A new directive #nopointing has been added which allows suppressing pointing updates for individual targets.
#A new directive #nosolve has been added which allows suppressing final image plate solving for individual targets.
#A new directive #noweather has been added which disconnects weather if the dome/roof is closed. This allows dawn calibration frames to be acquired without being interrupted by a weather unsafe event. The Plan format documentation and sample plans have been updated to reflect this new capability.
#The ~AutoFocus "Base Exposure Interval" is no longer used or shown on the preferences window. ACP allows ~FocusMax to choose its exposure interval.
#Aperture and focal length in the Preferences window, Telescope tab are now in millimeters instead of centimeters. This was a common source of error (centimeters is strange).
#The Getting Started info for ~TheSky now advises to slow the cross hair update interval in ~TheSky X (from its "as fast as possible" default).
#You can now specify a camera readout mode to be used for autoflats in ~RoModeInfo.txt.
#Logged true focal length is now millimeters instead of centimeters, to match the above.
#The web input forms now accept both 2-part and 3-part sexagesimal numbers.
#The ACP window position is now saved and restored from anywhere on a multiple-monitor system instead of it always coming back on monitor #1.
#The imager temperature display in the web UI now reports "cooler off" (instead of preposterously high value) when the cooler is off.
#When Connecting and Disconnecting the camera in ACP, it now actually connects and disconnects the camera in ~MaxIm as well.
#A new utility script and command line support program (~BlindSolver.exe) provides a way to find a scope which has become lost without homing (including scopes that do not even have homing capability).
#The console now shows only the script name in the display, making it much easier to see what script is loaded. The tooltip text now contains the full path to the script.
#During the long (60) sec wait after parking a scope that disconnects when parked, a popup box now shows for feedback.
#The utility script ~SyncScope has been renamed ~CenterScope to better reflect its usage. It can be used on scopes that cannot be synced.
#A new Console member, ''Console.~AllText'', was added so that .NET clients will have access to the console text. The original ''Console.Text'' property is oddball in that it takes an optional parameter, preventing it from being seen by the .NET type library importer.
#Two new Prefs members, ''Prefs.~EnableAllSky'' and ''Prefs.~AstrometryNetAPIKey'' have been added in support of the new all-sky plate solving capability.
#The ~CalibrateGuider script now assures that GEM mounts are looking east (from west of pier) as required by ACP.
#A new class ''Util.Scheduler'', and two new properties ''~DispatcherEnabled'' and ''~DispatcherStatus'' has been added to the API for support of better integration between ACP and Scheduler.
#A new property ''Util.~ScriptCompletionState'' has been added to the API for support of better integration between ACP and Scheduler. This will allow a future release of ACP Scheduler to determine the status of ACP job completion in a much more robust way.
#A new API property ''Application.~ConfigPath'' returns the path to the Public Documents\ACP Config folder, where the ACP config files are now kept.
#A new API method ''Util.~GetConfigFilePath()'' has been added. This is used in all ACP scripts to ease migration between the old and new config file locations. It will find the given config file in either the old or new locations, with precedence given to one found in the new location.
#Guiding now supports manual camera rotation, sending the guide angle from the last plate solution to ~MaxIm for calibration-free guiding.
#The web UI Authoring documentation now recommends using Chrome as the browser, and warns of the incompatibility with ~FireFox.
#Logging of custom file/folder templates now includes the actual template(s) in use.
#The maximum values for guiding exposures have been increased from 30 sec. to 120 sec. in the preferences dialog.
#The online help has been expanded to describe the ways that user-written shutdown logic can be run at the end of a plan.
#The Console.~PrintLine trace statements in ~UserActions-Template.wsc have been commented out.
#Documentation on ~MaxIm filter setup now makes it clear not to have blank slots between live slots.
#The support for ACP Web UI submission forms for ACP Scheduler is now part of the ACP distribution cycle, not Scheduler.
#ACP includes the installer for the Microsoft Script Debugger 1.0. Do not install this if you have either Visual Studio (full) or Microsoft Office. Use their script debuggers instead. See the Scripting Guide - Useful Tools and Information, Debugging section.
#On new installations, the window layout now defaults to vertical, the poll rate defaults to slow, and the web server is set to a 15 minute session timeout and auto-release is enabled.
!Bug Fixes
#An obscure condition under which the wrong time was used when calculating GEM flip waiting after an auto-focus has been fixed.
#It is no longer possible to open the dome/roof if the weather is unsafe. This hole existed in the Dome Control window as well as the web System Status panel and even the scripting API. All of these holes have been closed. If there is no weather info available, of course, there is no protection!
#Two conditions which would result in proposterously long wait times before a flip have been fixed.
#Dome slewing and slaving for Alt/Az telescope mounts has been fixed.
#Clicking the Stop Dome Motion button in ACP's dome control window, or calling ''Dome.~AbortSlew()'' will now result in ~AbortSlew being called in the actual Dome driver. This allows stopping the open/close of the dome.
#The Scheduler submission forms in the ACP web UI no longer enforce "object is not above horizon" like they do (necessarily) for live observing.
#The dew avoidance slew will not be done if in Dome Flat mode.
#While initializing for a run, the test for whether a mount supports offset tracking is now done with Tracking turned on. The AP mounts (and probably others) need to be tracking before changes to tracking rate are legal... Duh!!
#The ''#quitat'' or ''#shutdownat'' time is now honored during a wait for meridian flip. The plan ends if the wait time needed for the meridian flip extends beyond the quit-time. It does not wait until the quit-time.
#Autoflat images now have ''PA'' in FITS, and this is (correctly) the sky PA. The ''~ROT_PA'' field in flats is now (correctly) the mechanical rotator position. This matches the usage for ACP data images, and therefore flat application software should work properly.
#The ~FocusOffsets.vbs script no longer times out after 5 minutes of waiting for its "use this?" question at the end.
#The Dome.Slew() method was fixed. It never worked (and wasn't used until the new panel/screen logic).
#The drag-and-drop plan checker now correctly supports the sun-down angle form of #waituntil.
#The time-only form of #waituntil now will no longer wait for more than 12 hours regardless of the current and wait-for times. This waited for up to 24 hours under some conditions (e.g. wait until 23:30 when the time is 00:15). It no longer does this.
#The catalog type selector (Prefs, ~PinPoint) has been fixed for ~UCAC2 (not recommended).
#Logging of custom file/folders in use has been fixed so the info is written to the run log file.
#The ~PinPoint/~All-Sky preferences tab now validates the field "Max Slew Error w/o Pointing Update", preventing type-mismatch errors on startup, etc.
#The GSC Installer has been fixed for the layout of info on the current master ~CD-ROM.
#The GSC Installer now writes its log file to the Desktop (instead of in the now-inaccessible Program Files area).
#The calculation of ~ACPApp.Path when ACP is started up on demand to serve its objects (OLE start) has been fixed.
#The east and west flip points can now be set to up to 100 degrees, to allow non-flipping "semi-GEM" mounts.
#The Dawn/Dusk item in the ACP Web UI has been fixed for high latitudes (where the Sun sometimes never gets above/below the dawn angles).
#The camera warming routine (part of #shutdown) now waits for three minutes before testing the temperature rate for warming completion. This allows cameras that are slow to start warming (e.g. Apogee) to successfully begin the warming cycle.
#The plan compiler now catches bad numbers like "2x.5".
#The start menu link for the ACP User Guide now works on Windows 7 32-bit.----
This release adds many new features and corrects some things that were found to be broken or needed improvement. It is part of ACP Expert 8.1. The Scheduler and ACP are a matched set.

!Critical Changes
The following changes may affect your existing ACP installation:

#In ACP 8 saving of the raw/uncalibrated files when doing auto-calibration was not done by default. This was a change from earlier versions of ACP. With this release, the original default is restored. Now, by default, ACP will save the uncalibrated data. You can turn this off using the Save original uncalibrated file/data images option in ACP Preferences, Imaging tab. This used to be an edit to the ~AcquireSupport library. That is gone now, replaced by the setting. 
#When doing auto-calibration, your raw/uncalibrated images will now be saved into a subfolder named RAW under your final/calibrated images (as well as having ~RAW_ prepended to their names as before). This may cause a disruption to your automated pipeline if you depend on the locaiton of the ~RAW_xxx files. 
!!Product Changes and Improvements
#A new weather server for the AAG ~CloudWatcher system has been included, and the online help has been edited to reflect its usage and setup. 
#The AAG, SRO, and Boltwood II file weather servers now look for the "alert" flag (it is present only in post-2012 versions of Clarity). If it is present, that will be used for safe-unsafe decisions instead of the parameter thresholds (Very Cloudy etc). 
#A new custom action ~AcquireImage has been added. This hook allows the replacement of the ACP image acquisition logic with something else, for example acquiring a spectrum. 
#The web interface now contains a new Sky Flat Analyzer tool. This great tool comes from ACP wizard Dick Berg. It analyzes ACP sky flat run logs and graphs the exposures. It is a great help when ordering the filters and binnings to make the most out of twilight time. 
#The web interface now contains a new pictorial field of view tool which shows an astro-photo of the current telescope location and field. It is generated via the Aladin Lite service of CDS, Strasbourg University, France. 
#When all-sky plate solving is used, it is now possible to use a local all-sky solving engine (Andy Galasso's ansvr) instead of needing a network connection to get to the online Astrometry.net server nova.astrometry.net. 
#The Scheduler Single Image form now accepts optional time spacing and time tolerance values, and thus may be used to create time series with gaps between Observations. This greatly increases the power of this form. 
#In the Scheduler web forms, checking the Moon Down checkbox causes the Moon Avoidance Lorentzian fields to fade out and be initialized to default values. 
#A new option for auto-calibration has been added (Imaging tab of Preferences) allowing you to control whether or not the uncalibrated/raw image(s) should be saved. A corresponding API member Prefs.~CameraPrefs.~AutoCalSaveRaw has been added to support this in script. 
#The auto-calibration documentation has been expanded, corrected, and updated. It was totally inadequate! 
#The web interface now has a weather radar information item. It contains info for administrators on how to edit it for their location. The included map is from the US National Weather service. It can, of course, be customized for other countries. 
#The web interface now has a Clear Sky Clock item. It contains info for administrators on how to edit it for their location. 
#The web interface now contains a new tool for displaying AAVSO finder charts. Thanks to ACP wizard Dick Berg for this tool. 
#The custom user-actions now includes a new "hook" ~AcquireImage. This allows optional branch-out to special image acquisition code during an ACP plan or Scheduler Observation. This has been included as part of an ongling effort to support spectroscopic observations mixed in with wide field imaging. We'll announce this when the research and development has been completed. 
#The weather settings will no allow 0 minute minimum unsafe time, to accommodate weather stations that have their own minimum unsafe time. 
#The exclusion zone for guide star selection has been increased from 16 to 24 pixels, to allow for dithering and position noise during startup. 
#The Live Observing part of the web UI's main menu disappears when the Scheduler dispatcher is enabled. 
#A new setting has been added (General tab of Preferences) to disable the auto-resume feature for ACP plans. A corresponding API member Prefs.~DisablePlanResume has ben added to support this. 
#Panel/screen flats can now be given separate brightness values for each binning level as well as for each filter. See the ~AutoflatConfig documentation for details. 
#Panel/screen flats now start with the exposure last used for a given filter and binning. This makes the process more efficient by limiting the TEST exposures to one in most cases. If the saved value doesn't result in ADU in limits, the TEST will continue as usual to determine the needed exposure. 
#Two new FITS fields have been added to all acquired images: ~HJD-OBS the Heliocentric Julian Date, and ~BJD-OBS the Barycentric Julian Date (Syn barycenter). 
#The web user interface now displays Wait Flip in the 4th column if waiting for a flip. Details can be seen in the console log. 
#The preview thumbnail and larger popup are now preserved until a new image has been completed. 
#A new setting has been added (General tab of Preferences) to force an autofocus whenever the (GEM) mount flip. A corresponding API member Prefs.~AutoFocus.~FocusAfterFlip has been added to support this. 
#The Scripting Guide's information on debugging and debug tools has been updated to reflect the availability of Visual Studio 2015 Community Edition. This is an excellent system for both writing and debugging scripts. 
#The jQuery library included with the ACP Web user interface has been updated to V1.12.4. Despite there being newer jQuery versions (V2 and just this month V3) we've found that most of the tried and true components, including the jQuery UI library are stable with V1.12.4. We'll review this again in a year. 
#The browser support library function ~DC3.Lib.~postChdir() has been changed to take the target URL of the POST request, like the ~DC3.Lib.~postMkdir() function. In addition the "Multiple Objects Plan" server support script /ac/aacqplan.asp has been changed to include the URL in its call to ~DC3.Lib.~postChdir(). This will affect only authors, and then maybe only one. 
#The ACP.Weather object has been strengthened to prevent in-process weather servers (e.g. ~WSCs) from allowing re-entry into the weather server via calls to (e.g.) Util.~WaitXxx()). 
#The ACP Util.~DeltaT property has been updated through 2020.0. 
#An updated USNO ~NOVAS-COM Vector Astrometry component is installed if needed. It has new ~DeltaT tables through 2020.0. 
#The initial guider trackbox image for the web UI has returned to using a more efficient API of ~MaxIm, following a fix for the API in ~MaxIm. 
#When there is no existing ~FilterInfo.txt file, the ~FocusOffsets script restores the reference filter's focus position at the start of each iteration through the filters. This prevents a last filer's large focus offset from causing focus or plate solving failures at the start of the next iteration through the filters. 
#If the API function Weather.~DisableWeatherInterrupts() is used within a script, the weather unsafe interrupts will now always be restored at script end, whether normal or an error. 
#The web services documentation now has info on what to do during installation if port 80 is already in use on your system. 
!Bug Fixes


MORE TO DO...
{{borderless{
|[[Click here to open in a new browser tab|http://cvilleastro.com/gallery-2/]]|
<html><div align="center"><iframe src ="http://cvilleastro.com/gallery-2/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.robgendlerastropics.com/]]|
<html><div align="center"><iframe src ="http://www.robgendlerastropics.com/" width="100%" align="center" height="600">< /></div></html>}}}
---
!Updated
The Rotated Guiding engineering paper has been updated to relfect the lessons learned with AO and off-axis guiding, as well as to correct a few errors in terminology. In the preface to the previous version, Bob says, "Here's the paper I wrote as part of the AO/rotator testing and analysis I did at New Mexico Skies. As I wrote this, Mike Rice's 24" f/10 RC was tracking beautifully, with tiny bumps every few minutes. I have successfully checked out my idea of avoiding AO calibrations altogether at 8 position angles. The results are the same as an actual calibration at those angles, but it is based on the PA and not an actual calibration. My test on a GEM made me realize that a GEM on the east side of the pier (looking west) has the same declination sense as a simple/fork mount. I have corrected and clarified this in the final paper, which is shown here."

{{borderless{
<html><div align="center"><iframe src ="RefDocs/RotGuidePaperMay2009[1].pdf" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.rc-astro.com/]]|
<html><div align="center"><iframe src ="http://www.rc-astro.com/" width="100%" align="center" height="600">< /></div></html>}}}
--
*See also this more technical article by [[Thierry Legault]]
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.astromart.com/articles/article.asp?article_id=548]]|
<html><div align="center"><iframe src ="http://www.astromart.com/articles/article.asp?article_id=548" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://cas.sdss.org/dr13/en/tools/chart/chartinfo.aspx]]|
<html><div align="center" style="background-color:white"><iframe src ="http://cas.sdss.org/dr13/en/tools/chart/chartinfo.aspx" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://simbad.u-strasbg.fr/simbad/]]|
<html><div align="center" style="background-color:white"><iframe src ="http://simbad.u-strasbg.fr/simbad/" width="100%" align="center" height="600">< /></div></html>}}}
----
@@color:#0f0;This is the longest and most difficult part of the modification. Read through the steps first, then make the changes. Remember, you can always undo it all by copying back the two files you saved. This step is actually not necessary, but it makes it easier to get the webcam image because the Main Menu is always available.@@
----

1. Open up the web browser interface to ACP - the one you would normally use to run plans, etc. You can do this during the day. You do not need to connect the camera or the telescope to make the modifications.

2. In the bottom block of the Main Menu (left side), open the Toolbox, and click on "Authoring System". If you're not an administrator, you won't see this link. I like to open this in a separate tab, although that's not necessary.

3. In the authoring window, make sure the right sidebar is exposed - it may default this way for you, or you may need to click on the "side-bar &lt;&lt;" label in the toolbar of the System Status window.

4. Click on the "options >>" label; make sure you have your author name, username and password in place - you need this to be able to save changes. When it's right, you can click on the "options >>" to close that little section (or not).

5. On the tabs in the right sidebar, click on "All." Scroll down to "~MainMenu" and click on it. A new window will open in the middle,and it will look just like the real Main Menu next to it. In that window's toolbar, click on "edit". The toolbar may not be visible. Just drag the mouse up to the upper right corner of the window, and the toolbar will come on.

6. When you click on "edit," the entire text of the item will be selected. I think it's a good idea to copy the whole thing to a safety, Notepad file - Just in case.

7. Whether you did that or not, click anywhere once to deselect it. This will also prevent nasty mistakes, like erasing the whole thing by mistake.

8. Now you have to decide where you want to add your clickable link to the webcam. If it were me, I would put it in the section titled "Observatory Info." But you can put it anywhere. If you want to put it there, scroll down in the edit window until you come to the Observatory Info section. It will look like this:

Code:
//{{{
 <div class="mainDiv">
 <div class="topItem" >Observatory Info</div>
 <div class="dropMenu" >
 <div class="subMenu" style="display:none;">
 <div class="subItem"><a href="javascript:;" title="Status and control center" onClick="story.displayTiddler(this,'System Status',null,config.options.chkAnimate,false)">System Status Disp.</a></div>
 <div class="subItem"><a href="javascript:;" title="Detailed specs on our instruments and equipment" onClick="story.displayTiddler(this,'Instruments & Equipment',null,config.options.chkAnimate,false)">Instruments &amp; Equipment</a></div>

 <div class="subItem"><a href="javascript:;" title="Geograpic location and elevation" onClick="story.displayTiddler(this,'Location',null,config.options.chkAnimate,false)">Observatory Location</a></div>
  [etc].
//}}}
Scroll this window over to the right to see the whole length of the line.

9. Now you add another &lt;div&gt;....&lt;/div&gt; section to this menu. It should look like this:

Code:
//{{{
 <div class="subItem"><a href="javascript:;" title="The observatory webcams at xxx"
onClick="story.displayTiddler(this,'WebcamViewer',null,config.options.chkAnimate,false)">Observatory Webcam</a></div>
//}}}
There are three things you can change:

a. ''"Observatory Webcam"'' - this is the link title that goes into the Main Menu itself.

b. ''"The observatory webcams at xxx"'' - this is a comment message that pops up when you browse over the link in the Main Menu. Make it anything you like.

c. ''"~WebcamViewer"'' - this is the name of a new tiddler you have yet to create. It must have the same name as this. If you want a different name, make sure the tiddler name and this name are identical.

10. When you copy this into the ~MainMenu text in the edit window, make sure it comes after a preceding "</div>". As above it would look like this:

Code:
//{{{
 <div class="mainDiv">
 <div class="topItem" >Observatory Info</div>
 <div class="dropMenu" >
 <div class="subMenu" style="display:none;">
 <div class="subItem"><a href="javascript:;" title="Status and control center" onClick="story.displayTiddler(this,'System Status',null,config.options.chkAnimate,false)">System Status Disp.</a></div>
 <div class="subItem"><a href="javascript:;" title="Detailed specs on our instruments and equipment" onClick="story.displayTiddler(this,'Instruments & Equipment',null,config.options.chkAnimate,false)">Instruments &amp; Equipment</a></div>
 
 <div class="subItem"><a href="javascript:;" title="The observatory webcams at xxx" onClick="story.displayTiddler(this,'WebcamViewer',null,config.options.chkAnimate,false)">Observatory Webcam</a></div>

 <div class="subItem"><a href="javascript:;" title="Geograpic location and elevation" onClick="story.displayTiddler(this,'Location',null,config.options.chkAnimate,false)">Observatory Location</a></div>
  [etc].
//}}}
11. At the bottom of the edit window, where the "systemConfig" tag is, add a space, then enter "Custom" (no quotes). This will cause this Item to be saved, and enable an easier restore if there's a future ACP update to the web GUI.

12. When you've made these changes, click "done" on the toolbar (upper-right of center window). Then in the right sidebar, click on "save changes" or "save to web." It may take a few seconds. It will say "About to upload ~TiddlyWiki to <your URL/author.html>" followed shortly thereafter by a completion message: "Main ~TiddlyWiki file uploaded to ...".

13. Close the Main Menu window.

14. End of STEP ONE;  On to [[STEP TWO - Add a new item that displays the webcam]]
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
@@color:#0f0;You're now at the point of having a new, updated ''Author.html'' file that contains the necessary parts to view a webcam image. It's almost ready to go.@@
----
1. Close the authoring environment tabbed window. If a message pops up worrying that you haven't saved the current window, go over and click on "save to web" - then close the authoring environment.

2. In the normal ACP web GUI, reload the page. This causes ACP to compile the Author.html document you just revised into the index.asp document it normally serves up when you access the web GUI. If you don't reload the page, you'll get the old, un-updated version of index.asp.

3. In the Main Menu, find your link to "Observatory Webcam" in the Observatory Info section and click on it. If everything's okay, the ~WebcamViewer window will open, and the webcam view of the observatory should appear in a mini-browser window.
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
There are probably a number of ways to accomplish this. Here are two: a simpler version and a more complete version. (See also [[Embedding an iframe into a Tiddler]].)

1. Create a new item with the same name as the item you referenced above, in my example: "~WebcamViewer." On the right sidebar click on "new tiddler". This opens a "New Tiddler" in the edit mode.
2. In the tag line at the bottom, add the tag "Custom" (no quotes).
3. In the center window, where it says "Type the text for 'New Tiddler', type (or copy) this code in its place:
{{{
<html>
<table width="96%" style="border:none;margin:1px;background:transparent;clear:both;">
<iframe src="http://192.168.1.194:8023/img/snapshot.cgi?size=2&quality=1" 
width="340" height="260" allowtransparency scrolling="no" frameborder="0">< />
</table>
</html>
}}}

where yyy.xxx is the IP address of your webcam, and port is the port number (if not 80), and ''commands'' are the camera specific directions for grabbing a picture (for example, "snapshot.cgi?size=2&quality=1").
4. In the title line above that, type in the tiddler name: ''~WebcamViewer'', just like you had it in the ~MainMenu.
5. Click on done; then click on "save change" or "save to web."
6. End of STEP TWO.  On to [[STEP THREE (simple) - Test it]]

Here's an example of code that will pull an image to your computer in the observatory, or to your computer on the LAN, or to your computer on the Internet, depending on where you are.
{{{
<html>
<div align="left">
<% if(Request.ServerVariables("REMOTE_ADDR").substr(0 , 3) == "192") { %>

<iframe src="http://192.168.yyy.xxx:port/img/mjpeg.htm" frameborder="0"
width="360" height="280"></iframe>

<% } else if(Request.ServerVariables("SERVER_NAME").substr(0 , 5) == "local") { %>

<iframe src="http://192.168.yyy.xxx:port/img/snapshot.cgi?size=2&quality=1" frameborder="0"
width="340" height="260"></iframe>

<% } else { %>

<iframe src="http://yourname.my-sky.com:port/img/mjpeg.htm" frameborder="0"
width="400" height="288"></iframe>

<% } %>
</div>
</html>
}}}

On to [[STEP THREE (simple) - Test it]]
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
{{borderless{
|[[Click here to open in a new browser tab|http://stereo.gsfc.nasa.gov/]]|
<html><div align="center"><iframe src ="http://stereo.gsfc.nasa.gov/" width="100%" align="center" height="600">< /></div></html>}}}
----
*The [[DSS Plate Finder]] is an alternative interface to the DSS imagery
{{borderless{
|[[Click here to open in a new browser tab|http://archive.stsci.edu/cgi-bin/dss_form]]|
<html><div align="center" style="background-color:white"><iframe src ="http://archive.stsci.edu/cgi-bin/dss_form" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.saguaroastro.org/content/downloads.htm]]|
<html><div align="center"><iframe src ="http://www.saguaroastro.org/content/downloads.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
The samples shown on this page use either the simple tab-delimited format or MPC orbital elements. [[Directives]] usage is the same regardless of the target line format. For details on plan formats and directives see [[Making Observing Plans]]. 

|NOTE:  Use ''~AcquireImages.js'' to run these plans. It does auto-guiding, plate solving, auto-focusing, sky-flats, rotation, dithering, and pointing updates automatically. You can be assured that your targets will be centered and tracked (if you have an auto-guider and/or offset-tracking-capable mount).|
!Three Messier objects
The M-objects are known in the ACP database, so coordinates are not needed. The database requires the catalog name, a space, then the number. Thus "M5" will not work, it must be "M 5".
<<<
!!Example
{{{
#INTERVAL 300  ; 300 second exposures
M 5
M 60
M 104
}}}
<<<
You can specify the coordinates yourself in a sexagesimal or decimal format, in which case the name is not important; it's used only to name the image files. The name-~RA-Dec fields on each line are separated by ''tabs''.  
<<<
!!Example
{{{
#INTERVAL 300                           ; 300 second exposures
M 5 <tab> 15:18:35 <tab> 2:04:50        ; TAB between name, RA, Dec!
M 60 <tab>; 12:43:37 <tab> 11:33:35
A wondeful object <tab>; 12:39:59 <tab> -11:36:50
}}}
<<<
!Multiple Images for Stacking
<<<
!!Example
{{{
#INTERVAL 60 ; 60 second exposures
#REPEAT 5
M 5
#REPEAT 3
M 60
#STACKALIGN 5
M 104
}}}
<<<
Replacing #REPEAT 5 with #STACKALIGN 5, ACP will automatically align and stack the images for you.  Autocalibration should be turned on -- images should be calibrated //before// stacking! 
!Two LRGB With Multiple Images in Each Color and Dusk and Dawn ~Sky-Flats and Shutdown 
This plan takes multiple images of two targets in LRGB. Consider using [[ACP Planner|http://acp.dc3.com/planner.html]] if you do this sort of imaging. The plan must be started before dusk, as it waits for the correct twilight conditions, then acquires dusk sky-flats per the default flat plan. After sky-flat acquisition, it waits until the first target (M5) is high enough and it is dark enough (0300 UTC) then starts acquiring LRGB images. After doing the M5 series, it again waits, this time until the second target (M60) is high enough. It then does the LRGB series for M60, which must complete before dawn. After the M60 series, it waits for the correct twilight conditions then acquires dawn sky flats. The #SHUTDOWN directive causes the observatory to be shut down after doing dawn flats. 

|NOTE:  The #WAITUNTIL that follows #DUSKFLATS is vital! Without it, images for the first target will start immediately after doing the sky flats. ACP Planner will handle this for you.|
<<<
!!Example
{{{
#DUSKFLATS                              ; Use default flat plan
#WAITUNTIL 1, 03:00                     ; Start observing at 0300 UTC
; == M5 ==
#COUNT 10,15,10,20
#INTERVAL 180,240,180,240
#BINNING 2,1,2,2
#FILTER Red,Clear,Green,Blue
M 5
#WAITUNTIL 1, 07:30                     ; Wait till 0730 UTC
; == M60 ==
#COUNT 15,20,15,30                      ; #INTERVAL, #BINNING, and #FILTER carry over
M 60
#SHUTDOWN                               ; Shut observatory down after dawn flats
#DAWNFLATS                              ; Use default flat plan
}}}
<<<
!LRGB Mosaic Created in ~TheSky (see the mosaic-to-plan script info) 
This plan was generated by ~Sky6ToMosaic.vbs after creating the mosaic in ~TheSky6. After that, the rest of the directives were added in Notepad. The position angle was set in ~TheSky, and this plan is for a system with a rotator. The delimiters are tabs, and the coordinates are in decimal hours and degrees (also understood by ACP!). 
<<<
!!Example
{{{
;4 x 4 mosaic, 10% overlap, 32' x 24' FOV, PA = 317
#POSANG 317
#COUNT 3,5,3,4
#INTERVAL 180,240,180,240
#BINNING 2,1,2,2
#FILTER Red,Clear,Green,Blue
Mosaic_0 <tab> 23.80527928 <tab> 33.30642958
Mosaic_1 <tab> 23.83328466 <tab> 33.64101535
Mosaic_2 <tab> 23.86150491 <tab> 33.97418600
Mosaic_3 <tab> 23.88994558 <tab> 34.30593622
Mosaic_4 <tab> 23.82525857 <tab> 33.04405835
Mosaic_5 <tab> 23.85325606 <tab> 33.37763554
Mosaic_6 <tab> 23.88146697 <tab> 33.70978531
Mosaic_7 <tab> 23.90989677 <tab> 34.04050231
Mosaic_8 <tab> 23.84511695 <tab> 32.78096010
Mosaic_9 <tab> 23.87310573 <tab> 33.11353915
Mosaic_10 <tab> 23.90130649 <tab> 33.44467857
Mosaic_11 <tab> 23.92972462 <tab> 33.77437302
Mosaic_12 <tab> 23.86485680 <tab> 32.51713577
Mosaic_13 <tab> 23.89283609 <tab> 32.84872705
Mosaic_14 <tab> 23.92102591 <tab> 33.17886661
Mosaic_15 <tab> 23.94943161 <tab> 33.50754910
}}}
<<<
!Asteroid Followup
This plan takes 3 images each of 3 asteroids. The second and third sets are started 20 minutes after the previous set, to allow enough motion for astrometric detection and velocity measurement. The first set starts at 0500 UTC. These are MPC 1-line orbital elements, which cause ~AcquireImages.js to calculate the current ephemeris position at the moment of the exposure, and do orbital tracking (if the mount supports track offsets)
<<<
!!Example
{{{
#INTERVAL 120                           ; 120 second exposures of each
#SETS 3                                 ; Do the list 3 times
#WAITUNTIL 1, 05:00                     ; First set starts at 0500UTC
#WAITUNTIL 2, 05:20                     ; Second set starts 20 min later
#WAITUNTIL 3, 05:40                     ; Last set starts 20 min after that
#TRACKON                                ; Enable orbital tracking
; 2000 ~PA25
K00P25A 15.5   0.15 K036A 337.50234  283.24068  339.86567    3.43740  0.2305188  0.27820801   2.3239296  1 ~E2003-J01    94   6 1993-2003 0.65 M-v 38h MPC        0000         2000 ~PA25
; 1995 ~WV23
J95W23V 17.1   0.15 K036A 165.12004    9.78753   34.45956   11.33706  0.2644021  0.18900102   3.0071837  5 MPO  9042    13   2 1995-2000 0.44 M-v 38h Williams   0000         1995 ~WV23
; (23257) Denny
23257   14.9   0.15 K036A 256.40478  112.69375  307.31015    5.71767  0.1100523  0.24371604   2.5383216  2 MPO 10256    59   4 1993-2002 0.51 M-v 38h Williams   0000         (23257) Denny
}}}
<<<
This can be simplified if you have installed and built the fast-lookup database based on MPCORB.DAT, found at the [[MPCORB Database website]]. Look at the readme.txt file in C:\Program Files\Common Files\ASCOM\MPCORB folder for instructions.
<<<
!!Example
{{{
#INTERVAL 120                           ; 120 second exposures of each
#SETS 3                                 ; 3 images of each
#WAITUNTIL 1, 05:00                     ; First set starts at 0500UTC
#WAITUNTIL 2, 05:20                     ; Second set starts 20 min later
#WAITUNTIL 3, 05:40                     ; Last set starts 20 min after that
#TRACKON                                ; Enable orbital tracking
2000 PA25
1995 WV23
Denny
}}}
<<<
!~V-B-R Photometric Sequence With Dusk and Dawn ~Sky-Flats and Shutdown 
This plan acquires 5 sets, each consisting of a sequence of 10 images each of the target star in three color bands (filters) and 20 images of fainter nearby reference star, waiting for each to rise above 2.0 airmass. This will take a total of 450 images (= 5 x (10 + 10 + 10 + 20 + 20 + 20)). The reference star was selected from the [[LONEOS/TASS reference list]] maintained by Brian Skiff at LONEOS. The #WAITAIRMASS is required to prevent image acquisition from starting immediately after acquiring dusk flats. 
<<<
!!Example
{{{
#DUSKFLATS
#SETS 5                                 ; Do whole thing 5 times
; Target Star 
#WAITAIRMASS    2.0, 60                 ; Assure below 2 airmass
#FILTER V,B,R
#COUNT 10,10,10
#INTERVAL 2,5,3
#BINNING 1,1,1
TYC-1451-2807-1 17.33833333     18.056944
;  Reference Star (fainter) 
#WAITAIRMASS    2.0, 60                 ; Assure below 2 airmass
#FILTER V,B,R
#REPEAT 20,20,20
#INTERVAL 5,20,15
P448-D  264.4533        18.5511
; Dawn Flats, then shut down
#SHUTDOWN                               ; Shutdown after dawn flats
#DAWNFLATS
}}}
<<<
Note that if you are using a German Equatorial mount, you don't need to worry about meridian flipping. ACP will manage that operation if needed during the long sequences, flipping images taken looking west so they can be automatically stacked if you wish (using #STACKALIGN). 
----
By default, ACP will now save the uncalibrated (RAW) data. You can turn this on or off using the __Save original uncalibrated file/data images__ option in ACP Preferences, Imaging tab. This used to be an edit to the ~AcquireSupport library. That is gone now, replaced by a setting in ACP preferences. 

When doing auto-calibration, your raw/uncalibrated images will now be saved into a subfolder named RAW in the same folder as your final/calibrated images (as well as having ~RAW_ prepended to their names as before). This may cause a disruption to your automated pipeline if you depend on the location of the ~RAW_xxx files. 
----
|!This is an HTML rendering of the ACP Help File that is included with the Expert v8.1 software.|
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/ACPScheduler81Help.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/ACPScheduler81Help.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 2000-<<today YYYY>>, Robert B. Denny, Mesa AZ^^
[[Custom File and Folder Names (Scheduler)]]
[[Substitution Tokens (Scheduler)]]
[[How Scheduler Focuses]]
----
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/ScopeSimHelp.html]]|
<html><div align="center"><iframe src ="RefDocs/HelpFiles/ScopeSimHelp.html" width="100%" align="center" height="600">< /></div></html>}}}
----
If you put a script called ''~ACP-ScriptFail.xxx'' (xxx=''vbs'' or ''js'') in the same directory as ACP.exe, it will be automatically run when any other script fails. If the failed script contains a call to Util.~ChainScript(), the chained-to script will not be run, instead the ~ACP-ScriptFail script will be run. You can use this to notify you by email that a problem exists, or whatever. If the ~ACP-ScriptFail script fails, of course it will not be run again! 
| !NOTE |
| The ''~ACP-ScriptFail'' script will not be run when you abort a script from the ACP console or its web interface. |
----
/***

''This plugin was previously called StyleChooser.''

|Name|SelectThemePlugin|
|Created by|SimonBaird and SaqImtiaz, modified for private use with Share Your Sky! by Bob Denny|
|Location|Original: http://lewcid.googlepages.com/lewcid.html#SelectThemePlugin, Modified: [[SelectThemePlugin]]|
|Version|1.2.4a|
|Requires|~TW2.x|
!Description
*An alternative style switcher, can be used to switch just stylesheets and/or pagetemplates, or a combination of both (a theme)
*you //must// add your own stylesheets and pagetemplates.
!Usage
* You must to have fetch or create some styleSheets and pageTemplates to use this plugin.
**You can either get a ThemePack like BigThemePack which automatically adds themes to ThemeSelect.
**or create tiddlers with styleSheets and pageTemplates and tag them styleSheets and pageTemplates respectively.
* Put {{{<<themeSelect style 'Select theme'>>}}} in your SideBarOptions.
!Creating Theme Packs
*You can create your own theme pack if you like. Instructions can be found [[here.|CreateThemePack]]
!History
* 17-Oct-06 v1.2.5, [rbd] Remove code for TW < 2.0.11. Reformat code and lint. Remove code to select theme in URL. Change hijack from deprecated applyPageTemplate to refreshPageTemplate. Remove code for [none] and [default] items in style chooser, as well as the line below, and make Fire the default theme instead of the built-in ~StyleSheet/~PageTemplate. Add parameter for tooltip on switcher dropdown. Use unicode escapes for drop-arrows so this can be edited in PrimalScript, etc. Various wording changes.
* 10-Oct-06, v1.2.4a, [rbd] Changed defaults to FireStyleSheet/FirePageTemplate for new ACP application.
* 08-Sep-06, v1.2.4, fixed bug with TW2.1
* 15-May-06, v1.2.3, added paramifier so you can put theme on url, eg http://www.somewhere.com/twfile.html#theme:Berry2, thanks Clint (Simon).
* 28-Apr-o6, v1.2.2, fixed bug with opening TW after deleting themepacks. (Saq)
* 26-Apr-06, v1.2.1, more code optimization, dropdowns now updated on the fly. (Saq)
* 25-Apr-06, v1.2.0, added 3rd party ThemePack support, and made various other improvements.(Simon & Saq)
* 24-Apr-06, v1.1.0, added: no styles and default styles options,<<br>>support for ThemePack, support for tag variations(Saq)
* 21-Apr-06, v1.0.0, Reworked dropdowns to include option for pagetemplates (Saq)
* 21-Apr-06, v0.9.0, Rewrote and added Saq's lovely dropdown select (Simon)
* 20-Apr-06, v0.0.1, Basic switcher working (Simon)
!Examples
|!Source|!Output|h
|{{{<<themeSelect style>>}}} for a dropdown with StyleSheets|<<themeSelect style>>|
|{{{<<themeSelect pagetemplate>>}}} for a dropdown with PageTemplates|<<themeSelect pagetemplate>>|
|{{{<<themeSelect style customlabel>>}}} to use a custom label|<<themeSelect style customlabel>>|
|{{{<<themeSelect style customlabel customtooltip>>}}} to use a custom label and tooltip|<<themeSelect style customlabel customtooltip>>|
* When applying a stylesheet or template, it also looks for a template or stylesheet respectively based on naming convention, eg MyFunkyStyleSheet and MyFunkyPageTemplate.
!Notes
* See also http://www.tiddlytools.com/#SelectStyleSheetPlugin for a more feature-rich style sheet switcher
! Ideas
* do ViewTemplate also?
* Pretty up the [x] bit
!Code
***/
//{{{
version.extensions.SelectThemePlugin =
{
 major: 1, minor: 2, revision: 5,
 date: new Date(2006,10,27),
 type: 'macro',
 source: "http://lewcid.googlepages.com/lewcid.html#SelectTheme"
};
// -----------
// Static data
// -----------
config.SelectTheme =
{
 things:
 {
 style:
 {
 tag: ["StyleSheets","StyleSheet","styleSheet","styleSheets","stylesheet","stylesheets"],
 theDefault: "BrightSkiesStyleSheet", // Default, must exist!
 suffix: "StyleSheet",
 notify: refreshStyles,
 cookie: "txtStyleSheet",
 otherThing: "pagetemplate",
 label: "select theme: ",
 tooltip: "Choose a StyleSheet"
 },
 pagetemplate:
 {
 tag: ["PageTemplates","PageTemplate","pageTemplates","pageTemplate","pagetemplate","pagetemplates"],
 theDefault: "BrightSkiesPageTemplate", // Default, must exist!
 suffix: "PageTemplate",
 notify: refreshPageTemplate,
 cookie: "txtPageTemplate",
 otherThing: "style",
 label: "Choose PageTemplate: ",
 tooltip: "Choose a PageTemplate"
 }
 }
};

TiddlyWiki.prototype.removeNotification = function(title,fn)
{
 for (var i=0;i<this.namedNotifications.length;i++) {
 if((this.namedNotifications[i].name == title) && (this.namedNotifications[i].notify == fn))
 this.namedNotifications.splice(i,1);
 }
};

var things = config.SelectTheme.things;
// var specialCases=config.SelectTheme.specialCases;

for (var zz in things)
{
 // make sure we have a value
 if (!config.options[things[zz].cookie])
 config.options[things[zz].cookie] = things[zz].theDefault;
 // remove core notify
 store.removeNotification(things[zz].theDefault,things[zz].notify);
 // and add our one
 store.addNotification(config.options[things[zz].cookie],things[zz].notify);
}

//checks to see if a tiddler exists in store or as a shadow.
TiddlyWiki.prototype.isTiddler= function (title)
{
 return store.tiddlerExists(title) || store.isShadowTiddler(title);
};

//hijack new core function & make sure template exists
window.refreshPageTemplate_themeSelect=window.refreshPageTemplate;
window.refreshPageTemplate = function(title)
{
 if(!store.isTiddler(title))
 {
 title = things.pagetemplate.theDefault;
 }
 refreshPageTemplate_themeSelect(title);
};

TiddlyWiki.prototype.makeActiveTheme = function(what, title, alsoCheckOtherThing)
{
 var thing = things[what];
 if (!store.isTiddler(title))
 title = thing.theDefault;
 var oldTitle = config.options[thing.cookie];
 // remove old style element from DOM
 if (what == "style")
 {
 var oldStyleElement = document.getElementById(oldTitle);
 oldStyleElement.parentNode.removeChild(oldStyleElement);
 }
 store.removeNotification(oldTitle,thing.notify);
 store.addNotification(title,thing.notify);
 store.notify(title);
 config.options[thing.cookie] = title;
 saveOptionCookie(thing.cookie);
 if (alsoCheckOtherThing)
 this.makeActiveTheme(thing.otherThing,
 title.replace(new RegExp(thing.suffix+"$"),"") + things[thing.otherThing].suffix,
 false);
};

function switchTheme(e)
{
 if (!e) e = window.event;
 var theTarget = resolveTarget(e);
 var theLink = theTarget;
 var switchTo= theLink.getAttribute("switchTo");
 var mode = theLink.getAttribute("mode");
 if ((config.options[things[mode].cookie])!=switchTo)
 {
 store.makeActiveTheme(mode,switchTo,true);
 }
 return(false);
}

config.macros.themeSelect = { };
config.macros.themeSelect.dropdownchar = (document.all ? "\u25BC" : "\u25BE"); // UTF8!!!
config.macros.themeSelect.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
 var arrow = config.macros.themeSelect.dropdownchar;
 var mode = params[0];
 var label = (params[1] ? params[1] : things[mode].label) + arrow;
 var tooltip= params[2] ? params[2] : things[mode].tooltip;
 var cookie = (config.options[things[mode].cookie]);
 var onclick = function(e)
 {
 if (!e) e = window.event;
 var popup = Popup.create(this);
 var tagged=[];
 store.forEachTiddler(function(title,tiddler)
 {
 if ((tiddler.tags).containsAny(things[mode].tag))
 {
 tagged.push(tiddler.title);
 }
 }
 );
 
 //this function used later to create buttons
 var createThemeButton = function(switchTo)
 {
 var theButton = createTiddlyButton(createTiddlyElement(popup,"li"),text,null,switchTheme,useClass);
 theButton.setAttribute("switchTo",switchTo);
 theButton.setAttribute("mode",mode);
 };
 
 //create buttons for all explicit stylesheet tiddlers
 for(var t=0; t<tagged.length; t++)
 {
 var useClass = "tiddlyLinkExisting";
 var text = (tagged[t]).replace((things[mode].suffix),"");
 if (tagged[t] == (cookie) )
 {
 text += " [x]";
 useClass = "currentlySelected";
 }
 createThemeButton(tagged[t]);
 }
 
 // Route events
 Popup.show(popup, false);
 e.cancelBubble = true;
 if (e.stopPropagation)
 e.stopPropagation();
 return(false);
 };
 
 var createdropperButton = function(place)
 {
 var sp = createTiddlyElement(place,"span",null,"ThemeChooserButton");
 var theDropDownBtn = createTiddlyButton(sp,label,tooltip,onclick);
 };
 
 createdropperButton(place);
 
}; // End of config.macros.themeSelect

setStylesheet(".popup li a.currentlySelected {background:#ccc;color:black;font-weight:bold;}","currentlySelectedStyle"); // could do better probably...

config.macros.layoutChooser=config.macros.themeSelect;

config.macros.applyTheme =
{
 handler: function (place,macroName,params,wikifier,paramString,tiddler)
 {
 var theme = params[0];
 var label = params[1]?params[1]:'Apply theme "' + theme + '"';
 var tooltip = 'Apply the "'+theme+'" theme to this display';
 createTiddlyButton(place,
 label,
 tooltip,
 function() { store.makeActiveTheme("style",theme+things.style.suffix,true); }
 );
 }
};
//}}}
!Server Logging
ACP produces two types of log files: (1) the server log, and (2) the usage log. This page describes these log files. 
!!Server Log
The web and FTP servers record all accesses in a server log file. A new server log file is started each day that either of the servers is active. These logs are created in the directory specified in the Preferences, Servers tab, "Path to folder for web activity logs" field. Normally this is in the ~WebLogs subdirectory under the ACP installation directory. 
| !NOTE |
|You can disable server logging by clearing the "Path to folder for web activity logs" field. This will stop ACP from making web and FTP logs.|
The logs are named ~DARTddmmyyyy.log, where ddmmyyyy is the day, month and year when the log was created. For example, the log for April 7, 2006 would be named ~DART07042006.log. 
| !NOTE |
|These logs are never deleted. Thus, after a period of time you may discover a large number of these logs in the configured directory, and because the System Status display web page refreshes every 6 seconds, these logs will get large. It is up to you to delete old logs as you see fit.|
The log file is in the ~W3C Extended Log File Format. The fields are space delimited instead of the ~W3C recommended tab delimited format. This is to preserve compatibility with commercial web log file analysis software that has been written to work with Microsoft IIS's space-delimited logs. Here is an excerpt from a real ACP server log. The entries for port 80 are from web accesses and the entries for port 21 are from FTP accesses. Note that the space delimited format makes it difficult to parse the log if there are spaces in document or directory names, and for the PORT command which has a space between the PORT and the comma delimited parameters.

[img[RefDocs/Log1.png]]
!!Usage Log
In addition to the server log, ACP produces a usage log. This is intended to assist in creating customer-furnished billing or usage limiting systems. Only one usage log is produced; it is not rotated like the server logs. The usage log is created in the directory specified in the Preferences, Servers tab, "Path to folder for web activity logs" field. Normally this is in the ~WebLogs subdirectory under the ACP installation directory. The usage log is called ''Usage.log''.

The format of the usage log is tab-delimited, and each entry consists of 4 fields: (1) username, (2) full name, (3) start date/time (UTC), and (4) end date/time (UTC). The start and end date/times refer to the time when the user acquires and releases exclusive use of the observatory facilities, respectively. Thus, the length of time that is obtained by taking the difference of the two date/times is the length of time that user "owned" the facilities. 

| !NOTE |
|The date/time strings in the usage logs are produced in a local language dependent format that allows direct import into Microsoft Office applications such as Excel and Access, as long as the Office apps are running under the same local language-dependent format . The tab-delimited format allows direct pasting into Excel spreadsheets or Access table sheets.|

Here is a sample line from the usage log (remember, this one is tab-delimited):

[img[RefDocs/Log2.png]]
Plans have three levels of repeat capability. While this makes ACP plans very powerful and flexible, it can also be confusing at first, so please read on. 

| !NOTE |
|The #Filter, #Binning, #Count, and #Interval directives remain in effect across multiple targets, until changed. #Repeat does not.|

Each target can include a "filter group" -- a series of filters, counts, exposure intervals, and binnings. For example

|#Filter Red,Clear,Green,Blue|
|#Binning 2,1,2,2|
|#Count 5,8,5,10|
|#Interval 180,240,180,180|
|M 51|

This specifies a total of 28 images of M 51, starting with 5 Red images at 180 sec. and binning 2, etc. 

| !NOTE |
|The number of items in each series must match and you must specify series for filter, count, interval, and binning. For example, if you specify four filters, you must also specify four counts, four intervals and four binnings.|

You can multiply a target's filter group with the #Repeat directive. For example 

|''#Repeat 3''|
|#Filter Red,Clear,Green,Blue|
|#Binning 2,1,2,2|
|#Count 5,8,5,10|
|#Interval 180,240,180,180|
|M 51|

This specifies 28 x 3 = 84 images of M 51. The complete filter group is repeated three times, in other words, it will take 28 images in each of 4 filters, then loop back and do another 28 images in 4 filters, and then loop back for a third time taking another 28 images. 

An entire plan may be repeated using the #Sets directive. Remember, #Repeat does not carry across multiple targets. For example: 

|''#Sets 2''|
|#Repeat 3|
|#Filter Red,Clear,Green,Blue|
|#Binning 2,1,2,2|
|#Count 5,8,5,10|
|#Interval 180,240,180,180|
|M 51|
|#Repeat 2|
|#Count 6,10,7,15|
|M 13|

This specifies 2 x ((28 x 3) + (38 x 2)) = 320 images. Note that #Filter, #Binning, #Interval, and #Count all carry across targets, while #Repeat does not. If you omit the second #Repeat (#Repeat 2) the second filter group (for M13) will result in only 38 images, not 76.

----
!Share Your Sky!™
|It's fast, safe and easy to do. No writing of web pages or scripts needed. No web server installation and configuration needed. Start ACP up and you're on the web safely! Friends who live in the city, fellow astronomy club members, and students from your community or around the world can use your observatory to see the wonders of space and make scientific observations.|

~ShareYourSky™ is about sharing your observatory with trusted others without needing to train them on your equipment and software.

|~ShareYourSky™ requires an additional license.|
!Introduction
ACP includes optional built-in web and FTP servers and a set of pre-written web pages. If your computer is connected to the Internet, then as soon as you enable ACP's web and FTP servers your observatory becomes visible on the Internet. @@color:#ff0;''Hackers cannot break into your computer!''@@ All web requests are protected by username/password, and ACP's servers further restrict access to only certain directories on your hard disk. The supplied web pages allow you to support multiple remote users, each of whom has their own areas for observing plans, run logs and images. There is a shared area where your users can upload any type of file, and others may download these files. Also there is an area from which your users can download, but into which only you (the operator of the observatory) can place files for downloading. The FTP server allows bulk downloading of files such as multiple images from a run, and managing files and folders at the observatory.

|ACP is the web server and the FTP server. No other computer or server programs are needed. This capability does not depend on Microsoft's IIS, Apache, or any other web server. You'll find ACP's web and FTP services extremely easy to use and manage.|

|It's easy for people to use your observatory's web pages without training from you! Most content items have help buttons that will reveal useful information.|
!Getting Started With the Web and FTP Servers
If you're internet-savvy and itching to get started, jump ahead to [[Starting the Servers]]. Otherwise take a few minutes to read through the rest of this page. It will probably save you headaches and time. 
!Browser Settings
There are two things that will help your browser users get the best experience from ACP. They ''must'' have ''cookies'' //and// ''~JavaScript'' enabled, and Microsoft Internet Explorer users ''should'' have "friendly HTTP error messages" turned off. Both of these settings are accessible from the Internet Settings property sheet of Internet Explorer. Cookie usage control varies in other browsers. Cookies are required by ACP to maintain session state. This is also true of any other web sites that use Microsoft Active Server Pages (a huge number of internet sites use ASP), so ACP is not "special" in this regard. The web content is heavily dependent on ~JavaScript; it uses the modern AJAX and DHTML technologies that are fast becoming the norm for web sites. Again, ACP is not "special" in this regard. 
!Connectivity
Because ACP's web and FTP servers are integrated with ACP itself, they are extremely easy to set up. However, in order for people on the internet to be able to reach your computer running ACP, you need to provide them with its web site name or IP address. You can dial into the internet from the ACP computer, at which point people can reach ACP's web server and use your observatory. This is completely practical, but of course a cable modem or DSL connection is better because images can be downloaded by your internet users more quickly. This is not the place for an in-depth treatment of home networking issues, but we'll try to hit the high points. 

!Dynamic IP addresses 
When you are connected to the internet, your computer has an //IP address//. While a few internet providers assign permanent static IP addresses when you sign up, most assign you an IP address each time you connect. This //dynamic// address can be different every time you connect. Residential class internet services (dial-up, DSL, cable) usually provide dynamic addresses. 
This presents a challenge because your users expect your observatory to have a www.xxx.com name. Traditionally this has been impossible with dynamic addresses. If you do have a dynamic address, in order to have a domain name for your observatory you need to use one of the dynamic domain name services (DDNS) available. We have set up our ''my-sky.com'' domain with a DDNS provider such that you can get DDNS service __at no cost to you__! 

!The my-sky.com Domain 
As a service to our ~ShareYourSky!™ customers, we have set up the domain ''my-sky.com'' for your use at no charge. This means you can have your own domain name like ~RedMountain.my-sky.com, where you get to choose the first part of the domain name. Much better than trying to keep up with a changing IP address and giving IP addresses to your ~ShareYourSky!™ users. In [[Registering an Internet Name]], we'll walk you through installing the DDNS software and registering your host name in our ''my-sky.com'' domain. 

!Using IP Addresses
Without DDNS, in order for your web users to reach your observatory web site they must know ACP's IP address. Your web users must use the IP address of your running ACP when typing in the address of your observatory web site. It looks something like this 
|http://201.129.42.66/|
where 201.129.42.66 is the IP address of your ACP computer. Needless to say, if your IP address is static, you can give it to your users once and they can access your observatory using that URL thereafter, even bookmarking it for easy reference. If you dial up or are on cable, and get a different IP address each time, then whenever one of your users wants to access the observatory, they'll have to contact you to get the IP address du jour. You can see it on the Servers tab of ACP's Preferences dialog. The ''my-sky.com'' approach is much better for all concerned!

!Routers
Typically, with cable or DSL connections, you will have a //router// which provides a firewall between your internal network and the outside public network. Routers create a sort of "one way" internet connection; you can reach out to other sites, but others can not reach out to you. Thus, your ~ACP-equipped observatory running behind a firewall will be invisible to rest of the internet. 

There is hope, though. Most routers provide "port forwarding" or "DMZ" capabilities. Either of these features can make one of your inside computers appear to have the public (and possibly dynamic) IP address of your router. To make this work you have to set it up so that your ~ACP-equipped computer is exposed to the internet, then determine the IP address of your router and give that to your remote users. The latter is unnecessary if you use DDNS; it handles the IP changes and updating the domain name automatically. 

!Log Files
ACP produces a server log and a usage log. Check out [[Server and Usage Logging]] for information on these useful logs. 

!Getting Started
Now move on to [[Starting the Servers]].
{{borderless{
|[[Click here to open in a new browser tab|http://articles.adsabs.harvard.edu/full/1959ApJS....4..257S]]|
<html><div align="center"><iframe src ="http://articles.adsabs.harvard.edu/full/1959ApJS....4..257S" width="100%" align="center" height="600">< /></div></html>}}}
----
*Read his original refereed paper at [[Sharpless 1959]]
*View online mages of the Sharpless catalog at [[Galaxy Map]]  
*Search for specific objects on this web page:
{{borderless{
|[[Click here to open in a new browser tab|http://webviz.u-strasbg.fr/viz-bin/VizieR?-source=VII/20]]|
<html><div align="center" style="background-color:white"
><iframe src ="http://webviz.u-strasbg.fr/viz-bin/VizieR?-source=VII/20" width="100%" align="center" height="600">< /></div></html>}}}
----
<<search>><<closeAll>><<permaview>><<themeSelect style "select theme">><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
You need to know the geodetic position (lat/long) of your observatory. If you are lucky enough to own a GPS unit, this is a snap. Otherwise, use [[Google Earth]] or any of the geo-coding services on the net. Of course, you can use paper maps as well.

Your computer must be correctly set for //your// time zone, and whether or not you use daylight time. You should have set this up on your PC prior to installation of ACP. If not, you must do this now. ''Do not force UTC time on your computer!''
|NOTE|
|The accuracy of your PC clock is important, particularly if you want accurate "go to" and pointing. For the most in accuracy, you can use one of the 3rd party time sync apps to keep your PC clock locked to the USNO or NIST standard clocks. One such is Rob Chambers' [[Dimension 4]], which runs in the background and is very small. I have used it for years and never had a lick of trouble. Another time-setting program is [[AboutTime]]. If you are in the field, you can use a GPS for both position and time.|

|NOTE|
|A few areas such as the U.S. state of Arizona do not use daylight/summer time. The Date/Time control panel has specific time zone selections for most of these areas. For example, the correct choice for Arizona is @@color:#0f0;(-07:00) Arizona@@ rather than @@color:#0f0;(-07:00) Mountain Time (US & Canada)@@. Check to see if the checkbox "Automatically adjust clock for daylight saving changes" is disabled (grayed). If it is, you have selected a time zone that does not use daylight savings time at all.|
----
This is the "Table of Contents" for all of the ''@@color:#ffbf00;ACP Reference Guide@@''. Each entry here is a clickable link that expands.
----
*[[Observing Tools Online]]
**[[Global Weather]]
**[[383 Henden fields mapped to RA/Dec]]
**[[AAVSO]]
**[[AAVSO Charts]]
**[[Aladin]]
**[["Anywhere" Plate Solver]]
**[[APASS Data]]
**[[Asteroid Occultations]]
**[[Astronomical Catalogs and Catalog Formats]]
**[[Astrophysics Source Code Library]]
**[[An Atlas of O-C Diagrams of Eclipsing Binaries]]
**[[Auroral Ovals]]
**[[Catalog and Atlas of Cataclysmic Variables]]
**[[Center for Backyard Astrophysics]]
**[[Dark Sky Finder]]
**[[Eclipsing Binary Times of Minima]]
**[[Exoplanet Catalog]]
**[[Exoplanet Transit Database]]
**[[Exoplanet Transit Query Service Form]]
**[[G2V Image Calibration]]
**[[Gamma-ray Bursters]]
**[[Grazing Occultations]]
**[[Guide to Minor Planet Astrometry & Photometry]]
**[[Henden Photometry Fields]]
**[[Hubble Legacy Archives]]
**[[Hubble Legacy Archives Tutorial]]
**[[IAU Central Bureau for Astronomical Telegrams]]
**[[IOTA]]
**[[Landolt Special Areas Catalogs]]
**[[List of Recent Supernovae]]
**[[JPL Small-Body Database Browser]]
**[[Messier Marathon]]
**[[Mikulski Archive for Space Telescopes (MAST)]]
**[[Minor Planet Center Links (All)]]
**[[Minor Planet Checker]]
**[[Minor Planet Ephemeris Service]]
**[[NASA Exoplanet Archive]]
**[[NASA Ephemeris Generator]]
**[[NEO Checker]]
**[[NOAA Space Weather Prediction Center]]
**[[Observable Solar System Objects]]
**[[SDSS DR13 Finding Charts]]
**[[Sharpless Catalog]]
**[[SIMBAD]]
**[[Sky-Map.org]]
**[[STEREO]]
**[[STSci Digitized Sky Survey]]
**[[Third Reference Catalog of Bright Galaxies (RC3)]]
**[[VizieR]]
**[[The Whole NGC]]
*[[Technical Information]]
**[[Release Notes for v5.1]]
**[[Release Notes for v6.0]]
**[[Release Notes: Critical Changes for v6.0 Hot Fix 2]]
**[[Release Notes for v7.0]]
**[[Release Notes: Critical Changes for v5.0]]
**[[Filters, CCDs and Star Colors]]
**[[Coordinate Systems]]
**[[The MiniSAC Catalog Maintenance Kit]]
**[[Autoguiding]]
**[[Rotated Guiding]]
**[[Deep Sky Imaging]]
**[[PinPoint Residuals]]
**[[PC Clock Slows Down]]
**[[Feather Touch Focuser Adjustment]]
**[[Fast Auto-Focus Method]]
**[[Algorithms for CCD Stellar Photometry]]
**[[More Algorithms for CCD Stellar Photometry]]
**[[Photometry and the UCAC3 Catalog]]
**[[Register Your Observatory]]
**[[Install the Microsoft Office script debugger]]
**[[Build/Rebuild the MPCORB.dat database for minor planets]]
**[[Submit a Photo to APOD]]
**[[Web-based Autoflats]]
**[[Guider-chip Calibration]]
**[[Directly Compute the Autoguider Calibration Constants]]
**[[Ideal Exposure Calculators]]
**[[AAVSO Photometric All-Sky Survey (APASS)]]
**[[Astrophysics Source Code Library]]
**[[Double Star Astronomy]]
**[[FITS Header elements]]
**[[FITS World Coordinate System]]
**[[FocusMax Tutorial]]
**[[MaxIm DL Video Tutorials]]
**[[MaxIm Online Help Index]]
**[[SCT Collimation]]
**[[Software & Calculators]]
**[[Systems of Time]]
**[[Washington Double Star Catalog]]
**[[World Coordinate System]]
**[[Saving RAW Images]]
**[[Allowing Plate Solves for Every Final Image]]
**[[Put a Webcam Link in ACP's Web GUI]]
**[[TiddlyWiki Home Page]]
**[[Software & Calculators]]
**[[CSS Reference]]
**[[Javascript Reference]]
*[[FAQs, Tips & Tricks]]
**[[How does #AUTOFOCUS work with filter groups?]]
**[[Where can I download the latest ACP updates?]]
**[[Where are the ACP videos?]]
**[[How do I log FocusMax activity in ACP logfiles?]]
**[[Can I use any old GSC catalog?]]
**[[Where can I get a copy of the <...> catalog?]]
**[[How are transforms between Alt/Az and RA/Dec done?]]
**[[Can I add voice to UserActions?]]
**[[Can I start ACP and MaxIm with one click?]]
**[[How does ACP Planner work?]]
**[[How does #CHILL work in ACP?]]
**[[How do I set up FocusMax?]] 
**[[How do I avoid guiding on a bright galaxy?]]
**[[How do I apply calibration to MaxIm guiding images?]]
**[[Fine Tuning ACP Dusk and Dawn Flats]]
**[[What do I do when it's cloudy again?]]
**[[How many exoplanets are there?]]
**[[How Scheduler Focuses]]
*[[Star Catalog Information]]
**[[Catalog Comparison Images]]
**[[GSC 1.1 Reference]]
**[[USNO-A2.0 Reference]]
**[[UCAC2 Reference]]
**[[UCAC2 Supplement]]
**[[UCAC3 Reference]]
**[[UCAC4 Reference]]
**[[Tycho-2 Reference]]
**[[Where can I get a copy of the <...> catalog?]]
**[[GSC2.3 Online]]
**[[Recommended Star Catalogs]]
*[[User-contributed apps and scripts]]
**[[ACP Horizon Editor Application]]
**[[ACP Log Analyzer Application]]
**[[ACP Utilities]]
**[[AstroMC Extech RH401 Driver]]
**[[AstroMC WeatherSentry]]
**[[Catalog View]]
**[[Day-Night World Map]]
**[[Eclipsing Binary Times of Minima]]
**[[MaxIm DL Utilities]]
**[[Mosaic NxM Script]]
**[[Planalyzer]]
**[[Sky Survey Application]]
**[[Sky Solve Application]]
**[[Slew to Zenith Script]]
**[[SmartTrack ACP Application]]
**[[Startup/Shutdown Script]]
**[[System Swap Utility]]
**[[UserActions Example]]
*[[Customizing ACP]]
**[[Filter Usage and Focus Offsets]]
**[[Custom File and Folder Names (ACP)]]
**[[Custom File and Folder Names (Scheduler)]]
**[[Web, Error, and Weather Alert Sounds]]
**[[Tip of the Day Messages]]
**[[Registry Settings]]
**[[Adding to ACP Logic]]
**[[Embedding an iframe into a Tiddler]]
**[[Adding a "dropbox"]]
**[[Modifying Utility Tasks to enable starting scripts]]
*[[Share your Sky! (Browser Usage)]]
**[[Starting the Servers]]
**[[Registering an Internet Name]]
**[[Server and Usage Logging]]
*[[ACP Observatory Control Software]]
**[[MaxIm DL Image Processing and Camera Control software]]
**[[FocusMax Autofocus Software]]
**[[Using ACP's Pointing Corrector]]
**[[Observing Plan Checker]]
**[[Coordinate Systems]]
**[[Auto-Focus Support in ACP]]
**[[Auto-Guiding Your Mount]]
**[[Using the Simulators for Test & Practice]]
**[[Deep Sky Catalog]]
**[[Auto-Calibration of Images]]
**[[Extended Filter Support]]
**[[Standard ACP Scripts]]
**[[Default File Locations for User Data and Logs (v6, v7 & v8)]]
**[[Using ACP Configuration Profiles]]
**[[Sets, Repeats, and Filter Groups]]
*[[Getting Started with ACP]]
**[[Videos]]
**[[TheSky]]
**[[Starry Night Pro]]
**[[Using the Simulators for Test & Practice]]
**[[Software and Catalog Installation]]
**[[Site Information]]
**[[Enabling the ACP Pointing Corrector]]
**[[Optimizing Pointing Exposures]]
**[[File/Folder Customization Tool]]
*[[Acquiring Images Automatically]]
**[[Making Observing Plans]]
**[[Directives]]
**[[Using Tab-Delimited Lists]]
**[[Asteroids and Comets]]
**[[Near-Earth Object Ephemerides]]
**[[Observing Plan Checker]]
**[[Sample Observing Plans]]
*[[Directives]]
**[[Directives that affect only the next target]]
**[[Directives that affect the current and all subsequent targets]]
**[[Directives that affect the plan as a whole]]
**[[Directives that act themselves like targets]]
**[[Directives that terminate the plan]]
*[[Nifty Astrophotography]]
**[[Adam Block]]
**[[Rob Capon]]
**[[Russell Croman]]
**[[R. Jay GaBany]]
**[[Robert Gendler]]
**[[Andrei Ioda]]
**[[Steve Mazlin]]
**[[Jim Misti]]
**[[Nick Risinger]]
**[[Matt Russell]]
**[[Bill McLaughlin]]
**[[Jonas Grinde]]
**[[Steve Reilly]]
**[[Dean Salman]]
**[[Hubble Legacy Archives]]
**[[Hubble Legacy Archives Tutorial]]
*[[ACP Help]]
**[[ACP 8.1]]
**[[ASCOM Platform 6]]
**[[PipeHub Help File]]
**[[POTH Help File]]
**[[RTML 2.3]]
**[[Scheduler 8.1]]
**[[ScopeSim Help File]]
<<accordion>>
----
Go to [[Site Map (Alphabetic)]]
Go to the original [[Site Map (Full)]]
See the [[TOC]]
This is the alphabetical "Table of Contents" for all of the ''@@color:#ffbf00;ACP Reference Guide@@''. Each entry is a clickable link.
----
~~
{{twocolumns {
[[215 online websites]]
[[383 Henden fields mapped to RA/Dec]]
[[AAVSO]]
[[AAVSO Charts]]
[[AAVSO Photometric All-Sky Survey (APASS)]]
[[Aberration of Light (both annual and diurnal)]]
[[AboutTime]]  @@color:#F00;^^~~NEW~~^^@@
[[ACP 8.1]]
[[ACP Active Server Pages]]  @@color:#F00;~~^^NEW^^~~@@
[[ACP Architecture]]
[[ACP Help]]
[[ACP Horizon Editor Application]]
[[ACP Log Analyzer Application]]  @@color:#F00;^^~~NEW~~^^@@
[[ACP Observatory Control Software]]
[[ACP Planner]]  @@color:#F00;~~^^NEW^^~~@@
[[ACP Programmer's Reference]]  @@color:#F00;~~^^NEW^^~~@@
[[ACP Utilities]]  @@color:#F00;~~^^NEW^^~~@@
[[Acquiring a Color Series]]  @@color:#F00;^^~~NEW~~^^@@
[[AcquireImages.js]]
[[Acquiring Images Automatically]]
[[Adam Block]]
[[Adding a "dropbox"]]
[[Adding to ACP Logic]]
[[Agent Programming (Microsoft)]]  @@color:#F00;~~^^NEW^^~~@@
[[Aladin]]
[[Algorithms for CCD Stellar Photometry]]
[[Allowing Plate Solves for Every Final Image]]
[[An Atlas of O-C Diagrams of Eclipsing Binaries]]
[[Analyzing With TPOINT]]
[[Andrei Ioda]]  @@color:#F00;~~^^NEW^^~~@@
[[AnimatedPendulum]]
[[Annual Aberration]]
[["Anywhere" Plate Solver]]
[[APASS Data]]
[[Arp 1966]]
[[Arp Catalog]]
[[Arp Galaxy Images]]
[[Are there simple steps to processing images?]]
[[ASCOM Focuser Drivers]]
[[ASCOM Initiative Web Site]]
[[ASCOM Platform 6]]  @@color:#F00;~~^^NEW^^~~@@
[[ASCOM Platform Updates]]
[[ASCOM standards org]]
[[ASCOM Telescope 2 (for ACP Hub)]]  @@color:#F00;~~^^NEW^^~~@@
[[Asteroid Occultations]]
[[Asteroids and Comets]]
[[AstroMC Extech RH401 Driver]]
[[AstroMC WeatherSentry]]
[[Astrometry.net]]
[[Astronomical Catalogs and Catalog Formats]]
[[Astrophysics Source Code Library]]
[[A Time Tutorial]]
[[Auroral Ovals]]
[[Australia Weather]]
[[Auto-Calibration of Images]]
[[AutoFlat.vbs]]
[[Auto-Focus Support in ACP]]
[[AutoFocus.vbs]]
[[AutoGuideTest.js]]
[[Auto-Guiding Your Mount]]
[[Autoguiding]]
[[Big Photometry Web Page]]
[[Bill McLaughlin]]
[[Build/Rebuild the MPCORB.dat database for minor planets]]
[[CalibrateGuider.vbs]]
[[Can I add voice to UserActions?]]
[[Can I start ACP and MaxIm with one click?]]
[[Can I use any old GSC catalog?]]
[[Catalog and Atlas of Cataclysmic Variables]]
[[Catalog Comparison Images]]
[[Catalogs Supported by WCS Tools]]  @@color:#F00;~~^^NEW^^~~@@
[[Catalog View]]
[[Center for Backyard Astrophysics]]
[[CenterScope.vbs]]
[[China Weather]]
[[Comet Ephemeris Service]]  @@color:#F00;^^~~NEW~~^^@@
[[Comets]]
[[Coordinate Systems]]
[[Creating a Mosaic World Coordinate System]]
[[Creating an Account]]
[[Critical-list Numbered Minor Planets]]
[[CSS Reference]]  @@color:#F00;~~^^NEW^^~~@@
[[Custom Actions (expert feature)]]
[[Custom File and Folder Names (ACP)]]
[[Custom File and Folder Names (Scheduler)]]  @@color:#F00;~~^^NEW^^~~@@
[[Customizing ACP]]
[[Day-Night World Map]]
[[DC-3 Dreams Communication Center]]  @@color:#F00;~~^^NEW^^~~@@
[[Dark Sky Finder]]  @@color:#F00;~~^^NEW^^~~@@
[[Dean Salman]]  @@color:#F00;~~^^NEW^^~~@@
[[Deep Sky Catalog]]
[[Default File Locations for User Data and Logs (v6, v7 & v8)]]
[[Differential Photometry Alternative Equations]]
[[Diffraction Limited]]
[[Dimension 4]]
[[Directives]]
[[Directives that act themselves like targets]]
[[Directives that affect only the next target]]
[[Directives that affect the current and all subsequent targets]]
[[Directives that affect the plan as a whole]]
[[Directives that terminate the plan]]
[[Directly Compute the Autoguider Calibration Constants]]
[[Double Star Astronomy]]
[[Download 2013 version of ACP Horizon Editor]]  @@color:#F00;^^~~NEW~~^^@@
[[Download ACP Planner]]
[[Download the MiniSAC Catalog Maintenance Kit]]
[[DSS Plate Finder]]
[[Eclipsing Binary Times of Minima]]
[[Embedding an iframe into a Tiddler]]
[[Enabling the ACP Pointing Corrector]]
[[Enabling Network Access]]  @@color:#F00;~~^^NEW^^~~@@
[[Europe Weather]]
[[Exoplanet Catalog]]
[[Exoplanet Transit Database]]
[[Exoplanet Transit Query Service Form]]  @@color:#F00;~~^^NEW^^~~@@
[[Extended Filter Support]]
[[FAQs, Tips & Tricks]]
[[Fast Auto-Focus Method]]
[[Feather Touch Focuser Adjustment]]
[[File/Folder Customization Tool]]
[[Filter Usage and Focus Offsets]]
[[Filters, CCDs and Star Colors]]
[[FindBrightStar.vbs]]
[[FindFocalLength.vbs]]
[[FindLostScope.js]]
[[Fine Tuning ACP Dusk and Dawn Flats]]
[[First-time Login: Local Access]]
[[FITS Header elements]]
[[FITS Header example]]
[[FITS World Coordinate System]]  @@color:#F00;~~^^NEW^^~~@@
[[FITS World Coordinate Systems - Calabretta]]
[[FocusMax Autofocus Software]]
[[FocusMax Tutorial]]
[[FocusMax Tutorial - II]]  @@color:#F00;~~^^NEW^^~~@@
[[FocusOffsets.vbs]]
[[G2V Image Calibration]]
[[Galaxy Map]]
[[Gamma-ray Bursters]]
[[Getting Started with ACP]]
[[Global Weather]]
[[Goddard Space Flight Center web page all about FITS]]
[[Google Earth]]  @@color:#F00;^^~~NEW~~^^@@
[[Grazing Occultations]]
[[GSC 1.1 Reference]]
[[GSC2.3 Online]]
[[Guider-chip Calibration]]
[[Henden Photometry Fields]]
[[How are transforms between Alt/Az and RA/Dec done?]]
[[How do I apply calibration to MaxIm guiding images?]]
[[How do I avoid guiding on a bright galaxy?]]
[[How do I log FocusMax activity in ACP logfiles?]]
[[How do I set up FocusMax?]] 
[[How does #AUTOFOCUS work with filter groups?]]
[[How does #CHILL work in ACP?]]
[[How does ACP Planner work?]]
[[How many exoplanets are there?]]
[[How Scheduler Focuses]]
[[Hubble Legacy Archives]]
[[Hubble Legacy Archives Tutorial]]
[[IAU Central Bureau for Astronomical Telegrams]]
[[Ideal Exposure Calculators]]
[[Indian Ocean Basin Weather]]
[[Install the Microsoft Office script debugger]]
[[International Celestial Reference System (ICRS)]]
[[International Celestial Reference Frame (ICRF)]]
[[Introducing TheSky HD (iOS) with Built-in ACP Control]]  @@color:#F00;^^~~NEW~~^^@@
[[IOTA]]
[[Javascript Reference]]  @@color:#F00;~~^^NEW^^~~@@
[[Jim Misti]]
[[Jonas Grinde]]
[[JPL Small-Body Database Browser]]
[[Kepler]]
[[Landolt 1983]]
[[Landolt 1992]]
[[Landolt Special Areas Catalogs]]
[[Landolt Standards Spreadsheet]]
[[List of Potentially Hazardous Asteroids]]
[[List of Recent Supernovae]]
[[Local Clouds (Middle Atlantic Region)]]
[[Making Observing Plans]]
[[Matt Russell]]
[[MaxIm DL Image Processing and Camera Control software]]
[[MaxIm DL Utilities]]  @@color:#F00;~~^^NEW^^~~@@
[[MaxIm DL Video Tutorials]]
[[Messier Marathon Search Sequence]]
[[Messier Marathon]]
[[Mikulski Archive for Space Telescopes (MAST)]]
[[Minor Planet Astrometry]]
[[Minor Planet Center Links (All)]]
[[Minor Planet Center's Near Earth Object Confirmation Page (NEOCP)]]
[[Minor Planet Checker]]
[[Minor Planet Ephemeris Service]]
[[Minor Planet Photometry]]
[[ModelToTpoint.vbs]]
[[Modifying Utility Tasks to enable starting scripts]]
[[More Algorithms for CCD Stellar Photometry]]
[[Mosaic NxM Script]]
[[MPC 1-line format]]
[[NASA Exoplanet Archive]]
[[NASA Ephemeris Generator]]
[[Near-Earth Object Ephemerides]]
[[NEO and Unusual Minor Planets]]
[[NEO Checker]]
[[Nick Risinger]]
[[Nifty Astrophotography]]
[[NOAA Space Weather Prediction Center]]
[[North America (Eastern) Cloud Cover]]
[[North America (Western) Cloud Cover]]
[[North America Seeing]]
[[North America Weather]]
[[Nutation of the earth's rotation axis]]
[[Observable Comets]]
[[Observable Distant Minor Planets]]
[[Observable Solar System Objects]]
[[Observing Plan Checker]]
[[Observing Tools Online]]|
[[Optimizing Pointing Exposures]]
[[Parallax]]
[[Photometric Accuracy of the USNO A2.0 Catalog]]
[[Photometry and the UCAC3 Catalog]]
[[Photometry for Dummies]]
[[PinPoint Programmer's Reference]]  @@color:#F00;~~^^NEW^^~~@@
[[PinPoint Residuals]]
[[PipeHub Help File]]  @@color:#F00;~~^^NEW^^~~@@
[[Planalyzer]]
[[PlaneWave PWI]]  @@color:#F00;~~^^NEW^^~~@@
[[POTH Help File]]  @@color:#F00;~~^^NEW^^~~@@
[[Precession of the Equinoxes]]
[[Proper motion]]
[[Put a Webcam Link in ACP's Web GUI]]
[[R. Jay GaBany]]
[[RandomScatterPlot]]
[[Recommended Star Catalogs]]
[[Reference Chart for V404 Cygni]]
[[Reference Guide Updates]]
[[Register Your Observatory]]
[[Registering an Internet Name]]
[[Registry Settings]]
[[Release Notes for v5.1]]
[[Release Notes for v6.0]]
[[Release Notes for v7.0]]
[[Release Notes for v8.1]]  @@color:#F00;^^~~NEW~~^^@@
[[Rob Capon]]  @@color:#F00;^^~~NEW~~^^@@
[[Robert Gendler]]
[[Rotated Guiding]]
[[RTML 2.3]]  @@color:#F00;^^~~NEW~~^^@@
[[Russell Croman]]
[[Saguaro Astronomy Club (SAC) V8.1 catalog]]
[[Sample Observing Plans]]
[[Saving RAW Images]]
[[Scheduler 8.1]]  @@color:#F00;~~^^NEW^^~~@@ 
[[Scheduler-Specific Tips]]  @@color:#F00;~~^^NEW^^~~@@
[[ScopeSim Help File]]  @@color:#F00;~~^^NEW^^~~@@
[[Script Failure script]]
[[SCT Collimation]]
[[SDSS DR13 Finding Charts]]
[[Server and Usage Logging]]
[[Sets, Repeats, and Filter Groups]]
[[Share your Sky! (Browser Usage)]]
[[Sharpless 1959]]
[[Sharpless Catalog]]
[[SIMBAD]]
[[Site Information]]
[[Sky Survey Application]]
[[Sky6MosaicToPlan.vbs]]
[[Sky-Map.org]]
[[Slew to Zenith Script]]
[[SmartTrack ACP Application]]
[[So-called Precession]]
[[Software & Calculators]]
[[Software and Catalog Installation]]
[[Standard ACP Scripts]]
[[Star Catalog Information]]
[[Starry Night Pro]]
[[Starting the Servers]]
[[Startup and Shutdown scripts]]
[[Startup/Shutdown Script]]
[[STEP ONE - Changing the Main Menu (left sidebar)]]
[[STEP THREE (simple) - Test it]]
[[STEP TWO - Add a new item that displays the webcam]]
[[STEREO]]
[[Stetson Standards]]
[[Steve Mazlin]]
[[Steve Reilly]]  @@color:#F00;~~^^NEW^^~~@@
[[STSci Digitized Sky Survey]]
[[Submit a Photo to APOD]]
[[Substitution Tokens (ACP)]]
[[Substitution Tokens (Scheduler)]]  @@color:#F00;~~^^NEW^^~~@@
[[SyncScope.vbs]]
[[System Swap Utility]]
[[Systems of Time]]
[[Technical Information]]
[[TestPointing.vbs]]
[[the GSC Catalog]]
[[The MiniSAC Catalog Maintenance Kit]]
[[The Whole NGC]]
[[TheSky]]
[[Thierry Legault]]
[[Third Reference Catalog of Bright Galaxies (RC3)]]
[[TiddlyWiki Home Page]]
[[TIGER Map Service]]
[[Tip of the Day Messages]]
[[TrainCorrector.vbs]]
[[Tycho-2 Reference]]
[[UCAC2 Reference]]
[[UCAC2 Supplement]]
[[UCAC3 Reference]]
[[UCAC4 Reference]]
[[Unisys Weather]]
[[US Weather by zipcode]]
[[UserActions Example]]
[[UserActions-template.wsc]]
[[UserActionsJS-template.wsc]]
[[User-contributed apps and scripts]]
[[Using ACP Configuration Profiles]]  @@color:#F00;~~^^NEW^^~~@@
[[Using ACP's Pointing Corrector]]
[[Using Auto-Calibration]]
[[Using MaxPoint]]
[[Using Tab-Delimited Lists]]
[[Using the Simulators for Test & Practice]]
[[USNO-A2.0 Reference]]
[[USNO Systems of Time]]
[[VOEvents]]
[[Videos]]
[[VizieR]]
[[Washington Double Star Catalog]]
[[Washington Double Star Catalog Listing]]  @@color:#F00;~~^^NEW^^~~@@
[[WCSTools Web page - package of programs and a library of utility subroutines]]
[[WCSTools: Image World Coordinate System Utilities]]
[[Web Account Privileges]]
[[Web, Error, and Weather Alert Sounds]]
[[Web-based Autoflats]]
[[What do I do when it's cloudy again?]]
[[Where are the ACP videos?]]
[[Where can I download the latest ACP updates?]]
[[Where can I get a copy of the <...> catalog?]]
[[Windows Scripting (Microsoft)]]  @@color:#F00;~~^^NEW^^~~@@
[[World Coordinate System]]
}}}
~~
----
Go to [[Site Map]]
Go to the original [[Site Map (Full)]]
This is the "Table of Contents" for all of the ''@@color:#ffbf00;ACP Reference Guide@@''. Each entry is a clickable link.
----
~~
{{twocolumns{
|![[Observing Tools Online]]|
*[[Global Weather]]
**[[Australia Weather]]
**[[Indian Ocean Basin Weather]]
**[[Europe Weather]]
**[[North America Weather]]
***[[North America (Eastern) Cloud Cover]]
***[[North America (Western) Cloud Cover]]
***[[North America Seeing]]
***[[Unisys Weather]]
***[[Local Clouds (Middle Atlantic Region)]]
**[[China Weather]]
**[[US Weather by zipcode]]
**[[NOAA Space Weather Prediction Center]]
*[[383 Henden fields mapped to RA/Dec]]
*[[AAVSO]]
*[[AAVSO Charts]]
*[[Aladin]]
*[["Anywhere" Plate Solver]]
*[[APASS Data]]
*[[Arp Catalog]]
**[[Arp 1966]]
**[[Arp Galaxy Images]]
*[[Asteroid Occultations]]
*[[Astronomical Catalogs and Catalog Formats]]
*[[Astrophysics Source Code Library]]
*[[An Atlas of O-C Diagrams of Eclipsing Binaries]]
*[[Auroral Ovals]]
*[[Catalog and Atlas of Cataclysmic Variables]]
*[[Center for Backyard Astrophysics]]
*[[Dark Sky Finder]]  @@color:#F00;~~^^NEW^^~~@@
*[[Eclipsing Binary Times of Minima]]
*[[Exoplanet Catalog]]
**[[Exoplanet Transit Query Service Form]]  @@color:#F00;~~^^NEW^^~~@@
**[[Exoplanet Transit Database]]
**[[NASA Exoplanet Archive]]
*[[G2V Image Calibration]]
*[[Gamma-ray Bursters]]
*[[Grazing Occultations]]
*[[Guide to Minor Planet Astrometry & Photometry]]
**[[Minor Planet Astrometry]]
**[[Minor Planet Photometry]]
*[[Henden Photometry Fields]]
*[[Hubble Legacy Archives]]
*[[Hubble Legacy Archives Tutorial]]
*[[IAU Central Bureau for Astronomical Telegrams]]
*[[IOTA]]
*[[Landolt Special Areas Catalogs]]
**[[Landolt 1983]]
**[[Landolt 1992]]
**[[Stetson Standards]]
**[[Photometric Accuracy of the USNO A2.0 Catalog]]
**[[Landolt Standards Spreadsheet]]
*[[List of Recent Supernovae]]
*[[JPL Small-Body Database Browser]]
*[[Messier Marathon]]
**[[Messier Marathon Search Sequence]]
*[[Mikulski Archive for Space Telescopes (MAST)]]
*[[Minor Planet Center Links (All)]]
*[[Minor Planet Checker]]
*[[Minor Planet Ephemeris Service]]
*[[NASA Exoplanet Archive]]
*[[NASA Ephemeris Generator]]
*[[NEO Checker]]
*[[NOAA Space Weather Prediction Center]]
*[[Observable Solar System Objects]]
**[[Observable Distant Minor Planets]]
**[[Comets]]
**[[Critical-list Numbered Minor Planets]]
**[[NEO and Unusual Minor Planets]]
**[[List of Potentially Hazardous Asteroids]]
*[[SDSS DR13 Finding Charts]]
*[[Sharpless Catalog]]
**[[Sharpless 1959]]
**[[Galaxy Map]]
*[[SIMBAD]]
*[[Sky-Map.org]]
*[[STEREO]]
*[[STSci Digitized Sky Survey]]
**[[DSS Plate Finder]]
*[[Third Reference Catalog of Bright Galaxies (RC3)]]
*[[VizieR]]
*[[The Whole NGC]]
|![[Technical Information]]|
*[[Release Notes for v5.1]]
*[[Release Notes for v6.0]]
*[[Release Notes for v7.0]]
*[[Release Notes for v8.1]]  @@color:#F00;~~^^NEW^^~~@@
*[[Filters, CCDs and Star Colors]]
*[[Coordinate Systems]]
**[[Precession of the Equinoxes]]
**[[Nutation of the earth's rotation axis]]
**[[Aberration of Light (both annual and diurnal)]]
**[[Parallax]]
**[[International Celestial Reference System (ICRS)]]
**[[International Celestial Reference Frame (ICRF)]]
**[[Proper motion]]
**[[So-called Precession]]
**[[Parallax]]
**[[Annual Aberration]]
*[[The MiniSAC Catalog Maintenance Kit]]
**[[Download the MiniSAC Catalog Maintenance Kit]]
*[[Autoguiding]]
*[[Rotated Guiding]]
*[[Deep Sky Imaging]]
*[[PinPoint Residuals]]
*[[Dimension 4]]
*[[Feather Touch Focuser Adjustment]]
*[[Fast Auto-Focus Method]]
*[[Algorithms for CCD Stellar Photometry]]
*[[More Algorithms for CCD Stellar Photometry]]
**[[Big Photometry Web Page]]
**[[Photometry for Dummies]]
**[[Differential Photometry Alternative Equations]]
*[[Photometry and the UCAC3 Catalog]]
*[[Register Your Observatory]]
*[[Install the Microsoft Office script debugger]]
*[[Build/Rebuild the MPCORB.dat database for minor planets]]
*[[Submit a Photo to APOD]]
*[[Web-based Autoflats]]
*[[Guider-chip Calibration]]
*[[Directly Compute the Autoguider Calibration Constants]]
*[[Ideal Exposure Calculators]]
*[[AAVSO Photometric All-Sky Survey (APASS)]]
*[[Astrophysics Source Code Library]]
*[[Double Star Astronomy]]
*[[FITS Header elements]]
*[[FITS Header example]]
*[[FocusMax Tutorial]]
**[[ASCOM Focuser Drivers]]
**[[ASCOM Platform Updates]]
**[[ASCOM standards org]]
*[[FocusMax Tutorial - II]]  @@color:#F00;~~^^NEW^^~~@@
*[[MaxIm DL Video Tutorials]]
*[[SCT Collimation]]
**[[Thierry Legault]]
*[[Software & Calculators]]
*[[Systems of Time]]
**[[A Time Tutorial]]
**[[USNO Systems of Time]]
*[[Washington Double Star Catalog]]
*[[Washington Double Star Catalog Listing]]
*[[World Coordinate System]]
**[[WCSTools: Image World Coordinate System Utilities]]
**[[Creating a Mosaic World Coordinate System]]
**[[WCSTools Web page - package of programs and a library of utility subroutines]]
**[[FITS World Coordinate System]]  @@color:#F00;^^~~NEW~~^^@@
**[[FITS World Coordinate Systems - Calabretta]]
**[[Goddard Space Flight Center web page all about FITS]]
**[[Catalogs Supported by WCS Tools]]  @@color:#F00;^^~~NEW~~^^@@
*[[Saving RAW Images]]
*[[Allowing Plate Solves for Every Final Image]]
*[[Put a Webcam Link in ACP's Web GUI]]
**[[STEP ONE - Changing the Main Menu (left sidebar)]]
**[[STEP TWO - Add a new item that displays the webcam]]
**[[STEP THREE (simple) - Test it]]
*[[TiddlyWiki Home Page]]
*[[CSS Reference]]  @@color:#F00;^^~~NEW~~^^@@
*[[Javascript Reference]]  @@color:#F00;^^~~NEW~~^^@@
|![[FAQs, Tips & Tricks]]|
*[[How does #AUTOFOCUS work with filter groups?]]
*[[Where can I download the latest ACP updates?]]
*[[Where are the ACP videos?]]
*[[How do I log FocusMax activity in ACP logfiles?]]
*[[Can I use any old GSC catalog?]]
*[[Where can I get a copy of the <...> catalog?]]
*[[How are transforms between Alt/Az and RA/Dec done?]]
*[[Can I add voice to UserActions?]]
*[[Can I start ACP and MaxIm with one click?]]
**[[Startup/Shutdown Script]]
*[[How does ACP Planner work?]]
**[[Download ACP Planner]]
*[[How does #CHILL work in ACP?]]
**[[Directives]]
***[[Directives that affect only the next target]]
***[[Directives that affect the current and all subsequent targets]]
***[[Directives that affect the plan as a whole]]
***[[Directives that act themselves like targets]]
***[[Directives that terminate the plan]]
*[[How do I set up FocusMax?]] 
*[[How do I avoid guiding on a bright galaxy?]]
*[[How do I apply calibration to MaxIm guiding images?]]
*[[Fine Tuning ACP Dusk and Dawn Flats]]
*[[What do I do when it's cloudy again?]]
*[[How many exoplanets are there?]]
*[[How Scheduler Focuses]]  @@color:#F00;^^~~NEW~~^^@@
|![[Star Catalog Information]]|
*[[Catalog Comparison Images]]
**[[Reference Chart for V404 Cygni]]
*[[GSC 1.1 Reference]]
*[[GSC2.3 Online]]
*[[USNO-A2.0 Reference]]
**[[Photometric Accuracy of the USNO A2.0 Catalog]]
*[[UCAC2 Reference]]
*[[UCAC2 Supplement]]
*[[UCAC3 Reference]]
*[[UCAC4 Reference]]
*[[Tycho-2 Reference]]
*[[Where can I get a copy of the <...> catalog?]]
*[[Recommended Star Catalogs]]
|![[User-contributed apps and scripts]]|
*[[ACP Horizon Editor Application]]
*[[ACP Log Analyzer Application]]
*[[ACP Utilities]]  @@color:#F00;^^~~NEW~~^^@@
*[[AstroMC Extech RH401 Driver]]
*[[AstroMC WeatherSentry]]
*[[Catalog View]]
*[[Day-Night World Map]]
*[[Eclipsing Binary Times of Minima]]
*[[MaxIm DL Utilities]]  @@color:#F00;^^~~NEW~~^^@@
*[[Mosaic NxM Script]]
*[[Planalyzer]]
*[[Sky Survey Application]]
*[[Slew to Zenith Script]]
*[[SmartTrack ACP Application]]
*[[Startup/Shutdown Script]]
*[[System Swap Utility]]
*[[UserActions Example]]
|![[Customizing ACP]]|
*[[Filter Usage and Focus Offsets]]
**[[Extended Filter Support]]
*[[Custom File and Folder Names (ACP)]]
**[[Substitution Tokens (ACP)]]
**[[Substitution Tokens (Scheduler)]]  @@color:#F00;^^~~NEW~~^^@@
*[[Custom File and Folder Names (Scheduler)]]  @@color:#F00;^^~~NEW~~^^@@
*[[Web, Error, and Weather Alert Sounds]]
*[[Tip of the Day Messages]]
*[[Registry Settings]]
*[[Adding to ACP Logic]]
**[[Startup and Shutdown scripts]]
**[[Script Failure script]]
**[[Custom Actions (expert feature)]]
***[[UserActions-template.wsc]]
***[[UserActionsJS-template.wsc]]
*[[Embedding an iframe into a Tiddler]]
*[[Adding a "dropbox"]]
*[[Modifying Utility Tasks to enable starting scripts]]
|![[Share your Sky! (Browser Usage)]]|
*[[Starting the Servers]]
**[[Creating an Account]]
***[[Web Account Privileges]]
***[[First-time Login: Local Access]]
*[[DC-3 Dreams Communication Center]]  @@color:#F00;~~^^NEW^^~~@@
*[[Enabling Network Access]]  @@color:#F00;~~^^NEW^^~~@@
*[[Registering an Internet Name]]
*[[Server and Usage Logging]]
|![[ACP Observatory Control Software]]|
*[[MaxIm DL Image Processing and Camera Control software]]
*[[FocusMax Autofocus Software]]
*[[Using ACP Configuration Profiles]]  @@color:#F00;~~^^NEW^^~~@@
*[[Using ACP's Pointing Corrector]]
**[[Using MaxPoint]]
***[[Diffraction Limited]]
**[[Analyzing With TPOINT]]
**[[Enabling the ACP Pointing Corrector]]
***[[Diffraction Limited]]
***[[TrainCorrector.vbs]]
*[[Observing Plan Checker]]
**[[Making Observing Plans]]
***[[Directives]]
****[[Directives that affect only the next target]]
****[[Directives that affect the current and all subsequent targets]]
****[[Directives that affect the plan as a whole]]
****[[Directives that act themselves like targets]]
****[[Directives that terminate the plan]]
***[[Deep Sky Catalog]]
****[[Saguaro Astronomy Club (SAC) V8.1 catalog]]
****[[Sharpless Catalog]]
****[[Arp Catalog]]
****[[Third Reference Catalog of Bright Galaxies (RC3)]]
***[[Near-Earth Object Ephemerides]]
*[[Coordinate Systems]]
**[[Precession of the Equinoxes]]
**[[Nutation of the earth's rotation axis]]
**[[Aberration of Light (both annual and diurnal)]]
**[[Parallax]]
**[[International Celestial Reference System (ICRS)]]
**[[International Celestial Reference Frame (ICRF)]]
**[[Proper motion]]
**[[So-called Precession]]
**[[Parallax]]
**[[Annual Aberration]]
*[[Auto-Focus Support in ACP]]
**[[FocusMax Autofocus Software]]
**[[Extended Filter Support]]
*[[Auto-Guiding Your Mount]]
*[[Using the Simulators for Test & Practice]]
*[[Deep Sky Catalog]]
**[[Saguaro Astronomy Club (SAC) V8.1 catalog]]
**[[Sharpless Catalog]]
**[[Arp Catalog]]
**[[Third Reference Catalog of Bright Galaxies (RC3)]]
*[[Auto-Calibration of Images]]
*[[Extended Filter Support]]
*[[Standard ACP Scripts]]
**[[AcquireImages.js]]
**[[AutoFlat.vbs]]
**[[AutoFocus.vbs]]
**[[AutoGuideTest.js]]
**[[CalibrateGuider.vbs]]
**[[CenterScope.vbs]]
**[[FindBrightStar.vbs]]
**[[FindFocalLength.vbs]]
**[[FindLostScope.js]]
***[[Astrometry.net]]
**[[FocusOffsets.vbs]]
**[[ModelToTpoint.vbs]]
**[[Sky6MosaicToPlan.vbs]]
**[[TestPointing.vbs]]
**[[TrainCorrector.vbs]]
*[[Default File Locations for User Data and Logs (v6, v7 & v8)]]
*[[**[[Sets, Repeats, and Filter Groups]]  @@color:#F00;~~^^NEW^^~~@@
|![[Getting Started with ACP]]|
*[[Videos]]
*[[TheSky]]
*[[Starry Night Pro]]
*[[Using the Simulators for Test & Practice]]
*[[Software and Catalog Installation]]
**[[ASCOM Initiative Web Site]]
**[[Diffraction Limited]]
**[[FocusMax Autofocus Software]]
**[[the GSC Catalog]]
**[[Where can I get a copy of the <...> catalog?]]
*[[Site Information]]
**[[TIGER Map Service]]
**[[Dimension 4]]
**[[AboutTime]]
*[[Enabling the ACP Pointing Corrector]]
**[[Diffraction Limited]]
**[[TrainCorrector.vbs]]
*[[Optimizing Pointing Exposures]]
*[[File/Folder Customization Tool]]
|![[Acquiring Images Automatically]]|
*[[Making Observing Plans]]
**[[Directives]]
***[[Directives that affect only the next target]]
***[[Directives that affect the current and all subsequent targets]]
***[[Directives that affect the plan as a whole]]
***[[Directives that act themselves like targets]]
***[[Directives that terminate the plan]]
**[[Deep Sky Catalog]]
***[[Saguaro Astronomy Club (SAC) V8.1 catalog]]
***[[Sharpless Catalog]]
***[[Arp Catalog]]
***[[Third Reference Catalog of Bright Galaxies (RC3)]]
**[[Near-Earth Object Ephemerides]]
*[[Directives]]
**[[Directives that affect only the next target]]
**[[Directives that affect the current and all subsequent targets]]
**[[Directives that affect the plan as a whole]]
**[[Directives that act themselves like targets]]
**[[Directives that terminate the plan]]
*[[Using Tab-Delimited Lists]]
*[[Asteroids and Comets]]
**[[Directives]]
**[[Minor Planet Center's Near Earth Object Confirmation Page (NEOCP)]]
**[[Near-Earth Object Ephemerides]]
**[[Observable Comets]]
**[[MPC 1-line format]]
*[[Observing Plan Checker]]
**[[Making Observing Plans]]
***[[Directives]]
****[[Directives that affect only the next target]]
****[[Directives that affect the current and all subsequent targets]]
****[[Directives that affect the plan as a whole]]
****[[Directives that act themselves like targets]]
****[[Directives that terminate the plan]]
***[[Deep Sky Catalog]]
****[[Saguaro Astronomy Club (SAC) V8.1 catalog]]
****[[Sharpless Catalog]]
****[[Arp Catalog]]
****[[Third Reference Catalog of Bright Galaxies (RC3)]]
***[[Near-Earth Object Ephemerides]]
*[[Sample Observing Plans]]
**[[Directives]]
***[[Directives that affect only the next target]]
***[[Directives that affect the current and all subsequent targets]]
***[[Directives that affect the plan as a whole]]
***[[Directives that act themselves like targets]]
***[[Directives that terminate the plan]]
**[[Making Observing Plans]]
***[[Directives]]
****[[Directives that affect only the next target]]
*****[[Sets, Repeats, and Filter Groups]]
*****[[Using Auto-Calibration]]
****[[Directives that affect the current and all subsequent targets]]
*****[[Sets, Repeats, and Filter Groups]]
****[[Directives that affect the plan as a whole]]
*****[[Sets, Repeats, and Filter Groups]]
****[[Directives that act themselves like targets]]
****[[Directives that terminate the plan]]
***[[Deep Sky Catalog]]
****[[Saguaro Astronomy Club (SAC) V8.1 catalog]]
****[[Sharpless Catalog]]
****[[Arp Catalog]]
****[[Third Reference Catalog of Bright Galaxies (RC3)]]
***[[Near-Earth Object Ephemerides]]
**[[ACP Planner]]
**[[MPCORB Database website]]
|![[Directives]]|
*[[Directives that affect only the next target]]
*[[Directives that affect the current and all subsequent targets]]
*[[Directives that affect the plan as a whole]]
*[[Directives that act themselves like targets]]
*[[Directives that terminate the plan]]
|![[Nifty Astrophotography]]|
*[[Adam Block]]
*[[Rob Capon]]  @@color:#F00;~~^^NEW^^~~@@
*[[Russell Croman]]
*[[R. Jay GaBany]]
*[[Robert Gendler]]
*[[Jonas Grinde]]  @@color:#F00;~~^^NEW^^~~@@
*[[Andrei Ioda]]  @@color:#F00;~~^^NEW^^~~@@
*[[Steve Mazlin]]
*[[Bill McLaughlin]]  @@color:#F00;~~^^NEW^^~~@@
*[[Jim Misti]]
*[[Steve Reilly]]  @@color:#F00;~~^^NEW^^~~@@
*[[Nick Risinger]]
*[[Matt Russell]]
*[[Dean Salman]]  @@color:#F00;~~^^NEW^^~~@@
*[[Hubble Legacy Archives]]
*[[Hubble Legacy Archives Tutorial]]
|![[Scheduler-Specific Tips]]|
*[[Custom File and Folder Names (Scheduler)]]
*[[Substitution Tokens (Scheduler)]]
*[[How Scheduler Focuses]]
|![[ACP Help]]|
*[[ACP Help]]  @@color:#F00;^^~~NEW~~^^@@
*[[ACP 8.1]]  @@color:#F00;^^~~NEW~~^^@@
*[[ASCOM Platform 6]]  @@color:#F00;^^~~NEW~~^^@@
*[[PipeHub Help File]]  @@color:#F00;^^~~NEW~~^^@@
*[[POTH Help File]]  @@color:#F00;^^~~NEW~~^^@@
*[[RTML 2.3]]  @@color:#F00;^^~~NEW~~^^@@
*[[Scheduler 8.1]]  @@color:#F00;^^~~NEW~~^^@@
*[[ScopeSim Help File]]  @@color:#F00;^^~~NEW~~^^@@
}}}
~~
----
Go to [[Site Map]]
Go to [[Site Map (Alphabetic)]]
[[]]
''A companion to ACP Observatory Control Software, version 8.1
Today is <<today "MMM DD, YYYY">>
~~@@color:#888;Last updated January 16, 2017 - [[Latest Update]]@@~~'' 
~~^^@@color:#888;TW 2.6.2@@^^~~
''Reference Guide''
[[Opens the ACP Reference Guide in a new browser tab|http://solo.dc3.com/ar/ACPRefGuide.html]]
----
from: ''John Winfield''
----
{{borderless{
|[[Click here to open in a new browser tab|http://winfij.com/development/SkySolve/index.html]]|
<html><div align="center" style="background-color:white"><iframe src ="http://winfij.com/development/SkySolve/index.html" width="100%" align="center" height="600">< /></div></html>}}}
----
from: ''John Winfield''
----
{{borderless{
|[[Click here to open in a new browser tab|http://winfij.com/acp/ACPSurvey.html]]|
<html><div align="center" style="background-color:white"><iframe src ="http://winfij.com/acp/ACPSurvey.html" width="100%" align="center" height="600">< /></div></html>}}}
----
|!This may take a long time to load|
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.sky-map.org/]]|
<html><div align="center"><iframe src ="http://www.sky-map.org/" width="100%" align="center" height="600">< /></div></html>}}}
----
This script converts a mosaic export file from Software Bisque's ~TheSky into an ACP observing plan format. This does not run in ACP's scripting console; rather it runs under Windows Script (on the desktop). Here's how to use it:

#//(one-time)// Create a shortcut to this script on your desktop. Right-click and drag to the desktop, release and choose Create Shortcut.
#Export a mosaic from ~TheSky to a text file:
##Set up your mosaic in ~TheSky using Tools/Mosaic... be careful, this is tricky especially if you are using a rotated FOVI.
##If you have a rotator, and if you set a Position Angle other than 0 (or pick one up from an FOVI), note it down.
##In the Advanced tab, click Copy To Clipboard
##Open Notepad
##aste and save as an ANSI text file
##Close Notepad
#Drag and drop the saved mosaic file onto the shortcut created in (1).
#When Notepad appears, add the observing plan directives you want, then save the plan as an ANSI text file to your plans folder. You can then run it just like any other plan.
|NOTE:  If you have a rotator, and if you specified a position angle (or picked one up from a rotated FOVI) be sure to include a ''#POSANG xxx'' directive in your plan so ACP can position the imager at the correct rotation angle for the mosaic.|

Here are all the [[Standard ACP Scripts]].
----
from: ''Dick Berg''
----
The script unparks the telescope (if necessary) and slews to the zenith. Unzip the downloaded file and put the .vbs file in the "ACP Obs Control/Scripts" folder and run it from the control panel. 

This script can also work in the remote web environment, but that requires modifications to the Utility Tasks interface in your copy of ACP.

[[Download Slew to Zenith Script]]
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
<!--{{{-->
<div id='displayArea'>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/***
|''Name:''|SlideShowPlugin|
|''Description:''|Creates a simple slide show type display|
|''Version:''|1.6|
|''Date:''|Feb 12, 2008|
|''Source:''|http://www.math.ist.utl.pt/~psoares/addons.html|
|''Documentation:''|[[SlideShowPlugin Documentation|SlideShowPluginDoc]]|
|''Author:''|Paulo Soares and [[Clint Checketts|http://www.checkettsweb.com]]|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.1.0|
***/
//{{{
config.macros.slideShow = {label: "slide show", maxTOCLength: 30};
config.macros.slideShow.messages = {gotoLabel: "Go to slide:"};
config.views.wikified.slideShow = {text: "slide show", tooltip: "Start slide show"};
config.views.wikified.slideShow.quit = {text: "end", tooltip: "Quit the slide show"};
config.views.wikified.slideShow.firstSlide = {text: "<<", tooltip: "first slide"};
config.views.wikified.slideShow.previousSlide = {text: "<", tooltip: "previous slide"};
config.views.wikified.slideShow.nextSlide = {text: ">", tooltip: "next slide"};
config.views.wikified.slideShow.lastSlide = {text: ">>", tooltip: "last slide"};
config.views.wikified.slideShow.resetClock = {text: " ", tooltip: "reset"};

config.formatters.push( {
	name: "SlideSeparator",
	match: "^-s-+$\\n?",
	handler: function(w) {
		createTiddlyElement(w.output,"hr",null,'slideSeparator');
	}
});

function changeStyleSheet(tiddlerName) {
	setStylesheet(store.getRecursiveTiddlerText("StyleSheetColors"),"StyleSheetColors");
	setStylesheet(store.getRecursiveTiddlerText("StyleSheetLayout"),"StyleSheetLayout");
	setStylesheet(store.getRecursiveTiddlerText(tiddlerName == null ? "StyleSheet" : tiddlerName,""),"StyleSheet");
}

//Excellent (and versatile) reparser created by Paul Petterson for parsing the paramString in a macro
function reparse( params ) {
	var re = /([^:\s]+)(?:\:((?:\d+)|(?:["'](?:[^"']+)["']))|\s|$)/g;
	var ret = new Array();
	var m;
	while( (m = re.exec( params )) != null ) ret[ m[1] ] = m[2]?m[2]:true;
	return ret;
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null ) node = document;
	if ( tag == null ) tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	var j=0;
	for (var i = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

// 'keys' code adapted from S5 which in turn was adapted from MozPoint (http://mozpoint.mozdev.org/)
function keys(key) {
with(config.macros.slideShow){
	if (document.getElementById('contentWrapper').className == "slideShowMode"){
		if (!key) {
			key = event;
			key.which = key.keyCode;
		}
 		switch (key.which) {
			case 32: // spacebar
				if(time>0){
					if(autoAdvance){
						clearInterval(autoAdvance);
						autoAdvance = null;
					} else {
						autoAdvance=setInterval("GoToSlide(1)", time);
					}
				}
				break;
			case 34: // page down
			case 39: // rightkey
				GoToSlide("n");
				break;
			case 40: // downkey
				GoToSlide(-1);
				break;
			case 33: // page up
			case 37: // leftkey
				GoToSlide("p");
				break;
			case 38: // upkey
				GoToSlide(1);
				break;
			case 36: // home
				GoToSlide("f");
				break;
			case 35: // end
				GoToSlide("l");
				break;
			case 27: // escape
				endSlideShow();
				break;
			case 66: // B
				blankScreen();
				break;
		}
	}
	return false;
}
}

function blankScreen(){
	var blanker = document.getElementById('slideBlanker');
	if (blanker.style.display == 'block'){
		blanker.style.display = 'none';
	} else {
		blanker.style.display = 'block';
	}
}

function clicker(e) {
	if (!e) var e = window.event;
	var target = resolveTarget(e);
	//Whenever something is clicked that won't advance the slide make sure that the table of contents gets hidden
	if (target.getAttribute('href') != null || isParentOrSelf(target, 'toc') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object') || isParentOrSelf(target, 'slideFooter') || isParentOrSelf(target, 'navigator')){
		 //Don't hide the TOC if the indexNumbers (which trigger the index) is clicked
		if(isParentOrSelf(target,'indexNumbers') || isParentOrSelf(target,'jumpInput')){
 			return true;
		}
		showHideTOC('none');
		return true;
	}
	//Advance a slide if the TOC is visible otherwise make sure that the TOC gets hidden
	if ((!e.which && e.button == 1) || e.which == 1) {
		if (document.getElementById('toc').style.display != 'block'){
			GoToSlide("n");
		} else {
			showHideTOC('none');
		}
	}
	if ((!e.which && e.button == 2) || e.which == 3) {
		if (document.getElementById('toc').style.display != 'block'){
			GoToSlide("p");
		} else {
			showHideTOC('none');
		}
		return false;
	}
}

function isParentOrSelf(element, id) {
	if (element == null || element.nodeName=='BODY') return false;
	else if (element.id == id) return true;
	else return isParentOrSelf(element.parentNode, id);
}

GoToSlide = function(step) {
	var new_pos;
	var slideHolder = document.getElementById('slideContainer');
	//The parse float ensures that the attribute is returned as a number and not a string.
	var cur_pos = parseFloat(slideHolder.getAttribute('currentslide'));
	var numberSlides = parseFloat(slideHolder.getAttribute('numberSlides'));
	switch (step) {
		case "f":
			new_pos=0;
			break;
		case "l":
			new_pos=numberSlides-1;
			break;
		case "n":
			var numberOverlays = parseFloat(slideHolder.childNodes[cur_pos].getAttribute('numberOverlays'));
			var currentOverlay = parseFloat(slideHolder.getAttribute('currentOverlay'));
			if(numberOverlays==0 || currentOverlay==numberOverlays){
				if(noClicks==false) new_pos=cur_pos+1;
			} else {
				var className="Overlay"+currentOverlay;
				var overlay=getElementsByClass(className,slideHolder.childNodes[cur_pos]);
				for(var i=0; i<overlay.length; i++) {overlay[i].className=className+' previousOverlay';}
				currentOverlay++;
				slideHolder.setAttribute('currentOverlay',currentOverlay);
				className="Overlay"+currentOverlay;
				overlay=getElementsByClass(className,slideHolder.childNodes[cur_pos]);
				for(i=0; i<overlay.length; i++) {overlay[i].className=className+' currentOverlay';}
				return false;
			}
			break;
		case "p":
			var numberOverlays = parseFloat(slideHolder.childNodes[cur_pos].getAttribute('numberOverlays'));
			var currentOverlay = parseFloat(slideHolder.getAttribute('currentOverlay'));
			if(numberOverlays==0 || currentOverlay==0){
				if(noClicks==false) new_pos=cur_pos-1;
			} else {
				var className="Overlay"+currentOverlay;
				var overlays=getElementsByClass(className,slideHolder.childNodes[cur_pos]);
				for(var i=0; i<overlays.length; i++) {overlays[i].className=className+' nextOverlay';}
				currentOverlay--;
				className="Overlay"+currentOverlay;
				overlays=getElementsByClass(className,slideHolder.childNodes[cur_pos]);
				for(i=0; i<overlays.length; i++) {overlays[i].className=className+' currentOverlay';}
				slideHolder.setAttribute('currentOverlay',currentOverlay);
				return false;
			}
			break;
		default:
			new_pos=cur_pos+step;
	}
	if(slideShowCircularMode && new_pos == numberSlides) new_pos=0;
	if(slideShowCircularMode && new_pos<0) new_pos=(numberSlides - 1);
	if(step!=0 && new_pos>=0 && new_pos<numberSlides) {
		slideHolder.childNodes[cur_pos].style.display='none';
		slideHolder.childNodes[new_pos].style.display='block';
		slideHolder.setAttribute('currentslide',new_pos);
		var numberOverlays = parseFloat(slideHolder.childNodes[new_pos].getAttribute('numberOverlays'));
		if(step=="p"){
			var currentOverlay=numberOverlays;
			var state=' previousOverlay';
		} else {
			var currentOverlay=0;
			var state=' nextOverlay';
		}
		slideHolder.setAttribute('currentOverlay',currentOverlay);
		if(numberOverlays>0) {
			for(var i=1; i<=numberOverlays; i++){
				var className="Overlay"+i;
				var overlays=getElementsByClass(className,slideHolder.childNodes[new_pos]);
				for(var j=0; j<overlays.length; j++) {overlays[j].className=className+state;}
			}
			if(step=="p"){
				var className="Overlay"+numberOverlays;
				var overlays=getElementsByClass(className,slideHolder.childNodes[new_pos]);
				for(var j=0; j<overlays.length; j++) {overlays[j].className=className+' currentOverlay';}
			}
		}
		new_pos++;
		var indexNumbers = document.getElementById('indexNumbers');
		indexNumbers.firstChild.data = new_pos+'/'+numberSlides;
		if((new_pos==numberSlides) && !slideShowCircularMode && autoAdvance) clearInterval(autoAdvance);
		return true;
	}
	return false;
}

function tocShowSlide(e) {
	if (!e) var e = window.event;
	var target = resolveTarget(e);
	var slide = target.getAttribute('slideNumber');
	var cur_pos = document.getElementById('slideContainer').getAttribute('currentslide');
	var step = slide-cur_pos;
	if(step!=0) GoToSlide(step);
	showHideTOC('none');
	return;
}

//Toggle the display of the table of contents
function showHideTOC(display){
	var toc = document.getElementById('toc');
	//Reset the input box
	document.getElementById('jumpInput').value = "";
	if (display == null || display.length == null){
		if (toc.style.display == 'none' || toc.style.display == ''){
			toc.style.display = 'block';
			document.getElementById('jumpInput').focus();
		} else {
			toc.style.display = 'none';
		}
	} else {
		toc.style.display = display;
		if (display == 'block')
			document.getElementById('jumpInput').focus();
	}
}

function padZero(x){return (x>=10 || x<0 ? "" : "0")+x;}

setClock = function(){
	var actualTime = new Date();
	var newTime = actualTime.getTime() - clockStartTime;
	newTime = clockMultiplier*newTime+clockInterval+clockCorrection;
	actualTime.setTime(newTime);
	newTime = padZero(actualTime.getHours()) + ":" + padZero(actualTime.getMinutes());
//+ ":" + padZero(actualTime.getSeconds());
	var clock = document.getElementById('slideClock');
	clock.firstChild.nodeValue = newTime;
}

function resetClock(){
	var time = new Date(0);
	if(clockStartTime>time){
		var startTime = new Date();
		clockStartTime=startTime.getTime();
	}
}

var title;
var place;
var autoAdvance=null;
var slideClock=null;
var noOverlays=false;
var noClicks=false;
var forceRefresh=false;
var time = 0;
var slideShowCircularMode;
var slideShowStyleSheet;
var slideShowParams;
var clockMultiplier;
var clockInterval;
var clockCorrection=0;
var clockStartTime;
var openTiddlers;

config.macros.slideShow.handler = function(aPlace,macroName,params,wikifier,paramString,tiddler){
	if(tiddler instanceof Tiddler){
		var lingo = config.views.wikified.slideShow;
		if (!e) var e = window.event;
 		place = aPlace;
		title = tiddler.title;
		params = reparse(paramString);
		var onclick = function(){config.macros.slideShow.onClickSlideShow(params);};
		createTiddlyButton(aPlace,lingo.text,lingo.tooltip,onclick);
	}
}

config.macros.slideShow.onClickSlideShow = function(newParams) {
//	if(typeof(newParams)=="number") newParams=slideShowParams;
	openTiddlers = new Array;
	var viewer=document.getElementById('tiddlerDisplay');
	for(var i=0; i<viewer.childNodes.length; i++){
		var name = viewer.childNodes[i].getAttribute('tiddler');
		openTiddlers.push(name);
	}
	document.oncontextmenu = function(e){return false;}
	clockMultiplier = 1;
	clockInterval = 0;
	var startTime = new Date(0);
	slideShowCircularMode = false;
	time = 0;
	slideShowStyleSheet = null;
	if(newParams['style']){
		slideShowStyleSheet = eval(newParams['style']);
	} 
	if(newParams['repeat']){
		slideShowCircularMode = true;
	}
	if(newParams['noClicks']){
		noClicks = true;
	}
	if(newParams['forceRefresh']){
		forceRefresh = true;
	}
	if(newParams['slidePause'] > 0){
		time = newParams['slidePause'];
	}
	if(newParams['clock']){
		clockCorrection=startTime.getTimezoneOffset()*60000;
		startTime = new Date();
		var clockType= eval(newParams['clock']);
		if(clockType != '+') {
			clockMultiplier = -1;
			clockInterval = -clockType*60000;
		}
	}
	clockStartTime=startTime.getTime();
	if(newParams['noOverlays']){
		noOverlays = true;
	}
	clearMessage();
	//Attach the key and mouse listeners
	document.onkeyup = keys;
	document.onmouseup = clicker;
	story.refreshTiddler(title,"SlideShowViewTemplate",true);
	createSlides(newParams);
	slideClock=setInterval('setClock()', 1000); 
	if(time>0) autoAdvance=setInterval("GoToSlide(1)", time); 
	story.closeAllTiddlers(title);
	toggleSlideStyles();
	return;
}

config.macros.slideShow.endSlideShow=function(){
	var showHolder = document.getElementById('slideShowWrapper');
	showHolder.parentNode.removeChild(showHolder);
	document.oncontextmenu =  function(e){};
	if(autoAdvance) clearInterval(autoAdvance);
	if(slideClock) clearInterval(slideClock);
	noClicks=false;
	story.refreshTiddler(title,null,true);
	story.closeAllTiddlers();
	toggleSlideStyles();
	story.displayTiddlers(null,openTiddlers,DEFAULT_VIEW_TEMPLATE);
	document.onmouseup = function(){};
}

function isInteger(s){
	var i;
	for (i = 0; i < s.length; i++){
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}
	// All characters are numbers.
	return true;
}

function jumpInputToSlide(e){
	if (!e) {
		e = window.event;
		e.which = e.keyCode;
	}
	if(e.which==13){
		var jumpInput= document.getElementById("jumpInput").value;
		if(isInteger(jumpInput)){
			var step=jumpInput-document.getElementById('slideContainer').getAttribute('currentslide')-1;
			if (GoToSlide(step)){
				showHideTOC('none'); 
			}
		}
	}
	return;
}

//Used to shorten the TOC fields
function abbreviateLabel(label){
	var maxTOCLength = config.macros.slideShow.maxTOCLength;
	if(label.length>maxTOCLength) {
		var temp = new Array();
		temp = label.split(' ');
		label = temp[0];
		for(var j=1; j<temp.length; j++){
			if((label.length+temp[j].length)<=maxTOCLength){
				label += " " + temp[j];
			} else {
				label += " ...";
				break;
			}
		}
	}
	return label;
}

function createSlides(newParams){
	var lingo = config.views.wikified.slideShow;
	//Remove dblClick on edit function
	var theTiddler = document.getElementById("tiddler"+title);
	theTiddler.ondblclick = function() {};
	// Grab the 'viewer' element and give it a signature so the show can be resumed if stopped
	var tiddlerElements = theTiddler.childNodes;
	var viewer;
	for (var i = 0; i < tiddlerElements.length; i++){
		if (tiddlerElements[i].className == "viewer") viewer = tiddlerElements[i];
	}
	viewer.id = 'slideShowWrapper';
	//Hide the text that comes before the first H1 element (I think I may put this into a cover page type thing)
	while(viewer.childNodes.length > 0 && viewer.firstChild.nodeName.toUpperCase() != "HR" && viewer.firstChild.className!="slideSeparator") {
		viewer.removeChild(viewer.firstChild);
	}
	//Cycle through the content and each time you hit an H1 begin a new slide div
	var slideNumber = 0;
	var slideHolder = document.createElement('DIV');
	slideHolder.id = "slideContainer";
	slideHolder.setAttribute('currentslide',0);

	while(viewer.childNodes.length > 0){
		//Create a new slide a append it to the slide holder
		if (viewer.firstChild.nodeName.toUpperCase() == "HR" && viewer.firstChild.className=="slideSeparator"){
			slideNumber++;
			var slide = document.createElement('DIV');
			slide.id = "slideNumber"+slideNumber;
			slide.className = "slide";
			if (slideNumber > 1) {
				//slideHolder.setAttribute('currentslide',0);
				slide.style.display='none';
			} else {
				slide.style.display='block';
			}
			slideHolder.appendChild(slide); 
			viewer.removeChild(viewer.firstChild);
		} else {
			if(viewer.firstChild.nodeName=="SPAN" && viewer.firstChild.className=="" && viewer.firstChild.hasChildNodes()) {
				var anchor=viewer.firstChild.nextSibling;
				for (var ii=0;ii<viewer.firstChild.childNodes.length;ii++) {
					var clone=viewer.firstChild.childNodes[ii].cloneNode(true);
					viewer.insertBefore(clone,anchor);
				}
				viewer.removeChild(viewer.firstChild);
			} else {
				slide.appendChild(viewer.firstChild);
			}
		}
	} 
	//Stick the slides back into the viewer

	var blanker= createTiddlyElement(viewer,"DIV","slideBlanker");
	blanker.style.display="none";

	viewer.appendChild(slideHolder);
	slideHolder.setAttribute('numberSlides',slideNumber);
	//Create the navigation bar
	var slidefooter = createTiddlyElement(viewer,"DIV","slideFooter","slideFooterOff");
	var navigator = createTiddlyElement(slidefooter,"SPAN","navigator");
	//Make it so that when the footer is hovered over the class will change to make it visible
	slidefooter.onmouseover = function () {slidefooter.className = "slideFooterOn"};
	slidefooter.onmouseout = function () {slidefooter.className = "slideFooterOff"};
	//Create the control button for the navigation 
	var onClickQuit = function(){config.macros.slideShow.endSlideShow();};
	createTiddlyButton(navigator,lingo.quit.text,lingo.quit.tooltip,onClickQuit);
	createTiddlyButton(navigator,lingo.firstSlide.text,lingo.firstSlide.tooltip,first_slide);
	createTiddlyButton(navigator,lingo.previousSlide.text,lingo.previousSlide.tooltip,previous_slide);
	createTiddlyButton(navigator,lingo.nextSlide.text,lingo.nextSlide.tooltip,next_slide);
	createTiddlyButton(navigator,lingo.lastSlide.text,lingo.lastSlide.tooltip,last_slide); 
	createTiddlyButton(navigator,lingo.resetClock.text,lingo.resetClock.tooltip,resetClock,"button","slideClock");
	var indexNumbers = createTiddlyElement(slidefooter,"SPAN","indexNumbers","indexNumbers","1/"+slideNumber)
	indexNumbers.onclick = showHideTOC;
	var toc = createTiddlyElement(slidefooter,"UL","toc");
	var ovl=1;
	for (var i=0;i<slideHolder.childNodes.length;i++) {
		if(!noOverlays) {
			var ovl=1;
			while(1){
				var className="Overlay"+ovl;
				var overlays=getElementsByClass(className,slideHolder.childNodes[i]);
				if(overlays.length>0){
					for(var j=0; j<overlays.length; j++) {overlays[j].className+=' nextOverlay';}
					ovl++;
				} else {break;}
			}
		}
		slideHolder.childNodes[i].setAttribute("numberOverlays",ovl-1);
		slideHolder.setAttribute("currentOverlay",0);
		//Loop through each slide and check the header's content
		var tocLabel = null; 
		for (var j=0;j<slideHolder.childNodes[i].childNodes.length;j++) {
			var node = slideHolder.childNodes[i].childNodes[j];
			if(node.nodeName=="H1" || node.nodeName=="H2" || node.nodeName=="H3" || node.nodeName=="H4") {
				var htstring = node.innerHTML;
				var stripped = htstring.replace(/(<([^>]+)>)/ig,"");
				tocLabel = abbreviateLabel(stripped);
				var tocLevel="tocLevel"+node.nodeName.charAt(1);
				var tocItem = createTiddlyElement(toc,"LI",null,tocLevel);
				var tocLink = createTiddlyElement(tocItem,"A",null,"tocItem",tocLabel);
				tocLink.setAttribute("slideNumber",i);
				tocLink.onclick=tocShowSlide;
			}
		}
	}
	//Input box to jump to s specific slide
	var tocItem = createTiddlyElement(toc,"LI",null,"tocJumpItem",config.macros.slideShow.messages.gotoLabel);
	var tocJumpInput = createTiddlyElement(tocItem,"INPUT","jumpInput");
	tocJumpInput.type="text";
	tocJumpInput.onkeyup=jumpInputToSlide;
}

var next_slide= function(e){GoToSlide(1);}
var first_slide= function(e){GoToSlide("f");}
var previous_slide= function(e){GoToSlide(-1);}
var last_slide= function(e){GoToSlide("l");}

function toggleSlideStyles(){
	var contentWrapper = document.getElementById('contentWrapper');
	if (contentWrapper.className == "slideShowMode"){
		contentWrapper.className = "";
		refreshPageTemplate();
		setStylesheet("#backstageShow{display: block;}","SlideShowStyleSheet"); 
		changeStyleSheet();
	} else{
		contentWrapper.className = "slideShowMode";
		refreshPageTemplate("SlideShowPageTemplate");
		setStylesheet(store.getRecursiveTiddlerText("SlideShowStyleSheet"),"SlideShowStyleSheet");
		if(slideShowStyleSheet) changeStyleSheet(slideShowStyleSheet);
	}
}

config.shadowTiddlers.SlideShowPageTemplate="<!--{{{-->\n<div id='displayArea'>\n<div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->";

config.shadowTiddlers.SlideShowViewTemplate="<!--{{{-->\n<div class='title' macro='view title'></div>\n<div class='viewer' macro='view text wikified'></div>\n<!--}}}-->";

config.shadowTiddlers.SlideShowStyleSheet = "/***\n!Slide Mode Styles\n***/\n/*{{{*/\n#slideBlanker {\n position:absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 90; \n background-color: #000;\n}\n#backstageShow{\n display: none !important;\n}\n\n#contentWrapper.slideShowMode #slideContainer{\n display: block;\n}\n\n#contentWrapper.slideShowMode .Comment{\n display: none;\n}\n\n#contentWrapper.slideShowMode .nextOverlay{\n visibility: hidden;\n}\n\n#contentWrapper.slideShowMode .currentOverlay{\n visibility: visible;\n}\n\n#contentWrapper.slideShowMode .previousOverlay{\n visibility: visible;\n}\n\n#jump{\n text-align: right;\n}\n\n.slideFooterOff #navigator{\n visibility: hidden;\n}\n\n.slideFooterOn #navigator{\n visibility: visible;\n}\n\n#contentWrapper.slideShowMode #slideClock{\n cursor: pointer; margin: 0 5px 0 5px; border: 1px solid #db4\n}\n\n#contentWrapper.slideShowMode,\n #contentWrapper.slideShowMode #displayArea{\n width: 100%;\n font-size: 1.5em;\n margin: 0 !important;\n padding: 0;\n}\n\n#slideContainer{\n display: none;\n}\n\n.indexNumbers{\n cursor: pointer;\n}\n\n#navigator{\n visibility: hidden;\n bottom: 0;\n}\n\n#toc{\n display: none;\n position: absolute;\n font-size: .75em;\n bottom: 2em;\n right: 0;\n background: #fff;\n border: 1px solid #000;\n text-align: left;\n}\n\nul#toc, #toc li{\n margin: 0;\n padding: 0;\n list-style: none;\n line-height: 1em;\n}\n\n.tocJumpItem{\n margin-right: 2em;\n}\n\n.tocJumpItem input{\nmargin-right: 1em;\n border: 0;\n}\n\n#toc a,\n#toc a.button{\n display: block;\n padding: .1em;\n}\n\n#toc .tocLevel1{\nfont-size: .8em;\n}\n\n#toc .tocLevel2{\n margin-left: 1em;\n font-size: .75em;\n}\n\n#toc .tocLevel3{\n margin-left: 2em;\nfont-size: .75em;\n}\n\n#toc .tocLevel4{\n margin-left: 3em;\nfont-size: .65em;\n}\n\n#toc a{\n cursor: pointer;\n}\n\nh1{\n min-height: 1em;\n}\n\n.slide h1{\n min-height: 0;\n}\n\n/* The '>' selector is ignored by IE6 and earlier so the proper rules are given */\n#slideFooter{\n position: fixed;\n bottom: 2px;\n right: 2px;\n width: 100%;\n text-align: right;\n}\n\n/* This is a hack to trick IE6 and earlier to put the navbar on the bottom of the page */\n* html #slideFooter {\n position: absolute;\n width: 100%;\n text-align: right;\n right: auto; bottom: auto;\n left: expression( ( -20 - slideFooter.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );\n top: expression( ( -10 - slideFooter.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );\n}\n\n\n\n/*}}}*/";

config.shadowTiddlers.SlideShowPluginDoc="The documentation is missing. It is available [[here|http://www.math.ist.utl.pt/~psoares/addons.html#SlideShowPluginDoc]].";
//}}}
!Description
This plugin turns a TiddlyWiki tiddler into a simple slide show type display. Most features that are usually found in presentation software are available. It should work in a way that does not interfere with TiddlyWiki. When you close the slide show you get back to your good old TW. 

This plugin has been tested in Firefox and Internet Explorer. Let me know if something seems broken.
!Usage
To use this plugin you //must// be using TiddlyWiki 2.0. Some optional features (as the incremental display) require version 2.0.8 or higher. To install the plugin copy the tiddlers SlideShowPlugin, SlideShowPageTemplate and SlideShowViewTemplate to your TW, label the first one with the //systemConfig// tag, save the TW and refresh the browser.

To make a slide show simply drop {{{<<slideShow>>}}} at the beginning of a tiddler and use {{{-s-}}} to start each slide. 

If you move your mouse over the bottom of the browser window you will see a few navigation buttons, a clock and a table of contents that shows up when you click the slide number.

Any block of text marked as {{{{{Comment{For my eyes only!}}}}}} will not be displayed in the slide show.

See these and other features in this [[SlideShowExample]].
!Incremental display
A succession of overlays (or layers) can be defined in each slide by marking blocks of text with {{{{{Overlay1{...some text...}}}}}}, {{{{{Overlay2{...some text...}}}}}}, {{{{{Overlay3{...some text...}}}}}}, ...

To costumize the way overlays are shown you can redefine the following CSS classes
*contentWrapper.slideShowMode .previousOverlay 
*contentWrapper.slideShowMode .currentOverlay 
*contentWrapper.slideShowMode .nextOverlay 
in a ~StyleSheet. The default style simply hides the next overlays and shows the current and the previous ones as normal text.
!Slide show parameters
*The slide show can be themed by providing a ~StyleSheet ({{{<<slideShow style:'MyStyleSheet'>>}}})
*By default, there is a clock at bottom of the browser window that displays the current time. This clock can also show the presentation elapsed time with {{{<<slideShow clock:'+'>>}}} or a countdown clock with {{{<<slideShow clock:'-20'>>}}} (for 20 minutes). In these two cases, if you click on the clock display it will be restarted
*The slide show can be set to loop ({{{<<slideShow repeat>>}}})
*You can set it so each slide changes after X milliseconds ({{{<<slideShow slidePause:X>>}}}) (auto advance mode)
*To not use the mouse to navigate through the presentation use  {{{<<slideShow noClicks>>>}}}. This is useful when there are clickable elements in the presentation
*{{{<<slideShow forceRefresh>>>}}} forces a refresh of the presentation tiddler (useful when a presentation is built from separate tiddlers using the {{{<<tiddler>>}}} macro)
*Overlays can be disabled  with {{{<<slideShow noOverlays>>}}}
*These parameters can be mixed and matched in any order: {{{<<slideShow slidePause:1000 repeat>>}}} is the same as {{{<<slideShow repeat slidePause:1000>>}}}
!Slide show navigation
You can navigate through a slide show using the keyboard or the mouse. To quickly move to titled sections you can use the table of contents. 
!!Mouse navigation
Left (right) clicking on a slide jumps to the next (previous) overlay. To move to the beginning of the next or previous slide you must use the navigation bar at the bottom of the browser's window. If there are no overlays defined both operations are equivalent.
!!Keyboard
The following keys are defined:
*Left arrow - previous overlay
*Down arrow - previous slide
*Right arrow - next overlay
*Up arrow - next slide
*Home - first slide
*End - last slide
*Escape - exit slide show
*Spacebar - pause/resume slide show in auto advance mode
*B - blank screen
!Revision history
*1.6
**removed seconds from clock
**added B key to blank screen
**a few fixes to make it work with IE7
*1.5.3
**fix for ~TW2.2
**forceRefresh and noClicks
**removed autoStart feature
**templates are now in shadow tiddlers
*1.5.2 13/02/2007
**fixed a conflict with TW pageFooter
*1.5.1 10/11/2006
**added SlideShowPageTemplate and SlideShowViewTemplate. This way, the plugin no longer requires a standard TW layout. Thanks to Andrew Lister for the idea.
*1.5.0 18/09/2006
**fixed restoring stylesheet on exit
**changed (again!) the way how slides are separated (slide shows prepared for previous versions must be fixed)
*1.4.0 20/04/2006
**changed the way how slides are separated (slide shows prepared for previous versions must be fixed)
**now works with content included with the {{{<<tiddler>>}}} macro
**added incremental display (overlays)
**improved documentation
**assorted small fixes
*1.3.1 10/03/2006
**removed empty slide titles
**fixed wrong numberSlides when slides have div's
**fixed wrong time in Windows
*1.3.0 26/02/2006
**restore open tiddlers on exit
**fixed problem with markup in headers (should work with NestedSlidersPlugin)
**added slide comments (blocks of text in the tiddler that don't show up in the presentation)
*1.2.1 28/01/2006
**pause timed slideshow with spacebar
**added clock with 3 different modes
**fixed bugs with style and abbreviation options
**general cleanup
*1.2.0 07/01/2006
**added a resume feature
**added themes support
*1.1.5 14/12/2005
**added mouse support
**cleaned up navbar generation
*1.1.0 12/12/2005
**added support for IE
**added key listeners
*1.0.0 11/12/2005
**initial release
!Todo
*Time code is still very hackerish and unreliable.
<!--{{{-->
<div class='title' macro='view title'></div>
<div class='viewer' macro='view text wikified'></div>
<!--}}}-->
from: ''John Winfield''
----
{{borderless{
|[[Click here to open in a new browser tab|http://winfij.com/acp/smarttrackACP.html]]|
<html><div align="center" style="background-color:white"><iframe src ="http://winfij.com/acp/smarttrackACP.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://en.wikipedia.org/wiki/Precession_of_the_equinoxes]]|
<html><div align="center"><iframe src ="http://en.wikipedia.org/wiki/Precession_of_the_equinoxes" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.variablestarssouth.org/communityresources/software-calculators]]|
<html><div align="center"><iframe src ="http://www.variablestarssouth.org/communityresources/software-calculators" width="100%" align="center" height="600">< /></div></html>}}}
----
For operating a robotic observatory, these are the applications you need to have installed before you run ACP for the first time. @@color:#FF0;''Do not uninstall and reinstall ACP if you encounter a problem! This is almost always a waste of time, and may obscure the real issue or create new problems.''@@ 
!ASCOM
The ASCOM Platform 6 (or later) must be installed on your computer. The latest version of the ASCOM Platform is available for download at no charge from the [[ASCOM Initiative Web Site]] in the downloads section. 
!~MaxIm
~MaxIm DL/CCD V5.25/V6.11 (or later) must be installed on your computer __and run at least once to register its scripting interfaces__. It is available from [[Diffraction Limited]]. 
!~FocusMax
Automated observing needs automatic focusing. ACP has a built-in auto-focus feature that relies on ~FocusMax. If you have a focuser that can be used with ~FocusMax, @@color:#ff0;''you need ~FocusMax 3.7.0.36 or later''@@,, or the latest ~CCDWare ~FocusMax 4 for proper operation. If ~FocusMax isn't installed, get the installer from the [[FocusMax Autofocus Software]] web site and install it. If ~FocusMax is installed but the version is too old, get the latest ~FocusMax executable. Unzip and replace your existing ~FocusMax.exe with this one. @@color:#ff0;''Don't try to use ACP's auto-focus without the proper version.''@@
!~PinPoint Reference Catalog - GSC or USNO A2.0
The ~PinPoint Astrometric Engine (included with ACP) requires either the Guide Star Catalog 1.1 or the USNO A2.0 catalog for star references. The GSC is 350MB in size; the A2.0 is over 6,000MB (6GB) in size. If your imager has a field of view smaller than 15 arc minutes, you'll need to use the USNO A2.0 for best reliability. Make sure one or both of these catalogs are installed. Start with the GSC.
|!NOTE|
|There is a lot of advice floating around on the net as to which catalogs are the "best". Virtually all of this advice is based on the needs of precision sub-arcsecond science astrometry. The GSC and A2.0 are the two best catalogs for general plate solving used to point a telescope. Really!|
!!Checking the Catalog
After installing the catalog of your choice, run the Catalog Checker program (included with ACP and accessible via the Start menu). Select your catalog type, click the button and then select the path to the root of your catalog. The program will perform a short validation of the catalog files to see that they are all there and the right size.

|!NOTE|
|If you want to use A2.0, see the FAQ article [[Where can I get a copy of the <...> catalog?]].|
----
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
ACP comes with a set of 14 standard scripts. You should become familiar with all of these, as they will probably be useful at one time or another. You don't need to know how they work, or look at the code in the scripts. To run a script, select it in the console (use the Browse... button) and click the Run button to call the script's main entry point.

|[[AcquireImages.js]]|[[CenterScope.vbs]]|[[ModelToTpoint.vbs]]|
|[[AutoFlat.vbs]]|[[FindBrightStar.vbs]]|[[Sky6MosaicToPlan.vbs]]|
|[[AutoFocus.vbs]]|[[FindFocalLength.vbs]]|[[SyncScope.vbs]]|
|[[AutoGuideTest.js]]|[[FindLostScope.js]]|[[TestPointing.vbs]]|
|[[CalibrateGuider.vbs]]|[[FocusOffsets.vbs]]|[[TrainCorrector.vbs]]|

ACP also comes with a large library of support functions built into ''~AcquireSupport.wsc''. Most of the ACP standard scripts use the common functions in the ~AcquireSupport library. ''If you plan to write scripts of your own'', you should //definitely// get familiar with the contents of ~AcquireSupport.wsc. It will save you considerable time and pain. Look at the standard scripts to see how ~AcquireSupport is invoked and used. Also be sure to read through the Scripting Guide in the ACP Help file. When working with ~AcquireSupport.wsc, the ~PrimalScript editor is a great help. See the Resources page in the Scripting guide of the [[ACP 8.1]] Help file.

Here are all the [[Standard ACP Scripts]].
----
Catalogs like the ones used in ACP are usually compiled over many years from many sources. Often many telescopes with different cameras have been used for data collection, and each set of data from one telescope will have random and systematic errors different from the set of data from another telescope. Although compilers of catalogs work for a long time to try to minimize these differences in the final product, the result will always be that the quality and completeness of the whole catalog is usually different in small ways for different RA and Dec zones in the catalog. The @@color:#ffbf00;''~UCAC4''@@ catalog will probably be suitable for use as standards for precision photometry; the others are not. Here are [[Catalog Comparison Images]] from these catalogs that show what a star field looks like in a simulated image of the same field.

|!  | !~GSC1.1 | !~USNO-A2.0 | !~UCAC2 | !Tycho2 | !~UCAC3 | !~UCAC4<br>All values TBR |
|!Number of stars| ~15,000,000 | 526,280,881 | 48,366,966 | 2,539,913+ | 100,766,420 | ~113,000,000 |
|!Star density per square degree| 400 (avg) | 500-150,000 | 1360 (avg) | 25-150 | 2320 (avg) | 2550 (avg) |
|!Magnitude limit| 11 (m~~V~~) | 19-22 (m~~B~~, m~~V~~) | 16 (m~~R~~)  | 11 (m~~V~~) | 7.5-16.3 (m~~R~~) | All to m~~R~~=16 |
|!Epoch| 2000.0 | 2000.0 | 2000.0 | 2000.0 | 2000.0 | 2000.0 |
|!Coverage| All Sky | All Sky | -90º to +40º (+52º in places) | All Sky | All Sky | All Sky |
|!Positional Accuracy (mas)| ±100-300 | ±220-250 | ±20 (m~~R~~=14); ±70 (m~~R~~=16) | ±7 (m~~V~~<9); ±60 (m~~V~~=11) | ±20 (m~~R~~=16.5) | ±15-20 (m~~R~~=14) |
|!Proper Motion Accuracy (mas per year)| no ~PMs | no ~PMs | 2 to 7 | 2.5 | 1 to 3 | 1 to 3 |
|!Photometry Accuracy (mag)| m~~B~~: ±0.11 to ±0.3 | m~~B~~, m~~V~~: ±0.25 to ±0.40 | m~~B~~, m~~V~~: ~±0.3 | m~~V~~: ±0.013 to ±0.1 | m~~R~~: ~±0.1 | m~~R~~: ±0.013 to ±0.05 |
|!Reference| [[GSC 1.1 Reference]] | [[USNO-A2.0 Reference]] | [[UCAC2 Reference]]<br>[[UCAC2 Supplement]] | [[Tycho-2 Reference]] | [[UCAC3 Reference]] | [[UCAC4 Reference]] |

''Note 1'': Here's a link to more than you ever wanted to know about [[Recommended Star Catalogs]].

''Note 2'': The @@color:#0f0;''~UCAC3''@@ (8 GB) was published and made available in August 2009. It includes all the remaining areas of the sky up to the NCP, and contains a total of 100,766,420 objects, of which 51,297 are identified, known high proper motions stars. In terms of positional accuracy, it is the best catalog to use with ACP. However, its star density is somewhat less than that of the USNO A2.0 catalog. 

''Note 3'': There is a new version of the GSC: The GSC 2.3.2 is the current catalog release extracted from the Guide Star Catalog II database, which is maintained at the Space Telescope Science Institute in Baltimore, MD, USA. The catalog contains astrometry, multi-band photometry (B~~J~~, R~~F~~, I~~N~~) and star/non-star classification for 945,592,683 objects down to the magnitude limit of the survey plates (~21). Positions are tied to the International Celestial Reference System; for stellar sources, the all-sky average absolute error per coordinate ranges from ±0.20 to ±0.28 arcsec depending on magnitude. Stellar photometry is accurate to ±0.13 to ±0.22 mag as a function of magnitude and photographic passbands (R~~F~~, B~~J~~, I~~N~~). Outside of the galactic plane, stellar classification is reliable to at least 90% confidence for magnitudes brighter than R~~F~~ = 19.5, and the catalog is complete to R~~F~~ = 20. Because of its size, data is currently only available at [[GSC2.3 Online]].

''Note 4'': See also: [[Where can I get a copy of the <...> catalog?]]

----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
{{borderless{
|[[Click here to open in a new browser tab|http://starizona.com/acb/ccd/calc_ideal.aspx]]|
<html><div align="center" style="background-color:white"><iframe src ="http://starizona.com/acb/ccd/calc_ideal.aspx" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://store.simulationcurriculum.com//]]|
<html><div align="center"><iframe src ="http://store.simulationcurriculum.com//" width="100%" align="center" height="600">< /></div></html>}}}
----
!Server Setup
This is really easy, assuming you have a network adapter on your computer. You do not need to be connected to the net unless you have the internet option and want to let others use your observatory. 
#''Start ACP.'' 
#Open up the ACP Preferences, Server tab dialog. 
#Check the box "Enable Web Server" and "Enable FTP Server". Leave the other settings alone. 
#Click OK to close the Properties window. ''Leave ACP running.'' 
#On ACP's main window, click the Use Web Browser button. 
When the browser starts up, you should see the main ACP browser interface. If you just want to use the ACP browser interface locally (on the ACP computer) __that's all there is to do__! 

__If you have the internet option__ and want to use ACP from a different computer, we need to set up a user account for you. ACP's web and FTP sites //require// username/password logins unless accessed from the local/ACP computer. This is for your own protection, as you'll see...

For the Internet option only, now move on to [[Creating an Account]].
If you put a script called ''~ACP-Startup.xxx'' (where xxx=vbs, or js) in the same directory as ACP.exe, it will be automatically run when ACP starts up, ''after any auto actions you may have enabled in ACP preferences''. 

Likewise, a script called ''~ACP-Shutdown.xxx'' will be run when ACP shuts down ''before any auto actions you may have enabled in ACP preferences''. You can use these actions to perform observatory startup and shutdown, among other things.

The ~ACP-Shutdown.xxx script isn't what is commonly wanted. Instead, most people are looking for a way to run __custom shutdown code at the end of an observing plan__. The "standard" actions taken when a #SHUTDOWN directive is at the end of an observing plan is often just fine, but sometimes more or different things are needed. There are two ways to do this:
#Use the Shutdown custom action as described in [[Custom Actions (expert feature)]]. This is OK when you have a limited amount of logic or when you want to use some of the routines in the ~AcquireSupport library. See the description, just remember that returning a True will cause the standard shutdown logic to run after the logic in ~UserActions. 
#End the observing plan with a #CHAINSCRIPT directive (see [[Directives]]) that loads and runs your full-function shutdown script (that can have any name and place on disk). This script will be run in the ACP scripting console, of course, so it will have access to all of ACP's API library.

(See also [[Startup/Shutdown Script]])
----
^^Copyright &copy; 2000-<<today YYYY>>, Robert B. Denny, Mesa AZ
from: ''Bob Denny''
----
Bob writes, "This [vintage 2008] zip file contains two scripts ~StartupObs.js and ~ShutdownObs.js. They run at the observatory in ACP's console and do startup and shutdown tasks (respectively) on one of the observatories at New Mexico Skies. Hopefully the code in them will be useful to others. Note particularly the functions that use WMI to start and stop programs. The power control will almost certainly be wrong as your power switch will be different (there are zillions of incompatible ones). The scripts are suitable for running as automatic startup and shutdown scripts for ACP Scheduler as well."

''[[Download the Startup/Shutdown Scripts|RefDocs/ShutUpDownObs.zip]]''
----
Reference this Forum post (opens in a new browser tab):   http://forums.dc3.com/showthread.php?p=18383#post18383
{{borderless{
|[[Click here to open in a new browser tab|http://cadcwww.hia.nrc.ca/cadcbin/wdb/astrocat/stetson/query/]]|
<html><div align="center"><iframe src ="http://cadcwww.hia.nrc.ca/cadcbin/wdb/astrocat/stetson/query/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.fourthdimensionastroimaging.com/introduction.html]]|
<html><div align="center"><iframe src ="http://www.fourthdimensionastroimaging.com/introduction.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.astral-imaging.com/latest_images.htm]]|
<html><div align="center"><iframe src ="http://www.astral-imaging.com/latest_images.htm" width="100%" align="center" height="600">< /></div></html>}}}
----
/***
!Overarching styles /% ============================================================= %/
***/
/*{{{*/
/* makes text Verdana */

body {font-family: Verdana; font-size: 9pt; }

.tiddler {
 background: #050030;
 border: 1px solid #000080;
 padding-bottom: 8px;
 margin-left: 8px; /* Vastly different on IE vs FireFox! */
 margin-bottom: 12px;
} 

/***
http://tiddlystyles.com/#theme:DevFire
Author: Clint Checketts
***/

body { background: #000; }

/*}}}*/
/***
!Link styles /% ============================================================= %/
***/
/*{{{*/

a, 
a.button, 
#mainMenu a.button, 
#sidebarOptions .sliderPanel a
{
 color: #ffbf00;
 border: 0;
 background: transparent;
}

a:hover,
a.button:hover,
#mainMenu a.button:hover,
#sidebarOptions .sliderPanel a:hover,
#sidebarOptions .sliderPanel a:active{
 color: #ff7f00;
 border: 0;
 border-bottom: #ff7f00 1px dashed;
 background: transparent;
 text-decoration: none;
}

#displayArea .button.highlight{  color: #ffbf00;  background: #4c4c4c; }

/*}}}*/
/***
!Header styles /% ============================================================= %/
***/
/*{{{*/

.header{ 
  -bottom: 2px solid #ffbf00;
  color: #fff; 
  font-family: Georgia, serif; 
}

/* .siteTitle {font-size: 3.5em; text-shadow: 2px -2px 3px white; }  */

/* .siteTitle {
  font-family: Xirod; 
  font-size: 3em; 
  text-shadow: 2px -2px 3px white;
} */

.headerForeground a { 
  color: #fff; 
}

.header a:hover {
  border-bottom: 1px dashed #fff;
}
/*}}}*/
/***
!Main menu styles /% ============================================================= %/
***/
/*{{{*/

#mainMenu {color: #fff;}
#mainMenu h1{ font-size: 1.1em;}
#mainMenu li,#mainMenu ul{list-style:none; margin:0; padding:0;}

/*}}}*/
/***
!Sidebar styles /% ============================================================= %/
***/
/*{{{*/

#sidebar {right:0; color:#fff; border:2px solid #ffbf00; border-width: 0 0 2px 2px;}

#sidebarOptions {background-color: 4c4c4c; padding:0;}
#sidebarOptions a{margin:0; color:#ffbf00; border:0;}
#sidebarOptions a:hover {color:#4c4c4c; background-color:#ffbf00;}
#sidebarOptions a:active {color:#ffbf00; background-color:transparent;}
#sidebarOptions .sliderPanel {background-color:#333; margin: 0;}

#sidebarTabs {background-color: #4c4c4c;}
#sidebarTabs .tabSelected {padding:3px 3px; cursor:default; color:#ffbf00; background-color:#666;}
#sidebarTabs .tabUnselected {color:#ffbf00; background-color:#5f5f5f; padding:0 4px;}
#sidebarTabs .tabUnselected:hover, #sidebarTabs .tabContents {background-color:#666;}

.listTitle{color: #FFF;}
#sidebarTabs .tabContents a{color:#ffbf00;}
#sidebarTabs .tabContents a:hover{color:#ff7f00; background:transparent;}
#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents{color:#ffbf00; background:#4c4c4c;}
#sidebarTabs .txtMoreTab .tabUnselected {color:#ffbf00; background:#5f5f5f;}

.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}
.tab.tabUnselected {background-color: #666;}
.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}
.tabContents {background-color:#4c4c4c; border: 0;}
.tabContents .tabContents {background: #666;}
.tabContents .tabSelected {background: #666;}
.tabContents .tabUnselected {background: #5f5f5f;}
.tabContents .tab:hover {background: #666;}

/*}}}*/
/***
!Message area styles /% ============================================================= %/
***/
/*{{{*/

#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}
#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}
#messageArea a:hover {color: #ff7f00;}
#messageArea a:active {color: #ff7f00;}
#messageArea .messageToolbar a{border:1px solid #ffbf00; background:#4c4c4c;}

/*}}}*/
/***
!Popup styles /% ============================================================= %/
***/
/*{{{*/

.popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}
.popup li.disabled{color: #fff;}
.popup a {color: #ffbf00; }
.popup a:hover { background: transparent; color: #ff7f00; border: 0;}
.popup hr {color: #ffbf00; background: #ffbf00;}

/*}}}*/
/***
!Tiddler Display styles /% ============================================================= %/
***/
/*{{{*/

.svgCoords{font-family: "Bitstream Vera Sans";fill:#0F0; font-size:0.8em;font-weight:bold}

mstyle{
 color: #fff;
 font-size: 150%;
 font-family: "Bitstream Vera Serif", "Times New Roman", serif
}

.title{color: #fff;}
h1, h2, h3, h4, h5 {color:#fff; background-color:transparent; border-bottom:1px solid #333;}

.subtitle{color:#666;}

.viewer {color:#fff;}
.viewer table{background: #666; color: #fff;}
.viewer th {background-color: #996; color: #fff;}
.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00;}
.viewer hr {color: #666;}

.tiddler .button {color: #4c4c4c;}
.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}
.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}

.toolbar {color:#4c4c4c;}

.toolbar a.button,
.toolbar a.button:hover,
.toolbar a.button:active,
.editorFooter a{border:0;}

.footer {color:#ddd;}

.selected .footer {color:#888;}

.highlight, .marked {color:#000; background-color:#ffe72f;}
.editorFooter { color:#aaa;}

.tab{-moz-border-radius-topleft:3px; -moz-border-radius-topright:3px;}

.tagging,
.tagged{background:#4c4c4c; border:1px solid #4c4c4c;}

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

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

.tagging .button,
.tagged .button{color:#ffbf00; border:0; padding:0;}

.tagging .button:hover,
.tagged .button:hover{background:transparent;}

.selected .isTag .tagging.simple,
.selected .tagged.simple,
.isTag .tagging.simple,
.tagged.simple {float:none; display:inline; border:0; background:transparent; color:#fff; margin:0;}

.cascade {background:#4c4c4c; color:#ddd; border:1px solid #ffbf00;}

/*}}}*/
/***
!Footer styles /% ============================================================= %/
***/
/*{{{*/

#ContentFooter {background:#303060; color:#fff; clear:both; padding:0.5em 1em;}
#ContentFooter a {color: #fff; border-bottom: 10px dotted #0f0;}
#ContentFooter a:hover { color: #fff; background-color:#f00;}

/*}}}*/
/*{{{*/
@media print {
body {
         background: #fff;
         color: #000;
         font-size: 8pt;
         font-family: Verdana, sans-serif;
         width: 21.6cm;
         height: 279.4cm;
         margin-left: 0.1cm
         }
}


@media print {#mainMenu {display: none ! important;}}
@media print {#topMenu {display: none ! important;}}
@media print {#sidebar {display: none ! important;}}
@media print {#messageArea {display: none ! important;}} 
@media print {#toolbar {display: none ! important;}}
@media print {.header {display: none ! important;}}
@media print {.tiddler .subtitle {display: none ! important;}}
@media print {.tiddler .toolbar {display; none ! important; }}
@media print {.tiddler .tagging {display; none ! important; }}
@media print {.tiddler .tagged {display; none ! important; }}
@media print {#displayArea {margin: 1em 1em 0em 1em;}}
@media print {.pageBreak {page-break-before: always;}}

/*}}}*/
/***
|Name|StyleSheetShortcuts|
|Source|http://www.TiddlyTools.com/#StyleSheetShortcuts|
|Version||
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|CSS|
|Description|'convenience' classes for common formatting, alignment, boxes, tables, etc.|

These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.
***/
/*{{{*/

/* text alignments */
.left
	{ display:block;text-align:left; }
.center
	{ display:block;text-align:center; }
.center table
	{ margin:auto !important; }
.right	
	{ display:block;text-align:right; }
.justify
	{ display:block;text-align:justify; }
.indent
	{ display:block;margin:0;padding:0;border:0;margin-left:2em; }
.floatleft
	{ float:left; }
.floatright
	{ float:right; }
.valignTop, .valignTop table, .valignTop tbody, .valignTop th, .valignTop tr, .valignTop td
	{ vertical-align:top; }
.valignBottom, .valignBottom table, .valignBottom tbody, .valignBottom th, .valignBottom tr, .valignBottom td
	{ vertical-align:bottom; }
.clear
	{ clear:both; }
.wrap
	{ white-space:normal; }
.nowrap
	{ white-space:nowrap; }
.hidden
	{ display:none; }
.show
	{ display:inline !important; }
.span
	{ display:span; }
.block
	{ display:block; }
.relative
	{ position:relative; }
.absolute
	{ position:absolute; }

/* font sizes */
.big
	{ font-size:14pt;line-height:120% }
.medium
	{ font-size:12pt;line-height:120% }
.normal
	{ font-size:9pt;line-height:120% }
.small
	{ font-size:8pt;line-height:120% }
.fine
	{ font-size:7pt;line-height:120% }
.tiny
	{ font-size:6pt;line-height:120% }
.larger
	{ font-size:120%; }
.smaller
	{ font-size:80%; }

/* font styles */
.bold
	{ font-weight:bold; }
.italic
	{ font-style:italic; }
.underline
	{ text-decoration:underline; }

/* plain list items (no bullets or indent) */
.nobullets li { list-style-type: none; margin-left:-2em; }

/* vertical tabsets - courtesy of Tobias Beer */
.vTabs .tabset {float:left;display:block;padding:0px;margin-top:.5em;min-width:20%;}
.vTabs .tabset .tab {display:block;text-align:right;padding:2px 3px 2px 7px; margin:0 1px 1px 0;}
.vTabs .tabContents {margin-left:20%;max-width:80%;padding:5px;}
.vTabs .tabContents .tabContents {border:none; background:transparent;}

/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
	-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
	-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
	column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
	-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
	-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
	column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
	-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
	-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
	column-count:4; column-gap:1em; column-width:25%; /* Opera */
}

/* page breaks */
.breakbefore { page-break-before:always; }
.breakafter { page-break-after:always; } 

/* show/hide browser-specific content for InternetExplorer vs. non-IE ("moz") browsers */
*[class="ieOnly"]
	{ display:none; } /* hide in moz (uses CSS selector) */
* html .mozOnly, *:first-child+html .mozOnly
	{ display: none; } /* hide in IE (uses IE6/IE7 CSS hacks) */

/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
	{ border:0 !important; margin:0 !important; padding:0 !important; }
.widetable, .widetable table
	{ width:100%; }

/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }

/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }

/* grouped content */
.outline
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; }
.menubox
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox code
	{ color:#333 !important; }
.borderleft
	{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
.borderright
	{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
.borderbottom
	{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
.bordertop
	{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }

/* scrolled content */
.scrollbars { overflow:auto; }
.height10em { height:10em; }
.height15em { height:15em; }
.height20em { height:20em; }
.height25em { height:25em; }
.height30em { height:30em; }
.height35em { height:35em; }
.height40em { height:40em; }

/* compact form */
.smallform
	{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
	{ font-size:8pt; }

/* stretchable edit fields and textareas (auto-size to fit tiddler) */
.stretch input { width:99%; }
.stretch textarea { width:99%; }

/* compact input fields (limited to a few characters for entering percentages and other small values) */
.onechar input   { width:1em; }
.twochar input   { width:2em; }
.threechar input { width:3em; }
.fourchar input  { width:4em; }
.fivechar input  { width:5em; }

/* text colors */
.white { color:#fff !important }
.gray  { color:#999 !important }
.black { color:#000 !important }
.red   { color:#f66 !important }
.green { color:#0c0 !important }
.blue  { color:#99f !important }

/* rollover highlighting */
.mouseover 
	{color:[[ColorPalette::TertiaryLight]] !important;}
.mouseover a
	{color:[[ColorPalette::TertiaryLight]] !important;}
.selected .mouseover
	{color:[[ColorPalette::Foreground]] !important;}
.selected .mouseover .button, .selected .mouseover a
	{color:[[ColorPalette::PrimaryDark]] !important;}

/* rollover zoom text */
.zoomover
	{ font-size:80% !important; }
.selected .zoomover
	{ font-size:100% !important; }

/* [[ColorPalette]] text colors */
.Background	{ color:[[ColorPalette::Background]];	 }
.Foreground	{ color:[[ColorPalette::Foreground]];	 }
.PrimaryPale	{ color:[[ColorPalette::PrimaryPale]];	 }
.PrimaryLight	{ color:[[ColorPalette::PrimaryLight]];	 }
.PrimaryMid	{ color:[[ColorPalette::PrimaryMid]];	 }
.PrimaryDark	{ color:[[ColorPalette::PrimaryDark]];	 }
.SecondaryPale	{ color:[[ColorPalette::SecondaryPale]]; }
.SecondaryLight	{ color:[[ColorPalette::SecondaryLight]];}
.SecondaryMid	{ color:[[ColorPalette::SecondaryMid]];	 }
.SecondaryDark	{ color:[[ColorPalette::SecondaryDark]]; }
.TertiaryPale	{ color:[[ColorPalette::TertiaryPale]];	 }
.TertiaryLight	{ color:[[ColorPalette::TertiaryLight]]; }
.TertiaryMid	{ color:[[ColorPalette::TertiaryMid]];	 }
.TertiaryDark	{ color:[[ColorPalette::TertiaryDark]];	 }
.Error		{ color:[[ColorPalette::Error]];	 }

/* [[ColorPalette]] background colors */
.BGBackground	  { background-color:[[ColorPalette::Background]];	}
.BGForeground	  { background-color:[[ColorPalette::Foreground]];	}
.BGPrimaryPale	  { background-color:[[ColorPalette::PrimaryPale]];	}
.BGPrimaryLight	  { background-color:[[ColorPalette::PrimaryLight]];	}
.BGPrimaryMid	  { background-color:[[ColorPalette::PrimaryMid]];	}
.BGPrimaryDark	  { background-color:[[ColorPalette::PrimaryDark]];	}
.BGSecondaryPale  { background-color:[[ColorPalette::SecondaryPale]]; 	}
.BGSecondaryLight { background-color:[[ColorPalette::SecondaryLight]];	}
.BGSecondaryMid	  { background-color:[[ColorPalette::SecondaryMid]];	}
.BGSecondaryDark  { background-color:[[ColorPalette::SecondaryDark]]; 	}
.BGTertiaryPale	  { background-color:[[ColorPalette::TertiaryPale]];	}
.BGTertiaryLight  { background-color:[[ColorPalette::TertiaryLight]]; 	}
.BGTertiaryMid	  { background-color:[[ColorPalette::TertiaryMid]];	}
.BGTertiaryDark	  { background-color:[[ColorPalette::TertiaryDark]];	}
.BGError	  { background-color:[[ColorPalette::Error]];	 	}
/*}}}*/
*Scroll to the bottom of this page.
*An alternative website about APOD:  http://asterisk.apod.com/viewtopic.php?f=29&t=22034

{{borderless{
|[[Click here to open in a new browser tab|http://antwrp.gsfc.nasa.gov/apod/lib/about_apod.html]]|
<html><div align="center"><iframe src ="http://antwrp.gsfc.nasa.gov/apod/lib/about_apod.html" width="100%" align="center" height="600">< /></div></html>}}}
----
|!TOKEN|!Images|!Dark/Bias|!Logs|!~FolderNames|!~FileNames|
|@@color:#FF8;''&#36;DATEJUL -''@@ The Julian date; no fractional part, just the date, for example ''2453935'' (for 19-Jul-2006).| X | X | X | X | X |
|@@color:#FF8;''&#36;DATELOC -''@@ The date in local time (per the Windows date/time control panel, time zone settings), formatted as yyyymmdd, for example ''20060719''. This format will sort alphanumerically in date order.| X | X | X | X | X |
|@@color:#FF8;''&#36;DATENITE -''@@ The local date of the run (night), formatted as yyyymmdd, for example ''20060719''. This token is useful if you want to put all of your images from a single run/night into one folder. The date changes when the sun crosses the local meridian, thus the folder will remain the same even though the local date changes at midnight.| X | X | X | X | X |
|@@color:#FF8;''&#36;DATEUTC -''@@ The UTC date, formatted as yyyymmdd, for example ''20060719''.| X | X | X | X | X |
|@@color:#FF8;''&#36;DEFPATH -''@@ This is the default images folder as configured in ACP Preferences, Local User tab, for the local user, or the path to a web user's default image folder depending on ACP's web document root preferences. Normally your ''~FlatFolder'' template will start with this token.| X | X | | X | |
|@@color:#FF8;''&#36;TIMELOC -''@@ The local time, formatted as hhmmss, for example ''061335''.| X | X | X | X | X |
|@@color:#FF8;''&#36;TIMEUTC -''@@ The UTC time, formatted as hhmmss, for example ''061335''.| X | X | X | X | X |
|@@color:#FF8;''&#36;TGTDEC -''@@ The J2000 declination (degrees) of the target, formatted as +ddmmss, for example +024352 or -260533. Either a + or a - is always included. If the target is a solar system body specified using orbital elements or NEOCP ephemerides, this will reflect the declination at the time the image is acquired.| X | | | | |
|@@color:#FF8;''&#36;TGTPA -''@@ The equatorial position angle of the target (degrees, 0-360), formatted as ddd, for example ''027''.| X | | | | |
|@@color:#FF8;''&#36;TGTRA -''@@ The J2000 right ascension (hours) of the target, formatted as hhmmss, for example 071256. If the target is a solar system body specified using orbital elements or NEOCP ephemerides, this will reflect the right ascension at the time the image is acquired.| X | | | | |
|@@color:#FF8;''&#36;BINNING -''@@ The binning level of the image (light, dark, or bias).| X | X | | | |
|@@color:#FF8;''&#36;CNTNUM -''@@ The count within a filter group. See the ACP Help: Sets, Repeats, and Filter Groups.| X | X | | | |
|@@color:#FF8;''&#36;FILTER -''@@ The name of the filter used when the image was acquired. If you plan to combine LRGB images in ~MaxIm DL, and you have named your filters Clear, Red, Green, and Blue in ~MaxIm's filter setup, ~MaxIm will automatically recognize the appropriate color if this token appears at the end of the file name (this is true for the default file name template shown above). For example ''~NCG3210-Blue.fts''.| X | X | | | |
|@@color:#FF8;''&#36;INTERVAL -''@@ The exposure duration (interval), seconds, rounded to the nearest second, formatted as three digits, for example 65.5 would be 066.| X | X | | | |
|@@color:#FF8;''&#36;RPTNUM -''@@ The sequence number (starting with 1) of the file within a repeat sequence (#repeat xxx), formatted as three digits, leading zero(s). ''Note that this token must be in the template if you plan to use ACP's automatic stacking feature!''| X | X | | | |
|@@color:#FF8;''&#36;SETNUM -''@@ The set-loop number (starting with 1), formatted as three digits. This can be greater than 1 only if the plan includes a #sets directive.| X | X | | | |
|@@color:#FF8;''&#36;TGTNAME -''@@ The name of the current target for light frames, or "dark" for dark frames, and "bias" for bias frames. If the target is a solar system body specified using orbital elements or NEOCP ephemerides, the name will be automatically extracted from the elements or ephemerides.| X | X | | | |
|@@color:#FF8;''&#36;PLNNAME -''@@ The name of the current observing plan (without the extension). Most useful for log files, but may be used on any type of file.| X | X | X | | |
|@@color:#FF8;''&#36;USRNAME -''@@ The login username of a web user, or "local_user" for plans run directly by the local user via the ACP console.| X | X | X | | |
|@@color:#FF8;''&#36;TEMP -''@@ The imager's cooler temperature, Celsius, formatted in whole degrees. Probably not useful for log files!| X | X | | | X |
|@@color:#FF8;''&#36;MERSIDE -''@@ The //viewing// side of the meridian for a German mount. If the scope is looking west of the meridian, "W", and if looking east, "E". Most useful as a path token (as opposed to a file name token). This permits you to separate images taken looking west of the meridian versus east into separate folders. If the mount is not German, this will be set to "_", and is thus not useful in that case.| X | | | | X |
|@@color:#FF8;''&#36;LOGPATH -''@@ The default logs folder as configured in ACP Preferences, Local User tab, for the local user, or the path to a web user's default logs folder depending on ACP's web document root preferences). Normally your logs template will start with this token.| | | X | | |
|@@color:#FF8;''&#36;DUSKDAWN -''@@ If the flat field is acquired during dusk, this will be ''Dusk'', or else it will be ''Dawn''.| | | | X | X |
|@@color:#FF8;''&#36;FLATBIN -''@@ The binning level of the flat field, for example ''2''.| | | | | X |
|@@color:#FF8;''&#36;FLATFILT -''@@ The name of the filter used when the image was acquired. If you plan to combine LRGB images in ~MaxIm DL, and you have named your filters Clear, Red, Green, and Blue in ~MaxIm's filter setup, ~MaxIm will automatically recognize the appropriate color if this token appears at the end of the file name (this is true for the default file name template shown above). For example ~NCG3210-Blue.fts.| | | | | X |
|@@color:#FF8;''&#36;FLATPA -''@@ The sky PA of the images for which the flats are acquired. This is the fourth parameter in a line of the flat plan. If there is no rotator present, this will be set to "~NoRot", and is thus not useful in that case. | | | | | X |
|@@color:#FF8;''&#36;FLATSEQ -''@@ A three-digit sequence number for the flat within a group for one filter/binning (one line of the Flat Plan), for example 012.| | | | | X |
----
The following substitution tokens are available:

|!Token|!Description|
|''&#36;DEFPATH''|The ACP Local User default images path (see ACP Preferences/Local User tab), a "Scheduler" folder under that, then a folder with the Project's Observer name under that. OR IF SUBMITTED VIA ACP WEB FORM: The path to the ACP web user's images. In this case, the Project Contact Name will be of the form "Joe Observer [ACP joeuser]"|
|''&#36;WEBROOT''|The ACP "Path to web document root" (see ACP Preferences/Servers tab)|
|''&#36;INTERVAL''|The exposure interval of the image rounded to whole seconds, three digits, zero-filled (e.g. 090 for 90.55 sec)|
|''&#36;IMGNAME''|Name of the current ~ImageSet|
|''&#36;IMGFILT''|Filter name for current ~ImageSet|
|''&#36;IMGBIN''|Binning for the current ~ImageSet|
|''&#36;IMGSEQ''|Sequence number for the current image of the current ~ImageSet, three digits, zero-filled (e.g. "021")|
|''&#36;TEMP''|Cooler temperature. If no cooler, this will be "No Temp", and if the cooler is off, this may be a preposterous number.|
|''&#36;MERSIDE''|If the scope is a german mount, "W" if LOOKING west, "E" if LOOKING east, "_" if not a german mount.|
|''&#36;OBSNAME''|The name of the current Observation|
|''&#36;OBSRA''|J2000 Right Ascension of the current Observation, sexagesimal without delimiters, zero-filled (e.g. "193451"). This will be valid for major planets and orbital elements, as the current coordinates will have been calculated.|
|''&#36;OBSDEC''|J2000 Declination of the current Observation, sexagesimal without delimiters, zero-filled (e.g. "+214306"). This will be valid for major planets and orbital elements, as the current coordinates will have been calculated.|
|''&#36;OBSPA''|Equatorial Position Angle of the current Observation to the nearest degree, three digits, zero-filled (e.g. "164")|
|''&#36;OBSSEQ''|Sequence number for the current Observation's set count, three digits, zero-filled (e.g. "021")|
|''&#36;PLNNAME''|The name of the current Plan|
|''&#36;PRJNAME''|The name of the current Project|
|''&#36;PRJEXID''|The External ID of the current Project|
|''&#36;PRJCONT''|The Contact Name of the current Project. If this has the ACP login username in it (see ''&#36;DEFPATH''), that part will be removed.|
|''&#36;USRNAME''|The Scheduler User Name for the current Project.|
|''&#36;ACPLOGIN''|The ACP web user login username, if present in the Project's Contact Name (see ''&#36;DEFPATH''), or "_" if not present.|
|''&#36;DATENITE''|The local date of the run, in ISO 8601 format YYYYMMDD. This date changes at the time the sun crosses the local meridian. Use this to put all images from one night/run into the same folder.|
|''&#36;DATEUTC''|The current UTC date, in ISO 8601 format YYYYMMDD (e.g. "20060528")|
|''&#36;TIMEUTC''|The current UTC time, in ISO 8601 basic format HHMMSS (e.g., 142804).|
|''&#36;DATELOC''|The current local date, in ISO 8601 format YYYYMMDD (e.g. "20060528")|
|''&#36;TIMELOC''|The current local time, in ISO 8601 basic format HHMMSS (e.g., 142804). |
|''&#36;DATEJUL''|The current UTC Julian date (e.g. "2453846")|

WARNING: DO NOT INCLUDE THE ".fts" ON THE END! If no template is given, the standard ACP Scheduler path and name will be used. Each scheduler user can (optionally) have their own path/name setup. Include a separate template for the user, prefixed by the user name in square brackets. See the examples at the end of this file. NOTE: Per-user templates must PRECEDE the default one.
!Example
This example reproduces the default naming of Scheduler (in ~AcquireScheduler.vbs) but puts scheduler user Omega Centauri's images in a special folder:

|[Omega Centauri]C:\~OmieImages\''&#36;DATEUTC''\''&#36;OBSNAME''_''&#36;IMGFILT''_''&#36;TIMEUTC''|
|''&#36;DEFPATH''\''&#36;DATENITE''\''&#36;PLNNAME''\''&#36;OBSNAME''-S''&#36;OBSSEQ''-''&#36;IMGNAME''-R''&#36;IMGSEQ''-''&#36;IMGFILT''|

Save your template as ''~ImageFileConfig.txt'' in the ACP Scheduler folder.
----
Scroll down the list to find your area of interest.  Clicking the link may open the .dat file in a pop-up browser window. Right-clicking, followed by "Save link as..." or "Copy to folder..." will download the document to your computer, where it will open in Notepad without changing the document suffix.
----
{{borderless{
|[[Click here to open in a new browser tab|ftp://ftp.aavso.org/public/calib/sumner/]]|
<html><div align="center"><iframe src ="ftp://ftp.aavso.org/public/calib/sumner/" width="100%" align="center" height="400">< /></div></html>}}}
----
This script will perform a single pointing update at the current telescope coordinates and sync it to establish pointing accuracy. Useful at the beginning of an evening on a telescope that doesn't have absolute encoders. If the ACP Pointing Corrector is active, and something (including this script) has already sent one sync to the scope, this script will instead add a mapping point to the pointing corrector.

Here are all the [[Standard ACP Scripts]].
----
Sometimes you may wish to use ACP on an observatory that has multiple configurations such as a wide field refractor and a long focal length OTA, maybe a different mount setup, etc. You may also wish to transfer all of ACP's settings to a new machine, or simply back up all of your settings when you get things running smoothly, "just in case". You can do these things with configuration profiles.

Based on a utility originally written by an ACP user Robert Brewington, this functionality is built into ~ACP7 and later versions. It puts the info into a ZIP archive containing the registry settings as well as all of the configuration files that were found at save time, which you can save and take to a new system, etc. You can save as many configurations as you want. Read [[Using ACP Configuration Profiles]], also in the [[ACP 8.1]] Help document (under the ACP Observatory Control Software chapter).

You can also specify a ~FocusMax System File in ACP's ~AutoFocus tab. This will cause ACP to select a ~FocusMax configuration (the system file) for its autofocus operations. If you enter a specific system file into ACP's ~AutoFocus settings, then save it as part of the configuration, you will in effect be saving ~FocusMax's configuration with it. If you have multiple configurations, switching ACP's configuration will also switch ~FocusMax's configuration. Thanks to ACP user Steve Reilly for this tip.

----
For a detailed explanation of astronomical timekeeping systems, see 
*[[A Time Tutorial]] on the NASA Goddard Spaceflight Center site, and 
*the [[USNO Systems of Time]] on the USNO website.
----
{{borderless{
|[[Click here to open in a new browser tab|http://tigerweb.geo.census.gov/tigerwebmain/TIGERweb_main.html]]|
<html><div align="center"><iframe src ="http://tigerweb.geo.census.gov/tigerwebmain/TIGERweb_main.html" width="100%" align="center" height="600">< /></div></html>}}}
----
<<relatedTiddlers "ACP Reference Guide" hideform>>
----
{{borderless{
|[[Click here to open in a new browser tab|http://tpointsw.uk]]|
<html><div align="center"><iframe src ="http://tpointsw.uk" width="100%" align="center" height="600">< /></div></html>}}}
----
This section of the User's Guide talks about various technical capabilities of ACP. It also points to several reference papers that ACP users have created.

|!Technical Information|
|[[Release Notes for v8.1]]|
|[[Release Notes for v7.0]]|
|[[Release Notes for v6.0]]|
|[[Release Notes for v5.1]]|
|[[Filters, CCDs and Star Colors]] - How these interact to produce an image.|
|[[Coordinate Systems]] - ''J2000'' versus ''local topocentric'' (equatorial) coordinates|
|[[The MiniSAC Catalog Maintenance Kit]] - Updating ACP's internal catalog of 70,000+ objects|
|[[Autoguiding]] - Achieving consistently successful autoguiding results (Jim ~McMillan)|
|[[Rotated Guiding]] - Testing and analysis of AO/rotators, done at New Mexico Skies (Bob Denny)|
|[[Deep Sky Imaging]] - Specific advice about unattended imaging that may not be provided elsewhere (Jim ~McMillan)|
|[[PinPoint Residuals]] - A brief review of what "residuals" are all about|
|[[Feather Touch Focuser Adjustment]] - analysis of positional repeatability and adjustment to improve it (Mike Dodd)|
|[[Fast Auto-Focus Method]] - ~FocusMax theory of operation (Weber/Brady)|
|[[Algorithms for CCD Stellar Photometry]] - Basic algorithms for the production of stellar photometry from CCD observations|
|[[More Algorithms for CCD Stellar Photometry]] - Interesting alternative approaches to stellar photometry|
|[[Photometry and the UCAC3 Catalog]] - Some interesting details about computing V-magnitudes from the J,K magnitudes in the catalog|
| |
| |
|!How To ...|
|[[Register Your Observatory]] - Your observatory's location plotted in a Google Earth mashup|
|[[Install the Microsoft Office script debugger]]|
|[[Install the Visual Studio script debugger]]|
|[[Build/Rebuild the MPCORB.dat database for minor planets]]|
|[[Submit a Photo to APOD]] - Information about APOD; look near the bottom of the page|
|[[Web-based Autoflats]] - Different ways to generate autoflats using ACP|
|[[Guider-chip Calibration]] - Flats, darks and biases for the guider chip|
|[[Directly Compute the Autoguider Calibration Constants]] - well, at least in right ascension|
|[[Ideal Exposure Calculators]] - Online resources for estimating the correct exposure|
| |
| |
|!References|
|[[AAVSO Photometric All-Sky Survey (APASS)]] - Johnson B and V, plus Sloan g′, r′, i′, valid from about 10th magnitude to about 17th magnitude.|
|[[Astrophysics Source Code Library]] - a free online registry for source codes of interest to astronomers and astrophysicists|
|[[CSS Reference]] @@color:#F00;~~^^~~NEW~~^^~~@@ - from w3schools.com|
|[[Double Star Astronomy]] - Fundamentals of double star observing|
|[[FITS Header elements]] - The seminal NASA publication|
|[[FITS Header example]] - From a plate solution in ACP|
|[[FocusMax Tutorial]] - Get familiar with ~FocusMax's main features (Tom Krajci)|
|[[FocusMax Tutorial - II]] @@color:#F00;~~^^~~NEW~~^^~~@@  - Get familiar with ~FocusMax's main features (Neil Fleming)|
|[[Javascript Reference]] @@color:#F00;~~^^~~NEW~~^^~~@@ - from w3schools.com|
|[[MaxIm DL Video Tutorials]] - Flash video tutorials for a variety of topics; typically 3-6MB each|
|[[MaxIm Online Help Index]] - Link to ~MaxIm's online documentation|
|[[SCT Collimation]] - A couple of interesting and useful articles|
|[[Software & Calculators]] - Useful functions relating to Julian time HJD conversions for Excel spreadsheet (Variable Stars South)|
|[[Systems of Time]] - Brief definitions of the various time systems in use, as well as simple formulae for doing transformations|
|[[Washington Double Star Catalog]] - The most comprehensive and up to date source of data on double stars|
|[[World Coordinate System]] - The inside scoop on those "WCS" values in the FITS header|
| |
| |
|!Modifying ACP to Change Its Behavior|
|[[Saving RAW Images]]|
|[[Allowing Plate Solves for Every Final Image]]|
|[[Put a Webcam Link in ACP's Web GUI]] - DIY modification for webcam access|
| |
| |

|Learn something about ~TiddlyWiki at the [[TiddlyWiki Home Page]]|

[[More to come...]]
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
This script tests the accuracy of ACP's Pointing Corrector (which of course must be active). It measures the pointing error at a user-specified number of random points all over the sky and calculates the RMS pointing error of ACP's model. It works even if image simulation is in effect.
----
|!Close this window after download completes|
{{borderless{
<html><div align="center"><iframe src ="RefDocs/EclBinEph.zip" width="100%" align="center" height="30">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://adsabs.harvard.edu/abs/1996PASP..108..944C]]|
<html><div align="center"><iframe src ="http://adsabs.harvard.edu/abs/1996PASP..108..944C" width="100%" align="center" height="600">< /></div></html>}}}
----
These are the steps to follow in order to update/add to the ''~MiniSAC'' catalog.
|!NOTE|
|[[Download the MiniSAC Catalog Maintenance Kit]]|

1. Make your data in comma-separated format with 4 fields, EXACTLY as shown below (quotes, commas, no spaces around commas).

   {{{"name","RA","Dec","Mag"}}}

   The name MUST be in the form catalog name, space, catalog number, for example "3C 48". Exactly ONE space must separate the catalog name from the catalog number!

   Each line MUST be in the (~MSOffice) CSV file format as shown above. The fields must be enclosed in double-quotes and separated by commas ONLY (no spaces before/after the commas).

   This file can also contain corrections to existing catalog items. The coordinates/magnitudes in this file will override those in the other source files.

2. Name your data file ~MyAdditions.txt

3. In a CMD shell, run ~Combiner-Sorter.js to make ~MiniSAC.txt:

   C:\...> cscript ~Combiner-Sorter.js

4. Run ~MakeData to make the random-access file ~miniSAC.dat

5. In C:\Program Files\Common Files\ASCOM\~MiniSAC, rename and save the existing ~MiniSAC.dat file (to preserve the original), then move the new ~MiniSAC.dat in its place.
----
<html>
<div style="padding:0px; width:500px; font-family:sans-serif,Arial,Helvetica; font-size:10pt; text-align:center">
  <div>
  <img src="http://ws.astroviewer.net/skymap?type=png&amp;size=500&amp;colorset=0&amp;lang=en&amp;lon=-76.229757&amp;lat=42.492450&amp;city=Dryden%2C+NY&amp;timezone=EST&amp;deco=16399&amp;id=4d6174" width="500" height="500" alt="Current night sky over Dryden, NY" style="border:none" />
  </div>
<div>Sky map by <a href="http://www.astroviewer.com/">AstroViewer</a><sup>&reg;</sup></div>
</div>
</html>
Pictorial catalog of all the NGC objects. Right-click in the window to go backwards.
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.astrosurf.com/benoit/ngc.html]]|
<html><div align="center"><iframe src ="http://www.astrosurf.com/benoit/ngc.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.bisque.com/sc/pages/TheSkyX-Editions.aspx]]|
<html><div align="center"><iframe src ="http://www.bisque.com/sc/pages/TheSkyX-Editions.aspx" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.astrophoto.fr/collim.html]]|
<html><div align="center"><iframe src ="http://www.astrophoto.fr/collim.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://heasarc.nasa.gov/W3Browse/all/rc3.html]]|
<html><div align="center"><iframe src ="http://heasarc.nasa.gov/W3Browse/all/rc3.html" width="100%" align="center" height="600">< /></div></html>}}}
----
/***
|Name|TidIDEPlugin|
|Source|http://www.TiddlyTools.com/#TidIDEPlugin|
|Documentation|http://www.TiddlyTools.com/#TidIDEPluginInfo|
|Version|1.8.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|TiddlyWiki Integrated Development Environment - tools for authors and plugin writers|
~TidIDE (//prounounced "Tie Dyed"//) - ''Tid''dlyWiki ''I''ntegrated ''D''evelopment ''E''nvironment - allows you to define a set of checkboxes to toggle a stack of 'tool panels' containing tools for TiddlyWiki authors to use when creating and debugging their TiddlyWiki documents.  Each tool is defined by a separate tiddler, allowing you to define any convenient set of tools simply by adding/removing tiddler references from the {{{<<tidIDE...>>}}} macro call.

In addition to presenting checkboxes/tool panels that are defined in separate tiddlers, the {{{<<tidIDE>>}}} macro can invoke an optional built-in "editor panel" that presents an alternative tiddler editor to create, modify, and manage the tiddlers in your document... and, if you have also installed [[PreviewPlugin]], the editor can automatically display a ''//formatted preview//'' of the current tiddler content that is updated ''live, key-by-key'' while you edit the tiddler source.
!!!!!Documentation
>see [[TidIDEPluginInfo]]
!!!!!Configuration
<<<
Number of rows to display in text input area <<option txtTidIDEMaxEditRows>> 
{{{usage: <<option txtTidIDEMaxEditRows>>}}}
^^//Note: if not specified here, default uses {{{<<option txtMaxEditRows>>}}} value (see [[AdvancedOptions]])//^^
<<<
!!!!!Revisions
<<<
2009.09.22 [1.8.5] added edit='tags' to tags input so {{{<<newTiddler tags:...>>}}} can init field
2009.08.27 [1.8.4] added 'tidIDEPanel' classname to container element (for custom CSS)
|please see [[TidIDEPluginInfo]] for additional revision details|
2006.04.15 [0.5.0] Initial ALPHA release. Converted from inline script.
<<<
!!!!!Code
***/
//{{{
version.extensions.TidIDEPlugin= {major: 1, minor: 8, revision: 5, date: new Date(2009,9,22)};

// settings
if (config.options.txtTidIDEMaxEditRows==undefined)
	config.options.txtTidIDEMaxEditRows=config.options.txtMaxEditRows

// shadow payload
config.shadowTiddlers['TidIDEPluginEditorPanel']=store.getTiddlerText('TidIDEPlugin##editorPanel');

config.macros.tidIDE = {
	versionMsg: "TidIDE v%0.%1.%2: ",
	datetimefmt: "0MM/0DD/YYYY 0hh:0mm",
	titleMsg: "Please enter a new tiddler title",
	isShadowMsg: "'%0' is a shadow tiddler and cannot be removed.",
	evalMsg: "Warning!! Processing '%0' as a systemConfig (plugin) tiddler may produce unexpected results! Are you sure you want to proceed?",
	evalCompletedMsg: "Processing completed",
	toolsDef: "<html><a href='javascript:config.macros.tidIDE.set(\"%0\",\"%1\");'>edit %1...</a></html>",
	editorLabel: "TiddlerEditor"
};

config.macros.tidIDE.handler= function(place,macroName,params) {
	var here=story.findContainingTiddler(place);
	var selectors="";
	var panels="";
	var showsys=false;
	var title="";
	var id=""; if (here) id=here.getAttribute("tiddler").replace(/ /g,"_");
	var p=params.shift();
	if (!p) p="edit:here"; // default to editor if no params
	var openpanels=[];
	var panelcount=0;
	while (p) {
		var defOpen=(p.substr(0,1)=="+"); if (defOpen) p=p.substr(1);
		if (p.substr(0,3)=="id:")
			{ id=p.substr(3); }
		else if (p.substr(0,4)=="edit") {
			panelcount++;
			defOpen=defOpen || (!params[0] && panelcount==1); // if only one panel to show, default to open
			var toolname=this.editorLabel;
			if (p.indexOf('|')!=-1) toolname=p.substr(0,p.indexOf('|'));
			selectors+=this.html.editorchk.replace(/%toolname%/mg,toolname);
			selectors=selectors.replace(/%showpanel%/mg,defOpen?"CHECKED":"");
			panels+=store.getTiddlerText('TidIDEPluginEditorPanel');
			// editor panel setup...
			panels=panels.replace(/%showpanel%/mg,defOpen?"block":"none");
			panels=panels.replace(/%maxrows%/mg,config.options.txtTidIDEMaxEditRows);
			panels=panels.replace(/%disabled%/mg,readOnly?"DISABLED":"");
			panels=panels.replace(/%readonlychk%/mg,readOnly?"CHECKED":"");
			panels=panels.replace(/%minoredits%/mg,config.options.chkForceMinorUpdate&&!readOnly?"":"DISABLED");
			panels=panels.replace(/%minorchk%/mg,config.options.chkForceMinorUpdate?"CHECKED":"");
			var tiddlers=store.getTiddlers("title"); var tiddlerlist=""; 
			for (var t=0; t<tiddlers.length; t++)
				tiddlerlist+='<option value="'+tiddlers[t].title+'">'+tiddlers[t].title+'</option>';
			for (var t in config.shadowTiddlers)
				if (!store.tiddlerExists(t)) tiddlerlist+="<option value='"+t+"'>"+t+" (shadow)</option>";
			panels=panels.replace(/%tiddlerlist%/mg,tiddlerlist);
			var tags = store.getTags(); var taglist="";
			for (var t=0; t<tags.length; t++)
				taglist+="<option value='"+tags[t][0]+"'>"+tags[t][0]+"</option>";
			panels=panels.replace(/%taglist%/mg,taglist);
			if (p.substr(0,5)=="edit:") { 
				title=p.substr(5); 
				if (here && title=="here") title=here.id.substr(7);
			}
		}
		else {
			panelcount++;
			defOpen=defOpen || (!params[0] && panelcount==1); // if only one panel to show, default to open
			var toolid=toolname=p;
			if (p.indexOf('|')!=-1)
				{ toolname=p.substr(0,p.indexOf('|')); toolid=p.substr(p.indexOf('|')+1); }
			selectors+=this.html.toolschk.replace(/%toolid%/mg,toolid).replace(/%toolname%/mg,toolname);
			selectors=selectors.replace(/%showpanel%/mg,defOpen?"CHECKED":"");
			panels+=this.html.toolspanel.replace(/%toolid%/mg,toolid);
			panels=panels.replace(/%showpanel%/mg,defOpen?"block":"none");
			if (defOpen) openpanels.push(toolid);
		}
		p=params.shift(); // next param
	}
	var html=this.html.framework;
	if (panelcount<2)
		html=html.replace(/%version%/mg,'').replace(/%selector%/mg,''); // omit header/selectors if just one panel to display
	else {
		var v=version.extensions.TidIDEPlugin;
		html=html.replace(/%version%/mg, this.versionMsg.format([v.major,v.minor,v.revision]));
		html=html.replace(/%selector%/mg,selectors+"<hr style='margin:0;padding:0'>");
	}
	html=html.replace(/%panels%/mg,panels);
	html=html.replace(/%id%/mg,id);
	var newIDE=createTiddlyElement(place,"span",null,"tidIDEPanel");
	newIDE.innerHTML=html;
	if (title.length) this.set(id,title);  // pre-load tiddler editor values (if needed)
	if (openpanels.length) for (i=0;i<openpanels.length;i++) { config.macros.tidIDE.loadPanel(id,openpanels[i]); }
	// see [[TextAreaPlugin]] for extended ctrl-F/G (search/search again)and TAB handler definitions
	if (window.addKeyDownHandlers!=undefined) {
		var elems=newIDE.getElementsByTagName("textarea");
		for (var i=0;i<elems.length;i++) window.addKeyDownHandlers(elems[i]);
	}
	var prev=document.getElementById(id+'_previewpanel');
	if (config.macros.preview && prev)  // add previewer to editor (if installed)
		config.macros.preview.handler(prev,"preview",["text","15"]);
}
//}}}

// // CUSTOM PANEL FUNCTIONS 
//{{{
config.macros.tidIDE.loadPanel=function(id,toolid) {
	var place=document.getElementById(id+"_"+toolid+"_panel"); if (!place) return;
	var t=store.getTiddlerText(toolid,"");
	place.innerHTML=""; 
	if (t) wikify(t,place); else place.innerHTML=this.toolsDef.format([id,toolid]);
}
//}}}

// // EDITOR PANEL FUNCTIONS
//{{{
config.macros.tidIDE.set=function(id,title) {
	var place=document.getElementById(id+"_editorpanel"); if (!place) return;
	var f=document.getElementById(id+"_editorform");
	if (f.dirty && !confirm(config.commands.cancelTiddler.warning.format([f.current]))) return;
	// reset to form defaults
	f.dirty=false;
	f.current="";
	f.created.value=f.created.defaultValue;
	f.modified.value=f.modified.defaultValue;
	f.author.value=f.author.defaultValue;
	f.content.value=f.content.defaultValue;
	f.tags.value=f.tags.defaultValue;
	f.size.value=f.size.defaultValue;
	if (!title.length) return;
	f.current=title;
	// values for new/shadow tiddlers
	var cdate=new Date();
	var mdate=new Date();
	var modifier=config.options.txtUserName;
	var text=config.views.editor.defaultText.format([title]);
	var tags="";
	// adjust values for shadow tiddlers
	if (store.isShadowTiddler(title))
		{ modifier=config.views.wikified.shadowModifier; text=store.getTiddlerText(title) }
	// get values for specified tiddler (if it exists)
	var t=store.getTiddler(title);
	if (t)	{ var cdate=t.created; var mdate=t.modified; var modifier=t.modifier; var text=t.text; var tags=t.getTags(); }
	if (!t && !store.isShadowTiddler(title)) f.tiddlers.options[f.tiddlers.options.length]=new Option(title,title,false,true); // add item to list
	f.tiddlers.value=title; // select current title (just in case it wasn't already selected)
	f.created.value=cdate.formatString(this.datetimefmt);
	f.modified.value=mdate.formatString(this.datetimefmt);
	f.author.value=modifier;
	f.content.value=text;
	f.tags.value=tags;
	f.minoredits.checked=config.options.chkForceMinorUpdate&&!readOnly;
	f.size.value=f.content.value.length+" bytes";
}

config.macros.tidIDE.add=function(id) {
	var place=document.getElementById(id+"_editorpanel"); if (!place) return;
	var f=document.getElementById(id+"_editorform");
	if (f.dirty && !confirm(config.commands.cancelTiddler.warning.format([f.current]))) return;
	var title=prompt(this.titleMsg,config.macros.newTiddler.title);
	while (title && store.tiddlerExists(title) && !confirm(config.messages.overwriteWarning.format([title])))
		title=prompt(this.titleMsg,config.macros.newTiddler.title);
	if (!title || !title.trim().length) return; // cancelled by user
	f.dirty=false; // suppress unneeded confirmation message
	this.set(id,title);
}

config.macros.tidIDE.remove=function(id) {
	var place=document.getElementById(id+"_editorpanel"); if (!place) return;
	var f=document.getElementById(id+"_editorform");
	if (!f.current.length) return;
	if (!store.tiddlerExists(f.current) && store.isShadowTiddler(f.current)) { alert(this.isShadowMsg.format([f.current])); return; }
	if (config.options.chkConfirmDelete && !confirm(config.commands.deleteTiddler.warning.format([f.current]))) return;
	if (store.tiddlerExists(f.current)) {
		story.closeTiddler(f.current);
		store.removeTiddler(f.current);
		store.setDirty(true);
		if(config.options.chkAutoSave) saveChanges();
	}
	f.tiddlers.options[f.tiddlers.selectedIndex]=null; // remove item from list
	f.dirty=false; // suppress unneeded confirmation message
	this.set(id,""); // clear form controls
}

config.macros.tidIDE.save=function(id,saveAs) {
	var place=document.getElementById(id+"_editorpanel"); if (!place) return;
	var f=document.getElementById(id+"_editorform");
	var title=f.current;
	if (!title || !title.trim().length || saveAs) { // get a new title
		title=prompt(this.titleMsg,config.macros.newTiddler.title);
		while (title && store.tiddlerExists(title) && !confirm(config.messages.overwriteWarning.format([title])))
			title=prompt(this.titleMsg,config.macros.newTiddler.title);
		if (!title || !title.trim().length) return; // cancelled by user
		f.tiddlers.options[f.tiddlers.options.length]=new Option(title,title,false,true); // add item to list
		f.current=title;
	}
	var author=config.options.txtUserName;
	var mdate=new Date();
	var content=f.content.value;
	var tags=f.tags.value;
	var tiddler=store.saveTiddler(title,title,content,author,mdate,tags);
	if (f.minoredits.checked) {
		var author=f.author.value;
		var mdate=new Date(f.modified.value);
		var cdate=new Date(f.created.value);
		tiddler.assign(null,null,author,mdate,null,cdate);
	}
	store.setDirty(true);
	if(config.options.chkAutoSave) saveChanges();
	story.refreshTiddler(title,null,true);
	f.dirty=false;
}
//}}}

// // HTML DEFINITIONS
//{{{
config.macros.tidIDE.html = { };
config.macros.tidIDE.html.framework = " \
	<html> %version% <form style='display:inline;margin:0;padding:0;'>%selector%</form> %panels% </html> \
";
//}}}
//{{{
config.macros.tidIDE.html.editorchk = " \
	<input type=checkbox name=editor \
		style='display:inline;width:auto;margin:1px;' \
		title='add/delete/modify tiddlers' %showpanel% \
		onclick='document.getElementById(\"%id%_editorpanel\").style.display=this.checked?\"block\":\"none\";'>%toolname% \
";
config.macros.tidIDE.html.toolschk = " \
	<input type=checkbox name=tools \
		style='display:inline;width:auto;margin:1px;' \
		title='' %showpanel% \
		onclick='document.getElementById(\"%id%_%toolid%_panel\").style.display=this.checked?\"block\":\"none\"; \
			if (this.checked) config.macros.tidIDE.loadPanel(\"%id%\",\"%toolid%\");'>%toolname% \
";
//}}}
//{{{
config.macros.tidIDE.html.toolspanel = " \
	<div id='%id%_%toolid%_panel' style='display:%showpanel%;margin:0;margin-top:0.5em'> \
	</div> \
";
//}}}
/***
//{{{
!editorPanel
<div id='%id%_editorpanel' style='display:%showpanel%;margin:0;margin-top:0.5em'>
<form id='%id%_editorform' style='display:inline;margin:0;padding:0;'>

<!-- tiddler editor list and buttons -->
<select size=1 name=tiddlers style='display:inline;width:44%;'
	onchange='config.macros.tidIDE.set("%id%",this.value); this.value=this.form.current;'>
<option value=''>select a tiddler...</option>
%tiddlerlist%
</select><!--

--><input name=add type=button style='display:inline;width:8%'
	value='new' title='create a new tiddler'
	onclick='config.macros.tidIDE.add("%id%")' %disabled%><!--
--><input name=remove type=button style='display:inline;width:8%'
	value='remove' title='delete this tiddler'
	onclick='config.macros.tidIDE.remove("%id%")' %disabled%><!--
--><input name=save type=button style='display:inline;width:8%'
	value='save' title='save changes to this tiddler'
	onclick='config.macros.tidIDE.save("%id%")' %disabled%><!--
--><input name=saveas type=button style='display:inline;width:8%'
	value='save as' title='save changes to a new tiddler'
	onclick='config.macros.tidIDE.save("%id%",true)' %disabled%><!--
--><input name=view type=button style='display:inline;width:8%'
	value='open' title='open this tiddler for regular viewing'
	onclick='if (!this.form.current.length) return;	story.displayTiddler(null,this.form.current)'><!--
--><input name=run type=button style='display:inline;width:8%'
	value='run' title='evaluate this tiddler as a javascript "systemConfig" plugin'
	onclick='if (!confirm(config.macros.tidIDE.evalMsg.format([this.form.current]))) return false;
		try { window.eval(this.form.content.value); displayMessage(config.macros.tidIDE.evalCompletedMsg); }
		catch(e) { displayMessage(config.messages.pluginError.format([err])); }'><!--
--><input name=previewbutton type=button style='display:inline;width:8%;'
	value='preview' title='show "live" preview display'
	onclick='if (!config.macros.preview) { alert("Please install PreviewPlugin"); return false; }
		this.form.preview.checked=!this.form.preview.checked;
		document.getElementById("%id%_previewpanel").style.display=this.form.preview.checked?"block":"none";
		if (this.form.freeze) this.form.freeze.checked=!this.form.preview.checked;
		if (this.form.preview.checked) config.macros.preview.render(this.form.content.id,this.form.content.getAttribute("previewid"));'><!--

hidden field for preview show/hide state:
--><input name=preview type=checkbox style='display:none;'>

<!-- tiddler content edit -->
<div><textarea id='%id%_content' name='content' edit='text' cols=60 rows=%maxrows%
	style='width:100%;'
	onkeyup='var f=this.form; f.dirty=true; f.size.value=this.value.length+" bytes";'></textarea></div>

<!-- tag edit and droplist -->
<table width='100%' style='border:0;padding:0;margin:0'><tr style='border:0;padding:0;margin:0'>
<td style='border:0;padding:0;margin:0'>
	<input type=text name=tags edit='tags' size=60 style='width:100%;' value=''
		onchange='this.form.dirty=true' %disabled%>
</td><td width='1' style='border:0;padding:0;margin:0;'>
	<select size=1 name=taglist
		onchange='this.form.dirty=true; this.form.tags.value+=" "+this.value' %disabled%>
	<option value=''>select tags...</option>
	%taglist%
	</select>
</td></tr></table>

<!-- created/modified dates, author, current tiddler size -->
<div style='float:right;'>
	created <input type=text name=created size=15
		style='display:inline;;text-align:center;padding:0;' value=''
		onchange='this.form.dirty=true' %minoredits%>
	modified <input type=text name=modified size=15
		style='display:inline;text-align:center;padding:0;' value=''
		onchange='this.form.dirty=true;' %minoredits%>
	by <input type=text name=author size=15
		style='display:inline;padding:0;' value=''
		onfocus='this.select()' onchange='this.form.dirty=true' %minoredits%>
	<input type=text name=size size=10
		style='display:inline;text-align:center;padding:0;' value=''
		onfocus='this.blur()' onkeydown='return false' DISABLED>
</div>

<!-- toggles: read-only, minor edit -->
<span style='white-space:nowrap'>
<input type=checkbox name=readonly
	style='display:inline;width:auto;margin:1px;' %readonlychk%
	title='do not allow tiddler changes to be saved'
	onclick='readOnly=config.options.chkHttpReadOnly=this.checked;saveOptionCookie("chkHttpReadOnly");
		var f=this.form; f.minoredits.disabled=f.tags.disabled=f.taglist.disabled=this.checked;
		f.add.disabled=f.remove.disabled=f.save.disabled=f.saveas.disabled=this.checked;
		f.created.disabled=f.modified.disabled=f.author.disabled=this.checked||!f.minoredits.checked;'>readonly
<input type=checkbox name=minoredits
	style='display:inline;width:auto;margin:1px;' %disabled% %minorchk%
	title='check: save datestamps/author as entered, uncheck: auto-update modified/author'
	onclick='this.form.created.disabled=this.form.modified.disabled=this.form.author.disabled=!this.checked;
		config.options.chkForceMinorUpdate=this.checked;saveOptionCookie("chkForceMinorUpdate");'>minor edits
</span>

<!-- tiddler preview display -->
<div id='%id%_previewpanel' style='display:none;white-space:nowrap'></div>
!end
//}}}
***/
 
/***
|Name|TiddlerTweakerPlugin|
|Source|http://www.TiddlyTools.com/#TiddlerTweakerPlugin|
|Version|2.4.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|select multiple tiddlers and modify author, created, modified and/or tag values|
~TiddlerTweaker is a 'power tool' for TiddlyWiki authors.  Select multiple tiddlers from a listbox and 'bulk modify' the creator, author, created, modified and/or tag values of those tiddlers using a compact set of form fields.  The values you enter into the fields simultaneously overwrite the existing values in all tiddlers you have selected.
!!!!!Usage
<<<
{{{<<tiddlerTweaker>>}}}
{{smallform{<<tiddlerTweaker>>}}}
By default, any tags you enter into the TiddlerTweaker will //replace// the existing tags in all the tiddlers you have selected.  However, you can also use TiddlerTweaker to quickly filter specified tags from the selected tiddlers, while leaving any other tags assigned to those tiddlers unchanged:
>Any tag preceded by a '+' (plus) or '-' (minus), will be added or removed from the existing tags //instead of replacing the entire tag definition// of each tiddler (e.g., enter '-excludeLists' to remove that tag from all selected tiddlers.  When using this syntax, care should be taken to ensure that //every// tag is preceded by '+' or '-', to avoid inadvertently overwriting any other existing tags on the selected tiddlers.  (note: the '+' or '-' prefix on each tag value is NOT part of the tag value, and is only used by TiddlerTweaker to control how that tag value is processed)
Important Notes:
* TiddlerTweaker is a 'power user' tool that can make changes to many tiddlers at once.  ''You should always have a recent backup of your document (or 'save changes' just *before* tweaking the tiddlers), just in case you accidentally 'shoot yourself in the foot'.''
* The date and author information on any tiddlers you tweak will ONLY be updated if the corresponding checkboxes have been selected.  As a general rule, after using TiddlerTweaker, always ''//remember to save your document//'' when you are done, even though the tiddler timeline tab may not show any recently modified tiddlers.
* Selecting and updating all tiddlers in a document can take a while.  Your browser may warn about an 'unresponsive script'.  Usually, if you allow it to continue, it should complete the processing... eventually.  Nonetheless, be sure to save your work before you begin tweaking lots of tiddlers, just in case something does get stuck.
<<<
!!!!!Revisions
<<<
2011.01.21 2.4.5 auto-selection: use "-" for untagged tiddlers.  Also, added 'opened', 'invert'
2009.09.15 2.4.4 added 'edit' button. moved html definition to separate section
2009.09.13 2.4.3 in settiddlers(), convert backslashed chars (\n\b\s\t) in replacement text
2009.06.26 2.4.2 only add brackets around tags containing spaces
2009.06.22 2.4.1 in setFields(), add brackets around all tags shown tweaker edit field
2009.03.30 2.4.0 added 'sort by modifier'
2009.01.22 2.3.0 added support for text pattern find/replace
2008.10.27 2.2.3 in setTiddlers(), fixed Safari bug by replacing static Array.concat(...) with new Array().concat(...)
2008.09.07 2.2.2 added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.12 2.2.1 replace built-in backstage tweak task with tiddler tweaker control panel (moved from BackstageTweaks)
2008.01.13 2.2.0 added 'auto-selection' links: all, changed, tags, title, text
2007.12.26 2.1.0 added support for managing 'creator' custom field (see [[CoreTweaks]])
2007.11.01 2.0.3 added config.options.txtTweakerSortBy for cookie-based persistence of list display order preference setting.
2007.09.28 2.0.2 in settiddlers() and deltiddlers(), added suspend/resume notification handling (improves performance when operating on multiple tiddlers)
2007.08.03 2.0.1 added shadow definition for [[TiddlerTweaker]] tiddler for use as parameter references with {{{<<tiddler>>, <<slider>> or <<tabs>>}}} macros.
2007.08.03 2.0.0 converted from inline script
2006.01.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TiddlerTweakerPlugin= {major: 2, minor: 4, revision: 5, date: new Date(2011,1,21)};

// shadow tiddler
config.shadowTiddlers.TiddlerTweaker='<<tiddlerTweaker>>';

// defaults
if (config.options.txtTweakerSortBy==undefined) config.options.txtTweakerSortBy='modified';

// backstage task
if (config.tasks) { // for TW2.2b3 or above
	config.tasks.tweak.tooltip='review/modify tiddler internals: dates, authors, tags, etc.';
	config.tasks.tweak.content='{{smallform small groupbox{<<tiddlerTweaker>>}}}';
}

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.macros.tiddlerTweaker = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var span=createTiddlyElement(place,'span');
		span.innerHTML=store.getTiddlerText('TiddlerTweakerPlugin##html');
		this.init(span.getElementsByTagName('form')[0],config.options.txtTweakerSortBy);
	},
	init: function(f,sortby) { // set form controls
		if (!f) return; // form might not be rendered yet...
		while (f.list.options[0]) f.list.options[0]=null; // empty the list
		var tids=store.getTiddlers(sortby);
		if (sortby=='size') // descending order
			tids.sort(function(a,b) {return a.text.length > b.text.length ? -1 : (a.text.length == b.text.length ? 0 : +1);});
		var who='';
		for (i=0; i<tids.length; i++) { var t=tids[i];
			var label=t.title; var value=t.title;
			switch (sortby) {
				case 'modified':
				case 'created':
					var t=tids[tids.length-i-1]; // reverse order
					var when=t[sortby].formatString('YY.0MM.0DD 0hh:0mm ');
					label=when+t.title;
					value=t.title;
					break;
				case 'size':
					label='['+t.text.length+'] '+label;
					break;
				case 'modifier':
				case 'creator':
					if (who!=t[sortby]) {
						who=t[sortby];
						f.list.options[f.list.length]=new Option('by '+who+':','',false,false);
					}
					label='\xa0\xa0\xa0'+label; // indent
					break;
			}
			f.list.options[f.list.length]=new Option(label,value,false,false);
		}
		f.title.value=f.who.value=f.creator.value=f.tags.value='';
		f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
		f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
		f.stats.disabled=f.set.disabled=f.del.disabled=f.edit.disabled=f.display.disabled=true;
		f.settitle.disabled=false;
		config.options.txtTweakerSortBy=sortby;
		f.sortby.value=sortby; // sync droplist
		if (sortby!='modified') saveOptionCookie('txtTweakerSortBy');
		else removeCookie('txtTweakerSortBy');
	},
	enablefields: function(here) { // enables/disables inputs based on #items selected
		var f=here.form; var list=f.list;
		var c=0; for (i=0;i<list.length;i++) if (list.options[i].selected) c++;
		if (c>1) f.title.disabled=true;
		if (c>1) f.settitle.checked=false;
		f.set.disabled=(c==0);
		f.del.disabled=(c==0);
		f.edit.disabled=(c==0);
		f.display.disabled=(c==0);
		f.settitle.disabled=(c>1);
		f.stats.disabled=(c==0);
		var msg=(c==0)?'select tiddlers':(c+' tiddler'+(c!=1?'s':'')+' selected');
		here.previousSibling.firstChild.firstChild.nextSibling.innerHTML=msg;
		if (c) clearMessage(); else displayMessage('no tiddlers selected');
	},
	setfields: function(here) { // set fields from first selected tiddler
		var f=here.form;
		if (!here.value.length) {
			f.title.value=f.who.value=f.creator.value=f.tags.value='';
			f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
			f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
			return;
		}
		var tid=store.getTiddler(here.value); if (!tid) return;
		f.title.value=tid.title;
		f.who.value=tid.modifier;
		f.creator.value=tid.fields['creator']||''; // custom field - might not exist
		f.tags.value=tid.tags.map(function(t){return String.encodeTiddlyLink(t)}).join(' ');
		var c=tid.created; var m=tid.modified;
		f.cm.value=c.getMonth()+1;
		f.cd.value=c.getDate();
		f.cy.value=c.getFullYear();
		f.ch.value=c.getHours();
		f.cn.value=c.getMinutes();
		f.mm.value=m.getMonth()+1;
		f.md.value=m.getDate();
		f.my.value=m.getFullYear();
		f.mh.value=m.getHours();
		f.mn.value=m.getMinutes();
	},
	selecttiddlers: function(here,callback) {
		var f=here; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
		for (var t=f.list.options.length-1; t>=0; t--)
			f.list.options[t].selected=callback(f.list.options[t]);
		config.macros.tiddlerTweaker.enablefields(f.list);
		return false;
	},
	settiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		var cdate=new Date(f.cy.value,f.cm.value-1,f.cd.value,f.ch.value,f.cn.value);
		var mdate=new Date(f.my.value,f.mm.value-1,f.md.value,f.mh.value,f.mn.value);
		if (tids.length>1 && !confirm('Are you sure you want to update these tiddlers:\n\n'+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			var title=!f.settitle.checked?tid.title:f.title.value;
			var who=!f.setwho.checked?tid.modifier:f.who.value;
			var text=tid.text;
			if (f.replacetext.checked) {
				var r=f.replacement.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
				text=text.replace(new RegExp(f.pattern.value,'mg'),r);
			}				
			var tags=tid.tags;
			if (f.settags.checked) { 
				var intags=f.tags.value.readBracketedList();
				var addtags=[]; var deltags=[]; var reptags=[];
				for (i=0;i<intags.length;i++) {
					if (intags[i].substr(0,1)=='+')
						addtags.push(intags[i].substr(1));
					else if (intags[i].substr(0,1)=='-')
						deltags.push(intags[i].substr(1));
					else
						reptags.push(intags[i]);
				}
				if (reptags.length)
					tags=reptags;
				if (addtags.length)
					tags=new Array().concat(tags,addtags);
				if (deltags.length)
					for (i=0;i<deltags.length;i++)
						{ var pos=tags.indexOf(deltags[i]); if (pos!=-1) tags.splice(pos,1); }
			}
			if (!f.setcdate.checked) cdate=tid.created;
			if (!f.setmdate.checked) mdate=tid.modified;
			store.saveTiddler(tid.title,title,text,who,mdate,tags,tid.fields);
			if (f.setcreator.checked) store.setValue(tid.title,'creator',f.creator.value); // set creator
			if (f.setcdate.checked) tid.assign(null,null,null,null,null,cdate); // set create date
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	displaytiddlers: function(here,edit) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		story.displayTiddlers(story.findContainingTiddler(f),tids,edit?DEFAULT_EDIT_TEMPLATE:null);
	},
	deltiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		if (!confirm('Are you sure you want to delete these tiddlers:\n\n'+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			if (tid.tags.contains('systemConfig')) {
				var msg=tid.title+' is tagged with systemConfig.'
					+'\n\nRemoving this tiddler may cause unexpected results.  Are you sure?';
				if (!confirm(msg)) continue;
			}
			store.removeTiddler(tid.title);
			story.closeTiddler(tid.title);
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	stats: function(here) {
		var f=here.form; var list=f.list; var tids=[]; var out=''; var tot=0;
		var target=f.nextSibling;
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			out+='[['+tid.title+']] '+tid.text.length+'\n'; tot+=tid.text.length;
		}
		var avg=tot/tids.length;
		out=tot+' bytes in '+tids.length+' selected tiddlers ('+avg+' bytes/tiddler)\n<<<\n'+out+'<<<\n';
		removeChildren(target);
		target.innerHTML="<hr><font size=-2><a href='javascript:;' style='float:right' "
			+"onclick='this.parentNode.parentNode.style.display=\"none\"'>close</a></font>";
		wikify(out,target);
		target.style.display='block';
	}
};
//}}}
/***
//{{{
!html
<style>
.tiddlerTweaker table,
.tiddlerTweaker table tr,
.tiddlerTweaker table td
	{ padding:0;margin:0;border:0;white-space:nowrap; }
</style><form class='tiddlerTweaker'><!--
--><table style="width:100%"><tr valign="top"><!--
--><td style="text-align:center;width:99%;"><!--
	--><font size=-2><div style="text-align:left;"><span style="float:right"><!--
	-->&nbsp; <a href="javascript:;" 
		title="select all tiddlers"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return opt.value.length;
		});">all</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers currently displayed in the story column"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return story.getTiddler(opt.value);
		});">opened</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers that are new/changed since the last file save"
		onclick="var lastmod=new Date(document.lastModified);
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tid=store.getTiddler(opt.value);
				return tid&&tid.modified>lastmod;
			});
		">changed</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers with at least one matching tag"
		onclick="var t=prompt('Enter space-separated tags (match one or more).  Use \x22-\x22 to match untagged tiddlers');
			if (!t||!t.length) return false;
			var tags=t.readBracketedList();
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tid=store.getTiddler(opt.value);
				return tid&&tags[0]=='-'?!tid.tags.length:tid.tags.containsAny(tags);
			});
		">tags</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers whose titles include matching text"
		onclick="var t=prompt('Enter a title (or portion of a title) to match');
			if (!t||!t.length) return false;
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				return opt.value.indexOf(t)!=-1;
			});
		">titles</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers containing matching text"
		onclick="var t=prompt('Enter tiddler text (content) to match');
			if (!t||!t.length) return false;
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tt=store.getTiddlerText(opt.value,'');
				return tt.indexOf(t)!=-1;
			});
		">text</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="reverse selection of all list items"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return !opt.selected;
		});">invert</a><!--
	--></span><span>select tiddlers</span><!--
	--></div><!--
	--></font><select multiple name=list size="11" style="width:99.99%" 
		title="use click, shift-click and/or ctrl-click to select multiple tiddler titles" 
		onclick="config.macros.tiddlerTweaker.enablefields(this)" 
		onchange="config.macros.tiddlerTweaker.setfields(this)"><!--
	--></select><br><!--
	-->show<input type=text size=1 value="11" 
		onchange="this.form.list.size=this.value; this.form.list.multiple=(this.value>1);"><!--
	-->by<!--
	--><select name=sortby size=1 
		onchange="config.macros.tiddlerTweaker.init(this.form,this.value)"><!--
	--><option value="title">title</option><!--
	--><option value="size">size</option><!--
	--><option value="modified">modified</option><!--
	--><option value="created">created</option><!--
	--><option value="modifier">modifier</option><!--
	--></select><!--
	--><input type="button" value="refresh" 
		onclick="config.macros.tiddlerTweaker.init(this.form,this.form.sortby.value)"<!--
	--> <input type="button" name="stats" disabled value="totals..." 
		onclick="config.macros.tiddlerTweaker.stats(this)"><!--
--></td><td style="width:1%"><!--
	--><div style="text-align:left"><font size=-2>&nbsp;modify values</font></div><!--
	--><table style="width:100%;"><tr><!--
	--><td style="padding:1px"><!--
		--><input type=checkbox name=settitle unchecked 
			title="allow changes to tiddler title (rename tiddler)" 
			onclick="this.form.title.disabled=!this.checked">title<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=title size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setcreator unchecked 
			title="allow changes to tiddler creator" 
			onclick="this.form.creator.disabled=!this.checked">created by<!--
	--></td><td style="padding:1px;"><!--
		--><input type=text name=creator size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setwho unchecked 
			title="allow changes to tiddler author" 
			onclick="this.form.who.disabled=!this.checked">modified by<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=who size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setcdate unchecked 
			title="allow changes to created date" 
			onclick="var f=this.form;
				f.cm.disabled=f.cd.disabled=f.cy.disabled=f.ch.disabled=f.cn.disabled=!this.checked"><!--
		-->created on<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=cm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=cd size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=cy size=4 style="width:3em;padding:0;text-align:center" disabled><!--
		--> at <input type=text name=ch size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> : <input type=text name=cn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setmdate unchecked 
			title="allow changes to modified date" 
			onclick="var f=this.form;
				f.mm.disabled=f.md.disabled=f.my.disabled=f.mh.disabled=f.mn.disabled=!this.checked"><!--
		-->modified on<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=mm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=md size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=my size=4 style="width:3em;padding:0;text-align:center" disabled><!--
		--> at <input type=text name=mh size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> : <input type=text name=mn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=replacetext unchecked
			title="find/replace matching text" 
			onclick="this.form.pattern.disabled=this.form.replacement.disabled=!this.checked">replace text<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=pattern size=15 value="" style="width:40%" disabled 
			title="enter TEXT PATTERN (regular expression)"> with<!--
		--><input type=text name=replacement size=15 value="" style="width:40%" disabled 
			title="enter REPLACEMENT TEXT"><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=settags checked 
			title="allow changes to tiddler tags" 
			onclick="this.form.tags.disabled=!this.checked">tags<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=tags size=35 value="" style="width:98%" 
			title="enter new tags or use '+tag' and '-tag' to add/remove tags from existing tags"><!--
	--></td></tr></table><!--
	--><div style="text-align:center"><!--
	--><nobr><input type=button name=display disabled style="width:24%" value="display" 
		title="show selected tiddlers"
		onclick="config.macros.tiddlerTweaker.displaytiddlers(this,false)"><!--
	--> <input type=button name=edit disabled style="width:23%" value="edit" 
		title="edit selected tiddlers"
		onclick="config.macros.tiddlerTweaker.displaytiddlers(this,true)"><!--
	--> <input type=button name=del disabled style="width:24%" value="delete" 
		title="remove selected tiddlers"
		onclick="config.macros.tiddlerTweaker.deltiddlers(this)"><!--
	--> <input type=button name=set disabled style="width:24%" value="update" 
		title="update selected tiddlers"
		onclick="config.macros.tiddlerTweaker.settiddlers(this)"></nobr><!--
	--></div><!--
--></td></tr></table><!--
--></form><span style="display:none"><!--content replaced by tiddler "stats"--></span>
!end
//}}}
***/
 
* ACP's foundation is based on ~TiddlyWiki Classic
{{borderless{
|[[Click here to open in a new browser tab|http://www.tiddlywiki.org/]]|
<html><div align="center"><iframe src ="http://www.tiddlywiki.org/" width="100%" align="center" height="600">< /></div></html>}}}
----
|!Close this window after download completes|
{{borderless{
<html><iframe src ="RefDocs/Khan.pdf" width="100%" height="480">< /></div></html>}}}
----
The messages that appear in the Tip of the day box are kept in a text file called (amazingly) tipofday.txt. You can add and change these messages by editing this file. Each message is on a single line, so you must not let it get word wrapped. Use Microsoft Word to edit it, turn on paragraph mark visibility, let the text flow in the Word window, and end each message with a hard return (paragraph mark). Alternatively, use Notepad with Word Wrap turned off.

If you want a hyperlink to appear at the bottom of the Tip of Day window, append a "|" followed by either:
*a page file name and optional anchor name in ~ACPHelp.chm, or 
*a full URL, including http:// 
Unless the string following the | begins with http://, it is assumed that the data is the file name of a page in ACP Help.chm. In this case, ACP Help will be opened to that page. If it does begin with http:// the corresponding web page will be opened in an external browser. 

The sequencing of these messages is controlled by a registry variable. You can reset the sequencing by changing the ~CurrentTip value under the General key (see registry editing below). This value is auto-incremented each time a tip is shown, and then it reaches a value equal to the number of lines in the tip file, it is rolled back over to zero. The "hide tips" checkbox is disabled until all of the tips have been seen once. This is controlled by the ~SeenAllTips value ("True" or "False") under the General key. 

----
/***

|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://lewcid.googlepages.com/lewcid.html#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.

!Demo
<<toggleSideBar "Toggle Sidebar">>

!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
 styleHide : "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
 styleShow : " ",
 arrow1: "«",
 arrow2: "»"
};   // save the back-double-arrow character here: « 

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
  var tooltip= params[1]||'toggle sidebar';
  var mode   = (params[2] && params[2]=="hide")? "hide":"show";
  var arrow  = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
  var label  = (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
  var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
  if (mode == "hide")
  { 
    (document.getElementById("sidebar")).setAttribute("toggle","hide");
    setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
  }
};

config.macros.toggleSideBar.onToggleSideBar = function()
{
  var sidebar = document.getElementById("sidebar");
  var settings = config.macros.toggleSideBar.settings;
  if (sidebar.getAttribute("toggle")=='hide')
  {
    setStylesheet(settings.styleShow,"ToggleSideBarStyles");
    sidebar.setAttribute("toggle","show");
    this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
  }
  else
  { 
    setStylesheet(settings.styleHide,"ToggleSideBarStyles");
    sidebar.setAttribute("toggle","hide");
    this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
  }
  return false;
};

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");

//}}}
This script will train the ACP Pointing Corrector. If image simulation is in effect it will still work, using the pointing error generator. If you edit this script and set ~FAST_TEST to True, the simulated image and plate solving will be skipped and you'll see the behavior of the pointing corrector in hyper-time — very useful for learning about the behavior of the corrector.

It generates the given number of random points with a statistically even distribution across the sky, honoring the slewing limits. As it visits each point, it plate solves and syncs, and sync is what adds the mapping point to the corrector. When it completes the corrector will be trained. Points are split into east and west sets, with the east set being completely done before the west set. This limits the run to one meridian flip for GEM mounts.

|!NOTE:|
|It is not necessary to train the corrector this way! From the very first image that you acquire after resetting the model or changing telescope type, all of your images will be centered. The corrector will learn as you acquire more and more images. The effect will be to reduce the frequency of pointing updates as the model gets better and better.|

Here are all the [[Standard ACP Scripts]].
----
!Troubleshooting the Web Server
If the browser sits there with a blank window for a long time, then finally displays an error, double check to see that the Enable Web Server checkbox in the Servers Preferences is checked (on). It is in the Servers preferences window. If it is on, look at the error message displayed by your browser.

If you are using Microsoft Internet Explorer, and you see a generic "page cannot be displayed", you need to turn off IE's friendly error messages. See the note below. If your browser shows an Access Denied message, you probably clicked Cancel instead of OK in the login dialog. Try again.

If you repeatedly see the login dialog, you're using the wrong username and/or password. Go back to the Web Users preferences window and check your username and password. Do not use your full friendly name, use the login username. 
|NOTE:  By default, Internet Explorer hides the error messages sent by web servers. This bonehead "feature" is responsible for more user frustration than just about anything else connected with the internet. Fortunately you can disable it. In Internet Explorer, Tools menu, select Internet Options... Then select the Advanced tab in the property sheet. In the Settings tree, under Browsing, locate "Show friendly HTTP error messages". Click to remove the checkmark, then click OK. Re try the operation that failed to see the actual error message from the server.|
!Troubleshooting the FTP Server
If you never even get the login dialog, double check to see that the Enable FTP Server checkbox is checked (on). It is in the Servers preferences window. If it is on, make sure you typed in the correct FTP address 127.0.0.1. 

If you get a login prompt, but cannot log in and you get a message like 530 Login incorrect, make sure you entered the username and password exactly as you did when you created the account. Re-check it now. If you cannot login and get a message like 550 You do not have permission to use our FTP server, make sure that you checked "Allow Using FTP Server" for the account.

If you are behind a firewall, sometimes FTP's "Passive" mode will allow access where its normal mode will not. ACP's FTP server supports passive mode, but the client (browser or FTP client program) often must be specifically configured to use passive mode. For example, Internet Explorer has an option "Use passive FTP" in its Internet Options window, Advanced tab.
----
Here is a graph of $x-\frac{x^3}{6}$ and $\sin(x)$

(:graph({width:300,height:150,scales:[-6.29,6.29]})
grid({dx:1,stroke:"green"});
axes({marker:">",stroke:"yellow",fontfill:"orange"});
plot("sin(x)",{stroke:"red"})
plot("x-pow(x,3)/6",{min:-4,max:4,stroke:"blue", strokedasharray:"10,10"})
text([-3.25,-2.25],"Close friends near 0!",{id:"rot",fontsize:12,fontfill:"yellow"});
rotate("rot",PI/18,{center:[-5,-3]});
:)
Click ''[[this|http://www.astro.ku.dk/~erik/Tycho-2/letter.pdf]]'' to download the //Astronomy and Astrophysics// Tycho-2 reference .pdf document.
{{borderless{
|[[Click here to open in a new browser tab|http://www.astro.ku.dk/~erik/Tycho-2/]]|
<html><div align="center"><iframe src ="http://www.astro.ku.dk/~erik/Tycho-2/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://tdc-www.harvard.edu/software/catalogs/ucac2.html]]|
<html><div align="center"><iframe src ="http://tdc-www.harvard.edu/software/catalogs/ucac2.html" width="100%" align="center" height="600">< /></div></html>}}}
----
The ~UCAC2 is a high-density, highly accurate, astrometric catalog of 48,330,571 stars covering the sky from -90 to a ragged-edge limit between +40 degrees and +52 degrees. Two noticeable features of the ~UCAC2 are its lack of stars brighter than m~~R~~=8 and its incomplete sky coverage. Thus, the USNO ~UCAC2 astrometric star catalog is not complete in this regard, or for declinations above the ragged edge. The ~UCAC2 covers over 85% of the sky; the remaining Northern Celestial Pole area is currently being observed and reduced. It is expected that the final UCAC catalogue will be released in 2009. These two features -- the lack of bright stars and the lack of full sky coverage -- are the reasoning behind the ~UCAC2 Bright Star Supplement (~UCAC2 BSS).

The ~UCAC2 Bright Star Supplement (CDS Catalogue number I/294) is meant to be used with the Second U.S. Naval Observatory CCD Astrograph Catalog (~UCAC2, CDS Catalogue number I/289) to fill in the missing bright stars and yet-to-be observed northern regions of the ~UCAC2. In total exactly 430,000 stars, mostly from the region north of +40° declination, make up this supplementary data set. The Hipparcos and Tycho-2 Catalogues provide the source of data for the ~UCAC2 supplement. The combination of the two catalogs provides excellent astrometry, full-sky coverage, and virtual completeness to m~~V~~=11.0.
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
{{borderless{
|[[Click here to open in a new browser tab|http://ad.usno.navy.mil/ucac/readme_u3.html]]|
<html><div align="center"><iframe src ="http://ad.usno.navy.mil/ucac/readme_u3.html" width="100%" align="center" height="30">< /></div></html>}}}
----
|!The ~UCAC4 catalog is now available for use in ~PinPoint and ACP 7|
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.usno.navy.mil/USNO/astrometry/optical-IR-prod/ucac]]|
<html><div align="center"><iframe src ="http://www.usno.navy.mil/USNO/astrometry/optical-IR-prod/ucac" width="100%" align="center" height="600">< /></div></html>}}}
----
Enter your zip code and click on "Go". At the middle of the revealed page, in the section labeled ''Additional Forecasts and Information'', click on ''Hourly Weather Graph.''
Right-click on the window to go back to the previous web page.
----
{{borderless{
|[[Click here to open in a new browser tab|http://forecast.weather.gov/MapClick.php?CityName=Sterling&state=VA&site=LWX&textField1=39.0013&textField2=-77.4083&e=1]]|
<html><div align="center"><iframe src ="http://forecast.weather.gov/MapClick.php?CityName=Sterling&state=VA&site=LWX&textField1=39.0013&textField2=-77.4083&e=1" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://tycho.usno.navy.mil/systime.html]]|
<html><div align="center"><iframe src ="http://tycho.usno.navy.mil/systime.html" width="100%" align="center" height="30">< /></div></html>}}}
----
*Read this publication about [[Photometric Accuracy of the USNO A2.0 Catalog]]
{{borderless{
|[[Click here to open in a new browser tab|http://tdc-www.harvard.edu/catalogs/ua2.html]]|
<html><div align="center"><iframe src ="http://tdc-www.harvard.edu/catalogs/ua2.html" width="100%" align="center" height="600">< /></div></html>}}}
----
A complete source of graphical weather information. This is intended to satisfy the needs of the weather professional but can be a tool for the casual user as well. The graphics and data are displayed as a meteorologist would expect to see. For the novice user, there are detailed explanation pages to guide them through the various plots, charts and images. The data on this site are provided from the National Weather Service via the NOAAPORT satellite data service. All the images are generated using the Weather Processor (WXP) analysis package which is available from Unisys.
{{borderless{
|[[Click here to open in a new browser tab|http://weather.unisys.com/index.html]]|
<html><div align="center"><iframe src ="http://weather.unisys.com/index.html" width="100%" align="center" height="600">< /></div></html>}}}
----
These are scripts and applications that have been created by users to provide additional or modified capabilities not in the baseline of ACP functionality.  Some links point to ~DC-3 Dreams Communication Center messages, requiring logon.

|[[ACP Horizon Editor Application]]|[[Planalyzer]]|
|[[Catalog View]]|[[Sky Solve Application]]|
|[[AstroMC Extech RH401 Driver]]|[[Sky Survey Application]]|
|[[AstroMC WeatherSentry]]|[[Slew to Zenith Script]]|
|[[Eclipsing Binary Times of Minima]]|[[SmartTrack ACP Application]]|
|[[System Swap Utility]]|[[Startup/Shutdown Script]]|
|[[ACP Log Analyzer Application]]|[[Day-Night World Map]]|
|[[Mosaic NxM Script]]|[[UserActions Example]]|
|[[ACP Utilities]]|[[MaxIm DL Utilities]]|
----
{{indent{Scripts and components of object-oriented ("~O-O") programs make programmers' lives easier through access to pre-defined objects and methods. There are many, many scripts and ~O-O components (called objects, which have methods and properties), in ACP and ~MaxIm. These objects, methods and properties can be used to add additional capabilities to ACP through the "~UserActions" component of ACP. 

{{indent{Although the objects exist inside the program, you usually have to "connect" to them in some way before you can use them. Some of the objects are predefined and exist at the start, like the "FSO" file system object, so that you can just use it straight away if you know what the properties and methods are you want to use. In other places in various scripts you'll see "SUP" - that's another predefined object.  Others are all there but not available until you connect to them first, like the Document object that exists in ~MaxIm. That's what the "Set" statement does. Once you have a "Doc" established, then you can use all the methods (subroutines if you like, or functions) of that object, like ~OpenFile and ~SaveFile. To write useful visual basic or javascript, you really have to understand or at least know about all of the methods and properties of any object. It usually takes a long to get up to speed on the built-in methods and properties of an ~O-O programming language, let alone in an application like ~MaxIm or ACP.

{{indent{Here's an example of code that can be part of a ~UserActions.wsc script. This code will give you a little more insight into what's going on. The task is to write out a JPEG image after saving the FITS image just obtained. This example of an ~ImageComplete user action will let you do that.

{{{
Function ImageComplete(ImageFile)
    Dim Doc, jpgFile, fn                     ' Need to declare the variables that are used internally in this function

    Set Doc = CreateObject("MaxIm.Document") ' connects to the document object so you can use its methods
    Doc.OpenFile ImageFile                   '  ... one of which is to open a file with a given name
    fn = FSO.GetParentFolderName(ImageFile)  ' get the path name of the image file sans back-slash
    jpgFile = FSO.GetBaseName(ImageFile)     ' get the file name itself without the suffix extension
    fn = fn & "\" & jpgFile & ".jpg"         ' rebuild the path and filename including the .jpg suffix
    Doc.SaveFile   fn, 6, True, 1            ' Now save the file
    Doc.Close                                ' Release the document (but not the Document object)
    Util.Console.PrintLine  "JPEG " & jpgFile & ".jpg saved."  ' the print line to let you know what happened
    ImageComplete = True                     ' this is the message back to the program that called this Function

End Function                                 ' this will release the Document object
}}}

{{indent{Note that for Visual Basic (scripts with the .wsc suffix), you can call functions with the parameters inside parentheses or not! Visual Basic is rather loose that way. So the Doc.~SaveFile statement above could also be written  Doc.~SaveFile (fn, 6, True, 1).  Javascript is not so loose, however - there the parens are required. and the specific syntax of the language may be a bit different.

{{indent{To use this scriptlet, copy this code into ~UserActions.wsc in place of the existing stub function that's already there, and save the file. Then register the script by right-clicking on the file and selecting "register" from the drop-down menu. (This registration method only works on 32-bit systems.) Now when you run ACP, every target image that's saved as a FITS image file will also be saved in the same folder as a JPEG image file.

Here's a copy of the template file called [[UserActions-template.wsc]].
----
^^Additional information Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC^^
This is a copy of the ACP v8.1 ~UserActions-template.wsc file. Copy this file to Notepad, add your custom code and save it as ''~UserAction.wsc'', in the same folder where ACP.exe is located.
----
{{{
<?xml version="1.0" ?>
<package>
	<comment>
<![CDATA[
'tabs=4
-----------------------------------------------------------------------------------------

ACP Custom User Actions Component Framework
===========================================

Script:         UserActions.wsc
Author:         Robert B. Denny <rdenny@dc3.com>
Version:        8.1
Requires:       ACP 8.1 or later
                Windows Script 5.6 or later (installed by ACP setup)

Environment:    This is a Windows Script Component. Once registered (see below) it
                provides ACP standard scripts with a set of user-written actions that 
                can be performed at several points during the execution of ACP's
                standard scripts.  If you don't have a copy of PrimalScript, I STRONGLY
                suggest you get it and use it to work with this WSC, and ACP scripting
                in general!
                
                http://www.sapien.com/primalscript.aspx
                
Activating:     Normally, ACP does not "see" this component and it's member functions. 
                To activate it for ACP it must be registered with the Windows OS. This
                is simple on 32-bit systems: Right click on UserActions.wsc and select
                Register. If you see a success popup, it's ready to go. If you see a 
                failure popup, there is a mistake in the code or XML.
                
                On 64-bit systems it's a bit more complicated, as UserActions must be
                registered with the 32-bit siubsystem of Windows:
                
                    1. Run C:\Windows\SysWOW64\cmd.exe           <--- Yes, SysWOW64!
                    2. ...> CD "\Program Files\ACP Obs Control"  <-- Note quotes
                    3. ...> regsvr32 UserActions.wsc
                
Usage:          Add your custom script actions to the empty methods below. Access to
                ACP's "Util" object is automatically included. 
                
                To write to the ACP console, call Util.Console.PrintLine(). 
                
                To control the telescope and camera, you MUST use Util.ScriptTelescope 
                and Util.ScriptCamera. DO NOT CREATE INSTANCES OF ACP.TELESCOPE, 
                MAXIM.CCDCAMERA, OR ACP.CAMERA! This will prevent access locks from 
                working properly.
                
                You have access to all global variables in the host ACP script via 
                the Util.Script property. DO NOT CHANGE GLOBALS IN THE HOST SCRIPT,
                as it may cause it to fail.
                
                You have access to all of the facilities in AcquireSupport.wsc. To
                call any of its methods or access any of its properties, use 
                Util.Script.SUP to access the script's global variable that holds the
                object reference to the support library.
                
Edit History:
    07-Sep-04   4.0 Fix comments on some methods (cut-n-paste error)
    11-Feb-06   4.2 - Add separate #USERACTIONxxx metnods for before and after, the 
                after action now passes the final image file pathname. Add comments  
                to ImageAfter() warning not to rename or move the file. Add object
                Scripting.FileSystemObject as FSO. Add ImageComplete(), where you can
                safely change the file name. Fix interface for SlewStart(). 
                Add and clarify comments. Remove template for #USERACTxxx, add new
                standard actions TargetStart(), TargetEnd().
    28-Jun-06   4.3 - Add Shutdown() method.
    24-Nov-06   5.0 - Change TargetStart and TargetEnd to pass Plan plus current Target
                nd next Target as parameters. 
    17-Jun-07   5.1 TargetStart can now skip targets, see context comments.
    07-Nov-11   No logic change, GEM:732 add notation on registering including for 64 bit
                Remove old startup/shutdown notation.
    28-Apr-16   8.1 - GEM:1458 Add AcquireImage user action.
-----------------------------------------------------------------------------------------
]]>
	</comment>
	<component id="UserActions">
		<?component error="false" debug="false" ?>
		<registration progid="ACP.UserActions" classid="{33F9198D-112D-4AB9-8951-F5D7FB5E79AA}" description="ACP custom user action methods" remotable="no" version="1.0">
		</registration>
		<public>
			<method name="ImageComplete">
				<parameter name="ImageFile"/>
			</method>
			<method name="ImageEnd">
				<parameter name="ImageFile"/>
			</method>
			<method name="ImageStart">
				<parameter name="Interval"/>
				<parameter name="Binning"/>
				<parameter name="Subframe"/>
				<parameter name="FilterNum"/>
				<parameter name="ForPointing"/>
			</method>
			<method name="AcquireImage">
				<parameter name="Plan"/>
				<parameter name="Target"/>
				<parameter name="ImageSet"/>
				<parameter name="ImageFile"/>
			</method>
			<method name="ScriptEnd">
			</method>
			<method name="ScriptStart">
			</method>
			<method name="Shutdown">
			</method>
			<method name="SlewEnd">
			</method>
			<method name="SlewStart">
				<parameter name="RightAscension"/>
				<parameter name="Declination"/>
			</method>
			<method name="TargetStart">
				<parameter name="Plan"/>
				<parameter name="Target"/>
				<parameter name="NextTarget"/>
			</method>
			<method name="TargetEnd">
				<parameter name="Plan"/>
				<parameter name="Target"/>
				<parameter name="NextTarget"/>
			</method>
		</public>
		<object id="FSO" progid="Scripting.FileSystemObject" events="false" reference="false"/>
		<object id="ACPApp" progid="ACP.Application" events="false" reference="true"/>
		<object id="Util" progid="ACP.Util" events="false" reference="false"/>
		<script id="UserActions" language="VBScript">
<![CDATA[
Option Explicit

'------------------------------------------------------------------------------
' ScriptStart()     Called at start of script execution
'
' Parameters:
'   None:
'
' Return True to continue ACP script, False to stop ACP script
'------------------------------------------------------------------------------
Function ScriptStart()
    ''Util.Console.PrintLine "[useraction] ScriptStart called"
    ScriptStart=True
End Function


'------------------------------------------------------------------------------
' ScriptEnd()       Called at the end of script execution
'
' Parameters:
'   None
'
' No return. THIS WILL NOT BE CALLED ON A SCRIPT ERROR
'------------------------------------------------------------------------------
Sub ScriptEnd()
    ''Util.Console.PrintLine "[useraction] ScriptEnd called"
End Sub


'------------------------------------------------------------------------------
' SlewStart()       Called prior To starting a slew
'
' Parameters:
'   RightAscension:     J2000 right ascension of slew destination
'   Declination:        J2000 declination of slew destination
'
' Return True to permit the slew. False will prevent the slew and cause the 
' script to stop with an error.
'------------------------------------------------------------------------------
Function SlewStart(RightAscension, Declination)
    ''Util.Console.PrintLine "  [useraction] SlewStart called"
    SlewStart = True
End Function


'------------------------------------------------------------------------------
' SlewEnd()         Called when a slew has ended
'
' Parameters:
'   None
'
' Return True to permit the script to continue. Returning False will cause the 
' script to stop with an error.
'------------------------------------------------------------------------------
Function SlewEnd()
    ''Util.Console.PrintLine "  [useraction] SlewEnd called"
    SlewEnd = True
End Function


'------------------------------------------------------------------------------
' ImageStart()      Called just before image acquisition
'
' Parameters:
'   Interval:       Exposure interval (sec, 0=bias, neg=dark)   (read/write)
'   Binning:        Binning level                               (read/write)
'   Subframe:       Subframe size (fractional)                  (read/write)
'   FilterNum:      Filter number                               (DO NOT CHANGE!!!!!)
'   ForPointing     True if this is pointing exp.               (DO NOT CHANGE!!!!!)
'
' Return True to permit the script to continue. Returning False will cause the 
' script to stop with an error.
'------------------------------------------------------------------------------
Function ImageStart(Interval, Binning, Subframe, FilterNum, ForPointing)
    ''Util.Console.PrintLine "  [useraction] ImageStart called"
    ImageStart = True
End Function


'------------------------------------------------------------------------------
' ImageEnd()        Called when image acquisition has ended
'
' Parameters:
'   ImageFile:      Full path/name to image file
'
' Return True to permit the script to continue. Returning False will cause the 
' script to stop with an error.
'
' NOTE: DO NOT RENAME OR MOVE THE FILE HERE IF YOU ARE USING THIS WITH
'       ACQUIREIMAGES. USE #IMAGECOMPLETE (BELOW), WHICH RUNS AFTER
'       ACQUIREIMAGES IS COMPLETELY FINISHED WITH THE IMAGE FILE (EXCEPT
'       For AUTOSTACKING. SEE NOTE BELOW!)
'------------------------------------------------------------------------------
Function ImageEnd(ImageFile)
    ''Util.Console.PrintLine "  [useraction] ImageEnd called"
    ImageEnd = True
End Function


'------------------------------------------------------------------------------
' Shutdown()        Called by AcquireSupport when its Shutdown method is called
'
' Parameters:
'   None
'
' Return True if you handle observatory shutdown here. If you return False,
' AcquireSupport will run its built-in parking and camera warmup code.
'------------------------------------------------------------------------------
Function Shutdown()
    ''Util.Console.PrintLine "  [useraction] Shutdown called"
    Shutdown = False                            ' Use built-in shutdown logic
End Function


'------------------------------------------------------------------------------
' AcquireImage()    Called From AcquireImages.js to acquire an image using 
'                   special logic that completely replaces the acquisition
'                   logic in AcquireImages. Also called from AcquireScheduler
'                   for Scheduler runs.
'
' Parameters (ACP):
'   Plan            ACP.Plan object for currently running plan
'   Target          Current ACP.Target object 
'   ImageSet        Current ACP.ImageSet object
'   ImageFile:      Full path/name to image file
'
' Parameters (Scheduler):
'   Plan            Scheduler Plan object for currently running plan
'   Target          Scheduler Observation object for target
'   ImageSet        Scheduler ImageSet object for this set of images
'   ImageFile:      Full path/name to image file
'
' Environment:
'   The scope is pointing to the target folloowing a pointing update as needed,
'   and any periodic or adaptive autofocus has been done. Nothing else will
'   have been done. If this function does handle the imaging, then it is 
'   responsible for guiding, filter selection, and image acquisition. When
'   it returns, it is assumed that the image file is at the given path (which
'   will be constructed as usual including possible ImageFileConfig customizations. 
'
' Return True to permit the script to continue and acquire an image the normal
' way in AcquireSupport. Returning False will cause the script to stop with 
' an error. Returning the string "ok" will cause the internal AcquireImages
' logic to be skipped, and loop back in the "Count" loop for the next iteration.
'
'------------------------------------------------------------------------------
Function AcquireImage(Plan, Target, ImageSet, ImageFile)
    ''Util.Console.PrintLine "  [useraction] AcquireImage called"
    AcquireImage = True
End Function


'------------------------------------------------------------------------------
' ImageComplete()   Called From AcquireImages.js when normal image acquisition
'                   and processing are complete. 
'
' Parameters:
'   ImageFile:      Full path/name to image file                (read/write)
'
' Return True to permit the script to continue. Returning False will cause the 
' script to stop with an error. At this point, the image processing is done
' so you may change the image file name.
'
' WARNINGS: 
'   (1) DO NOT CHANGE FILE EXTENSION! IT MUST BE .FTS.
'   (2) IF YOU CHANGE THE FILE NAME, AUTO_STACK WILL BE DISABLED
'------------------------------------------------------------------------------
Function ImageComplete(ImageFile)
    ''Util.Console.PrintLine "  [useraction] ImageComplete called"
    ImageComplete = True
End Function


'------------------------------------------------------------------------------
' TargetStart() Called from AcquireImages.js when a new target is about to 
'               start. Also called from AcquireScheduler for ACP Scheduler runs.
'
' Parameters (ACP):
'   Plan            ACP.Plan object for currently running plan
'   Target          Current ACP.Target object 
'   NextTarget      Next ACP.Target object Or Null
'
' Parameters (Scheduler):
'   Plan            Scheduler Plan object for currently running plan
'   Target          Scheduler Observation object for target
'   null
'
' Use Util.Script.xxx to access AcquireImages/AcquireScheduler globals, etc.
'
' Return True to permit the target to be acquired by ACP, False will terminate
' the observing run. Return 2 to cause the target to be skipped.
'------------------------------------------------------------------------------
Function TargetStart(Plan, Target, NextTarget)
    ''Util.Console.PrintLine "  [useraction] TargetStart called"
    TargetStart = True
End Function


'------------------------------------------------------------------------------
' TargetEnd() Called from AcquireImages.js or AcquireScheduler when the current
'             target's processing is complete.
'
' Parameters:
'   Plan            ACP.Plan object for currently running plan
'   Target          Current ACP.Target object 
'   NextTarget      Next ACP.Target object Or Null
'
' Parameters (Scheduler):
'   Plan            Scheduler Plan object for currently running plan
'   Target          Scheduler Observation object for target
'   null
'
' Use Util.Script.xxx to access AcquireImages/AcquireScheduler globals, etc.
'
' Return True to permit the script to continue. Returning False will cause the 
' observing run to terminate.
'------------------------------------------------------------------------------
Function TargetEnd(Plan, Target, NextTarget)
    ''Util.Console.PrintLine "  [useraction] TargetEnd called"
    TargetEnd = True
End Function
]]>
		</script>
	</component>
</package>

}}}
----
This is a copy of the latest ACP v8.1 ~UserActionsJS-template.wsc file. Copy this file to Notepad, add your custom code and save it as ''~UserAction.wsc'', in the same folder where ACP.exe is located.
----
{{{
<?xml version="1.0" ?>
<package>
	<comment>
<![CDATA[
tabs=4
-----------------------------------------------------------------------------------------

ACP Custom User Actions Component Framework (JScript Version)
===========================================

Script:         UserActionsJS.wsc
Author:         Robert B. Denny <rdenny@dc3.com>
Version:        8.1
Requires:       ACP 8.1 or later
                Windows Script 5.6 or later (installed by ACP setup)

Environment:    This is a Windows Script Component. Once registered (see below) it
                provides ACP standard scripts with a set of user-written actions that 
                can be performed at several points during the execution of ACP's
                standard scripts.  If you don't have a copy of PrimalScript, I STRONGLY
                suggest you get it and use it to work with this WSC, and ACP scripting
                in general!
                
                http://www.sapien.com/primalscript.aspx
                
Activating:     Normally, ACP does not "see" this component and it's member functions. 
                To activate it for ACP it must be registered with the Windows OS. This
                is simple on 32-bit systems: Right click on UserActions.wsc and select
                Register. If you see a success popup, it's ready to go. If you see a 
                failure popup, there is a mistake in the code or XML.
                
                On 64-bit systems it's a bit more complicated, as UserActions must be
                registered with the 32-bit siubsystem of Windows:
                
                    1. Run C:\Windows\SysWOW64\cmd.exe           <--- Yes, SysWOW64!
                    2. ...> CD "\Program Files\ACP Obs Control"  <-- Note quotes
                    3. ...> regsvr32 UserActions.wsc
                
Usage:          Add your custom script actions to the empty methods below. Access to
                ACP's "Util" object is automatically included. 
                
                To write to the ACP console, call Util.Console.PrintLine(). 
                
                To control the telescope and camera, you MUST use Util.ScriptTelescope 
                and Util.ScriptCamera. DO NOT CREATE INSTANCES OF ACP.TELESCOPE, 
                MAXIM.CCDCAMERA, OR ACP.CAMERA! This will prevent access locks from 
                working properly.
                
                You have access to all global variables in the host ACP script via 
                the Util.Script property. DO NOT CHANGE GLOBALS IN THE HOST SCRIPT,
                as it may cause it to fail.
                
                You have access to all of the facilities in AcquireSupport.wsc. To
                call any of its methods or access any of its properties, use 
                Util.Script.SUP to access the script's global variable that holds the
                object reference to the support library.
                
PLEASE NOTE:    ACP has a built-in facility for running custom scripts at the time it
                it is started up and shutdown. See the ACP helpfile, "Customizing the
                Program" for more info on startup and shutdown scripts.

Edit History:
    23-Nov-06   5.0 Initial edit, after VBScript version of UserActions.wsc 5.0
    17-Jun-07   5.1 TargetStart can now skip targets, see context comments.
    07-Nov-11   No logic change, GEM:732 add notation on registering including for 64 bit
                Remove old startup/shutdown notation.
    28-Apr-16   8.1 - GEM:1458 Add AcquireImage user action.
-----------------------------------------------------------------------------------------
]]>
	</comment>
	<component id="UserActions">
		<?component error="false" debug="false" ?>
		<registration progid="ACP.UserActions" classid="{33F9198D-112D-4AB9-8951-F5D7FB5E79AA}" description="ACP custom user action methods" remotable="no" version="1.0">
		</registration>
		<public>
			<method name="ImageComplete">
				<parameter name="ImageFile"/>
			</method>
			<method name="ImageEnd">
				<parameter name="ImageFile"/>
			</method>
			<method name="ImageStart">
				<parameter name="Interval"/>
				<parameter name="Binning"/>
				<parameter name="Subframe"/>
				<parameter name="FilterNum"/>
				<parameter name="ForPointing"/>
			</method>
			<method name="AcquireImage">
				<parameter name="Plan"/>
				<parameter name="Target"/>
				<parameter name="ImageSet"/>
				<parameter name="ImageFile"/>
			</method>
			<method name="ScriptEnd">
			</method>
			<method name="ScriptStart">
			</method>
			<method name="Shutdown">
			</method>
			<method name="SlewEnd">
			</method>
			<method name="SlewStart">
				<parameter name="RightAscension"/>
				<parameter name="Declination"/>
			</method>
			<method name="TargetStart">
				<parameter name="Plan"/>
				<parameter name="Target"/>
				<parameter name="NextTarget"/>
			</method>
			<method name="TargetEnd">
				<parameter name="Plan"/>
				<parameter name="Target"/>
				<parameter name="NextTarget"/>
			</method>
		</public>
		<object id="FSO" progid="Scripting.FileSystemObject" events="false" reference="false"/>
		<object id="ACPApp" progid="ACP.Application" events="false" reference="true"/>
		<object id="Util" progid="ACP.Util" events="false" reference="false"/>
		<script id="UserActions" language="JScript">
<![CDATA[
//------------------------------------------------------------------------------
// ScriptStart()     Called at start of script execution
//
// Parameters:
//   None:
//
// Return True to continue ACP script, False to stop ACP script
//------------------------------------------------------------------------------
function ScriptStart()
{
    return true;
}


//------------------------------------------------------------------------------
// ScriptEnd()       Called at the end of script execution
//
// Parameters:
//   None
//
// No return. THIS WILL NOT BE CALLED ON A SCRIPT ERROR
//------------------------------------------------------------------------------
function ScriptEnd()
{
    return;
}


//------------------------------------------------------------------------------
// SlewStart()       Called prior To starting a slew
//
// Parameters:
//   RightAscension:     J2000 right ascension of slew destination
//   Declination:        J2000 declination of slew destination
//
// Return True to permit the slew. False will prevent the slew and cause the 
// script to stop with an error.
//------------------------------------------------------------------------------
function SlewStart(RightAscension, Declination)
{
    return true;
}


//------------------------------------------------------------------------------
// SlewEnd()         Called when a slew has ended
//
// Parameters:
//   None
//
// Return True to permit the script to continue. Returning False will cause the 
// script to stop with an error.
//------------------------------------------------------------------------------
function SlewEnd()
{
    return true;
}


//------------------------------------------------------------------------------
// ImageStart()      Called just before image acquisition
//
// Parameters:
//   Interval:       Exposure interval (sec, 0=bias, neg=dark)   (read/write)
//   Binning:        Binning level                               (read/write)
//   Subframe:       Subframe size (fractional)                  (read/write)
//   FilterNum:      Filter number                               (DO NOT CHANGE!!!!!)
//   ForPointing     True if this is pointing exp.               (DO NOT CHANGE!!!!!)
//
// Return True to permit the script to continue. Returning False will cause the 
// script to stop with an error.
//------------------------------------------------------------------------------
function ImageStart(Interval, Binning, Subframe, FilterNum, ForPointing)
{
    return true;
}


//------------------------------------------------------------------------------
// ImageEnd()        Called when image acquisition has ended
//
// Parameters:
//   ImageFile:      Full path/name to image file
//
// Return True to permit the script to continue. Returning False will cause the 
// script to stop with an error.
//
// NOTE: DO NOT RENAME OR MOVE THE FILE HERE IF YOU ARE USING THIS WITH
//       ACQUIREIMAGES. USE #IMAGECOMPLETE (BELOW), WHICH RUNS AFTER
//       ACQUIREIMAGES IS COMPLETELY FINISHED WITH THE IMAGE FILE (EXCEPT
//       For AUTOSTACKING. SEE NOTE BELOW!)
//------------------------------------------------------------------------------
function ImageEnd(ImageFile)
{
    return true;
}


//------------------------------------------------------------------------------
// Shutdown()        Called by AcquireSupport when its Shutdown method is called
//
// Parameters:
//   None
//
// Return True if you handle observatory shutdown here. If you return False,
// AcquireSupport will run its built-in parking and camera warmup code.
//------------------------------------------------------------------------------
function Shutdown()
{
    return false;                                   // Use built-in shutdown logic
}


//------------------------------------------------------------------------------
// AcquireImage()    Called From AcquireImages.js to acquire an image using 
//                   special logic that completely replaces the acquisition
//                   logic in AcquireImages. Also called from AcquireScheduler
//                   for Scheduler runs. 
//
// Parameters:
//   Plan            ACP.Plan object for currently running plan
//   Target          Current ACP.Target object 
//   ImageSet        Current ACP.ImageSet object
//   ImageFile:      Full path/name to image file
//
// Parameters (Scheduler):
//   Plan            Scheduler Plan object for currently running plan
//   Target          Scheduler Observation object for target
//   ImageSet        Scheduler ImageSet object for this set of images
//   ImageFile:      Full path/name to image file
//
// Environment:
//   The scope is pointing to the target folloowing a pointing update as needed,
//   and any periodic or adaptive autofocus has been done. Nothing else will
//   have been done. If this function does handle the imaging, then it is 
//   responsible for guiding, filter selection, and image acquisition. When
//   it returns, it is assumed that the image file is at the given path (which
//   will be constructed as usual including possible ImageFileConfig customizations. 
//
// Return True to permit the script to continue and acquire an image the normal
// way in AcquireSupport. Returning False will cause the script to stop with 
// an error. Returning the string "ok" will cause the internal AcquireImages
// logic to be skipped, and loop back in the "Count" loop for the next iteration.
//
//------------------------------------------------------------------------------
function AcquireImage(Plan, Target, ImageSet, ImageFile)
{
    return true;
}


//------------------------------------------------------------------------------
// ImageComplete()   Called From AcquireImages.js/~plan-acquire.js when image 
//                   acquisition and processing are complete
//
// Parameters:
//   ImageFile:      Full path/name to image file                (read/write)
//
// Return True to permit the script to continue. Returning False will cause the 
// script to stop with an error. At this point, the image processing is done
// so you may change the image file name.
//
// WARNINGS: 
//   (1) DO NOT CHANGE FILE EXTENSION! IT MUST BE .FTS.
//   (2) IF YOU CHANGE THE FILE NAME, AUTO_STACK WILL BE DISABLED
//------------------------------------------------------------------------------
function ImageComplete(ImageFile)
{
    return true;
}


//------------------------------------------------------------------------------
// TargetStart() Called from AcquireImages.js when a new target is about to 
//               start. Also called from AcquireScheduler for ACP Scheduler runs.
//
// Parameters (ACP):
//   Plan            ACP.Plan object for currently running plan
//   Target          ACP.Target object for target about to be started
//   NextTarget      ACP.Target object for next target, or null
//
// Parameters (Scheduler):
//   Plan            Scheduler Plan object for currently running plan
//   Target          Scheduler Observation object for target about to be started
//   NextTarget      null
//
// Use Util.Script.xxx to access AcquireImages/AcquireScheduler globals, etc.
//
// Return true to permit the target to be acquired by ACP, false will terminate
// the observing run. Return 2 to cause the target to be skipped.
//------------------------------------------------------------------------------
function TargetStart(Plan, Target, NextTarget)
{
    return true;
}


//------------------------------------------------------------------------------
// TargetEnd() Called from AcquireImages.js or AcquireScheduler when the current
//             target's processing is complete.
//
// Parameters(ACP):
//   Plan            ACP.Plan object for currently running plan
//   Target          ACP.Target object for target just completed
//   NextTarget      ACP.Target object for next target, or null
//
// Parameters (Scheduler):
//   Plan            Scheduler Plan object for currently running plan
//   Target          Scheduler Observation object for target about to be started
//   NextTarget      null
//
// Use Util.Script.xxx to access AcquireImages/AcquireScheduler globals, etc.
//
// Return frue to permit the script to continue. Returning false will cause the 
// observing run to terminate.
//------------------------------------------------------------------------------
function TargetEnd(Plan, Target, NextTarget)
{
    return true;
}
]]>
		</script>
	</component>
</package>

}}}
Sometimes you may wish to use ACP on an observatory that has multiple configurations such as a wide field refractor and a long focal length OTA, maybe a different mount setup, etc. You may also wish to transfer all of ACP's settings to a new machine, or simply back up all of your settings when you get things running smoothly, "just in case". You can do these things with configuration profiles.
|!Tip|
|You can specify a ~FocusMax System File in ACP's ~AutoFocus tab. This will cause ACP to select a ~FocusMax configuration (the system file) for its autofocus operations. If you enter a specific system file into ACP's ~AutoFocus settings, then save it as part of the configuration, you will in effect be saving ~FocusMax's configuration with it. If you have multiple configurations, switching ACP's configuration will also switch ~FocusMax's configuration. Thanks to ACP user Steve Reilly for this tip.|
!Backing Up or Saving ACP's Configuration
#In the ACP menu, select Save Profile...
#Give your saved profile a name in the file-save dialog and click OK. You may see several "elevation" popups indicating that ACP's settings are system-wide and not specific to any logged in Windows user. If this doesn't happen you need to be logged in as an Administrator to restore saved ACP settings. The profile will be saved (by default) in ''My Documents\ACP Astronomy\Profiles'' as a ZIP archive containing the registry settings as well as all of the configuration files that were found at save time.
!Restoring a Saved ACP Configuration
#Make sure that no instruments are connected (mount, camera, etc.) and that there is no script running. The easiest way is to simply start up ACP and immediately restore.
#In the ACP menu, select ''Restore Profile...''
#Select the ZIP archive containing the configuration you want to restore and click OK.
The profile will be restored to your live ACP configuration, and ACP will exit after the "success" popup. When you restart ACP, the new configuration will be in effect.
!Contents of ACP Profile Archives
The ZIP files containing ACP profiles contain the following
*''~ACPRegistry.reg'' - a registry editor import file containing all of ACP's registry-based settings information.
*Zero or more configuration files such as ''~AutoflatConfig.txt'', ''~ImageFileConfig.txt'', ''~FilterInfo.txt'', etc.
!Manually Restoring a Configuration
If for some reason the restoration process fails, you can manually restore a configuration. Be careful, you can ruin your system if you make a mistake in ''regedit''.
#Extract the files from the ZIP archive containing the configuration you want to restore. Put them anywhere convenient.
#In the Registry Editor (regedit) delete the entire tree ''~HKEY_LOCAL_MACHINE\Software\~Wow6432Node\Denny\ACP''. Note that on 32-bit systems, you won't see the ~Wow6432Node.
#Double-click ''~ACPRegistry.reg'' file from step 1.
#In the ACP installation folder under Program Files (or Program files (x86)) __and__ also in the folder ''Public Documents\ACP Config'' delete all of the configuration files:
##~ImageFileConfig.txt
##~CalFileConfig.txt
##~CalFileConfig.txt
##~FilterInfo.txt
##~BadBrightStars.txt
##~RoModeInfo.txt
##~AutoFlatConfig.txt
##Active.clb
#Copy the configuration files from the ZIP archive into the ACP configuration file folder ''Public Documents\ACP Config''.

ACP contains a built-in adaptive telescope pointing corrector that is similar to the ~MaxPoint™ pointing corrector from Diffraction Limited. The big difference is that we have integrated pointing correction into ACP in a way that makes its operation automatic, adaptive, and transparent. No other software can do this! The pointing models that ACP uses are compatible with ~MaxPoint, so you can read an ACP model into ~MaxPoint and use ~MaxPoint's analysis features! 
|!NOTE|
|If you want to use the telescope mechanical analysis capabilities of ~MaxPoint with ACP's pointing models, see [[Using MaxPoint]]. You can also convert ACP pointing models into the Software Bisque ~TPOINT-importable format using the ~ModelToTPOINT.vbs standard script. For more information, see [[Analyzing With TPOINT]].|
!How ACP Learns
The corrector engine learns about pointing errors whenever ACP is called upon to synchronize the telescope coordinates. When correction is enabled, sync operations don't actually reset the telescope coordinates. Instead, the desired and actual coordinates at the time of sync are sent to the corrector as a mapping point which immediately updates the model used to predict the telescope's pointing behavior. Each time a sync is performed, whether during automated image acquisition, manually through ACP's controls, from one of ACP's utility scripts, or from a client (such as ~MaxIm DL, ~TheSky or Starry Night) connected to ACP's ASCOM telescope hub, the pointing engine is immediately updated with a mapping point. 

When ACP is first started with a new telescope and with correction enabled, it needs a minimum of six accurate syncs at fairly widely spaced points in the sky before the correction starts to take effect. For most mounts, after ten or so syncs, the pointing accuracy will be below two arc minutes, often below one arc minute, regardless of mechanical flexure or polar alignment errors (within reason!). If the mount has poor slewing position repeatability, more mapping points will be required. A mount with poor repeatability will never achieve excellent corrected pointing.
|!NOTE|
|The syncs must use accurate coordinates. Hand-centering stars in an image will not reliably produce the accuracy needed to make the best use of the corrector. The Getting Started section [[Enabling the ACP Pointing Corrector]] uses a training script to train the corrector quickly and accurately. You don't need to train the corrector, though! Read on...|
!!Automatic Learning While Imaging
//Any// source of a sync will cause a pointing corrector update. When acquiring images automatically with ACO, pointing updates will occur as needed (eventually rarely!). Each one produces a sync from a hyper-accurate mapping point. Even if the corrector is in its early learning stages, ACP will use the pointing error to do an incremental slew to place the target in the center of the field. As the corrector gets better and better, the need for these re-slews will become less and less. Bottom line: ''Every image you take starting with the very first, will be precisely centered'' (as long your mount's basic mechanical pointing is good enough for ~PinPoint to plate-solve, typically 10-20 arc minutes or so, and its repeatability is decent). 
!!The Mapping Point Silo
ACP permanently saves each mapping point in a model file called ''Active.clb'' (kept in ACP's configuration folder ''Public Data|ACP Config''). As new points are added, they are saved, up to a configurable maximum number of points (typically 50 or so). Once the maximum number of points is in the model, when a new mapping point is added, the oldest is discarded before the model is recalculated. Thus, the model behaves as a silo buffer, first in first out.
 
Since the oldest mapping points are discarded, the model can adapt to slow changes in the telescope's mechanical characteristics. There is a tradeoff, though. If you keep relatively few mapping points in the model, the corrector will adapt faster, but the overall accuracy will be lower. More mapping points means slower adaptation and more accuracy (up to a point). Unlike some other correction systems, ACP's corrector typically reaches its maximum accuracy with 50 or fewer points for decent mounts.
Since the oldest mapping points are discarded, the model can adapt to slow changes in the telescope's mechanical characteristics. There is a tradeoff, though. If you keep relatively few mapping points in the model, the corrector will adapt faster, but the overall accuracy will be lower. More mapping points means slower adaptation and more accuracy (up to a point). Unlike some other correction systems, ACP's corrector typically reaches its maximum accuracy with 50 or fewer points for decent mounts.
!Initial Sync After Connecting (Important!)
The first sync given to ACP after ACP connects to the telescope will be sent through to the telescope (instead of creating a mapping point as described above). This happens __each time ACP is (re)connected to the scope__. The reason for this is to remove any random encoder bias from the correction solution. On some scopes, particularly low-end ones, there is a constant error in one or both axes after they are started up. Syncing removes this error, keeping it out of the pointing corrector math. 
| !NOTE |
| The COR annunciator light will flash, indicating that the model is not active, until you have completed the initial sync.|
During routine operation, you don't need to know about this or do anything special. Just start up, connect and begin acquiring images with ACP. This info is included here because scenarios come up where users need to know about it. It's hoped that this info will reduce the frequency of questions related to this.
!Closely Spaced Points
A frequent concern is "What happens if I observe many targets in a small area of the sky? Will the pointing corrector fill up its list with points in that area only?". No, ACP is smart enough to avoid this. If it finds a point within 5 degrees of a new one, it replaces that nearby point with the new one. That way, the mapping information is kept fresh, but points will remain distributed around the sky.
!One-time Setup
The fastest way to get ACP's corrector trained is to run the ''~TrainCorrector.vbs'' script to automatically do the initial training. __You can also just start using ACP to acquire images__, and the corrector will learn, though usually less quickly (and depending on your sky coverage).  
!Routine Use
Once you have provided the corrector with an initial set of mapping points, ACP makes corrections by altering the coordinates going back and forth between it and the telescope, according to its mechanical model. If you don't alter anything mechanically (including payload and balance), the model will remain valid. If you shut down ACP, it assumes that you have also shut down and restarted the telescope and will do one real sync the next time it is connected.

A permanent record of the model (in the form of a ~MaxPoint-compatible list of mapping points) is kept on disk in the file ''Public Documents\ACP Config\Active.clb''. The next time ACP is started, the model is restored and pointing correction is immediately effective. Further observations will serve to refine the model.
!Theory of Operation
The pointing corrector takes your desired coordinates and adjusts them to get the imperfect mount to point where you want it. It also takes the imperfect telescope coordinates and reverses out the correction before displaying them. Thus, you only see "ideal" coordinates in ACP's displays, and you only use ideal coordinates when specifying a slew or sync. 

Based on the mapping points supplied (via ACP sync operations), the corrector calculates the following mechanical errors in the mount:
|!Error Term |!Description |
|RA Bias |Error in the RA axis encoder (static after telescope startup)|
|Dec Bias |Error in the Dec axis encoder (static after telescope startup)|
|Polar Azimuth |Polar axis azimuth (left-right) misalignment (static)|
|Polar Altitude |Polar axis altitude (latitude, up-down) misalignment (static)|
|Axis Alignment |Deviation from exactly 90 degrees between the RA and Dec axes (static)|
|Collimation |Deviation of the actual optical axis from the tube axis (static)|
|Dec Flexure |German Equatorial Only: Flexure of the declination axis of the mount (varies with hour angle and declination)|
|Fork Flexure |~Non-German mounts only: Flexure of the fork (varies with hour angle)|
|Tube flexure |Flexure of the optical tube assembly (varies with hour angle and declination)|

The mapping points are processed by the corrector which calculates a "best estimate" of the eight active model parameters. It does this each time a new mapping point is added (via a sync in ACP or one of its hub clients) and uses all of the observations added so far, up to a configurable maximum. The next time ACP is started, further observations will serve to refine the model.
!Sources of Error
!!Slewing Repeatability
The most important source of error in estimating the model parameters is mount slewing repeatability. If your mount can slew away from a location then return with great accuracy to the original point, the corrector will achieve high accuracy. If not, the model will contain errors and correction will be sub-optimal, never going below the magnitude of the non-repeatability. ACP's consistent-approach slewing feature can greatly reduce this effect on mounts with significant drive backlash. It does so by completing all slews with a final phase which approaches the target position from 30 arc minutes northeast. This brings the RA axis up against the drive in the direction used for sidereal tracking, and the Dec axis up against the drive from the same direction in all cases. 
!!Changes in Balance or Load
Another source of error is a change in the mount/tube loading and/or balance. This changes the flexure parameters and thus invalidates flexure corrections. If you change the weight loading or balance of the scope, use the "Reset Model" button in the ACP Preferences window, Telescope tab. This clears out the existing parameters and starts training from scratch. As described earlier, using the Train Corrector.vbs script will achieve training in the shortest time. 
!!Unusual Mounts
If your mount is "unusual", that is, not a fork or German equatorial mount, the ACP/~MaxPoint model itself may not be well suited for your mount. In this case, there's not much that can be done at present, as the model in the corrector is fixed. As ~MaxPoint evolves, it is possible that additional flexibility will be added to its mount model. The current model, however, is suitable for the vast majority of amateur and research telescopes. 
----
~MaxIm DL's automatic calibration feature allows scripted systems such as ACP to use its capabilities. ~MaxIm DL has a sophisticated calibration group facility that allows building a library of calibration images for varying binning, exposure intervals, and temperatures. ACP depends on your having set up ~MaxIm's cal-group facility. It simply calls ~MaxIm at the appropriate point in the acquisition process, and expects ~MaxIm to do the actual calibration.

| !NOTE |
|ACP saves all auto-calibrated images as 32-bit floating point to preserve the dynamic range of the data. This doubles the size of the (nominally) 16-bit raw/uncalibrated image files.|
!Setting Up the System for Auto Calibration
Since ~MaxIm DL's calibration system is used to perform the auto-calibration, you must set up its library of calibration frames ahead of time. You must include calibration frames for all of the image sizes, including binning levels that your astronomers might use, and preferably for several temperatures even though you include bias frames for scaling. In other words, take the time to create a complete calibration frame library in ~MaxIm. Place the source cal frames (darks, biases, flats) into a separate folder just for this purpose and point ~MaxIm there. It is suggested that you generate master calibration frames for efficiency. For details see the documentation for ~MaxIm DL.

!How to Access Auto Calibration
There are several ways you can have ACP perform auto-calibration on your images:
*By enabling the ACP option Auto calibrate final/data images in ACP Preferences, Imaging tab. This causes all images acquired by ACP to be auto-calibrated, whether they are acquired in the observatory via ACP's console or via the web by a remote user. Everyone will get auto-calibration. 
*By enabling the Auto-calibrate option in the web request submission form. This will cause all images in that run only to be auto-calibrated. 
*By including a #CALIBRATE directive in an observing plan. This affects only the next/upcoming target. 
*By specifying the Full Calibrate option in an ACP Expert Scheduler ~ImageSet. 
!Preserving Your Original Data
Prior to doing auto-calibration, ACP saves a copy of the original image with "-RAW" appended to the image's file name, __and also in a subfolder under the final image's location named RAW__. Thus you can access the original uncalibrated image if, for some reason, calibration had undesired effects. __Note that this increases your disk space requirements__. 

If you want to ''disable this saving of the raw uncalibrated images'', you can uncheck (turn off) the option ''Save original uncalibrated final/data images'' in ACP Preferences, Imaging tab.

!What is ~MaxPoint™?
~MaxPoint™ is a telescope modeling and correction engine that can be used with any program which uses ASCOM telescope drivers. It sits between the client program (planetarium, ~MaxIm DL) and the actual telescope driver, and provides pointing corrections. 
|ACP has the ~MaxPoint modeling and correction engine built-in, providing automatic/adaptive modeling and pointing correction whenever the telescope is synced, and it operates continuously in learning mode. This provides ACP with an advantage over ~MaxPoint due to this level of integration. ACP does not, however, provide the full user interface and telescope analysis features of ~MaxPoint. For more information on ~MaxPoint, go to the [[Diffraction Limited]] web site.|
!Analyzing ACP Models
It is not necessary to use ~MaxPoint as a pointing corrector with ACP. However, ~MaxPoint has a very nice user interface that allows you to analyze your telescope's mechanical characteristics and alignment errors, as well as the mapping points that make up a pointing model. 

As described on the [[Using ACP's Pointing Corrector]] page, ACP saves its model mapping points in a file that is compatible with ~MaxPoint. Thus, if you have ~MaxPoint, you can view and analyze the mapping points, errors, and mechanical characteristics of your mount using the adaptive models built by ACP!

On ACP's Telescope menu, there are options to load in a model and to save the current (active) model in a backup file. With these two options, you can make a copy of the active model and analyze it with ~MaxPoint, or load a model that you have manipulated in ~MaxPoint back into ACP for live use. ~MaxPoint calls these models "calibration" files; their names end in .clb.
----
!~Tab-Delimited Format
The tab-delimited list is the simplest of the target formats accepted by the ''~AcquireImages.js'' script. You can create tab-delimited text using Notepad, Word, Works, Excel, and many other tools. The two most common tools are Notepad and Excel. In any case, the format of a target line is: 

|name &lt;tab&gt; right-ascension &lt;tab&gt; declination|

The RA and Dec must be in standard J2000 coordinates. ACP precesses them to the current epoch and translates to local topocentric for you. The right ascension and declination may be supplied in a variety of formats, ACP is very forgiving in what is accepted. Here are some examples: 

| !Right Ascension | !Declination |
| 11.32956346 | -23.347843 |
| 13 24 18.25 | 63 11 43.2 |
| 2h23.2394m | 13d51.836m |
| 04:01:33 | +42:56:12 |

Basically, the strings are chopped up into numeric parts (from 1 to 3) and combined sexagesimally. Any and all parts may have decimal digits. Right Ascension and Declination may have different formats as well. 

----
More detailed information can be found in the help file provided with ACP and the identical online [[ACP Help]] file.
!Using Simulators
 
When the weather is bad, or when you want to practice using the system and/or allow web users to practice and learn the system, all without needing live sky exposures, you can use the ACP simulators. Everything is exercised including the pointing corrector, filters, autoguider, plate solving, pointing updates... everything. No shortcuts are taken! Additional information is given below. 

To run ACP entirely with simulators, all components of the system need to be set up appropriately. This includes ~MaxIm, ACP, ~FocusMax and ~PinPoint. The ~ACPHelp.chm file (or the [[ACP 8.1]] help file) contains the detailed instructions you should follow. But here's a summary: 
#Start ~MaxIm DL, select Simulator for the ''main camera'' (Camera 1) and set it up so it represents your real camera. Select the Simulator for the guider (Camera 2) and set up the array and pixel sizes to match your ''guider''. Select Simulator for the ''filter wheel''. Set up the ''filter wheel'' to match your filter wheel setup. If you plan to leave some slots blank, be sure to remove any name from those slots and make them the last ones in the list. Unoccupied filter slots must not have any names in them. This is how ACP tells which slots are live.
#In ACP choose the Telescope Simulator and set it up to represent your telescope. Set the appropriate parameters in the Observatory, Imaging, Guiding, ~AutoFocus and ~PinPoint tabs. Remember to turn on the Simulated star fields and pointing errors in ACP/Preferences/General.
#Set up the ~FocusMax simulator to use the ACP ASCOM Hub for telescope control, and ~MaxIm DL for the camera control.
Simulated images contain noise and Gaussian profile stars with a FWHM of 5.0 arcseconds. The stars are taken from whatever catalog you have selected in the ACP ~PinPoint Preferences tab. Also, the simulated images will be generated with pre-set mechanical pointing errors (if the corrector is turned on) and random Gaussian pointing errors in each axis (except immediately following a scope sync, of course). ~PinPoint will plate solve these images normally and do pointing updates as usual. The final images will have the correct star fields for the ~RA/Dec of the image (including pointing errors). Neither uncataloged stars nor deep sky objects will appear in the images.
At this point, you can run plans (be sure they are valid for the present time or you'll get below-horizon errors) and take images (they will contain only stars). Everything will run as if it were live, including the web interfaces for taking single or multiple images. 

!Additional Information
*You can use your real telescope if you don't mind it slewing around. You may have to fudge the focal length to get realistic field of view if you are using the ~MaxIm camera simulator. Look at the run logs to see what field of view ACP calculates.
*If you're running your telescope through Software Bisque's TheSky (and using the ASCOM "~TheSky-Controlled Telescope" driver), you can select the Simulator in ~TheSky's telescope control. Leave ACP set to ~TheSky-Controlled Telescope.
*You can use your real camera, but of course it will take blank images. These will be replaced by synthetic star fields with exactly the same geometry as your real camera. This has the advantage of giving you images with the same field of view and pixel geometry as you are used to. If the pointing corrector is on, these images have pre-set mechanical pointing errors and random 30 arcsecond RMS pointing errors (except immediately following a pointing update).
*If you're using your real camera, you can also have your real filter wheel used during simulation. If you're using the Simulator camera, you'll have to set up ~MaxIm's simulated filter wheel. This will allow you to test filtered exposures and LRGB imaging via the web even if you don't have a real filter wheel.
*If you want to test Dome control, select the Dome Simulator in the Dome Ctrl tab, then turn on dome control. You must be disconnected from the telescope to do this.
*If you want to test weather, enter ~WeatherSim.Weather into the Weather server ID, then enable weather. Once Preferences is closed, use the Weather menu to connect. The weather simulator window lets you switch between safe and unsafe, and also provide optional environmental info.
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.ivoa.net/cgi-bin/twiki/bin/view/IVOA/IvoaVOEvent]]|
<html><div align="center"><iframe src ="http://www.ivoa.net/cgi-bin/twiki/bin/view/IVOA/IvoaVOEvent" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|https://www.youtube.com/user/DC3Dreams]]|
<html><div align="center"><iframe src ="https://www.youtube.com/user/DC3Dreams" scrolling="auto" height="60" width="100%">< /></div></html>}}}
----
<!--{{{-->
<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> &nbsp(<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>
<!--}}}-->
{{borderless{
|[[Click here to open in a new browser tab|http://webviz.u-strasbg.fr/viz-bin/VizieR]]|
<html><div align="center" style="background-color:white"><iframe src ="http://webviz.u-strasbg.fr/viz-bin/VizieR" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://tdc-www.cfa.harvard.edu/software/wcstools/]]|
<html><div align="center"><iframe src ="http://tdc-www.cfa.harvard.edu/software/wcstools/" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.adass.org/adass/proceedings/adass96/minkd.html]]|
<html><div align="center" style="background-color:white"
><iframe src ="http://www.adass.org/adass/proceedings/adass96/minkd.html" width="100%" align="center" height="600">< /></div></html>}}}
----
{{borderless{
|''[[Click here to open the description in a new browser tab|http://ad.usno.navy.mil/wds/wdstext.html]]''|
<html><div align="center"><iframe src ="http://ad.usno.navy.mil/wds/wdstext.html" width="100%" align="center" height="10">< /></div></html>
|''[[Click here to open the catalog text listing in a new browser tab|http://ad.usno.navy.mil/wds/Webtextfiles/wdsnewframe.html]]''|
<html><div align="center"><iframe src ="http://ad.usno.navy.mil/wds/Webtextfiles/wdsnewframe.html" width="100%" align="center" height="10">< /></div></html>}}}
----
{{borderless{
|''[[Click here to open in a new browser tab|http://ad.usno.navy.mil/wds/Webtextfiles/wdsnewframe.html]]''|
<html><div align="center"><iframe src ="http://ad.usno.navy.mil/wds/Webtextfiles/wdsnewframe.html" width="100%" align="center" height="30">< /></div></html>}}}
----
If you put a script called ''~ACP-Weather.xxx'' (xxx=''vbs'' or ''js'') in the same directory as ACP.exe, it will be automatically run when ACP detects that the weather has become unsafe. You can use this to (at a minimum) park your scope and close your dome or roof. If you have turned on "Close and park/home when (or AFTER) scope is parked by script" (Dome tab of Preferences), then all your weather safety script needs to contain is: 
{{{
Sub Main()
    Dim FMX

    On Error Resume Next  ' Call both of these "best efforts" (scope may not be connected, etc.)
    Set FMX = CreateObject("FocusMax.FocusControl")
    FMX.Halt
    Util.WaitForMilliseconds 1000
    Telescope.Park
End Sub
}}}
This will call the Telescope.Park method, and the auto-home/close logic will take care of your dome. The logic in Telescope.Park tries its very best to assure that your scope is parked before closing the shutter or roof.
|!NOTE|
|The above simple script is included with ACP. Under most circumstances, all you need to do is set the Dome preferences for your dome or roof, and weather alerts will be handled.|
----
^^Copyright &copy; 2000-<<today YYYY>>, Robert B. Denny, Mesa AZ
User accounts on the ACP web server can be assigned certain privileges. They are described in the table below: 

|''Compress image files'' |''@@color:green;Should normally be granted.@@''  Images acquired by this user will automatically be zip-compressed to reduce downloading time.|
|''Allow web uploading'' |''@@color:green;Should normally be granted.@@''  Allow uploading anything, including observing plans, files for the "shared files" folder, and utility scripts.|
|''Allow using FTP server'' |''@@color:green;Should normally be granted.@@''  Allow login to the FTP server.|
|''Allow script execution'' |''@@color:yellow;Security risk if combined with Allow web uploading!@@''  This is not needed for normal observing tasks. It applies only to running Utility scripts. Combined with Allow web uploading, this gives the user privileges to do anything on your system, including reformatting the hard drive! You can create a special user for engineering purposes who can run Utility scripts but cannot upload, but this would be unusual.|
|''Administrator privileges'' |''@@color:yellow;Security risk!@@''  This permits the user to kill other users' observing runs, kick them off the observatory, connect and disconnect instruments, and other "operator" tasks.|
|''Disable this account'' |This disables all access for the user. Useful for temporarily blocking access by a user.|
----
If you enable "sound and voice on script errors" (Preferences, General tab), when a script fails, ACP emits a piercing sound similar to an old fashioned pager. If Weather is enabled, ACP emits a different annoying sound when the weather becomes unsafe. Finally, ACP emits a clicking sound whenever its internal web server processes a browser request. You can change these sounds by substituting your own WAV files in the ACP installation folder. The script failure sound is in ~ScriptFail.wav, the weather alert sound is in ~WeatherAlert.wav, and the web hit sound is in ~WebHit.wav. To eliminate sounds individually, just delete the corresponding WAV file.
----
ACP has a user-friendly web browser interface. The reason for using a browser is that it provides one set of controls for observing whether from the observatory, or the warm room, or if sitting in a hotel room far away.

[img[RefDocs/Snap1.png]] 

In the Observing menu (above) there are three items for flats. Two are for setting up a re-usable "standard" set of flats and then taking them when you want, and one is for doing a one-time set of flats for some special purpose.

[img[RefDocs/Snap2.png]] 

To set up your standard flats (which ultimately creates that defaultxxxflat.txt file for you behind the scenes), use the Setup Sky Flats item, shown in the image above. Click the More button to create additional rows, and the Help button for slide-out help. You can create separate flat sets for dusk and dawn, or run the same set at both dusk and dawn. Once you've done this, you're set for taking flats via the web observing form flat checkboxes (2nd image below), or the Planner flat checkboxes, or by inserting #dawnflats and/or #duskflats into your manually created observing plans, or using the Standard Sky Flats item in the browser's Observing menu (image below).

[img[RefDocs/Snap3.png]]

You can also use the ~One-Time Sky Flats item to set up and acquire a set of flats all in one operation. If you activate Standard Sky Flats or ~One-Time Sky Flats, ACP will go into a wait mode until the next dawn or dusk. By tagging a normal observing plan via the dawn flats form checkbox (2nd image below), ACP will do those observations and then wait for dawn. You have to start a plan before dusk if you want dusk flats to be taken.
----
!Don't forget that magic of simulation!

*Check the "Simulated images" checkbox on the General tab of ACP preferences. Turn it on and you can take images with observing plans, plate solutions and all. 
*Switch ~FocusMax to its Simulator profile, run some ~V-Curves and you can focus while simulating. 
*Switch ~MaxIm to the simulator camera for the guider, calibrate it with the mount looking east, and you can simulate guided images. See using simulators in ACP help.

If that's not enough, fire up the web interface and learn how easy it is to use! Then play with Planner and make plans, let IT upload them (yes Planner can upload to the observatory) and run them via Multiple Objects (Plan) on the web interface. 

There's lots to do when the weather is bad!! Remember, too, that ACP runs at a 10x fast-forward rate when in simulation mode.
----
! 
There are a number of videos available for streaming to your desktop:
*ACP Design and Usage
*Multiple Targets - Plans
*Rotated Imaging (Internal and ~Off-Axis)
*Using ACP Planner
*Using TheSky X With ACP
*The ~DC-3 Dreams Story
*Using Email With the Comm Center

These are available by clicking on this ''[[Videos|http://www.youtube.com/DC3Dreams]]'' link, which opens another browser tab.  Enjoy.
----
!The latest updates for the following software can be downloaded by clicking on these links:

''[[ACP|http://acp.dc3.com/try-it.html]]''

''[[Scheduler|http://scheduler.dc3.com/try-it.html]]''

''[[PinPoint|http://pinpoint.dc3.com/try-it.html]]''

''[[ACP Planner|http://acp.dc3.com/get-planner.html]]''

''[[the GSC Catalog|http://gsc.dc3.com]]''  (click on "~GSCInstall.exe")

''[[FocusMax|http://http://www.ccdware.com/products/focusmax/]]''

''[[MaxIm (from Diffraction Limited)|http://www.cyanogen.com/]]''
----
! 
Here are some helpful hints about obtaining and downloading additional catalogs for use in ACP. Once a catalog is downloaded, the catalog type and catalog path must be properly set.
|Note: Do not attempt to use Internet Explorer for FTP access. It is just too lame. Create a "network place" for the FTP location and use that. Look in the Windows Help and Support Center file for "network places" for details. Or use an FTP application like the free [[FileZilla FTP Client]].|
!Guide Star Catalog:
As of October 2003, the ~STScI GSC in its original format (FITS tables) is no longer available from NASA Astronomical Data Center. In order to support you, ~DC3-Dreams has made [[the GSC Catalog]] available online. Detailed instructions are in the readme.txt file at the above address.
|NOTE: The most common problem with the GSC is having the wrong directory layout. The 2-CD set from ASP, as well as ACP's online distribution of [[the GSC Catalog]], has the catalog files in a subdirectory called GSC and the table files in a subdirectory called TABLES. ~PinPoint is designed to work with the ~CD-ROM root/drive as the path for all of its catalogs, and GSC is no exception. Set ~PinPoint's path to the parent directory of the GSC and TABLES directories, wherever it is.|
    If you are using the 2-CD (uncompressed) version of the GSC/1.1 as obtained from (e.g.) the Astronomical Society of the Pacific, you must have two ~CD-ROM drives (or copy the contents of both ~CD-ROM into a common directory on hard disk). When using 2 ~CD-ROM drives, enter the drive letters for the north disk and south disk separated by a semicolon (e.g., "N:;S:") This will also work if you choose to copy the North and South ~CDs into separate directories on (possibly 2 different) hard disk(s); separate the north and south directory paths with a semicolon.

See also [[Can I use any old GSC catalog?]].
!USNO A2.0
    This is a huge catalog (6,000 megabytes) but you can download it in bits and pieces at night if needed. Not recommended for dialup lines! Get it from [[the US Naval Observatory|ftp://ftp.nofs.navy.mil/usnoa/]]. Copy the readxxx.xxx files and the zonexxxx.acc and zonexxxx.cat files in this directory to a directory on your system. All A2.0 files must be accessible, there is no ~CD-shuffling logic in ~PinPoint. Set your catalog type to USNO A2.0. Set your catalog path to the directory into which you copied the tree from USNO. They will all be in one folder.
!USNO ~UCAC2 (not recommended)
    This catalog is not available online from USNO, however the developer of Hallo Northern Sky has published instructions on downloading and reconstructing ~UCAC2 from the compressed files available at ~VizieR. For updated information and instructions on how to get the ~UCAC2 ~CD-ROM set, go here: [[ad.usno.navy.mil/ucac/]]. Be sure to follow the reconstruction directions to the letter, including the directory layout.
|NOTE: The most common problem with ~UCAC2 is having the wrong directory layout. The 3-CD set from USNO has the catalog files in a sibdirectory called u2. ~PinPoint is designed to work with the ~CD-ROM root/drive as the path for all of its catalogs, and ~UCAC2 is no exception. So you must create a directory, let's say ~UCAC2, then a subdirectory ~UCAC2/u2, and put the data files (u2index.da and all of the zxxx files) into u2. Then set ~PinPoint's path to the ~UCAC2 directory, wherever it is.|
!USNO ~UCAC3 (not recommended)
This is a large catalog (almost 8 Gb) but you can download it in bits and pieces at night if needed. Get it from [[Centre de Données astronomiques de Strasbourg]] (CDS). Copy every single file to a directory on your system. Set the catalog type to ~UCAC3. In the ACP Preferences/~PinPoint tab, set your catalog path to the directory into which you copied the catalog files from CDS.
!USNO ~UCAC4
This is also a large catalog (about 8 Gb). It is available from the [[Centre de Données astronomiques de Strasbourg]] (CDS). The ~UCAC4 is implemented in ~PinPoint, ~ACPv7, and ~MaxImv6.
!Tycho-2
    Tycho-2 used to be available from the [[official Tycho-2 home]]. As of April 2011, the Tycho-2 catalog is no longer available in its original format. You can now download this catalog online from the [[DC-3 Tycho-2 Archive]]. It's 500+ ~MBytes. Copy all of the files in this directory as well as all subdirectories, preserving the subdirectory structure exactly, to a directory on your system or to a ~CD-ROM at the root. Set your catalog type to Tycho-2. Set your catalog path to the ~CD-ROM root or to the directory into which you copied the tree from the Tycho-2 home page. See the README.txt file at the root of the catalog data..
!NOMAD - an online catalog
    ~PinPoint 5 now support the use of NOMAD. This is set to retrieve reference stars over the internet. If you have an internet connection and are willing to accept longer plate-solving times, you can use the USNO NOMAD catalog via internet access. This is an outstanding catalog for plate solving. On a typical broadband connection, a moderately crowded half-degree field takes about 10-20 seconds to download. The great thing about this catalog is that you can use it immediately with no downloading of the catalog (if you have an internet connection). On the flip side, it slows your plate solves. See [[Recommended Star Catalogs]] for a description of this catalog.
!USNO B1.0 - online or on disk
    ~PinPoint 5 now support the use of the USNO B1.0. ~PinPoint can be set to retrieve reference stars over the internet, and it can also can be set to access a local disk-resident 80 Gigabyte catalog. See [[Recommended Star Catalogs]] for a description of this catalog.
!USNO ~SA2.0 (Special Use Only)
    This catalog has the bright stars deleted, so it is not that well suited for general use. The catalog is no longer available at ftp://ftp.nofs.navy.mil/usnosa/.
!USNO ACT (Obsolete)
    USNO recommends that you not use this catalog. It is not supported in ~PinPoint. Use the Tycho-2 catalog instead. Go to [[ad.usno.navy.mil/act/act.html]] to see the USNO recommendations. 
----
|!This is an HTML rendering of Microsoft's Windows Scripting Help File that is included with the ACP v8.1 software.|
| !Wait for it. |
{{borderless{
|[[Click here to open in a new browser tab|RefDocs/HelpFiles/Script56.html]]|
<html><div align="center" style="background-color:white"><iframe src ="RefDocs/HelpFiles/Script56.html" width="100%" align="center" height="600">< /></div></html>}}}
----
^^Copyright &copy; 2001, Microsoft Corporation^^
There's an extensive literature about WCS. Here are seven references that will tell you all you ever wanted to know.

*[[WCSTools: Image World Coordinate System Utilities]]
*[[Creating a Mosaic World Coordinate System]] - A recipe for determining and applying WCS.
*[[WCSTools Web page - package of programs and a library of utility subroutines]] - The "source" for the standard WCS code.
*[[FITS World Coordinate System]]
*[[FITS World Coordinate Systems - Calabretta]] - an interesting, up-to-date set of additional references about WCS.
*[[Goddard Space Flight Center web page all about FITS]]
*[[Catalogs Supported by WCS Tools]]
----
{{borderless{
|[[Click here to open in a new browser tab|http://ad.usno.navy.mil/act/act.html]]|
<html><div align="center"><iframe src ="http://ad.usno.navy.mil/act/act.html" width="100%" align="center" height="20">< /></div></html>}}}
----
{{borderless{
|[[Click here to open in a new browser tab|http://www.usno.navy.mil/USNO/astrometry/optical-IR-prod/ucac]]|
<html><div align="center"><iframe src ="http://www.usno.navy.mil/USNO/astrometry/optical-IR-prod/ucac" width="100%" align="center" height="600">< /></div></html>}}}
----
@@color:#fff;~~Copyright © 2008-<<today YYYY>>, Richard A. Berg, Washington, DC.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Selected pages Copyright © 2000-<<today YYYY>>, Robert B. Denny, Mesa, AZ~~@@
~~Commercial hardware/software packages mentioned herein are trademarked, registered or copyrighted by their respective companies or owners.~~
version.extensions.imageSize = {major: 1, minor: 1, revision: 0, date: new Date(2008,1,19)};

// replace standard handler for image formatter
// note: includes modifications for [[AttachFilePluginFormatters]] AND [[ImagePathPlugin]]
var f=config.formatters.findByField("name","image");
config.formatters[f].match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
config.formatters[f].lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](\([^,]*,[^\)]*\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
config.formatters[f].handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var XY=lookaheadMatch[3];
		var tooltip=lookaheadMatch[4];
		var src=lookaheadMatch[5];
		var link=lookaheadMatch[6];
		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.href=config.macros.attach.getAttachment(link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);
			addClass(e,"imageLink");
		}
		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right"; // FLOAT LEFT/RIGHT
		if(XY) { // CUSTOM SIZE with optional EVAL'ED width/height ({{...}},{{...}})
			var parts=XY.replace(/[\(\)]/g,'').split(","); var x=parts[0]; var y=parts[1];
			if (x.substr(0,2)=="{{") {
				try{img.style.width=eval(x.substr(2,x.length-4));}
				catch(e){displayMessage(e.description||e.toString())}
			} else img.style.width=x;

			if (y.substr(0,2)=="{{") {
				try{img.style.height=eval(y.substr(2,y.length-4));}
				catch(e){displayMessage(e.description||e.toString())}
			} else img.style.height=y;
		}
		if(tooltip) img.title = tooltip; // TOOLTIP
		// GET IMAGE SOURCE (get attachment or resolve fallback path as needed)
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			// Note: IE and Safari use onError to call resolvePath() only if initial lookup fails
			// (avoids security messages for initial filesystem access)... otherwise, attempt to
			// resolve the original path/file before initial rendering
			if (config.browser.isIE || config.browser.isSafari) {
				img.onerror=(function(){
					this.src=config.formatterHelpers.resolvePath(this.src,false);
					return false;
				});
			} else
				src=config.formatterHelpers.resolvePath(lookaheadMatch[5],true);
		}
		img.src=src; // RENDER IMAGE
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
}
<html>
<embed allowScriptAccess="never" 
src="RefDocs/newcountdown.swf?year=2015
&month=7
&day=1
&hour=17
&minute=0
&timezoneoffset=300
&occurrence=annual
&caption=Next Update
&dstbeguin=1268524800000
&dstend=1289088000000" 

width=320 
height=110 
wmode=transparent 
menu=false>
</embed>
</html>
{{borderless{
|[[Click here to open in a new browser tab|http://www.astro.ku.dk/~erik/Tycho-2/]]|
<html><div align="center"><iframe src ="http://www.astro.ku.dk/~erik/Tycho-2/" width="100%" align="center" height="600">< /></div></html>}}}
----
|!Available from the ACP archives|
* Click on the ~GSCInstall.exe link to download the file - it may take a while.
* Read the ~ReadMe.txt file.
{{borderless{
|[[Click here to open in a new browser tab|http://gsc.dc3.com]]|
<html><div align="center" style="background-color:white"><iframe src ="http://gsc.dc3.com" width="100%" align="center" height="600">< /></div></html>}}}
----
<<tiddlerTweaker>>