[OPUS]

Frequently Asked Questions


What's New in OPUS 2.2?



What's New in OPUS 2.2?


How does the OPUS release 2.2 differ from the last one?

The last CD-ROM release of OPUS corresponded to our Build 1.4.  This release corresponds to Build 2.2.   As you can tell by the numbering scheme, this release contains a major upgrade of OPUS.  The entire OPUS blackboard system has been redesigned and rewritten in C++.   This project was undertaken with two main goals in mind:

 
 
There have been a number of changes to the OPUS system that will require changes to the way you set up and run your pipelines.  Read this entire document to learn about all of the changes and new features.  Here are a few of the bigger changes summarized in one place:
  1. It is possible to poll for more than one OSF or file at a time. By default, a single OSF or file will be returned per polling event. To specify that more than one item be returned (if more than one matching item exists), use   OSF_TRIGGERn.MAXTARGS = m   or FILE_MAXTARGSn = m, where n is the trigger definition number and m is the maximum number of items to be returned per event, along with the rest of the trigger definitions. (OPR 38414_02).
  2. Any number of OSF or file triggers are allowed per process. Only one time trigger can be defined, however.
  3. Opus_env creates a journal file for each OSF and FILE event in case the application goes absent. odcl_cleanup will attempt to apply the modifiers defined by the OSF_ABSENT and FILE_ABSENT process resource file keys to each entry in the journalized event in this case. If OSF_ABSENT is not defined in the process resource file, a modifier is constructed from the (required) OSF_PROCESSING definition with 'x' used in place of any status field values. Similarly, if FILE_ABSENT is not defined, the (required) FILE_ERROR definition is applied to the file entries.
  4. When composing trigger definitions is the process resource file, it is possible to trigger off any field (or combination of fields) of an OSF in addition to a stage value. For example, OSF_TRIGGER1.GC = w defines a trigger on an OSF containing w in the GC stage. The trigger could be further qualified by class, OSF_TRIGGER1.DATA_ID=sti, or by any other OSF field or stage. Allowable OSF field names include: (TIME,DATASET, DATA_ID, COMMAND, STATUS, DCF_NUM). Note that if you use STATUS, you must explicitly format the entire status field (i.e. all stages) in the value.
  5. Process resource file status definitions can update any field or combination of fields for OSF's and files. For example, the status definition FILE_SUCCESS.DIRECTORY = /data/complete/ will update a file's directory (i.e. copy it to a new directory). The field names for files are DIRECTORY, ROOTNAME, EXTENSION, DANGLE. More than one field can be updated per status definition, as usual, except for the special cases OSF_PROCESSING and FILE_PROCESSING
  6. Path file substitution is performed when appropriate for all status and trigger definitions. This includes OSF stage keys like OSF_TRIGGER1.SS. If desired, such items could get their values in a path-dependent manner by naming a path file key instead of a value for the stage character in the process resource file. For the example above, one could construct a process resource file with the entry OSF_TRIGGER1.SS = ss_trig, and place the key ss_trig along with a different character value in every path file. This permits an application to trigger and update events differently depending on which path it is run in.
  7. All resource file entries are no longer dumped into the environment of a task controlled by XPOLL (i.e. an external poller).  When the resource file is set up, you decide which variables need to be put into the environment of the task, and specify those resource entries with the "ENV." prefix (OPR 38324_02).
  8. A new, platform-independent syntax is now supported for specifying environment variable values in the process resource file TASK, FILE_ACTION, and XPOLL COMMAND entries, as well as in all path file entries.  The SUB[varname] syntax will result in the substitution of the value of variable "varname" for the entire SUB[varname] string where it appears (OPRs 38666_01, 39763_01, 40194).
  9. The OMG and PMG write many more status and error messages to the window that they were started from.  To discard these extra messages, adjust the MSG_REPORT_LEVEL variable or redirect standard output and standard error for the managers to /dev/null (OPR 39724_05).
  10. The TASK line syntax in the resource file has changed for XPOLL users.  The "-t" option to specify the process name has been replaced with "-r".  The "-t" is no longer supported (OPR 40129_03).
  11. The OMG now supports a larger field size for the dataset name under UNIX.  This was formerly limited to 23 characters due to a limitation imposed by the VMS operating system, but UNIX pipelines can now use up to 64 characters (OPR 40358_01).


