Index: trunk/Ohana/src/addstar/Makefile
===================================================================
--- trunk/Ohana/src/addstar/Makefile	(revision 26370)
+++ trunk/Ohana/src/addstar/Makefile	(revision 26384)
@@ -81,5 +81,6 @@
 $(SRC)/ReadImageHeader.$(ARCH).o \
 $(SRC)/UpdateImageIDs.$(ARCH).o \
-$(SRC)/update_coords.$(ARCH).o
+$(SRC)/update_coords.$(ARCH).o \
+$(SRC)/psps_ids.$(ARCH).o
 
 ADDSTARD = \
@@ -118,5 +119,6 @@
 $(SRC)/opening_angle.$(ARCH).o \
 $(SRC)/replace_match.$(ARCH).o \
-$(SRC)/update_coords.$(ARCH).o
+$(SRC)/update_coords.$(ARCH).o \
+$(SRC)/psps_ids.$(ARCH).o
 
 ADDSTART = \
@@ -157,5 +159,6 @@
 $(SRC)/NewImage_Thread.$(ARCH).o \
 $(SRC)/NewReflist_Thread.$(ARCH).o \
-$(SRC)/NewRefcat_Thread.$(ARCH).o 
+$(SRC)/NewRefcat_Thread.$(ARCH).o \
+$(SRC)/psps_ids.$(ARCH).o
 
 ADDSTARC = \
@@ -206,5 +209,6 @@
 $(SRC)/ConfigInit.$(ARCH).o \
 $(SRC)/Shutdown.$(ARCH).o \
-$(SRC)/SetSignals.$(ARCH).o
+$(SRC)/SetSignals.$(ARCH).o \
+$(SRC)/psps_ids.$(ARCH).o
 
 SEDSTAR = \
Index: trunk/Ohana/src/addstar/include/addstar.h
===================================================================
--- trunk/Ohana/src/addstar/include/addstar.h	(revision 26370)
+++ trunk/Ohana/src/addstar/include/addstar.h	(revision 26384)
@@ -289,4 +289,8 @@
 PhotCode *pmm_get_photcode (char *emulsion, char *filter);
 
+#define PSPS_ID TRUE
+uint64_t CreatePSPSDetectionID(double tobs, int ccdid, int detID);
+uint64_t CreatePSPSObjectID(double ra, double dec);
+
 // this is a gnu extension?? caution!
 void *memrchr(const void *s, int c, size_t n);
Index: trunk/Ohana/src/addstar/src/FilterStars.c
===================================================================
--- trunk/Ohana/src/addstar/src/FilterStars.c	(revision 26370)
+++ trunk/Ohana/src/addstar/src/FilterStars.c	(revision 26384)
@@ -88,14 +88,13 @@
     }
 
-# if (0) 
     if (PSPS_ID) {
       double mjd;
       mjd = ohana_sec_to_mjd (image[0].tzero);
-      // XXX this is clearly wrong : what does PSPS want?
-      stars[N].measure.extID = PSPS_create_detectid (mjd, imageID);
+      stars[N].measure.extID = CreatePSPSDetectionID(mjd, image[0].ccdnum, stars[N].measure.detID);
+    } else {
+      stars[N].measure.extID = 0;
     }
-# endif
 
-    stars[N].measure.imageID = imageID; // this value is update in UpdateImageIDs
+    stars[N].measure.imageID = imageID; // this value is updated in UpdateImageIDs
 
     N ++;
Index: trunk/Ohana/src/addstar/src/PSPS_IDs.c
===================================================================
--- trunk/Ohana/src/addstar/src/PSPS_IDs.c	(revision 26370)
+++ 	(revision )
@@ -1,71 +1,0 @@
-# include "addstar.h"
-
-uint64_7 PSPS_create_detectID (double MJDobs, int imageID) {
-
-  // MJD has a PS lifetime range of : 3288 (2009/01/01) to 9132 (2025/01/01) (< 2^14)
-
-  static double t0 = 51544.5; // MJD @ 2000/01/01,12:00:00
-
-  uint64_t iTime;
-  uint64_t detectID;
-
-  iTime = floor(tobs - t0);
-
-  // iTime takes the upper 16 bits, imageID can take up to lower 48 bits
-  detectID = (iTime << 48) | imageID;
-
-  return detectID;
-}
-
-uint64_t PSPS_create_objID (double ra, double dec) {
-
-  static double zh = 0.0083333; // zone height = 30 arcsec
-
-  uint64_t objID;
-  uint64_t part1, part2, part3;
-
-  double zid, zresid;
-  int izone;
-
-  zid = (dec + 90.0) / zh; // 0 - 180*60*2 = 21600 (< 15 bits)
-  izone = (int) floor(zid);
-  zresid = zid -  ((float) izone); // 0 - 1.0 
-  part1 = (uint64_t)( izone  * 10000000000000) ;
-  part2 = ((uint64_t)(ra * 1 000 000.)) * 10000 ; // 0 - 360.0*1e6 = 3.6e8 (< 29 bits)
-  part3 = (int) (zresid * 10000.0) ; // 0 - 10000 (1 bit == 30/10000 arcsec = 0.003 arcsec) (< 14 bits)
-
-  objID = part1 + part2 + part3;
-
-  return objID;
-}
-
-uint64_t PSPS_create_objID_eam (double ra, double dec) {
-
-  static double zh = 0.0083333; // zone height = 30 arcsec
-
-  uint64_t objID;
-  uint64_t part1, part2, part3;
-
-  double zid, zresid;
-  int izone, ira;
-
-  zid = (dec + 90.0) / zh; // 0 - 180*60*2 = 21600 (< 15 bits)
-  izone = (int) floor(zid);
-  zresid = zid -  ((float) izone); // 0 - 1.0 
-
-  ira = ra * 1 000 000; // 0 - 360.0*1e6 = 3.6e8 (< 29 bits) 
-
-  part1 = (izone << 48);
-  part2 = (ira << 16);
-  part3 = (int) (zresid * 10000.0) ; // 0 - 10000 (1 bit == 30/10000 arcsec = 0.003 arcsec) (< 14 bits)
-
-  objID = part1 | part2 | part3;
-
-  return objID;
-}
-
-// part1 : 15 bits
-// part2 : 29 bits
-// part3 : 14 bits
-// 15 + 14 + 29 bits = 58 bits...
-
Index: trunk/Ohana/src/addstar/src/find_matches.c
===================================================================
--- trunk/Ohana/src/addstar/src/find_matches.c	(revision 26370)
+++ trunk/Ohana/src/addstar/src/find_matches.c	(revision 26384)
@@ -271,4 +271,10 @@
     catalog[0].average[Nave].catID     	   = catID;
     catalog[0].average[Nave].flags         = 0;
