#ifndef TA_DIAG_H
#define TA_DIAG_H

#ifdef __cplusplus
extern "C" {
#endif

#include <dervish.h>
#include "taCalibObj.h"

/* A calibrated survey object */
typedef struct taDiag
{
  /* Areas processed */
  double scanlineArea;      /* Total scanline area targetted (primary and
			       secondary segments, deg^2) */
  double goodScanlineArea;  /* Total GOOD or ACCEPTABLE scanline area
			     * targetted (primary and secondary segments,
			     * deg^2) */
  double holeScanlineArea;  /* Total HOLE or MISSING scanline area
			     * skipped (primary and secondary segments,
			     * deg^2) */
  double stripeArea;        /* Total stripe area targetted (primary and
			       secondary segments, deg^2) */
  double goodStripeArea;    /* Total GOOD or ACCEPTABLE stripe area
			     * targetted (primary and secondary segments,
			     * deg^2) */
  double holeStripeArea;    /* Total HOLE or MISSING stripe area
			     * skipped (primary and secondary segments,
			     * deg^2) */

  /* Simple counts of objects processed and selected */
  int nPrim;                /* Number of primary objects */
  int nScanline;            /* Number of OK_SCANLINE objects */
  int nPrimTargets;         /* Number of primaries targetted as science
			     * targets (primTarget != 0, priority > 0) */
  int nScanlineTargets;     /* Number of OK_SCANLINE objects targetted as
			     * science targets(primTarget != 0, priority > 0)*/
  int nPrimGalaxy;          /* Number of primaries targetted as galaxies */
  int nScanlineGalaxy;      /* Number of OK_SCANLINE objects targetted as
			     * galaxies */
  int nPrimQSO;             /* Number of primaries targetted as QSOs
			     * (excluding MAG_OUTLIER and REJECT) */
  int nScanlineQSO;         /* Number of OK_SCANLINE objects targetted as
			     * QSOs (excluding MAG_OUTLIER and REJECT) */
  int nPrimROSAT;           /* Number of primaries targetted as ROSAT */
  int nScanlineROSAT;       /* Number of OK_SCANLINE objects targetted as
			     * ROSAT */
  int nPrimStar;            /* Number of primaries targetted as stars */
  int nScanlineStar;        /* Number of OK_SCANLINE objects targetted as
			     * stars */
  int nPrimSerendipity;     /* Number of primaries targetted as serendipity */
  int nScanlineSerendipity; /* Number of OK_SCANLINE objects targetted as
			     * serendipity */
  int nPrimPrimType[32];    /* Number of primaries targetted in each primary
			     * target type */
  int nScanlinePrimType[32];/* Number of OK_SCANLINE objects targetted in each
			     * primary target type */
  int nPrimSecType[32];     /* Number of primaries targetted in each secondary
			     * target type */
  int nScanlineSecType[32]; /* Number of OK_SCANLINE objects targetted in each
			     * secondary target type */

  /* Proper motion diagnostics (all based on OK_SCANLINE sample) */
  float usnoGMin;           /* Minimum model g' mag in usno histograms */
  float usnoGMax;           /* Maximum model g' mag in usno histograms */
  float usnoNGBins;         /* Number of bins in usno g' histogram */
  float usnoDistanceMax;    /* Maximum distance in usno histograms (arcsec) */
  float usnoNDistanceBins;  /* Number of bins in usno distance histograms */
  float usnoNAngleBins;     /* Number of bins in usno angle histograms */
  HG *usnoAllHist;          /* usno all OK_SCANLINE count vs. mag */
  HG *usnoMatchedHist;      /* usno matched OK_SCANLINE count vs. mag */
  HG *usnoStarDistanceHist; /* usno distance histogram for stars */
  HG *usnoStarAngleHist;    /* usno angle histogram for stars */
  HG *usnoGalDistanceHist;  /* usno distance histogram for galaxies */
  HG *usnoGalAngleHist;     /* usno angle histogram for galaxies */
} TA_DIAG; /* pragma SCHEMA */

/* Forward declarations */

TA_DIAG*
taDiagNew();

RET_CODE
taDiagUpdate(TA_DIAG *diag, const TA_CALIB_OBJ *obj);
				 

#ifdef __cplusplus
}
#endif

#endif
