Index: /trunk/ippToPsps/src/DetectionBatch.c
===================================================================
--- /trunk/ippToPsps/src/DetectionBatch.c	(revision 30188)
+++ /trunk/ippToPsps/src/DetectionBatch.c	(revision 30189)
@@ -82,5 +82,5 @@
 
     // stuff for detections table
-    uint32_t s,d, invalidDvoRows, smfJumps, unmatched, totalDetections = 0;
+    uint32_t s,d, invalidDvoRows, unmatched, totalDetections = 0;
 
     long longnull = -999;
@@ -123,5 +123,5 @@
     long i;
     bool isDuplicate;
-    uint32_t numOfDuplicates, numInvalidFlux;
+    uint32_t numOfDuplicates, numInvalidFlux, numOfInvalidIppIDet;
     long numDetectionsOut, totalDetectionsOut = 0, numPhotoRef, totalNumPhotoRef = 0;
     long* removeList = (long*)calloc(this->MAXDETECT, sizeof(long));
@@ -184,5 +184,4 @@
             numDvoDetections = dvoGetDetections(skylist, image->imageID, &dvoDetections, &maxDvoDetId);
 
-
             if (numDvoDetections > this->MAXDETECT ) {
 
@@ -227,5 +226,5 @@
 
             // loop round detections to populate some extra stuff
-            s = d = totalDetections = invalidDvoRows = smfJumps = unmatched = 0;
+            s = d = totalDetections = invalidDvoRows = unmatched = 0;
 
             // determine column numbers for certain IPP detection columns
@@ -254,17 +253,22 @@
             numOfDuplicates = 0;
             numInvalidFlux = 0;
+            numOfInvalidIppIDet = 0;
             for (long s = 0; s<nDet; s++) {
 
                 isDuplicate = false;
 
-                // count jumps in smf file
-                if (s>0 && (ippIDet[s] != (ippIDet[s-1] + 1))) smfJumps++;
-
-                while (ippIDet[s] > dvoDetections[d].meas.detID && dvoDetections[d].meas.detID <= maxDvoDetId) {
-
-                    d++;
-                    if (!dvoDetections[d].valid) invalidDvoRows++;
+                // catch crazy large or negative IPP_IDET
+                if (ippIDet[s] < 0 || ippIDet[s] > maxDvoDetId) {
+
+                    removeList[numOfDuplicates+numInvalidFlux+numOfInvalidIppIDet] = s+1;
+                    numOfInvalidIppIDet++;
                 }
-
+                else {
+                    while (ippIDet[s] > dvoDetections[d].meas.detID && dvoDetections[d].meas.detID <= maxDvoDetId) {
+
+                        d++;
+                        if (!dvoDetections[d].valid) invalidDvoRows++;
+                    }
+                }
                 if (ippIDet[s] == dvoDetections[d].meas.detID ) {
 
@@ -273,5 +277,5 @@
                     for (i=0; i<totalDetections; i++) {
                         if (thisObjId == objID[i]) {
-                            removeList[numOfDuplicates+numInvalidFlux] = s+1;
+                            removeList[numOfDuplicates+numInvalidFlux+numOfInvalidIppIDet] = s+1;
                             numOfDuplicates++;
                             isDuplicate=true;
@@ -296,5 +300,5 @@
                     // check for invalid flux values (if not already labelled as a duplicate)
                     if ( (!peakFluxOk || !instFluxOk) && !isDuplicate) {
-                        removeList[numOfDuplicates+numInvalidFlux] = s+1;
+                        removeList[numOfDuplicates+numInvalidFlux+numOfInvalidIppIDet] = s+1;
                         numInvalidFlux++;
                     }
@@ -501,5 +505,5 @@
     }
 
-    this->MAXDETECT = 150000;
+    this->MAXDETECT = 200000;
 
     this->print = print;
