wiki:PublicPages/MayallZbandLegacy/NotesforObservers/MosBot

Version 20 (modified by Dustin Lang, 8 years ago) (diff)

--

Mosbot

Mosbot is a python program that tries to adjust our observing scripts to adapt to changing conditions through the night.

Run it by logging in to the mzls@mayall-idl machine and then running:

cd ~/obsbot
python mosbot.py <pass1.json> <pass2.json> <pass3.json>

You will need to keep that window open, because you want mosbot to keep running all night. pass{1,2,3}.json are the 'plan' or 'JSON' files that Arjun should have given you; they contain lists of exposures we want to take depending on what the conditions are doing. It is probably most convenient to run mosbot from a Terminal window on the mayall-2 display. You don't need to read any of the output it produces, but you should check periodically that it is still running; the code is under development and some bugs remain.

Mosbot Description

Mosbot does two things:

  • On startup:
    • reads the pass{1,2,3}.json files given on the command line
    • discards exposures that are meant to be taken before the current time
    • writes an "overall" script for the night, ~/exec/mosbot/tonight.sh
    • writes "default" mini scripts for each exposure
  • Then:
    • waits for new images to appear in the $MOS3_DATA directory
    • when a new image appears:
      • measures sky, seeing, and transparency from the image
      • decides which pass number to observe in the upcoming exposures
      • computes exposure times for the upcoming exposures
      • overwrites the mini scripts for these upcoming exposures

Mosbot Options

  • --rawdata=RAWDATA Directory to monitor for new images; $MOS3_DATA by default
  • --script=SCRIPTFN Write top-level shell script, default is ~/exec/mosbot/tonight.sh
  • --no-write-script
  • --ext=EXT Extension to read for computing observing conditions, default im4
  • --tiles=TILES Observation status file, default obstatus/mosaic-tiles_obstatus.fits
  • --pass=PASSNUM Set default pass number (1/2/3), default 2
  • --exptime=EXPTIME Set default exposure time, default is to use whatever exposure time is in the JSON files, usually 80 sec
  • --no-cut-past Do not cut tiles that were supposed to be observed in the past
  • -h, --help - show this list

To Stop observing with mosbot (./tonight.sh)
On the mosaic3 computer where you are running the NOCS script:

   touch ~/exec/mosbot/quit

After each exposure, the tonight.sh script checks for the existence of the file ~/exec/mosbot/quit. If that file exists, the script will quit after a readout (without slewing). This should ensure that we don't lose any data, and is the way the tonight.sh script should be stopped. (It will delete the quit file just before it quits.) 'This doesn't stop mosbot on mayall-idl'.

To Restrict to Pass 2 and/or 3

If you have started mosbot in all three passes (i.e., using python mosbot.py pass1.json pass2.json pass3.json as above) and now want to restrict the choice of passes because, say, the weather has worsened and is highly variable, without terminating the tonight.sh script, then

  touch ~/exec/mosbot/forcepass2
or
  touch ~/exec/mosbot/forcepass3
to return to pass1,
  touch ~/exec/mosbot/forcepass1

OR, if you want to forbid pass 1, but allow Mosbot to choose between pass 2 or 3, you can create the file:
  touch ~/exec/mosbot/nopass1


After each exposure, the `tonight.sh` script checks for the existence
of the files `~/exec/mosbot/forcepass1`, `~/exec/mosbot/forcepass2`, `~/exec/mosbot/forcepass3`, in that order.
If one of these files exists, Mosbot will choose that pass for the upcoming tiles.
'''Delete these files if you don't
want to force a certain pass. They will not be deleted automatically
when restarting mosbot or running `tonight.sh`.'''

== Comments:==

- Mosbot by default starts with PASS 2 observations.  And by default,
  we set all the exposure times to our minimum exposure time of 80
  seconds.


- THEREFORE, if you kill mosbot after it has written out the
  `tonight.sh` script, you will run pass 2 with short exposures all
  night long.  This is almost certainly not what we want to happen!!

  It will write default exposure scripts for the whole night.  By default these will be pass 2, using the exposure
  times given in the JSON files -- usually 80 seconds.  You can change the default pass number with `--pass`, and
  the default exposure time with `--exptime`.  For example, if you are restarting in the middle of the night and
  you know the conditions are pass 3, you might want to do this.  These default exposures are what will run, at
  least until the first image is taken and appears on disk.  After that, Mosbot will be choosing the pass and
  exposure time.



- On the other hand, if you need to run a focus sequence, restart the
  MOSAIC control software, or otherwise stop observing, you can just
  ctrl-C the mosbot.py script.  HOWEVER, you should re-run the mosbot.py
  script to generate a new `tonight.sh` script before you re-start observing.

- **The `tonight.sh` script is not smart.  If you kill and re-start
  `tonight.sh`, you will start from the beginning of the night (or the
  last time mosbot was run).  If you have to stop the `tonight.sh`
  script, PLEASE re-run mosbot to regenerate an appropriate
  `tonight.sh` script. 

   **Verify that the quit file has been removed before restarting `tonight
.sh`.**

- The `tonight.sh` script writes to a file
  `~/exec/mosbot/seqnum.txt` to indicate which exposure it is
  currently running.  The `mosbot.py` script reads that file to figure
  out which upcoming exposures it should update.  Mosbot by default
  writes exposures 1 through 10 ahead of the current sequence number.

- Each exposure is split into two scripts.  For example, exposure 3
  happens in `expose-3.sh`, which takes the exposure, and then
  `slewread-4.sh` slews to exposure number 4 while reading out
  exposure 3.

==About git: ==

- the `~/obsbot` directory is a git checkout of the repository:
  https://github.com/legacysurvey/obsbot
- There is a "MzLS Observer" github account set up to log in with an
  ssh key, so you should be able to *git commit* and *git push* any code
  changes without having to know any passwords.