What is a PR?

A PR is a Problem Report. The problem reporting system affects all components at the Space Telescope Science Institute and includes enhancements, change requests, as well as documentation updates. Not all of the 40,000+ problem reports have been filed against OPUS!


37182: assigning environment variables through resource file entries

An OPUS process can set Unix environment variables through entries in its resource file.  These variables are then visible to that process when started through XPOLL.  The value for such a variable can either be specified directly in the resource entry, as shown below, or the value can be a label that maps to an entry in a path file, which in turn supplies the value.  A process resource file key prepended with "ENV." will result in the remainder of that key being set in the process' environment with the indicated value.

For example, to set the Unix environment variable DSQUERY to DBSERVER for the process FOO, an entry in FOO.RESOURCE would need to be added as follows:

    ENV.DSQUERY = DBSERVER  ! override the process' environment version of DSQUERY

If there were an entry like

    DBSERVER = mydb

in the path file in which the task is started, then the DSQUERY variable value would be = "mydb" instead.


37316_01: OMG should be smarter with respect to dataset names

The OMG OBS column now expands or contracts each refresh cycle to accommodate the longest data set name in the list (up to a limit: the resource item maxObsNameLength sets this limit).
In addition, the data set names in the list items can be clicked with the 3rd mouse button (like the status values and status column titles) to bring up a small window containing the full data set name. Truncated data set names appear in the OMG with a trailing ">" character, and all OMG operations use the full data set name regardless  of any truncation in the display.
Furthermore, drag and drop support was added to the OMG and PMG such that list items can be dragged to a pixmap situated in the bottom label (the pixmap is a trashcan for the OMG and a stop sign for the PMG) as a short cut to selecting "Delete Selected" in the OMG or "Terminate Selected" in the PMG.

37353_01: OMG needs a Printer Setup dialog

The OMG now includes a "Printer Setup" option under the File Menu. The setup dialog functions exactly the same as the same option in the PMG-- once the dialog appears, add a new print queue to the list by typing it in the "Add" field AND pressing enter. To remove an item from the list, select it with a single left click and press enter. Specify a print command by typing it in the "Print command" box (no need to press enter). The full print command is generated by prepending the system print command indicated to one of the print queue names (chosen at print time), so the last parameter in the print command MUST specify the print queue (eg., -P [lpr] or -d [lp] in Unix).
Any changes made in this dialog will not take effect until the OMG is exited and restarted; however, the omg.dat file is updated immediately and will reflect the new list should "Printer Setup" be chosen a second time during the session.

 

37354: OMG/PMG OSF/PSTAT highlighting should stick around

List selections that are targets of OMG and PMG menu commands are no longer deselected until the command completes or is cancelled.   This keeps the highlighting of the list selection in place so that the user has a reminder of which OSFs or PSTATs were selected.
Also, the confirmation dialog that is displayed when using drag&drop to change OSF status values in the OMG now lists the stage title in the confirmation message.

 

37921: OPUS should support process startup across user accounts as well as nodes

The PMG now supports qualifying the node name on which a process is to run with an account name. In such cases, the process is spawned on the indicated node under the account name listed instead of the account under which the PMG is running. To specify a particular user account for a node listed in the PMG, the account name should be prepended to the usual node/batch syntax followed by a @ symbol. For example, the following case not only spawns the process on host foobar, but runs the process under the account bubba regardless of which account the PMG is running under:

 

        Unix:  bubba@foobar
 

In order for this to work, rsh must be operable and the target user account on the target node must accept rsh transactions from the PMG user and host on which it is running.


38080: X resources search path should be configured less fascistly

During configuration of a user's account for use with the OPUS sample pipeline, the environment variable XUSERFILESEARCHPATH setting (which is set in opus_login.csh) reflects any existing value in the user's  environment as well as OPUS requirements.  Formerly the OPUS set up script would overwrite any user values for this variable.

 
For Linux OPUS sample pipeline installations, the application resource files omg.dat and pmg.dat are stripped of their fontList resources. This means the default fonts are used for PMG and OMG widgets under Linux which improves readability.



38082: osfile_test_driver fails under UNIX

A bug in the UNIX version of the OSFILE pkg (find-file routines) has been corrected.  It fixes a crash seen during testing of the osfile_test_driver, and may also clear up crashes (core dumps) of other OPUS-UNIX executables.



