Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 39632)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 39633)
@@ -922,4 +922,7 @@
 float PhotZeroPoint (Measure *measure, Average *average, SecFilt *secfilt);
 
+float PhotSecfiltPsfQf (PhotCode *code, Average *average, SecFilt *secfilt);
+float PhotSecfiltPsfQfPerfect (PhotCode *code, Average *average, SecFilt *secfilt);
+
 int   PhotSecfiltFlags (PhotCode *code, Average *average, SecFilt *secfilt);
 int   PhotNwarp (PhotCode *code, Average *average, SecFilt *secfilt);
Index: trunk/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvodb.h	(revision 39632)
+++ trunk/Ohana/src/libdvo/include/dvodb.h	(revision 39633)
@@ -59,4 +59,6 @@
   MAG_OPTION_UC_DIST, 
   MAG_OPTION_FLAGS, 
+  MAG_OPTION_PSF_QF, 
+  MAG_OPTION_PSF_QF_PERFECT, 
 
   MAG_OPTION_X11_SM_OBJ, 
Index: trunk/Ohana/src/libdvo/src/dbExtractAverages.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 39632)
+++ trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 39633)
@@ -405,4 +405,16 @@
 	  if (Nsec == -1) break;
 	  value.Int = secfilt[Nsec].flags;
+	  break;
+	}
+	case MAG_OPTION_PSF_QF: {
+	  int Nsec = GetPhotcodeNsec (field->photcode->code);
+	  if (Nsec == -1) break;
+	  value.Flt = secfilt[Nsec].psfQfMax;
+	  break;
+	}
+	case MAG_OPTION_PSF_QF_PERFECT: {
+	  int Nsec = GetPhotcodeNsec (field->photcode->code);
+	  if (Nsec == -1) break;
+	  value.Flt = secfilt[Nsec].psfQfPerfMax;
 	  break;
 	}
Index: trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 39632)
+++ trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 39633)
@@ -254,4 +254,6 @@
 	case MAG_OPTION_UC_DIST:    { value.Flt = PhotUCdist (equiv, average, secfilt); break; }
 	case MAG_OPTION_FLAGS:      { value.Int = PhotSecfiltFlags (equiv, average, secfilt); break; }
+	case MAG_OPTION_PSF_QF:         { value.Flt = PhotSecfiltPsfQf        (equiv, average, secfilt); break; }
+	case MAG_OPTION_PSF_QF_PERFECT: { value.Flt = PhotSecfiltPsfQfPerfect (equiv, average, secfilt); break; }
 	  
 	  // the following values come from the mean lensobj table
Index: trunk/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbFields.c	(revision 39632)
+++ trunk/Ohana/src/libdvo/src/dbFields.c	(revision 39633)
@@ -254,4 +254,7 @@
   if (!strcasecmp (string, "uc_dist"))       return MAG_OPTION_UC_DIST;
   if (!strcasecmp (string, "flags"))         return MAG_OPTION_FLAGS;
+  if (!strcasecmp (string, "psfqf"))         return MAG_OPTION_PSF_QF;
+  if (!strcasecmp (string, "psfqfperf"))     return MAG_OPTION_PSF_QF_PERFECT;
+  if (!strcasecmp (string, "psfqfperfect"))  return MAG_OPTION_PSF_QF_PERFECT;
   if (!strcasecmp (string, "X11_SM_OBJ"))    return MAG_OPTION_X11_SM_OBJ; 
   if (!strcasecmp (string, "X12_SM_OBJ"))    return MAG_OPTION_X12_SM_OBJ; 
Index: trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 39632)
+++ trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 39633)
@@ -831,4 +831,28 @@
 
   return secfilt[Ns].flags;
+}
+
+// return the number of detections in this filter (gpc1)
+float PhotSecfiltPsfQf (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  if (code == NULL) return 0;
+
+  int Ns = photcodes[0].hashNsec[code[0].code];
+  if (Ns == -1) return 0;
+
+  return secfilt[Ns].psfQfMax;
+}
+
+// return the number of detections in this filter (gpc1)
+float PhotSecfiltPsfQfPerfect (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  if (code == NULL) return 0;
+
+  int Ns = photcodes[0].hashNsec[code[0].code];
+  if (Ns == -1) return 0;
+
+  return secfilt[Ns].psfQfPerfMax;
 }
 
