Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
670 changes: 337 additions & 333 deletions acf/hispecatc.acf

Large diffs are not rendered by default.

152 changes: 152 additions & 0 deletions src/hispecatc/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
# -----------------------------------------------------------------------------
# @file Makefile
# @brief Makefile for Software/Config/Archon/Build/
# @author David Hale
# @date 2015-xx-xx
# @modified 2016-01-14
# @modified 2016-01-27 added fixrawendline (special case for Peter)
# @modified 2016-01-28 removed clean. Use @F.h instead of HFILE=archon.h
# @modified 2016-03-31 change how .mod is parsed
# @modified 2016-04-04 add INCPARSER and checks for file existence
# @modified 2016-04-07 add plotting option and check for WAVGEN exit code
# @modified 2016-04-19 changes to implement INCLUDE_FILE= in *.conf
# @modified 2016-04-20 read CDS_FILE and MODULE_FILE from .conf
# @modified 2017-02-08 added modegen
# @modified 2017-11-09 remove copying of acf files to camera computers
# @modified 2020-12-21 added insert_hash
#
# This Makefile uses the general preprocessor GPP 2.24 for macro processing.
# It also requires the ini2acf.pl Perl script for creating an Archon acf file.
#
# -----------------------------------------------------------------------------
#

# Copyright (C) <2018> California Institute of Technology
# Software written by: <Dave Hale and Peter Mao>
#
# This program is part of the Waveform Definition Language (WDL) developed
# for ZTF. This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# 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 General Public License for more details.
#
# Please see the GNU General Public License at:
# <http://www.gnu.org/licenses/>.
#
# Report any bugs or suggested improvements to:
#
# David Hale <dhale@caltech.edu> or
# Stephen Kaye <skaye@caltech.edu>

# -----------------------------------------------------------------------------
# @file Makefile
# @brief Makefile for Software/wdl/demo
# @author David Hale
# @date 2015-xx-xx
# @modified 2024-08-02 made generic for demo
#
# This Makefile uses the general preprocessor GPP 2.24 for macro processing.
# It also requires the ini2acf.pl Perl script for creating an Archon acf file.
#
# -----------------------------------------------------------------------------
#

# set to path to gpp
GPP = /usr/bin/gpp
# set to path to wdl code
WDLPATH = /home/hsdev/apps/wdlfiles/wdl
# output for *.acf file
ACFPATH = ../acf

PLOT = False # True # show waveform plots by default, True | False
GFLAGS = +c "/*" "*/" +c "//" "\n" +c "\\\n" ""
SEQPARSER = $(WDLPATH)/wdl/seqParserDriver.py
INCPARSER = $(WDLPATH)/wdl/incParserDriver.py
WDLPARSER = $(WDLPATH)/wdl/wdlParserDriver.py
MODPARSER = $(WDLPATH)/wdl/modParserDriver.py
WAVGEN = $(WDLPATH)/wdl/wavgenDriver.py
MODEGEN = $(WDLPATH)/wdl/modegenDriver.py
I2A = $(WDLPATH)/wdl/ini2acf.pl
INCL = -I$(CURDIR)

# Global variable to store the filename
FILE_NAME :=

SCAN_CDSFILE = cat $(FILE_NAME).conf | $(GPP) $(GFLAGS) $(INCL) | \
awk -F= '{gsub(" |\t","",$$1)} $$1=="CDS_FILE"{print $$2}' | cut -d'"' -f2
SCAN_MODFILE = cat $(FILE_NAME).conf | $(GPP) $(GFLAGS) $(INCL) | \
awk -F= '{gsub(" |\t","",$$1)} $$1=="MODULE_FILE"{print $$2}' | cut -d'"' -f2
SCAN_MODEFILE = cat $(FILE_NAME).conf | $(GPP) $(GFLAGS) $(INCL) | \
awk -F= '{gsub(" |\t","",$$1)} $$1=="MODE_FILE"{print $$2}' | cut -d'"' -f2

F_TMP = $(FILE_NAME)_TMP

DEBUG ?= 0

ifeq ($(DEBUG), 1)
debug_message = @echo "Debug: $(1)"
else
debug_message = @true
endif