38324_02: External processes should specify which resource file values to place in environment

 
External polling processes (i.e., those pipeline processes that use XPOLL)
must specify which process resource file keyword/value pairs should be
placed in the environment of the process by prepending the keyword name
with "ENV.". For example,

 
ENV.OUTPATH = output_dir  ! output directory set in path file

 
No longer will the entire contents of the process resource file be dumped
into the process' environment. This change does not effect those
environment variables set internally by XPOLL specifying the event
parameters (e.g., EVENT_TYPE, OSF_DATASET, etc.).



38326_01:  PMG should not use PRSC_init to read process resource files

 
An algorithm used to read process resource files in the PMG was changed to prevent unwanted changes to the PMG's environment.  This prevents environment variables that are being specified for use by an XPOLL task from also being set in the environment of the process that started the PMG.



38342: Include more information in the testbed.ver file

 
The file opus_dat:testbed.ver has a new format.



38352:  OPUS processes that fork a child process then exec should handle exec failures

 
Extra error reporting was added to OPUS routines that spawn a child process
to help diagnose problems when the child process fails to overlay itself
with an executable image. This sort of problem is not expected to occur,
but in the event it does, the code now handles (and reports) it correctly.



38414_02:  OAPI: A version of XPOLL that uses the OAPI is needed

This delivery contains a completely new version of XPOLL that is based on
the Opus API (OAPI). In addition to the present capabilities of XPOLL, the
following new features have been implemented:

   - A "NULL" XPOLL_STATE is defined that does nothing except clear the
present event. For example, an external process' resource file might
contain the line:

XPOLL_STATE.05 = NULL

If the external process were to exit with a return value of 5, the "NULL"
state would be chosen and no modifications to the item that triggered the
external process would occur.

   - XPOLL supports multiple triggering items per event (more than one file
or OSF can be processed per execution of the external process). For each
OSF_TRIGGER, the resource item OSF_TRIGGERn.MAXTARGS, where n is the
trigger definition number, specifies the maximum number of OSF's, matching
the trigger definition, that will be passed to the external process.
Similarly, for file pollers the resource item FILE_MAXTARGSn, where n is the
trigger definition number, determines the maximum number of files, matching
the trigger definition, that will be passed to the external process. By
default, both "MAXTARGS" resource values are set to 1 to provide backward
compatibility with existing OPUS software.

Information about each triggering item in an event is conveyed to the
external process through the environment, as is presently the case. However,
in order to support multiple triggering items per event, the environment
variable "EVENT_NUM" is set to the number of triggering items for the
current event. For OSF pollers, xpoll sets the following variables related
to the triggering items in the environment:

OSF_DATASET
OSF_DATA_ID
OSF_DCF_NUM
OSF_START_TIME

OSF_DATASET1
OSF_DATA_ID1
OSF_DCF_NUM1
OSF_START_TIME1

.
.
.

OSF_DATASET(n-1)
OSF_DATA_ID(n-1)
OSF_DCF_NUM(n-1)
OSF_START_TIME(n-1)

for n items. For file pollers, the triggering items environment variables are:

EVENT_NAME

EVENT_NAME1

.
.
.

EVENT_NAME(n-1)

for n items. The external process can choose to return an exit status that
updates all items in the event with the same end state, or it can specify a
different end state for each event item. The former option is equivalent to
the current functionality of XPOLL-- the external process would exit with a
return status that is mapped to a status in the resource file. For example,

OSF_SUCCESS.CA = 'C'
XPOLL_STATE.06 = OSF_SUCCESS

The latter option is new, and requires that the external process specify
the end state for all triggering items in the event through the text file
indicated in the environment variable "EVENT_STATE_FILE"; the file should
be created in OPUS_HOME_DIR. The external process should place entries in
the indicated file of the form:

OSF_STATUS  = s0
OSF_STATUS1 = s1
.
.
.
OSF_STATUS(n-1) = s(n-1)

for OSF events and

EVENT_STATUS  = s0
EVENT_STATUS1 = s1
.
.
.
EVENT_STATUS(n-1) = s(n-1)

for FILE events where n is the number of triggering items and s0, s1, ...,
s(n-1) are exit status values that map to an XPOLL_STATE item in the process'
resource file. There MUST be entries for each triggering item in the event in
this file, and the item number n in EVENT_STATE_FILE will map to the item
number n in the environment variables OSF_DATASETn or EVENT_NAMEn.

