Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
393554e
sequencer target_qc_check ensures nexp >= 1
astronomerdave Jan 30, 2026
52c3792
adds capability of disabling camerad controllers, while leaving
astronomerdave Jan 30, 2026
738cf72
fixes bug: controller[dev] map wasn't being created
astronomerdave Jan 30, 2026
d98d199
bug fix Interface::parse_controller_config
astronomerdave Jan 30, 2026
794cbe8
gets latest camerad.cfg.in from main
astronomerdave Jan 30, 2026
54b589e
fixes bug in Interface::image_size
astronomerdave Jan 30, 2026
6c0175e
additional checks for inactive controllers
astronomerdave Jan 30, 2026
9882fbb
implements configurable activation commands per controller
astronomerdave Jan 30, 2026
c987018
updates camerad.cfg.in
astronomerdave Jan 30, 2026
1f49d53
updates CAL_TARGET configuration table in sequencerd.cfg.in to
astronomerdave Jan 31, 2026
ea20b72
adds minimum to compile with zmq pub-sub
astronomerdave Feb 2, 2026
ddbece5
more to minimum pubsub
astronomerdave Feb 2, 2026
f96c673
bug fix AstroCam::Interface::init_pubsub
astronomerdave Feb 2, 2026
9d1eaf3
camerad now uses ZMQ to properly publish "is exposure ready" and
astronomerdave Feb 2, 2026
780ef7f
restore Config files from main branch
astronomerdave Feb 2, 2026
43f39d8
fixes bug in Sequencer::CalibrationTarget::configure
astronomerdave Feb 3, 2026
63a7ef3
fixes deadlock and sequencer subscribes to camerad
astronomerdave Feb 3, 2026
4f5a991
unify can_expose variable between camerad-sequencerd
astronomerdave Feb 3, 2026
af3ffa5
sequencer sends activate states from CAL_ table to camerad
astronomerdave Feb 3, 2026
77d73f5
Merge remote-tracking branch 'origin/main' into DH/sequencer-calib-work
astronomerdave Feb 3, 2026
e8ad93e
Add acquisition automation modes with repeat target skip logic
cfremling Feb 8, 2026
ea2c80f
Add C++ Qt database GUI for target management
cfremling Feb 8, 2026
a11b292
Add seq-progress GUI with full ZMQ progress tracking
cfremling Feb 8, 2026
c64d90b
Fix seq_progress_gui build: add utils directory to include paths
cfremling Feb 8, 2026
3143833
Fix seq_progress_gui linker errors: correct library link order
cfremling Feb 8, 2026
b170973
Fix calib_set() to work with reference-returning get_info()
cfremling Feb 8, 2026
d3e6fb6
Fix ngps_db_gui MySQL paths to match main build system
cfremling Feb 8, 2026
771c2de
Fix ngps_db_gui Qt5 compatibility: replace QVector with QList
cfremling Feb 8, 2026
f24ef13
Add ACAM_GUIDING status and fix offset_goal to preserve guiding
cfremling Feb 8, 2026
71c058d
Fix clearlasttarget to also clear coordinates for full re-acquisition
cfremling Feb 8, 2026
ae8dd5a
Fix acquisition skipping logic to require valid last coordinates
cfremling Feb 8, 2026
824e5a1
Remove is_repeat_target acquisition skipping logic from acqmode 2/3
cfremling Feb 8, 2026
f8a5c9d
Make target_offset guiding-safe via acamd offsetgoal (from PR #390)
cfremling Feb 8, 2026
1f19d41
Change acquisition slit width from 0.5 to 0.4 arcsec
cfremling Feb 8, 2026
7dccbf0
Enable xterm display for fine-tuning step
cfremling Feb 8, 2026
5736519
Replace xterm fine-tune display with simple log file
cfremling Feb 8, 2026
104e0d0
Rename ACQ_FINE_TUNE_XTERM to ACQ_FINE_TUNE_LOG
cfremling Feb 8, 2026
144c9e1
Add detailed exit code logging for fine-tune process
cfremling Feb 8, 2026
4cd1aa8
Add errno logging for waitpid failure in fine-tune
cfremling Feb 8, 2026
bb05eea
Increase ACQUIRE_TIMEOUT from 90 to 120 seconds
cfremling Feb 8, 2026
7247afd
Fix fine-tune waitpid failure by temporarily restoring SIGCHLD handler
cfremling Feb 8, 2026
a630f0f
Fix fine-tune progress publishing for seq-progress GUI
cfremling Feb 8, 2026
03bce89
Add offset support to acqmode 2 with same behavior as acqmode 3
cfremling Feb 8, 2026
ccf763f
Set ACQ_OFFSET_SETTLE to 3 seconds
cfremling Feb 8, 2026
9065b32
Add offset value display to seq-progress GUI
cfremling Feb 8, 2026
7655d9d
Track and display multi-exposure (NEXP>1) progress in seq-progress GUI
cfremling Feb 8, 2026
15a8865
Move ngps_acq log to data directory with date stamp
cfremling Feb 8, 2026
433c0e3
Refine seq-progress exposure and offset display
cfremling Feb 8, 2026
59edca3
Fix exposure progress parsing and remove duplicate status
cfremling Feb 8, 2026
450bfdd
Fix EXPTIME percentage parsing - use provided percent value
cfremling Feb 8, 2026
51c55a1
Add smoothing to exposure progress percentage
cfremling Feb 8, 2026
064ec31
Add exposure percentage to EXPOSURE label under progress bar
cfremling Feb 8, 2026
6e1b616
Show exposure progress even at 0% and add frame count
cfremling Feb 8, 2026
2373b2d
Add debug logging for EXPTIME message parsing
cfremling Feb 8, 2026
af3843d
Remove exposure percentage display, keep frame count only
cfremling Feb 8, 2026
df1a98c
Re-enable exposure percentage with extensive debug logging
cfremling Feb 8, 2026
055e075
Add debug logging for UDP listener initialization
cfremling Feb 8, 2026
cf43d95
Republish EXPTIME to ZMQ for seq-progress (ZMQ-only mode)
cfremling Feb 8, 2026
7d7cd3f
Hard-code NGPS_ROOT in seq-progress script
cfremling Feb 8, 2026
fb5e57f
Auto-detect NGPS_ROOT from script location
cfremling Feb 8, 2026
1e56fb8
Export NGPS_ROOT so seq_progress_gui can find acamd.cfg
cfremling Feb 8, 2026
0c598e3
Add contextual continue button and red instruction in seq-progress GUI
cfremling Feb 9, 2026
b2a1537
Zero TCS offsets (native z) before applying target offset in acqmode 2/3
cfremling Feb 9, 2026
c8ce15c
Set FD_CLOEXEC on listening sockets to prevent fd inheritance by chil…
cfremling Feb 9, 2026
9fc708a
Display active acqmode in seq-progress GUI
cfremling Feb 9, 2026
c97d608
Publish acqmode updates for seq-progress and fix fine-tune log path c…
cfremling Feb 9, 2026
6caa85a
Make seq-progress user button labels action-specific
cfremling Feb 10, 2026
456dcaf
Fix USER gate labeling with polled ZMQ action state
cfremling Feb 11, 2026
f97c905
Move acquisition fine-tune to slicecamd autoacq
cfremling Feb 11, 2026
1450b7c
Remove CLOEXEC on listening socket
cfremling Feb 11, 2026
3eac78c
Update default AUTOACQ args profile
cfremling Feb 11, 2026
4d8e1f5
Sync seq-progress GUI with ZMQ-only version
cfremling Feb 11, 2026
b81e363
Add fine-tune timeout and autoacq faint-target rescue
cfremling Feb 11, 2026
0730e86
Remove tools/ngps_db_gui from auto-acq branch
cfremling Feb 11, 2026
ed1d829
Simplify seq-progress exposure percent handling
cfremling Feb 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions Config/camerad.cfg.in
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ ASYNCGROUP=239.1.1.234 # or set to NONE if not using ASYNC messaging
DAEMON=no # run as a daemon? {yes,no}
PUBLISHER_PORT="tcp://127.0.0.1:@CAMERAD_PUB_PORT@" # my zeromq pub port

# Message pub/sub
# PUB_ENDPOINT=tcp://127.0.0.1:<PORT>
# SUB_ENDPOINT=tcp://127.0.0.1:<PORT>
#
PUB_ENDPOINT="tcp://127.0.0.1:@MESSAGE_BROKER_SUB_PORT@"
SUB_ENDPOINT="tcp://127.0.0.1:@MESSAGE_BROKER_PUB_PORT@"

# -----------------------------------------------------------------------------
# The following are for simulated ARC controllers
ARCSIM_NUMDEV=0
Expand Down Expand Up @@ -136,6 +143,17 @@ CONSTKEY_EXT=(SPECTPART WHOLE) # fixed only because we're writing single-channe
#
USERKEYS_PERSIST=yes

# ACTIVATE_COMMANDS=(CHAN CMD [, CMD, CMD ...])
# commands sent to activate channel after de-activation
# CHAN is space-delimited from a comma-delimited list of one or more commands
# and must have been first configured by CONTROLER=
# commands that contain a space must be enclosed by double quotes
#
ACTIVATE_COMMANDS=(I PON, ERS 1000 1000, EPG 500, CLR)
ACTIVATE_COMMANDS=(R PON, ERS 1000 1000, EPG 500, CLR)
ACTIVATE_COMMANDS=(G PON, ERS 1000 1000, EPG 500, CLR)
ACTIVATE_COMMANDS=(U PON, CLR)

# -----------------------------------------------------------------------------
# TELEM_PROVIDER=( <name> <port> )
#
Expand Down
39 changes: 23 additions & 16 deletions Config/sequencerd.cfg.in
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ CALIB_DOOR__SHUTDOWN=close
# Virtual Slit Mode slit offset positions
# units are arcseconds
#
VIRTUAL_SLITW_ACQUIRE=0.5 # slit width during acquire
VIRTUAL_SLITW_ACQUIRE=0.4 # slit width during acquire
VIRTUAL_SLITO_ACQUIRE=-3.0 # slit offset for acquiring target
VIRTUAL_SLITO_EXPOSE=3.0 # slit offset for science exposure

Expand Down Expand Up @@ -155,33 +155,40 @@ TCS_PREAUTH_TIME=10 # seconds before end of exposure to notify

# ACAM Target acquisition
#
ACQUIRE_TIMEOUT=90 # seconds before ACAM acquisition sequence aborts on failure to acquire (REQUIRED!)
ACQUIRE_TIMEOUT=120 # seconds before ACAM acquisition sequence aborts on failure to acquire (REQUIRED!)
ACQUIRE_RETRYS=5 # max number of retrys before acquisition fails (optional, can be left blank to disable)
ACQUIRE_OFFSET_THRESHOLD=0.5 # computed offset below this threshold (in arcsec) defines successful acquisition
ACQUIRE_MIN_REPEAT=2 # minimum number of sequential successful acquires
ACQUIRE_TCS_MAX_OFFSET=60 # the maximum allowable offset sent to the TCS, in arcsec
ACQ_AUTOMATIC_MODE=1 # 1=legacy, 2=semi-auto, 3=auto
ACQ_FINE_TUNE_CMD=ngps_acq # command to run after guiding for final fine tune
ACQ_FINE_TUNE_LOG=1 # log fine tune output to /data/<datedir>/logs/ngps_acq_<datedir>.log (0/1)
ACQ_OFFSET_SETTLE=3 # seconds to wait after automatic offset

# Calibration Settings
# CAL_TARGET=(name caldoor calcover lampthar lampfear lampbluc lampredc lolamp hilamp mod1 mod2 ... mod6)
# CAL_TARGET=(name caldoor calcover U G R I lampthar lampfear lampbluc lampredc lolamp hilamp mod1 mod2 ... mod6)
#
# where name must be "DEFAULT" or start with "CAL_"
# caldoor = open | close
# calcover = open | close
# lamp* = on | off
# mod* = on | off
# for a total of 15 required parameters
# U,G,R,I = on | off # indicates which channels to enable/disable
# lamp* = on | off # lamp power
# mod* = on | off # lamp modulator
# for a total of 19 required parameters
# name=SCIENCE defines science target operation
#
# name door cover thar fear bluc redc llmp hlmp mod1 mod2 mod3 mod4 mod5 mod6
CAL_TARGET=(CAL_THAR open close on off off off off off off off off off off on )
CAL_TARGET=(CAL_FEAR open close off on off off off off on off off off off off)
CAL_TARGET=(CAL_REDCONT open close off off off on off off off off off on off off)
CAL_TARGET=(CAL_BLUCONT open close off off on off off off off off off off on off)
CAL_TARGET=(CAL_ETALON open close off off off on off off off off on off off off)
CAL_TARGET=(CAL_DOME close open off off off off off on off off off off off off)
CAL_TARGET=(CAL_BIAS close close off off off off off off off off off off off off)
CAL_TARGET=(CAL_DARK close close off off off off off off off off off off off off)
CAL_TARGET=(SCIENCE close open off off off off off off off off off off off off)
# name door cover U G R I thar fear bluc redc llmp hlmp mod1 mod2 mod3 mod4 mod5 mod6
CAL_TARGET=(CAL_THAR open close on on on on on on on on off off off off off off off on )
CAL_TARGET=(CAL_FEAR open close on on on on on on on on off off on off off off off off)
CAL_TARGET=(CAL_THAR_UG open close on on off off on on on on off off off off off off off on )
CAL_TARGET=(CAL_FEAR_UG open close on on off off on on on on off off on off off off off off)
CAL_TARGET=(CAL_CONTR open close on on on on on on on on off off off off off on off off)
CAL_TARGET=(CAL_CONTB open close on on on on on on on on off off off off off off on off)
CAL_TARGET=(CAL_DOME close open on on on on off off off off off on off off off off off off)
CAL_TARGET=(CAL_DOME_UG close open on on off off off off off off off on off off off off off off)
CAL_TARGET=(CAL_BIAS close close on on on on off off off off off off off off off off off off)
CAL_TARGET=(CAL_DARK close close on on on on off off off off off off off off off off off off)
CAL_TARGET=(SCIENCE close open on on on on off off off off off off off off off off off off)

# miscellaneous
#
Expand Down
3 changes: 3 additions & 0 deletions Config/slicecamd.cfg.in
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ SUB_ENDPOINT="tcp://127.0.0.1:@MESSAGE_BROKER_PUB_PORT@"
#
TCSD_PORT=@TCSD_BLK_PORT@
ACAMD_PORT=@ACAMD_BLK_PORT@
# AUTOACQ_ARGS defines defaults for slicecamd in-process ngps_acq.
# This line intentionally includes all supported ngps_acq options.
AUTOACQ_ARGS="--frame-mode stream --input /tmp/slicecam.fits --goal-x 150.0 --goal-y 115.5 --bg-x1 80 --bg-x2 165 --bg-y1 30 --bg-y2 210 --pixel-origin 1 --max-dist 40 --snr 3 --min-adj 4 --centroid-hw 4 --centroid-sigma 1.2 --loop 1 --cadence-sec 4 --prec-arcsec 0.4 --goal-arcsec 0.3 --gain 1.0 --dry-run 0 --tcs-set-units 0 --verbose 1 --debug 1 --use-putonslit 1 --adaptive 1 --adaptive-bright 40000 --adaptive-bright-goal 10000"

# ANDOR=( <name> [emulate] <sn> <scale> <hflip> <vflip> <rot> <temp> <hbin> <vbin> )
# For each slice camera specify:
Expand Down
2 changes: 1 addition & 1 deletion DSP
Submodule DSP updated 0 files
13 changes: 7 additions & 6 deletions acamd/acam_interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1453,6 +1453,11 @@ namespace Acam {
this->motion.get_current_coverpos() :
"not_connected" );

std::string mode = this->target.acquire_mode_string();
jmessage_out["ACAM_ACQUIRE_MODE"] = mode;
jmessage_out["ACAM_GUIDING"] = ( mode == "guiding" );
jmessage_out["ACAM_ACQUIRING"] = ( mode == "acquiring" );

try {
this->publisher->publish( jmessage_out );
}
Expand Down Expand Up @@ -5522,12 +5527,8 @@ logwrite( function, message.str() );
retstring = message.str();

if ( this->target.acquire_mode == Acam::TARGET_GUIDE ) {
this->target.acquire_mode = Acam::TARGET_ACQUIRE;
this->target.nacquired = 0;
this->target.attempts = 0;
this->target.sequential_failures = 0;
this->target.timeout_time = std::chrono::steady_clock::now()
+ std::chrono::duration<double>(this->target.timeout);
// Keep GUIDE mode; just reset filtering so the new goal takes effect quickly.
this->target.reset_offset_params();
}

return NO_ERROR;
Expand Down
7 changes: 7 additions & 0 deletions camerad/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,11 @@ target_include_directories(${INTERFACE_TARGET} PUBLIC ${INTERFACE_INCLUDES})
find_library(CCFITS_LIB CCfits NAMES libCCfits PATHS /usr/local/lib)
find_library(CFITS_LIB cfitsio NAMES libcfitsio PATHS /usr/local/lib)

# ZeroMQ
#
find_library( ZMQPP_LIB zmqpp NAMES libzmqpp PATHS /usr/local/lib )
find_library( ZMQ_LIB zmq NAMES libzmq PATHS /usr/local/lib )

find_package(Threads)

add_library(camera STATIC
Expand All @@ -124,6 +129,8 @@ target_link_libraries(camerad
${CMAKE_THREAD_LIBS_INIT}
${CCFITS_LIB}
${CFITS_LIB}
${ZMQPP_LIB}
${ZMQ_LIB}
)

# ----------------------------------------------------------------------------
Expand Down
Loading