# Main rule for building the target
%:
$(eval FILE_NAME := $(@F))
$(call debug_message, "Current filename: $(FILE_NAME)")
@$(MAKE) generate_wdl FILE_NAME=$(@F)
@$(MAKE) generate_script_states FILE_NAME=$(@F)
@$(MAKE) assemble_acf FILE_NAME=$(@F)

# Rule for generating WDL
generate_wdl:
$(eval MODFILE := $(shell $(SCAN_MODFILE)))
@echo "Looking for MODULE_FILE = $(MODFILE) ..."
@test -f $(FILE_NAME).conf || { echo "$(FILE_NAME).conf does not exist"; exit 1; }
$(call debug_message, "Found configuration file: $(FILE_NAME).conf")

@echo "Making $(F_TMP).wdl from $(FILE_NAME).conf ..."
@cat $(FILE_NAME).conf | $(SEQPARSER) - | $(GPP) $(GFLAGS) $(INCL) | $(WDLPARSER) - > $(F_TMP).wdl
$(call debug_message, "Created WDL file: $(F_TMP).wdl")

@echo "Making $(F_TMP).script and $(F_TMP).states from $(F_TMP).wdl ..."
@test -f $(MODFILE) || { echo "$(MODFILE) does not exist"; exit 1; }
$(call debug_message, "Found MODULE_FILE: $(MODFILE)")

@cat $(MODFILE) | $(GPP) $(GFLAGS) $(INCL) | $(MODPARSER)
@test -f .modules && mv .modules $(F_TMP).modules || echo "No .modules file created"
@test -f .system && mv .system $(F_TMP).system || echo "No .system file created"
$(call debug_message, "Processed MODULE_FILE: $(MODFILE)")

@$(WAVGEN) $(F_TMP) $(PLOT) || { echo "Waveform generation failed"; exit 1; }
$(call debug_message, "Finished waveform generation for $(F_TMP) with plot: $(PLOT)")

# Rule for generating script states
generate_script_states:
@echo "Assembling $(FILE_NAME).acf ..."
$(eval CDSFILE := $(shell $(SCAN_CDSFILE)))
$(call debug_message, "Looking for CDS_FILE = $(CDSFILE) ...")
@test -f $(CDSFILE) || { echo "$(CDSFILE) does not exist"; exit 1; }
$(call debug_message, "Preparing to assemble $(FILE_NAME).acf file using:")
$(call debug_message, "INCPARSER: $(INCPARSER)")
$(call debug_message, "CDSFILE: $(CDSFILE)")
$(call debug_message, "GPP Flags: $(GFLAGS)")
@echo "Assembling $(FILE_NAME).acf file ..."
@cat $(FILE_NAME).conf | $(INCPARSER) - | cat - $(CDSFILE) | $(GPP) $(GFLAGS) $(INCL) | \
cat - $(F_TMP).script $(F_TMP).modules $(F_TMP).states $(F_TMP).system | \
$(I2A) - > $(FILE_NAME).acf

