Index: trunk/psphot/src/psphotStackObjects.c
===================================================================
--- trunk/psphot/src/psphotStackObjects.c	(revision 32348)
+++ trunk/psphot/src/psphotStackObjects.c	(revision 32633)
@@ -70,5 +70,6 @@
 
     // S/N limit to perform full non-linear fits
-    float SN_LIM = psMetadataLookupF32 (&status, recipe, "EXTENDED_SOURCE_SN_LIM");
+    float SN_LIM_PETRO  = psMetadataLookupF32 (&status, recipe, "EXTENDED_SOURCE_SN_LIM");
+    float SN_LIM_RADIAL = psMetadataLookupF32 (&status, recipe, "RADIAL_APERTURES_SN_LIM");
 
     bool doPetroStars   = psMetadataLookupBool (&status, recipe, "PETROSIAN_FOR_STARS");
@@ -81,5 +82,6 @@
 	// we check each source for an object and keep the object if any source is valid
 
-	bool keepObject = false;
+	bool keepObjectRadial = false;
+	bool keepObjectPetro = false;
 	for (int j = 0; j < object->sources->n; j++) {
 
@@ -94,21 +96,4 @@
 	    if (source->mode & PM_SOURCE_MODE_SATSTAR) continue;
 	    
-	// optionally allow non-extended objects to get petrosians as well
-	if (!doPetroStars) {
-	    if (!(source->mode & PM_SOURCE_MODE_EXT_LIMIT)) continue;
-	    if (source->type == PM_SOURCE_TYPE_STAR) continue;
-	}
-
-	    // limit selection to some SN limit
-	    // assert (source->peak); // how can a source not have a peak?
-	    // limit selection to some SN limit
-	    bool skipSource = false;
-	    if (source->mode & PM_SOURCE_MODE_EXT_LIMIT) {
-		skipSource = (source->moments->KronFlux < SN_LIM * source->moments->KronFluxErr);
-	    } else {
-		skipSource = (sqrt(source->peak->detValue) < SN_LIM);
-	    }
-	    if (skipSource) continue;
-
 	    // limit selection by analysis region (this automatically apply
 	    if (source->peak->x < AnalysisRegion.x0) continue;
@@ -117,5 +102,23 @@
 	    if (source->peak->y > AnalysisRegion.y1) continue;
 	    
-	    keepObject = true;
+	    // SN limit tests for RADIAL APERTURES:
+	    bool skipSourceRadial = false;
+	    if (source->mode & PM_SOURCE_MODE_EXT_LIMIT) {
+		skipSourceRadial = (source->moments->KronFlux < SN_LIM_RADIAL * source->moments->KronFluxErr);
+	    } else {
+		skipSourceRadial = (sqrt(source->peak->detValue) < SN_LIM_RADIAL);
+	    }
+	    if (!skipSourceRadial) keepObjectRadial = true;
+
+	    // SN limit tests for PETRO
+	    bool skipSourcePetro = false;
+	    if (source->mode & PM_SOURCE_MODE_EXT_LIMIT) {
+		skipSourcePetro = (source->moments->KronFlux < SN_LIM_PETRO * source->moments->KronFluxErr);
+	    } else {
+		skipSourcePetro = doPetroStars ? (sqrt(source->peak->detValue) < SN_LIM_PETRO) : true;
+	    }
+	    if (!skipSourcePetro) keepObjectPetro = true;
+
+	    keepObjectPetro = true;
 	}
 
@@ -128,10 +131,18 @@
 	    // avoid the single-detection tests
 
-	    if (keepObject) {
-		source->tmpFlags |=  PM_SOURCE_TMPF_STACK_KEEP;
-		source->tmpFlags &= ~PM_SOURCE_TMPF_STACK_SKIP;
+	    if (keepObjectPetro) {
+		source->tmpFlags |=  PM_SOURCE_TMPF_PETRO_KEEP;
+		source->tmpFlags &= ~PM_SOURCE_TMPF_PETRO_SKIP;
 	    } else {
-		source->tmpFlags |=  PM_SOURCE_TMPF_STACK_SKIP;
-		source->tmpFlags &= ~PM_SOURCE_TMPF_STACK_KEEP;
+		source->tmpFlags |=  PM_SOURCE_TMPF_PETRO_SKIP;
+		source->tmpFlags &= ~PM_SOURCE_TMPF_PETRO_KEEP;
+	    }	    
+
+	    if (keepObjectRadial) {
+		source->tmpFlags |=  PM_SOURCE_TMPF_RADIAL_KEEP;
+		source->tmpFlags &= ~PM_SOURCE_TMPF_RADIAL_SKIP;
+	    } else {
+		source->tmpFlags |=  PM_SOURCE_TMPF_RADIAL_SKIP;
+		source->tmpFlags &= ~PM_SOURCE_TMPF_RADIAL_KEEP;
 	    }	    
 	}
