Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 42852)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 42853)
@@ -971,4 +971,13 @@
 unsigned int PhotStackID (PhotCode *code, Average *average, SecFilt *secfilt);
 
+float Phot90PCT (PhotCode *code, Average *average, SecFilt *secfilt);
+float Phot80PCT (PhotCode *code, Average *average, SecFilt *secfilt);
+float Phot20PCT (PhotCode *code, Average *average, SecFilt *secfilt);
+float Phot10PCT (PhotCode *code, Average *average, SecFilt *secfilt);
+float Phot90PCT_SIG (PhotCode *code, Average *average, SecFilt *secfilt);
+float Phot80PCT_SIG (PhotCode *code, Average *average, SecFilt *secfilt);
+float Phot20PCT_SIG (PhotCode *code, Average *average, SecFilt *secfilt);
+float Phot10PCT_SIG (PhotCode *code, Average *average, SecFilt *secfilt);
+
 float PhotColorForCode (Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code);
 int PhotColor (Average *average, SecFilt *secfilt, Measure *measure, int c1, int c2, double *color);
Index: trunk/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvodb.h	(revision 42852)
+++ trunk/Ohana/src/libdvo/include/dvodb.h	(revision 42853)
@@ -60,4 +60,15 @@
   MAG_OPTION_MIN,
   MAG_OPTION_MAX,
+
+  MAG_OPTION_90PCT, // overloaded on MpsfStk
+  MAG_OPTION_80PCT, // overloaded on FpsfStk
+  MAG_OPTION_20PCT, // overloaded on MkronStk
+  MAG_OPTION_10PCT, // overloaded on FkronStk
+
+  MAG_OPTION_90PCTSIG, // overloaded on MpsfWrp 
+  MAG_OPTION_80PCTSIG, // overloaded on FpsfWrp 
+  MAG_OPTION_20PCTSIG, // overloaded on MkronWrp
+  MAG_OPTION_10PCTSIG, // overloaded on FkronWrp
+
   MAG_OPTION_NCODE,
   MAG_OPTION_NPHOT, // Nused
Index: trunk/Ohana/src/libdvo/src/dbExtractAverages.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 42852)
+++ trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 42853)
@@ -366,4 +366,28 @@
 	case MAG_OPTION_MAX:
 	  value.Flt = PhotMmax (field->photcode, average, secfilt);
+	  break;
+	case MAG_OPTION_90PCT:
+	  value.Flt = Phot90PCT (field->photcode, average, secfilt);
+	  break;
+	case MAG_OPTION_80PCT:
+	  value.Flt = Phot80PCT (field->photcode, average, secfilt);
+	  break;
+	case MAG_OPTION_20PCT:
+	  value.Flt = Phot20PCT (field->photcode, average, secfilt);
+	  break;
+	case MAG_OPTION_10PCT:
+	  value.Flt = Phot10PCT (field->photcode, average, secfilt);
+	  break;
+	case MAG_OPTION_90PCTSIG:
+	  value.Flt = Phot90PCT_SIG (field->photcode, average, secfilt);
+	  break;
+	case MAG_OPTION_80PCTSIG:
+	  value.Flt = Phot80PCT_SIG (field->photcode, average, secfilt);
+	  break;
+	case MAG_OPTION_20PCTSIG:
+	  value.Flt = Phot20PCT_SIG (field->photcode, average, secfilt);
+	  break;
+	case MAG_OPTION_10PCTSIG:
+	  value.Flt = Phot10PCT_SIG (field->photcode, average, secfilt);
 	  break;
 	case MAG_OPTION_NCODE: {
Index: trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 42852)
+++ trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 42853)
@@ -252,4 +252,15 @@
 	case MAG_OPTION_MIN:        { value.Flt = PhotMmin (equiv, average, secfilt); break;}
 	case MAG_OPTION_MAX:        { value.Flt = PhotMmax (equiv, average, secfilt); break;}
+
+	case MAG_OPTION_90PCT:      { value.Flt = Phot90PCT (equiv, average, secfilt); break;}
+	case MAG_OPTION_80PCT:      { value.Flt = Phot80PCT (equiv, average, secfilt); break;}
+	case MAG_OPTION_20PCT:      { value.Flt = Phot20PCT (equiv, average, secfilt); break;}
+	case MAG_OPTION_10PCT:      { value.Flt = Phot10PCT (equiv, average, secfilt); break;}
+
+	case MAG_OPTION_90PCTSIG:   { value.Flt = Phot90PCT_SIG (equiv, average, secfilt); break;}
+	case MAG_OPTION_80PCTSIG:   { value.Flt = Phot80PCT_SIG (equiv, average, secfilt); break;}
+	case MAG_OPTION_20PCTSIG:   { value.Flt = Phot20PCT_SIG (equiv, average, secfilt); break;}
+	case MAG_OPTION_10PCTSIG:   { value.Flt = Phot10PCT_SIG (equiv, average, secfilt); break;}
+
 	case MAG_OPTION_NCODE:      { value.Int = PhotNcode (equiv, average, secfilt); break; }
 	case MAG_OPTION_NPHOT:      { value.Int = PhotNphot (equiv, average, secfilt, field->magClass, field->magSource); break; }