# Rule for assembling the ACF
assemble_acf:
$(eval MODEFILE := $(shell $(SCAN_MODEFILE)))
@$(MODEGEN) $(MODEFILE) $(FILE_NAME).acf
@if [ -d ".git" ]; then \
echo "Inserting REV keyword ..."; $(WDLPATH)/insert_hash $(FILE_NAME).acf; \
else \
echo "Not a git archive, skipping REV keyword"; \
fi
@echo "Done"
43 changes: 9 additions & 34 deletions src/hispecatc/hispecatc.cds
Original file line number Diff line number Diff line change
Expand Up @@ -21,40 +21,15 @@ SHP1=_FIRST_RESET_SAMPLE
SHP2=_LAST_RESET_SAMPLE
SHD1=_FIRST_VIDEO_SAMPLE
SHD2=_LAST_VIDEO_SAMPLE
TAPLINE0="AM26L,1,0" /* Out0 ->VT16 -> ADCH13 -> ADM26*/ /* H2RG -> Preamp -> SAMTEC -> Archon*/
TAPLINE1="AM45R,1,0" /* Out1 ->VB1 -> ADCH20 -> ADM45*/
TAPLINE2="AM28L,1,0" /* Out2 ->VB16 -> ADCH12 -> ADM28*/
TAPLINE3="AM49R,1,0" /* Out3 ->VB2 -> ADCH18 -> ADM49*/
TAPLINE4="AM43L,1,0" /* Out4 ->VT1 -> ADCH21 -> ADM43*/
TAPLINE5="AM47R,1,0" /* Out5 ->VT2 -> ADCH19 -> ADM47*/
TAPLINE6="AM30L,1,0" /* Out6 ->VT15 -> ADCH11 -> ADM30*/
TAPLINE7="AM33R,1,0" /* Out7 ->VT14 -> ADCH1 -> ADM33*/
TAPLINE8="AM32L,1,0" /* Out8 ->VB15 -> ADCH10 -> ADM32*/
TAPLINE9="AM48R,1,0" /* Out9 ->VT11 -> ADCH27 -> ADM48*/
TAPLINE10="AM23L,1,0" /* Out10 ->VB13 -> ADCH6 -> ADM23*/
TAPLINE11="AM40R,1,0" /* Out11 ->VT4 -> ADCH31 -> ADM40*/
TAPLINE12="AM35L,1,0" /* Out12 ->VB14 -> ADCH0 -> ADM35*/
TAPLINE13="AM27R,1,0" /* Out13 ->VB5 -> ADCH4 -> ADM27*/
TAPLINE14="AM44L,1,0" /* Out14 ->VT12 -> ADCH29 -> ADM44*/
TAPLINE15="AM22R,1,0" /* Out15 ->VT8 -> ADCH15 -> ADM22*/
TAPLINE16="AM50L,1,0" /* Out16 ->VB11 -> ADCH26 -> ADM50*/
TAPLINE17="AM31R,1,0" /* Out17 ->VB6 -> ADCH2 -> ADM31*/
TAPLINE18="AM53L,1,0" /* Out18 ->VB10 -> ADCH16 -> ADM53*/
TAPLINE19="AM25R,1,0" /* Out19 ->VT5 -> ADCH5 -> ADM25*/
TAPLINE20="AM41L,1,0" /* Out20 ->VB9 -> ADCH22 -> ADM41*/
TAPLINE21="AM34R,1,0" /* Out21 ->VT7 -> ADCH9 -> ADM34*/
TAPLINE22="AM39L,1,0" /* Out22 ->VB9 -> ADCH23 -> ADM39*/
TAPLINE23="AM21R,1,0" /* Out23 ->VT13 -> ADCH7 -> ADM21*/
TAPLINE24="AM46L,1,0" /* Out24 ->VB12 -> ADCH28 -> ADM46*/
TAPLINE25="AM54R,1,0" /* Out25 ->VB3 -> ADCH24 -> ADM54*/
TAPLINE26="AM36L,1,0" /* Out26 ->VB7 -> ADCH8 -> ADM36*/
TAPLINE27="AM51R,1,0" /* Out27 ->VT10 -> ADCH17 -> ADM51*/
TAPLINE28="AM52L,1,0" /* Out28 ->VT3 -> ADCH25 -> ADM52*/
TAPLINE29="AM29R,1,0" /* Out29 ->VT6 -> ADCH3 -> ADM29*/
TAPLINE30="AM42L,1,0" /* Out30 ->VB4 -> ADCH30 -> ADM42*/
TAPLINE31="AM24R,1,0" /* Out31 ->VB8 -> ADCH14 -> ADM24*/
TAPLINE32="AM37L,1,0" /* Ref Output */
TAPLINES=33
TAPLINE0="AM54L,1,0"
TAPLINE1="AM25R,1,0"
TAPLINE2="AM29L,1,0"
TAPLINE3="AM31R,1,0"
TAPLINE4="AM52L,1,0"
TAPLINES=5
TRIGINEDGE=0
TRIGINENABLE=0
TRIGININVERT=0
TRIGOUTFORCE=0
TRIGOUTINVERT=0
TRIGOUTLEVEL=0
Expand Down
4 changes: 2 additions & 2 deletions src/hispecatc/hispecatc.conf
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/** ---------------------------------------------------------------------------
* @file cryoscope.conf
* @brief WDL configuration file for Cryoscope project
* @author Timothee Greffe
* @date 2020-12-21 (created)
* @author Elijah Anakalea-Buckley
* @date 2026-04-02 (created)
* @modified
*
* This file needs to identify the following four files:
Expand Down
8 changes: 4 additions & 4 deletions src/hispecatc/hispecatc.def
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#define _MAX_ROWS 2048 /* Maximum number of rows in H2RG array */
#define _MAX_COLS 1024 /* Maximum number of columns in H2RG array */
#define _MAX_YADDR 1023 /* Maximum Y Address - zero index */
#define _MAX_XADDR 64 /* Maximum X Address - zero index */
#define _MAX_XADDR 512 /* Maximum X Address - zero index */

