Newer
Older
#include "DitsFix.h"
#include "Sdp.h"
#include "f77.h"
#include "Git.h"
#include "dul_err.h"
/* string containing drexec, tdfred, and clalib versions */
char versionStr[128];
/* DrexecVersion, TdfredVersion, and ClalibDate are defined in modules
drexecversion.c, tdfredversion.c, and clalibversion.c, respectively.
The source files are created by the respective Makefiles. */
extern const char* const TdfredVersion;
extern const char* const ClalibVersion;
/* externals */
extern void tdfio_init_();
extern void combine_image_(DitsArgType*,StatusType*);
extern void combine_spectra_(DitsArgType*,StatusType*);
/* extern void CMFSOBJ_FLXCALIB_(DitsArgType*,StatusType*); */
/* extern void CMFSOBJ_GENCALIB_(DitsArgType*,StatusType*); */
extern void cmfim_gfibpos_(DitsArgType*,StatusType*);
extern void plot_file_(DitsArgType*,StatusType*);
extern void reduce_arc_(DitsArgType*,StatusType*);
extern void reduce_bias_(DitsArgType*,StatusType*);
extern void reduce_fflat_(DitsArgType*,StatusType*);
extern void reduce_lflat_(DitsArgType*,StatusType*);
extern void reduce_object_(DitsArgType*,StatusType*);
extern void reduce_sky_(DitsArgType*,StatusType*);
extern void splice_aaomega_(DitsArgType*,StatusType*);
static void combineImageAction(StatusType*);
static void combineSpectraAction(StatusType*);
/* static void flxCalibAction(StatusType*); */
/* static void genCalibAction(StatusType*); */
static void plotAction(StatusType*);
static void reduceArcAction(StatusType*);
static void reduceBiasAction(StatusType*);
static void reduceFFlatAction(StatusType*);
static void reduceLFlatAction(StatusType*);
static void reduceObjAction(StatusType*);
static void reduceSkyAction(StatusType*);
static void spliceAction(StatusType*);
/*---------------------------------------------------------------------------*/
* This program is a DRAMA task acting as an action server for 2dfdr. The
* drcontrol DRAMA task normally acts as its client.
* The task name is normally given in argv[1]. Multiple copies of the task can
* be started using different task names. A default name is used if one is not
* given.
StatusType status = DITS__OK;
SdsIdType parsysid = 0;
char taskName[40];
{ combineImageAction, 0,0,0,0,0,"COMBINE_IMAGE"},
{ combineSpectraAction,0,0,0,0,0,"COMBINE_SPECTRA"},
/* FLX_CALIB */
/* GEN_CALIB */
{ find2dfFibresAction, 0,0,0,0,0,"GFIBPOS"},
{ plotAction, 0,0,0,0,0,"PLOT"},
{ reduceArcAction, 0,0,0,0,0,"REDUCE_ARC"},
{ reduceBiasAction, 0,0,0,0,0,"REDUCE_BIAS"},
{ reduceFFlatAction, 0,0,0,0,0,"REDUCE_FFLAT"},
{ reduceLFlatAction, 0,0,0,0,0,"REDUCE_LFLAT"},
{ reduceObjAction, 0,0,0,0,0,"REDUCE_OBJECT"},
{ reduceSkyAction, 0,0,0,0,0,"REDUCE_SKY"},
{ spliceAction, 0,0,0,0,0,"SPLICE"},
{ exitAction, 0,0,0,0,0,"EXIT"}
/* initialise DRAMA
DITS_M_NOEXHAND => we will install exit handler */
DitsAppInit(taskName,300000,DITS_M_NOEXHAND,0,&status);
/* initialise parameter system */
SdpInit(&parsysid,&status);
SdpCreate(parsysid,DitsNumber(params),params,&status);
/* fill version parameter value */
sprintf(versionStr,"drexec %s, tdfred %s, clalib %s",
DrexecVersion,TdfredVersion,ClalibVersion);
SdpPutString ("EXEC_VERSION",versionStr,&status);
/* define supported actions */
DitsPutActions(DitsNumber(actions),actions,&status);
/* enter DRAMA main loop
This returns when action returns DITS_REQ_EXIT */
DitsMainLoop(&status);
/* here returned from DRAMA main loop, shutdown DRAMA and exit */
/*---------------------------------------------------------------------------*/
/* call Fortran TDFIO_INIT and COMBINE_IMAGE() */
tdfio_init_();
combine_image_(&args,pStatus);
DitsPutRequest(DITS_REQ_END,pStatus);
/*---------------------------------------------------------------------------*/
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
/* call Fortran TDFIO_INIT() and COMBINE_SPECTRA() */
tdfio_init_();
combine_spectra_(&args,pStatus);
/*---------------------------------------------------------------------------*/
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
/* call Fortran TDFIO_INIT() and ???() */
tdfio_init_();
/* ???_(&args,pStatus); */
/* SdsDelete(localArgs,pStatus); */
/*---------------------------------------------------------------------------*/
/* get our SDS argument structure */
args = DitsGetArgument();
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
/* SdsCopy(args,&localArgs,pStatus); */
/* call Fortran TDFIO_INIT() and ???() */
tdfio_init_();
/* ???_(&args,pStatus); */
/* SdsDelete(localArgs,pStatus); */
DitsPutRequest(DITS_REQ_END,pStatus);
/*---------------------------------------------------------------------------*/
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
/* call Fortran TDFIO_INIT() and CMFIM_GFIBPOS() */
tdfio_init_();
cmfim_gfibpos_(&args,pStatus);
/*---------------------------------------------------------------------------*/
*/
{
DitsArgType args;
if (*pStatus != DITS__OK) return;
args = DitsGetArgument();
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
DitsPutRequest(DITS_REQ_END,pStatus);
}
/*---------------------------------------------------------------------------*/
*/
{
DitsArgType args;
if (*pStatus != DITS__OK) return;
args = DitsGetArgument();
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
DitsPutRequest(DITS_REQ_END,pStatus);
}
/*---------------------------------------------------------------------------*/
*/
{
DitsArgType args;
if (*pStatus != DITS__OK) return;
args = DitsGetArgument();
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
DitsPutRequest(DITS_REQ_END,pStatus);
}
/*---------------------------------------------------------------------------*/
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
/* make copy so it can be changed (external SDS -> internal) */
/* ??? WHY IS THIS NEEDED ??? */
SdsCopy(args,&localArgs,pStatus);
DitsPutRequest(DITS_REQ_END,pStatus);
}
/*---------------------------------------------------------------------------*/
*/
{
DitsArgType args;
if (*pStatus != DITS__OK) return;
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
DitsPutRequest(DITS_REQ_END,pStatus);
}
/*---------------------------------------------------------------------------*/
if (*pStatus != DITS__OK) return;
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
/* make copy so it can be changed (external SDS -> internal) */
/* ??? WHY IS THIS NEEDED ??? */
SdsCopy(args,&localArgs,pStatus);
DitsPutRequest(DITS_REQ_END,pStatus);
}
/*---------------------------------------------------------------------------*/
args = DitsGetArgument();
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
/* make copy so it can be changed (external SDS -> internal) */
SdsCopy(args,&localArgs,pStatus);
/* call Fortran TDFIO_INIT() and REDUCE_SKY() */
DitsPutRequest(DITS_REQ_END,pStatus);
}
/*---------------------------------------------------------------------------*/
*/
{
DitsArgType args;
if (*pStatus != DITS__OK) return;
/* get our SDS argument structure */
args = DitsGetArgument();
/* for debug print our argument structure on stdout */
SdsList(args,pStatus);
DitsPutRequest(DITS_REQ_END,pStatus);
}
/*---------------------------------------------------------------------------*/