+    if (PSPS_ID) {
+        catalog[0].average[Nave].extID = CreatePSPSObjectID(catalog[0].average[Nave].R,
+                                                            catalog[0].average[Nave].D);
+    } else {
+        catalog[0].average[Nave].extID         = 0;
+    }
 
     objID ++;
Index: trunk/Ohana/src/addstar/src/find_matches_closest.c
===================================================================
--- trunk/Ohana/src/addstar/src/find_matches_closest.c	(revision 26370)
+++ trunk/Ohana/src/addstar/src/find_matches_closest.c	(revision 26384)
@@ -266,4 +266,11 @@
     catalog[0].average[Nave].catID     	   = catID;
     catalog[0].average[Nave].flags         = 0;
+    if (PSPS_ID) {
+        catalog[0].average[Nave].extID = CreatePSPSObjectID(catalog[0].average[Nave].R,
+                                                            catalog[0].average[Nave].D);
+    } else {
+        catalog[0].average[Nave].extID         = 0;
+    }
+
 
     objID ++;
Index: trunk/Ohana/src/addstar/src/find_matches_closest_refstars.c
===================================================================
--- trunk/Ohana/src/addstar/src/find_matches_closest_refstars.c	(revision 26370)
+++ trunk/Ohana/src/addstar/src/find_matches_closest_refstars.c	(revision 26384)
@@ -291,4 +291,10 @@
     catalog[0].average[Nave].catID     	   = catID;
     catalog[0].average[Nave].flags     	   = 0;
+    if (PSPS_ID) {
+        catalog[0].average[Nave].extID = CreatePSPSObjectID(catalog[0].average[Nave].R,
+                                                            catalog[0].average[Nave].D);
+    } else {
+        catalog[0].average[Nave].extID         = 0;
+    }
 
     objID ++;
Index: trunk/Ohana/src/addstar/src/find_matches_refstars.c
===================================================================
--- trunk/Ohana/src/addstar/src/find_matches_refstars.c	(revision 26370)
+++ trunk/Ohana/src/addstar/src/find_matches_refstars.c	(revision 26384)
@@ -261,4 +261,11 @@
     catalog[0].average[Nave].catID     	   = catID;
     catalog[0].average[Nave].flags     	   = 0;
+    if (PSPS_ID) {
+        catalog[0].average[Nave].extID = CreatePSPSObjectID(catalog[0].average[Nave].R,
+                                                            catalog[0].average[Nave].D);
+    } else {
+        catalog[0].average[Nave].extID         = 0;
+    }
+
 
     objID ++;
Index: trunk/Ohana/src/addstar/src/psps_ids.c
===================================================================
--- trunk/Ohana/src/addstar/src/psps_ids.c	(revision 26384)
+++ trunk/Ohana/src/addstar/src/psps_ids.c	(revision 26384)
@@ -0,0 +1,41 @@
+# include "addstar.h"
+
+// Compute PSPS defined IDs
+
+uint64_t
+CreatePSPSDetectionID(double tobs, int ccdid, int detID)
+{
+//    double floor();
+    // t0 for detection id is 2007-01-01 00:00:00 utc
+    double  t0 = 54101.0;
+    double diff;
+    int itmp;
+    uint64_t detectid;
+        
+    diff = floor( 100000. * (tobs - t0) );
+    itmp = diff;
+    // ccdid must be < 100
+    detectid = 1000000000*((uint64_t) itmp) + 10000000 * ((uint64_t) ccdid) +
+             ((uint64_t) detID);
+
+    return detectid;
+}
+    
+uint64_t
+CreatePSPSObjectID(double ra, double dec)
+{
+    uint64_t part1, part2, part3;
+    double zid, zresid;
+    int izone;
+    double zh = 0.0083333;
+    
+    zid = (dec + 90.) / zh;             // 0 - 180*60*2 = 21600 < 15 bits
+    izone = (int) floor(zid);
+    zresid = zid -  ((float) izone);    // 0.0 - 1.0
+
+    part1 = (uint64_t)( izone  * 10000000000000) ; 
+    part2 = ((uint64_t)(ra * 1000000.)) * 10000 ; // 0 - 360*1e6 = 3.6e8 (< 29 bits)
+    part3 = (int) (zresid * 10000.0) ; // 0 - 10000 (1 bit == 30/10000 arcsec (< 14 bits)
+
+    return part1 + part2 + part3;
+}