#define _TOTAL_ROWS #eval _DARK_ROWS + _MAX_ROWS

Expand All @@ -36,6 +36,6 @@
#define _RAW_SELECT 0 /* AD channel for raw data capture */

#define _FIRST_RESET_SAMPLE 256
#define _LAST_RESET_SAMPLE 592
#define _FIRST_VIDEO_SAMPLE 600
#define _LAST_VIDEO_SAMPLE 600
#define _LAST_RESET_SAMPLE 992
#define _FIRST_VIDEO_SAMPLE 1000
#define _LAST_VIDEO_SAMPLE 1000
6 changes: 3 additions & 3 deletions src/hispecatc/hispecatc.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
#define V_VDD 3.3
#define V_VReset 0.3
#define V_VDDA 3.3
#define V_VRef 2.9
#define V_VRef 2.65
#define V_CLK_EN 3.3
#define V_Preamp_EN 2.0
#define V_Preamp_EN 4.5
#define V_VideoPullUp 3.3
#define VSPARE 0.0 /* */

Expand Down Expand Up @@ -46,7 +46,7 @@ SLOT 10 lvxbias { /* slot 10 with cryoscope*/
LVHC 6 [VSPARE,70,1,1] "Light Bulb"; /* Spare */
}

SLOT 11 lvds {/* slot 11 with Cryoscope*/
SLOT 11 lvds {/* slot 11 with Hispec*/
DIO 1 [0,0];
DIO 2 [0,0];
DIO 3 [0,0];
Expand Down
136 changes: 84 additions & 52 deletions src/hispecatc/hispecatc.modes
Original file line number Diff line number Diff line change
@@ -1,57 +1,89 @@
[MODE_DEFAULT]
ARCH:HORI_AMPS=33
ARCH:VERT_AMPS=1
ARCH:NUM_DETECT=1
FITS:READOUTMODE=UpTheRampRollingReset
ACF:PIXELCOUNT=64
ACF:FRAMEMODE=1
ACF:PIXELCOUNT=512
ACF:LINECOUNT=2048
ACF:Expose=0
ACF:mode_UTR_RR=1
ACF:mode_EnhancedRollingReset=0
ACF:mode_VideoRX=0
ACF:mode_VideoRXR=0
ACF:mode_Guiding=0
[MODE_UTR_RR]
ARCH:HORI_AMPS=33
ACF:RAWENABLE=0
ACF:TAPLINE0="AM54L,1,0"
ACF:TAPLINE1="AM25R,1,0"
ACF:TAPLINE2="AM29L,1,0"
ACF:TAPLINE3="AM31R,1,0"
ACF:TAPLINE4="AM52L,1,0"
ACF:TAPLINES=5
ARCH:HORI_AMPS=5
ARCH:NUM_DETECT=1
ARCH:VERT_AMPS=1
FITS:READOUTMODE=UpTheRampRollingReset
ACF:PIXELCOUNT=64
ACF:LINECOUNT=2048
ACF:Expose=0
ACF:mode_UTR_RR=1
ACF:mode_EnhancedRollingReset=0
ACF:mode_VideoRX=0
ACF:mode_VideoRXR=0
ACF:mode_Guiding=0
[MODE_VIDEORX]
ARCH:HORI_AMPS=33
FITS:READOUTMODE=VideoRX
ACF:PIXELCOUNT=64
ACF:LINECOUNT=2048
ACF:Expose=0
ACF:mode_UTR_RR=0
ACF:mode_EnhancedRollingReset=0
ACF:mode_VideoRX=1
ACF:mode_VideoRXR=0
ACF:mode_Guiding=0
[MODE_VIDEORXR]
ARCH:HORI_AMPS=33
FITS:READOUTMODE=VideoRXR
ACF:PIXELCOUNT=128
ACF:LINECOUNT=2048
ACF:Expose=0
ACF:mode_UTR_RR=0
ACF:mode_EnhancedRollingReset=0
ACF:mode_VideoRX=0
ACF:mode_VideoRXR=1
ACF:mode_Guiding=0
[MODE_GUIDING]
ARCH:HORI_AMPS=1
ACF:FRAMEMODE=1
ACF:TAPLINE0="AM54L,1,0"
ACF:TAPLINE1="AM52L,1,0"
ACF:TAPLINE2=""
ACF:TAPLINE3=""
ACF:TAPLINE4=""
ACF:TAPLINES=2
ARCH:NUM_DETECT=1
ARCH:VERT_AMPS=1
ARCH:HORI_AMPS=2
ACF:PIXELCOUNT=618
ACF:LINECOUNT=618
FITS:READOUTMODE=Guiding
ACF:PIXELCOUNT=64
ACF:LINECOUNT=2048
ACF:Expose=0
ACF:mode_UTR_RR=0
ACF:mode_EnhancedRollingReset=0
ACF:mode_VideoRX=0
ACF:mode_VideoRXR=0
ACF:mode_Guiding=1
[MODE_UTR_RR]
ACF:FRAMEMODE=1
ACF:PIXELCOUNT=309
ACF:LINECOUNT=618
ACF:TAPLINE0="AM25R,1,0"
ACF:TAPLINE1="AM29L,1,0"
ACF:TAPLINE2="AM52L,1,0"
ACF:TAPLINE3=""
ACF:TAPLINE4=""
ACF:TAPLINES=3
ACF:RAWENABLE=0
ARCH:HORI_AMPS=3
ARCH:NUM_DETECT=1
ARCH:VERT_AMPS=1
FITS:READOUTMODE=UpTheRampRollingReset
[MODE_UTR_GR]
ACF:FRAMEMODE=1
ACF:PIXELCOUNT=309
ACF:LINECOUNT=618
ACF:TAPLINE0="AM25R,1,0"
ACF:TAPLINE1="AM29L,1,0"
ACF:TAPLINE2="AM52L,1,0"
ACF:TAPLINE3=""
ACF:TAPLINE4=""
ACF:TAPLINES=3
ACF:RAWENABLE=0
ARCH:HORI_AMPS=3
ARCH:NUM_DETECT=1
ARCH:VERT_AMPS=1
FITS:READOUTMODE=UpTheRampRollingReset
[MODE_RX]
ACF:FRAMEMODE=1
ACF:PIXELCOUNT=309
ACF:LINECOUNT=618
ACF:TAPLINE0="AM25R,1,0"
ACF:TAPLINE1="AM29L,1,0"
ACF:TAPLINE2="AM52L,1,0"
ACF:TAPLINE3=""
ACF:TAPLINE4=""
ACF:TAPLINES=3
ACF:RAWENABLE=0
ARCH:HORI_AMPS=3
ARCH:NUM_DETECT=1
ARCH:VERT_AMPS=1
FITS:READOUTMODE=RX
[MODE_RXR]
ACF:FRAMEMODE=1
ACF:PIXELCOUNT=618
ACF:LINECOUNT=618
ACF:TAPLINE0="AM25R,1,0"
ACF:TAPLINE1="AM29L,1,0"
ACF:TAPLINE2="AM52L,1,0"
ACF:TAPLINE3=""
ACF:TAPLINE4=""
ACF:TAPLINES=3
ACF:RAWENABLE=0
ARCH:HORI_AMPS=3
ARCH:NUM_DETECT=1
ARCH:VERT_AMPS=1
FITS:READOUTMODE=RXR
Loading
Loading