The external process signals to xpoll that the end states should be read
from the state file by exiting with a status value that maps to the
XPOLL_STATE "CHECK_FILE". For example, an external OSF poller might exit
with the return status 5 which would be mapped to "CHECK_FILE" in the
process resource file:

XPOLL_STATE.05 = CHECK_FILE

Xpoll would then read and update the status for each OSF in the current
event based on the contents of the file indicated in EVENT_STATE_FILE.
Xpoll deletes the state file after processing the entries.

NOTE: external processes that are configured to accept events containing
more than one triggering item MUST use EVENT_NUM to determine the number of
items in the current event. The environment is not cleared between events
and there may be variables defined in the external process' environment
that are left-over from previous events.

   - A test driver, xpltst, now exists that verifies that xpoll is functioning
normally. Instructions for running the test driver can be found in the
resource file xpltst.resource
 



38535_02:  osf_update needs another EXIT status (besides SUCCESS,ERROR)

 
The osf_update tool will now exit with status = 2 when an OSF is located
on the blackboard for update, but changes by the time an update is attempted.
Scripts that want to differentiate parallel processing BB errors from other
BB errors should be able to use this exit status to do so.



38666_01:  OPIX: XPOLL should resolve environment variables passed in COMMAND resource

 
The ability to have environment variable/logical/symbol name translation
performed for XPOLL commands (ie., the value of the COMMAND process
resource file key for external pollers) and those tasks specified by the
FILE_ACTION process resource file key (for file pollers) has been
implemented. Given an environment variable/logical/symbol V, the syntax
SUB[V] can be used in these process resource file items to indicate that
variable substitution should be performed prior to executing the command
string. For example, an external polling process could specify the key
COMMAND as:

 
COMMAND = 'java MscScn SUB[OSF_DATASET]'

 
In this case, SUB[OSF_DATASET] will be replaced with the value of the
OSF_DATASET environment variable/logical/symbol. More than one SUB[]
expression may appear in a given command line.
If no such environment variable/logical/symbol exists in the process'
environment, the string UNDEFINED is substituted for the expression.


38671:  obsfil* routines leak memory

 
Several memory leaks in the OMG were plugged. There is no impact on functionality of the OMG.



38780:  Modifications to the behavior of path file indirection (path->mnemonic)

 
The behavior of process resource file keys that use path file indirection
(those with the -> notation) has been modified to correct a situation
where the indirection occurred even when the process was run interactively.
Interactive processes (those running in the null path) now fetch the value of
indirectly assigned keys from the null.path regardless of the path file
specified in the process resource file unless the new notation ->> is used
in place of ->. Using ->> forces the value to come from the indicated path
file even if the process is running interactively.
For example, a process resource file containing the line

 
OUTPATH = RED->OUTPUT_DIR

 
means that the value of OUTPATH will be the same as the value of OUTPUT_DIR
in the path file red.path when the process is running in the pipeline. When
the process is run interactively (in the null path), the value of OUTPATH
will be the same as the value of OUTPUT_DIR in the path file null.path.
A process resource file containing the line

 
OUTPATH = RED->>OUTPUT_DIR

 
means that the value of OUTPATH will be the same as the value of OUTPUT_DIR
in the path file red.path always (when in the pipeline and when run
interactively).



38838:  Sample pipeline headers have incorrect date format

 
This delivery corrects the sample pipeline DATE-OBS keyword value from 25/12/96 to 1996-12-25.


38844:  It would be cool to have a tool to update a keyword value in a FITS file

This delivers a tool (kwmod) to allow you to modify a keyword in a
FITS file without having to bring iraf up.  It is invoked from the
command line and is simple to use.  In addition to updating a single
keyword, this command will allow you to update that keyword in all
extensions, and in all files of a directory.
This should be used with care since it will update the input FITS
file in place.



38996:  PMG creates day of the dead under Tru64 Unix

 
A problem where the PMG would create zombie processes in Tru64 Unix has
been fixed.