Index: trunk/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbFields.c	(revision 42852)
+++ trunk/Ohana/src/libdvo/src/dbFields.c	(revision 42853)
@@ -251,4 +251,15 @@
   if (!strcasecmp (string, "min"))           return MAG_OPTION_MIN;
   if (!strcasecmp (string, "max"))           return MAG_OPTION_MAX;
+
+  if (!strcasecmp (string, "pct90"))         return MAG_OPTION_90PCT;
+  if (!strcasecmp (string, "pct80"))         return MAG_OPTION_80PCT;
+  if (!strcasecmp (string, "pct20"))         return MAG_OPTION_20PCT;
+  if (!strcasecmp (string, "pct10"))         return MAG_OPTION_10PCT;
+
+  if (!strcasecmp (string, "pct90sig"))      return MAG_OPTION_90PCTSIG;
+  if (!strcasecmp (string, "pct80sig"))      return MAG_OPTION_80PCTSIG;
+  if (!strcasecmp (string, "pct20sig"))      return MAG_OPTION_20PCTSIG;
+  if (!strcasecmp (string, "pct10sig"))      return MAG_OPTION_10PCTSIG;
+
   if (!strcasecmp (string, "ncode"))         return MAG_OPTION_NCODE;
   if (!strcasecmp (string, "nphot"))         return MAG_OPTION_NPHOT;
@@ -767,4 +778,10 @@
   field->name  = strcreate (fieldName);
 
+  // XXX can we just replace the : with _ ?
+  // XXX not for now: this will break old scripts using mag:ave as the vector name
+  // for (j = 0; field->name[j]; j++) { 
+  //   if (field->name[j] == ':') field->name[j] = ' '; 
+  // }
+
   // if either GLON or GLAT is requested, we set up a static tranformation 
   // at prepare to calculate the values only once for each row
Index: trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 42852)
+++ trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 42853)
@@ -984,4 +984,108 @@
   Mmax  = (Ns == -1) ? NAN : secfilt[Ns].Mmax;
   return (Mmax);
+}
+
+float Phot90PCT (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  int Ns;
+  float value;
+
+  if (code == NULL) return NAN;
+
+  Ns = photcodes[0].hashNsec[code[0].code];
+  value = (Ns == -1) ? NAN : secfilt[Ns].MpsfStk;
+  return value;
+}
+
+float Phot80PCT (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  int Ns;
+  float value;
+
+  if (code == NULL) return NAN;
+
+  Ns = photcodes[0].hashNsec[code[0].code];
+  value = (Ns == -1) ? NAN : secfilt[Ns].FpsfStk;
+  return value;
+}
+
+float Phot20PCT (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  int Ns;
+  float value;
+
+  if (code == NULL) return NAN;
+
+  Ns = photcodes[0].hashNsec[code[0].code];
+  value = (Ns == -1) ? NAN : secfilt[Ns].MkronStk;
+  return value;
+}
+
+float Phot10PCT (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  int Ns;
+  float value;
+
+  if (code == NULL) return NAN;
+
+  Ns = photcodes[0].hashNsec[code[0].code];
+  value = (Ns == -1) ? NAN : secfilt[Ns].FkronStk;
+  return value;
+}
+
+float Phot90PCT_SIG (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  int Ns;
+  float value;
+
+  if (code == NULL) return NAN;
+
+  Ns = photcodes[0].hashNsec[code[0].code];
+  value = (Ns == -1) ? NAN : secfilt[Ns].MpsfWrp;
+  return value;
+}
+
+float Phot80PCT_SIG (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  int Ns;
+  float value;
+
+  if (code == NULL) return NAN;
+
+  Ns = photcodes[0].hashNsec[code[0].code];
+  value = (Ns == -1) ? NAN : secfilt[Ns].FpsfWrp;
+  return value;
+}
+
+float Phot20PCT_SIG (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  int Ns;
+  float value;
+
+  if (code == NULL) return NAN;
+
+  Ns = photcodes[0].hashNsec[code[0].code];
+  value = (Ns == -1) ? NAN : secfilt[Ns].MkronWrp;
+  return value;
+}
+
+float Phot10PCT_SIG (PhotCode *code, Average *average, SecFilt *secfilt) {
+  OHANA_UNUSED_PARAM(average);
+
+  int Ns;
+  float value;
+
+  if (code == NULL) return NAN;
+
+  Ns = photcodes[0].hashNsec[code[0].code];
+  value = (Ns == -1) ? NAN : secfilt[Ns].FkronWrp;
+  return value;
 }
 
