Index: trunk/ppTranslate/src/ppMops.h
===================================================================
--- trunk/ppTranslate/src/ppMops.h	(revision 28243)
+++ trunk/ppTranslate/src/ppMops.h	(revision 28623)
@@ -7,4 +7,7 @@
 #define IN_EXTNAME "SkyChip.psf"        // Extension name for data in input
 #define OBSERVATORY_CODE "F51"          // IAU Observatory Code
+#define OUT_EXTNAME "MOPS_TRANSIENT_DETECTIONS" // Extension name for data in output
+#define SOURCE_MASK (PM_SOURCE_MODE_FAIL | PM_SOURCE_MODE_BADPSF | PM_SOURCE_MODE_SATURATED | \
+                     PM_SOURCE_MODE_CR_LIMIT | PM_SOURCE_MODE_SKY_FAILURE) // Flags to exclude
 
 // Configuration data
@@ -24,10 +27,35 @@
 } ppMopsArguments;
 
+#if 0
+TTYPE19 = 'PSF_CHISQ'          / label for field  19
+TFORM19 = '1E      '           / data format of field: 4-byte REAL
+TTYPE20 = 'CR_NSIGMA'          / label for field  20
+TFORM20 = '1E      '           / data format of field: 4-byte REAL
+TTYPE21 = 'EXT_NSIGMA'         / label for field  21
+TFORM21 = '1E      '           / data format of field: 4-byte REAL
+TTYPE22 = 'PSF_MAJOR'          / label for field  22
+TFORM22 = '1E      '           / data format of field: 4-byte REAL
+TTYPE23 = 'PSF_MINOR'          / label for field  23
+TFORM23 = '1E      '           / data format of field: 4-byte REAL
+TTYPE24 = 'PSF_THETA'          / label for field  24
+TFORM24 = '1E      '           / data format of field: 4-byte REAL
+TTYPE25 = 'PSF_QF  '           / label for field  25
+TFORM25 = '1E      '           / data format of field: 4-byte REAL
+TTYPE26 = 'PSF_NDOF'           / label for field  26
+TFORM26 = '1J      '           / data format of field: 4-byte INTEGER
+TTYPE27 = 'PSF_NPIX'           / label for field  27
+TFORM27 = '1J      '           / data format of field: 4-byte INTEGER
+TTYPE28 = 'MOMENTS_XX'         / label for field  28
+TFORM28 = '1E      '           / data format of field: 4-byte REAL
+TTYPE29 = 'MOMENTS_XY'         / label for field  29
+TFORM29 = '1E      '           / data format of field: 4-byte REAL
+TTYPE30 = 'MOMENTS_YY'         / label for field  30
+TFORM30 = '1E      '           / data format of field: 4-byte REAL
+#endif
+
 /// Parse arguments
 ppMopsArguments *ppMopsArgumentsParse(int argc, char *argv[]);
 
 typedef struct {
-    psString component;                 // Component name
-    psMetadata *header;                 // FITS header (extension names *.hdr)
     psString raBoresight, decBoresight; // RA,Dec of telescope boresight
     psString filter;                    // Filter for exposure
@@ -36,27 +64,45 @@
     double posangle;                    // Position angle
     double alt, az;                     // Telescope altitude and azimuth
-    double mjd;                         // Modified Julian Date of exposure mid-point
+    double mjd;                         // Modified Julian Date
     float seeing;                       // Seeing of exposure
-    int naxis1, naxis2;                 // Size of image
     long num;                           // Number of detections
-    psMetadata *psfHeader;              // FITS header (extension names *.psf)
-    psMetadata *table;                  // Columns of data
     psVector *x, *y;                    // Image coordinates
     psVector *ra, *dec;                 // Sky coordinates
-    psMetadata *deteffHeader;           // Detection efficiency header (extension names *.deteff)
-    psMetadata *deteffTable;            // Detection efficiency table
+    psVector *raErr, *decErr;           // Error in sky coordinates
+    psVector *mag, *magErr;             // Magnitude and associated error
+    psVector *chi2, *dof;               // Chi^2 from fitting, with associated degrees of freedom
+    psVector *cr, *extended;            // Measures of CR-ness and extendedness
+    psVector *psfMajor, *psfMinor, *psfTheta; // PSF major and minor axes, and position angle
+    psVector *quality, *numPix;               // PSF quality factor and number of pixels
+    psVector *xxMoment, *xyMoment, *yyMoment; // Moments
+    psVector *flags;                    // psphot flags
+    psVector *diffSkyfileId;            // Identifier for source image
+    psVector *naxis1, *naxis2;          // Size of image
+    psVector *mask;                     // Mask for detections
+    psVector *nPos;                     // Number of positive pixels
+    psVector *fPos;                     // Fraction of positive flux
+    psVector *nRatioBad;                // Fraction of positive pixels to negative
+    psVector *nRatioMask;               // Fraction of positive pixels to masked
+    psVector *nRatioAll;                // Fraction of positive pixels to all
 } ppMopsDetections;
 
-// Allocator
-ppMopsDetections *ppMopsDetectionsAlloc(void);
+
+ppMopsDetections *ppMopsDetectionsAlloc(long num);
+
+/// Copy a detection
+bool ppMopsDetectionsCopySingle(ppMopsDetections *target, const ppMopsDetections *source, long index);
+
+/// Purge the detections list of masked detections
+bool ppMopsDetectionsPurge(ppMopsDetections *detections);
+
 
 /// Read detections
 psArray *ppMopsRead(const ppMopsArguments *args);
 
-/// Purge duplicate detections
-bool ppMopsPurgeDuplicates(const psArray *detections);
+/// Merge detections
+ppMopsDetections *ppMopsMerge(const psArray *detections);
 
 /// Write detections
-bool ppMopsWrite(const psArray *detections, const ppMopsArguments *args);
+bool ppMopsWrite(const ppMopsDetections *detections, const ppMopsArguments *args);
 
 #endif