39224_02:  New test tools

 
header_diff is a tool which allows a user to more easily compare
a large number of FITS file headers for FITS files with identical names
in separate directories.
Specific keywords (like DATE) can be ignored (since they will likely always
be different).  One can turn off the differences caused by changes in
the keyword comment, and one can specify the floating point tolerance
if there is a difference in the real numeric values between builds.

 
trailer_diff is a similar tool to compare the .trx and .tra text files
from one build to another.  It is a simple (6 line) c-shell script which
uses the SED editor and the diff utility.  The SED commands are contained
in a simple text file and can be added to.

 
The header_diff tool will no longer use a default name for the ignored
keyword files.  If you do not specify such a file on the
command line, all keywords will be differenced.
Also, on unix systems the wildcarded filename specification
must be quoted so it does not get expanded by the
shell.  The tool will do its own expansion and will be
able to handle filemasks containing wildcard characters.



39673:  OPIX: Aliases should be resolved before TASK resource line invoked

 
Under UNIX, aliases used on the TASK line (as specified in the process resource file) will be resolved before the task is run.



39724_05:  PMG & OMG should be ported to use the OAPI

 
The PMG and OMG have been ported to use the OAPI. However, the port only
ensures that the managers access the blackboards through the OAPI instead of
circumventing it- none of the new features in the OAPI that could be used
by the OMG and PMG were implemented. Instead, the OMG and PMG will be upgraded
in a future release of OPUS.

 
Because the OAPI can be quite verbose when set to display debug messages, OMG
and PMG users might want to turn message reporting off (or reduce the report
level to exclude debug messages) for the session in which they are run, or
redirect STDOUT/STDERR to /dev/null in UNIX.

 
The PMG has been modified to scan for process resource files only once after
the process selection dialog is brought up. This was done in order to reduce
the amount of time necessary to bring up this dialog after the first use. It
has the consequence that process resource files added to OPUS_DEFINITIONS_DIR
after the PMG process selection dialog box has been brought up will not be
accessible; the PMG should be restarted in this case.



39763_01:  OPIX: environemnt variables should be evaluated on the TASK line

 
Similar to SDN 38666 which allowed substitution of environment variable values
in the process resource file COMMAND entry for external pollers, this SDN
performs the same sort of substitution for the TASK line (for all processes).
Given an environment variable/logical/symbol V, the syntax SUB[V] can be
used in the TASK entry of a process resource file to indicate that the text
SUB[V] should be replaced by the value of V at process start-up.
For example, the TASK entry in the process resource file gc_sti.resource:

 
TASK = <gc_sti -p $path_file>

 
could be rewritten:

 
TASK = <gc_sti -p SUB[path_file]>

 
Both cases will result in the substitution of the value of path_file in the
environment for the text $path_file or SUB[path_file]. The primary advantage
of the second form is that the TASK line becomes platform independent.



39935:  Problem in KW_PKG causes g2f sample pipeline crash

 
Fixed a bug in the "database-from-a-flatfile" mode of the KW_PKG code.
This feature is currently only used in the OPUS sample pipeline code.



40088_02:  OAPI OPUSBB_POLL interface does not report missing directory.

 
The Files_bb:search method was modified in the OAPI to throw an Io_error
exception if the file search fails for any reason other than a missing file
or directory (UNIX). In addition, during construction of the Opus_env
object for file pollers, the existence of all directories in the trigger
condition(s) are verified, and an exception is thrown if any are missing.

 
The sizes and locations of the PSTAT and OSF fields in the templates is now
user configurable via the opus.env file. The fields that are used to
establish uniqueness of PSTAT and OSF entries also are defined in this file.



40129_03:  process resource file changes

The OAPI (Build 2.0) only recognizes the command-line option -r for
specifying the short process name. In the past, -t also was recognized when
using XPOLL. The -t option no longer is supported.  Its continued use will generate
an error message ("XPOLL fails to spawn task") when the task is invoked.



