Configuration of the IAG 50cm
This is the configuration for the 50cm telescope at the Institute for Astrophysics and Geophysics in Göttingen. See here for more details.
The modules are distributed over two different computers, iag50srv
and iag50cam
. Autoslew is used as the
telescope software and is running on a third computer, together with an
ASCOM Alpaca Remote server for remote access.
All the configs are shown here without the comm
part and the environment details.
iag50srv
acquisition
Module for performing a fine-acquisition on target
1class: pyobs.modules.pointing.Acquisition
2
3# modules
4telescope: telescope
5camera: sbig6303e
6filters: sbig6303e
7
8# image settings
9filter_name: Clear
10binning: 2
11exposure_time: 2
12
13# log file
14log_file: /pyobs/acquisition.csv
15
16# tolerances
17max_offset: 7200
18tolerance: 10
19
20pipeline:
21 - class: pyobs.images.processors.detection.SepSourceDetection
22 - class: pyobs.images.processors.astrometry.AstrometryDotNet
23 url: ...
24 radius: 5
25 - class: pyobs.images.processors.offsets.AstrometryOffsets
26
27apply:
28 class: pyobs.utils.offsets.ApplyRaDecOffsets
29 max_offset: 7200
30
31vfs:
32 class: pyobs.vfs.VirtualFileSystem
33 roots:
34 cache:
35 class: pyobs.vfs.HttpFile
36 download: http://localhost:37075/
The
Acquisition
class is used for the acquisition module (line 1).It requires the name of the other modules to use, which are Telescope for the telescope, sbig6303e for the camera and the same for module for the filter wheel, since it is integrated into the camera (lines 4-6).
The camera settings for the acquisition images (lines 9-11).
A log file where all the offsets from the acquisitions are stored, can be useful for checking the pointing model (line 14).
Tolerances for the acquisiton: it succeeds if the telescope is closer than 10” to the target and fails if the offsets get larger than 7200”.
The pipeline defines steps performed on the images in order to get the offsets for the next step (lines 20-25):
SepSourceDetection
detects sources in the image.AstrometryDotNet
performs the astrometric calibration using a local astrometry.net server.AstrometryOffsets
uses the astronomy to calculate offsets for the next telescope move.
The offsets are applied via
ApplyRaDecOffsets
. It fails if the total offset gets larger than 7200” (lines 27-29).Finally, a VFS is defined with a root
cache
that points to the filecache HTTP cache server (lines 31-36) and is used for downloading the images from the camera.
autofocus
Module for performing an auto-focus series to determine the best focus
1class: pyobs.modules.focus.AutoFocusSeries
2
3# modules
4camera: sbig6303e
5focuser: focuser
6filters: sbig6303e
7
8# use absolute focus values instead of offsets
9offset: False
10
11# camera settings
12filter_name: Clear
13binning: 2
14
15# use projected stars
16series:
17 class: pyobs.utils.focusseries.ProjectionFocusSeries
18
19vfs:
20 class: pyobs.vfs.VirtualFileSystem
21 roots:
22 cache:
23 class: pyobs.vfs.HttpFile
24 download: http://localhost:37075/
The
AutoFocusSeries
class is used for the auto focus module (line 1).It requires the name of the other modules to use, which are focuser for the focus unit, sbig6303e for the camera and the same for module for the filter wheel, since it is integrated into the camera (lines 4-6).
The
offset
parameter defines, whether absolute focus values are used or offsets from a fixed value (line 9).Image settings (lines 12-13).
The actual focus series is done using the helper class
ProjectionFocusSeries
(lines 16-17).Finally, a VFS is defined with a root
cache
that points to the filecache HTTP cache server (lines 31-36) and is used for downloading the images from the camera.
dome
Module operating the dome
1class: pyobs_alpaca.AlpacaDome
2
3# Alpaca server
4server: xxx.xxx.xxx.xxx
5port: 11111
6
7# ASCOM device definition
8device_type: dome
9device: 0
10
11# Follow telescope on sky
12follow: telescope
13
14# Do not open on bad weather
15weather: weather
The
AlpacaDome
class is used for the dome module (line 1).IP and port for the connection are set (lines 4-5).
The ASCOM device type and number are given (lines 8-9).
AlpacaDome
inherits fromFollowMixin
, so it can automatically follow other devices, in this case the Telescope.
filecache
Module used for distributing images among the other modules
1class: pyobs.modules.utils.HttpFileCache
2
3port: 37075
4max_file_size: 200
HttpFileCache
provides a HTTP server that can be used for distributing files (line 1).It needs a port to run on (line 3).
The maximum file size is set to 200MB (line 4).
flatfield
Modules used for automatic flat-fielding
1class: pyobs.modules.flatfield.FlatField
2
3# modules
4telescope: telescope
5camera: sbig6303e
6filters: sbig6303e
7
8# log file
9log_file: /pyobs/flatfield.csv
10
11# definition of the flat fielder
12flat_fielder:
13 class: pyobs.utils.skyflats.FlatFielder
14 pointing:
15 class: pyobs.utils.skyflats.pointing.SkyFlatsStaticPointing
16 combine_binnings: False
17 functions:
18 1x1:
19 Clear: exp(-1.22421*(h+4.06676))
20 Red: exp(-1.13196*(h+2.88736))
21 Green: exp(-1.07774*(h+2.58413))
22 Blue: exp(-1.02646*(h+2.60224))
23 2x2:
24 Clear: exp(-0.99118*(h+4.66784))
25 Red: exp(-1.44869*(h+3.63067))
26 Green: exp(-1.23137*(h+3.37692))
27 Blue: exp(-1.13074*(h+3.47531))
28
29vfs:
30 class: pyobs.vfs.VirtualFileSystem
31 roots:
32 cache:
33 class: pyobs.vfs.HttpFile
34 download: http://localhost:37075/
35 upload: http://localhost:37075/
36 pyobs:
37 class: pyobs.vfs.LocalFile
38 root: /opt/pyobs/storage
The
FlatField
class is used for the flat-field module (line 1).It requires the name of the other modules to use, which are Telescope for the telescope, sbig6303e for the camera and the same for module for the filter wheel, since it is integrated into the camera (lines 4-6).
A log file is created containing the exposure times, which can help refine the functions for the exposure times (line 9).
The flat-fielding itself is done using the
FlatFielder
class (lines 12-13).The
pointing
keyword defines where to point in the sky, for whichSkyFlatsStaticPointing
is used (lines 14-15).The
combine_binning
flag is set toFalse
, so that thefunctions
(see below) need to include binnings (line 16).The functions for calculating the exposure time as a function of
h
(solar elevation in degrees) are defined, depending on the given filter and binning (lines 17-27).Finally, a VFS is defined with a root
cache
that points to the filecache HTTP cache server (lines 31-36).
focuser
Module operating the focus unit to focus the telescope
1class: pyobs_alpaca.AlpacaFocuser
2
3# Alpaca server
4server: xxx.xxx.xxx.xxx
5port: 11111
6
7# ASCOM device definition
8device_type: focuser
9device: 0
The
AlpacaFocuser
class is used for the focuser module (line 1).IP and port for the connection are set (lines 4-5).
The ASCOM device type and number are given (lines 8-9).
imagewatcher
Module for copying new images into the archive
1class: pyobs.modules.image.ImageWatcher
2
3# path to watch
4watchpath: /temp/
5
6# paths to copy to
7destinations:
8 - /archive/{FNAME}
9
10vfs:
11 class: pyobs.vfs.VirtualFileSystem
12 roots:
13 temp:
14 class: pyobs.vfs.LocalFile
15 root: /path/to/new/data
16 archive:
17 class: pyobs.vfs.ArchiveFile
18 url: ...
19 token: ...
The
ImageWatcher
class is used for uploading images to the archive (line 1).The module actively watches a path in the VFS, in which ImageWriter writes new images` (line 4).
Destination paths in the VFS are provided. Files are only deleted from the watchpath, if they have successfully been copied to all
destinations
(lines 7-8).The VFS defines the paths for the watchpath and all destinations (lines 10-19).
imagewriter
Module that watches for NewImageEvent
and writes images to disk
1class: pyobs.modules.image.ImageWriter
2sources: [sbig6303e]
3
4vfs:
5 class: pyobs.vfs.VirtualFileSystem
6 roots:
7 archive:
8 class: pyobs.vfs.LocalFile
9 root: /path/to/new/data
10 cache:
11 class: pyobs.vfs.HttpFile
12 download: http://localhost:37075/
The
ImageWriter
class is used for writing images to disk (line 1).Only images from the given sources are handled (line 2).
The VFS defines a path for
/cache/
, which are the images coming from the camera, and/archive/
, to which it stores the images.
pointing
Module that takes images on various position on the sky for creating a pointing model
1class: pyobs_iag50.Pointing
2
3# module to use
4acquisition: acquisition
5
6# log file
7log_file: /pyobs/pointing.poi
8
9# grid config
10alt_range: [20., 85.]
11az_range: [5., 355.]
12dec_range: [-85., 85.]
13
14vfs:
15 class: pyobs.vfs.VirtualFileSystem
16 roots:
17 pyobs:
18 class: pyobs.vfs.LocalFile
19 root: /opt/pyobs/storage
The custom class
pyobs_iag50.Pointing
(inherits fromPointingSeries
) is used for the pointing module (line 1).It requires the name of an acquisition module (line 4).
A log file is written, which can directly be used by Autoslew to create a new pointing model (line 7).
The grid is defined in ranges, default values are used for the number of points to create, see
PointingSeries
for details (lines 10-12).A VFS is used to store the log file (lines 14-19).
robotic
Module for full robotic mode
1class: pyobs.modules.robotic.Mastermind
2
3schedule:
4 class: pyobs.robotic.lco.LcoTaskSchedule
5 url: ...
6 token: ...
7 site: ...
8
9runner:
10 class: pyobs.robotic.TaskRunner
11 scripts:
12 BIAS:
13 class: pyobs.robotic.lco.scripts.LcoDefaultScript
14 camera: sbig6303e
15 DARK:
16 class: pyobs.robotic.lco.scripts.LcoDefaultScript
17 camera: sbig6303e
18 EXPOSE:
19 class: pyobs.robotic.lco.scripts.LcoDefaultScript
20 telescope: telescope
21 filters: sbig6303e
22 camera: sbig6303e
23 roof: dome
24 acquisition: acquisition
25 autoguider: autoguider
26 REPEAT_EXPOSE:
27 class: pyobs.robotic.lco.scripts.LcoDefaultScript
28 telescope: telescope
29 filters: sbig6303e
30 camera: sbig6303e
31 roof: dome
32 acquisition: acquisition
33 autoguider: autoguider
34 AUTO_FOCUS:
35 class: pyobs.robotic.lco.scripts.LcoAutoFocusScript
36 telescope: telescope
37 filters: sbig6303e
38 camera: sbig6303e
39 roof: dome
40 autofocus: autofocus
41 SCRIPT:
42 class: pyobs.robotic.lco.scripts.LcoScript
43 scripts:
44 skyflats:
45 class: pyobs.robotic.scripts.SkyFlats
46 roof: dome
47 telescope: telescope
48 flatfield: flatfield
49 combine_binnings: False
50 readout:
51 1x1: 19.6918
52 2x2: 8.4241
53 3x3: 5.4810
54 functions:
55 1x1:
56 Clear: exp(-1.22421*(h+4.06676))
57 Red: exp(-1.13196*(h+2.88736))
58 Green: exp(-1.07774*(h+2.58413))
59 Blue: exp(-1.02646*(h+2.60224))
60 2x2:
61 Clear: exp(-0.99118*(h+4.66784))
62 Red: exp(-1.44869*(h+3.63067))
63 Green: exp(-1.23137*(h+3.37692))
64 Blue: exp(-1.13074*(h+3.47531))
65 priorities:
66 class: pyobs.utils.skyflats.priorities.ArchiveSkyflatPriorities
67 archive:
68 class: pyobs.utils.archive.PyobsArchive
69 url: ...
70 token: ...
71 site: ...
72 instrument: kb03
73 filter_names: [ 'Clear', 'Red', 'Green', 'Blue' ]
74 binnings: [ 1, 2 ]
The class
Mastermind
provides the functionality for the full robotic mode (line 1).It requires a schedule to fetch its tasks from. Since we use the LCO observation portal, an object of type
LcoTaskSchedule
is used for this. The parameters given are for the connection to the portal (lines 3-7).The actual task runner is
TaskRunner
, which is based on scripts that handle different kinds of request. For every type a class is given to handle it (mostlyLcoDefaultScript
) together with all the modules that this class needs to do its job (lines 9-74).
scheduler
Module for calculating the schedule
1class: pyobs.modules.robotic.Scheduler
2
3# which twilight to use
4twilight: nautical
5
6# estimated time of scheduler run
7safety_time: 600
8
9tasks:
10 class: pyobs.robotic.lco.LcoTaskArchive
11 url: ...
12 token: ...
13 instrument_type: ...
14
15schedule:
16 class: pyobs.robotic.lco.LcoTaskSchedule
17 url: ...
18 token: ...
19 site: ...
20 enclosure: ...
21 telescope: ...
22 instrument: ...
23 instrument_type: ...
The class
Scheduler
calculates the schedule to be used by the robotic module (line 1).The used definition of twilight is used to determine, in which time frame to actually schedule tasks, can be
nautical
with sun elevation of -12 degrees orastronomical
at -18 degrees (line 4).The
safety_time
is the estimated maximum number of seconds that the scheduler will run. That means that the scheduler will always only schedule tasks starting atnow+safety_time
(line 7).A task archive is needed to fetch schedulable tasks from, in this case handled by
LcoTaskArchive
(lines 9-13).Finally, the scheduler needs to write the calculated schedule somewhere, which in this case is an object of type
LcoTaskSchedule
(lines 15-23).
sfag
Module that provides the science frame auto-guiding (sfag)
1class: pyobs.modules.pointing.ScienceFrameAutoGuiding
2
3# modules
4telescope: telescope
5camera: sbig6303e
6
7# config
8max_exposure_time: 180
9min_interval: 20
10max_interval: 200
11max_offset: 600
12
13# log file
14log_file: /pyobs/autoguiding.csv
15
16pipeline:
17 - class: pyobs.images.processors.offsets.ProjectedOffsets
18
19apply:
20 class: pyobs.utils.offsets.ApplyRaDecOffsets
21 min_offset: 1
22
23vfs:
24 class: pyobs.vfs.VirtualFileSystem
25 roots:
26 cache:
27 class: pyobs.vfs.HttpFile
28 download: http://localhost:37075/
29 pyobs:
30 class: pyobs.vfs.LocalFile
31 root: /opt/pyobs/storage
The class
ScienceFrameAutoGuiding
performs auto-guiding on images of the science camera (line 1).It requires the names of the telescope (Telescope) and the camera (sbig6303e) modules (lines 4-5).
The maximum exposure time of images to use for auto-guiding is defined as well as a min/max interval in seconds between offsets and a maximum offset to go (lines 8-11).
A log file is written with all auto-guiding offsets (line 14).
The pipeline is defined to calculate offsets, in this case based on
ProjectedOffsets
(lines 16-17).The determined offsets are applied using
ApplyRaDecOffsets
, with a minimum offset defined (lines 19-21).A VFS is used to catch the images from the camera and for storing the log (lines 23-31).
startup
Module that opens dome and initializes telescope on good weather
1class: pyobs.modules.utils.Trigger
2
3triggers:
4 - event: pyobs.events.GoodWeatherEvent
5 module: dome
6 method: init
7 - event: pyobs.events.RoofOpenedEvent
8 module: telescope
9 method: init
The class
Trigger
provides a simple trigger on events (line 1).Two triggers are defined:
On a
GoodWeatherEvent
, the dome is opened via the dome module (lines 4-6).On a
RoofOpenedEvent
, the telescope is initialized via the Telescope module (lines 7-9).
telegram
A module for communicating with pyobs via the Telegram app
1class: pyobs.modules.utils.Telegram
2token: ...
3password: ...
The
Telegram
class is used for the Telegram connection and requires a token and a password (lines 1-3).
telescope
Module operating the telescope
1class: pyobs_alpaca.AlpacaTelescope
2
3# Alpaca server
4server: xxx.xxx.xxx.xxx
5port: 11111
6
7# ASCOM device definition
8device_type: telescope
9device: 0
10
11# other modules
12wait_for_dome: dome
13weather: weather
14
15# additional FITS headers
16fits_headers:
17 'TEL-FOCL': [3369.0, 'Focal length of telescope [mm]']
18 'OBSERVAT': ['Goettingen', 'Location of telescope']
19 'ORIGIN': ['IAG', 'Organization responsible for the data']
20 'TEL-AEFF': [502.0, 'Telescope effective aperture [mm]']
21 'TEL-APER': [514.8, 'Telescope circular aperture [mm]']
22 'TELESCOP': ['IAG50', 'Name of telescope']
23
24# namespace for fits
25fits_namespaces:
26 sbig6303e:
27 asi071mc: ['OBSERVAT', 'ORIGIN', 'SITEID', 'TEL-ALT', 'TEL-AZ', 'TEL-RA', 'TEL-DEC', 'RA', 'DEC', 'ALTOFF',
28 'AZOFF', 'CRVAL1', 'CRVAL2', 'AIRMASS', 'TEL-ZD', 'MOONDIST', 'MOONALT', 'MOONFRAC', 'SUNDIST', 'SUNALT']
The
AlpacaTelescope
class is used for the telescope module (line 1).IP and port for the connection are set (lines 4-5).
The ASCOM device type and number are given (lines 8-9).
The module waits for the dome module after movements and consults the Weather module about the current weather (lines 12-13).
Additional static FITS headers are provided (lines 16-22).
FITS namespaces for other modules providing FITS headers are given:
weather
Module that provides current weather information
1class: pyobs.modules.weather.Weather
2url: ...
In this case, the
Weather
class is used, which connects to a running instance of pyobs-weather (lines 1-2).
iag50cam
sbig6303e
Module for operating a SBIG6303e camera
1class: pyobs_sbig.Sbig6303eCamera
2
3# temperature setpoint
4setpoint: -10
5
6# file naming
7filenames: /cache/iag50cm-kb03-{DAY-OBS|date:}-{FRAMENUM|string:04d}-{IMAGETYP|type}00.fits
8
9# additional fits headers
10fits_headers:
11 INSTRUME: ['kb03', 'Name of instrument']
12 'DET-PIXL': [0.009, 'Size of detector pixels (square) [mm]']
13 'DET-NAME': ['KAF-6303E', 'Name of detector']
14 'DET-RON': [13.5, 'Detector readout noise [e-]']
15 'DET-SATU': [100000, 'Detector saturation limit [e-]']
16 'DET-DARK': [0.3, 'Detector dark current [e-/s]']
17 'TELID': ['0m5', 'ID for telescope']
18 'SITEID': ['iag50cm', 'ID of site.']
19
20# opto-mechanical centre
21centre: [1536.0, 1024.0]
22
23# rotation (east of north)
24rotation: -1.76
25flip: True
26
27# filter wheel
28filter_wheel: AUTO
29filter_names: [Red, Green, Blue, Clear, Halpha]
30
31vfs:
32 class: pyobs.vfs.VirtualFileSystem
33 roots:
34 cache:
35 class: pyobs.vfs.HttpFile
36 upload: http://iag50srv:37075/
The
Sbig6303eCamera
class is used for connecting to the camera (line 1).The temperature is set to -10 degrees C (line 4).
The filenames for the images are create from a template that is filled from the FITS header (line 7).
Additional static FITS headers are provided (lines 10-18).
The opti-mechanic centre of the camera is provided (line 21).
The rotation is given and whether the image must be flipped (lines 24-25).
The names of the filters in the filter wheel are defined (lines 28-29).
A VFS is used to store the images.
asi071mc
Module for operating a ZWO ASI071MC Pro camera
1class: pyobs_asi.AsiCoolCamera
2camera: ZWO ASI071MC Pro
3
4# file naming
5filenames: /cache/iag50cm-sz01-{DAY-OBS|date:}-{FRAMENUM|string:04d}-{IMAGETYP|type}00.fits
6
7# additional fits headers
8fits_headers:
9 INSTRUME: ['sz01', 'Name of instrument']
10 'DET-PIXL': [0.00478, 'Size of detector pixels (square) [mm]']
11 'DET-NAME': ['SONY IMX071', 'Name of detector']
12 'DET-RON': [2.3, 'Detector readout noise [e-]']
13 'DET-SATU': [46000, 'Detector saturation limit [e-]']
14 'TELID': ['0m1', 'ID for telescope']
15 'SITEID': ['goe', 'ID of site.']
16 'TEL-FOCL': [770.0, 'Focal length of telescope [mm]']
17 'OBSERVAT': ['Goettingen', 'Location of telescope']
18 'ORIGIN': ['IAG', 'Organization responsible for the data']
19 'TEL-AEFF': [110.0, 'Telescope effective aperture [mm]']
20 'TEL-APER': [110.8, 'Telescope circular aperture [mm]']
21 'TELESCOP': ['IAG50GUIDER', 'Name of telescope']
22
23# opto-mechanical centre
24centre: [2472.0, 1642.0]
25
26# rotation (east of north)
27rotation: 3.06
28flip: True
29
30vfs:
31 class: pyobs.vfs.VirtualFileSystem
32 roots:
33 cache:
34 class: pyobs.vfs.HttpFile
35 upload: http://iag50srv:37075/
Basically the same as the sbig6303e module, but using the
AsiCoolCamera
class for ZWO ASI cameras.