40194:  OAPI should be able to fetch path file keyword values from process environment

 
Path file values can be retrieved from the process' environment in total or
in part by using the following syntax in the value field:

 
SUB[env_var_name]

 
where env_var_name is an environment variable. For example, a keyword/value
entry in a path file might be written:

 
DATA_PATH = SUB[DPATH]

 
in order to assign the value of the environment variable DPATH to the path file
keyword DATA_PATH. One use for such a facility is to maintain static or
configured versions of path files that can be used in different pipelines-
the path file values can be tailored to each pipeline through the environment
of the process in such a setup.
Each instance of the SUB[] token is replaced with the value of the named
environment variable at the time that the path file value is requested by the
application. Note that this applies to process resource file values that
resolve to path file values as well. More than one instance of this construct
may appear in a single path file keyword value definition. Since the
substitution is performed on demand, a process effectively could change path
file values on-the-fly by altering the value of environment variables in
between calls to fetch path file keyword values.
For example: (from an arbitrary path file)
USER_HOME_DIR = /home/SUB[USER]

 
In this case, the result of retrieving the value of USER_HOME_DIR from this
path file will depend on the value of USER in the process' environment.

 
For example: (from an arbitrary process resource file)

 
OUTPATH = BLUE->OUTPATH

 
(and from blue.path)

 
OUTPATH  = SUB[OUTPUT_DIR]

 
In this case, OUTPATH in both the process resource and blue path files is
assigned the value of OUTPUT_DIR in the process' environment.



40358_01:  OMG should be able to handle OSF's with dataset names > 23 characters

 
This implements a larger field size for the dataset name in the OMG only
for UNIX systems; the length remains 23 characters for VMS systems.



40673:  Default PMG node LOCALHOST should resolve to the host running the PMG

 
Installing OPUS using the sample pipeline CD-ROM results in a single node
listed in the PMG on which to run processes. This node is called "localhost".
In the past, a user could not actually use this node name as it only was a
placeholder for the node list. With this SDN, selecting localhost as the target
node for a process will result in the process running on the same node as the
PMG. ***NOTE: This feature only works under UNIX.



40674:  OPUS should allow the user to request that no log files be produced.

 
If the environment variable MSG_REPORT_LEVEL is set
to MSG_NONE, no process log files are produced.
WARNING:  This feature should be used with care, since any error messages reported by your process will be lost unless you are performing your own error logging.



40675:  Execution of the script opus_login.com/csh should not produce any output

Execution of opus_login no longer results in the OPUS software version
banner being displayed. Instead, this information is placed in the
environment variable OPUS_PIPELINE_VERSION. However,
the contents of this variable are output to the process log file just prior
to execution of pipeline processes, so there is a record of which OPUS version
was in use at the time a process is run.



40913_01:  Trailer files need separate message-level parameter from log files

 
This delivery introduces another environment variable that can be used to
set message reporting levels.  The existing variable, MSG_REPORT_LEVEL, defines the
level of reporting used in the process log files.  The new variable,
MSG_TRL_REPORT_LEVEL, defines the level of reporting used for trailer files.
If MSG_TRL_REPORT_LEVEL is not defined, the default value, MSG_INFO, is used.



40934:  Directory polling should be reduced in the OAPI as it overloads some VMS systems

 
This release contains a change to the OPUS blackboard system that reduces
the amount of polling performed in the PSTAT directory.  This should only result in
enhanced system performance, and should not alter current pipeline behavior in any undesired way.



40936:  XPOLL sets MSG_REPORT_LEVEL default to MSG_ALL

External pollers (users of XPOLL) will now use the default message reporting level of MSG_INFO when the environment variable, MSG_REPORT_LEVEL, is NOT set.   The default used to be MSG_ALL, which resulted in a huge set of diagnostic messages where they might not be wanted.



40943:  odcl_cleanup is renaming files to home directory

If an OPUS OSF or file polling process crashes during processing of an event, an attempt is made to mark the OSF or file that it was working on as "absent".  By default this results in an 'X' in the stage being processed for OSF pollers, or the application of the process resource file-defined status FILE_ERROR for file pollers.  A bug in the file polling part of this error handling resulted in the file being moved to the current working directory of the process (usually the login directory). This bug has been fixed with this delivery.



41131_02:  Performance enhancements required for File_osf_bb and File_pstat_bb replace

 
This delivery affects how OSFs and PSTATs are renamed on the blackboard- the
amount of time it takes to perform a rename has been reduced by performing
all in-library error checking up front, then issuing a file system rename
command. Previous versions of the OAPI did an erase of the entry, some
additional error checking, then a post of the new entry.
In addition to the performance enhancements listed above, the lock objects for
file name-based PSTATs and OSFs were modified to hold off obtaining a copy of
the locked entry until get_target is called (ie., lazy evaluation).


Top of What's New FAQ

Top of OPUS FAQ