Index: /branches/eam_branches/ipp-20110710/psphot/src/psphotSersicModelClass.c
===================================================================
--- /branches/eam_branches/ipp-20110710/psphot/src/psphotSersicModelClass.c	(revision 32238)
+++ /branches/eam_branches/ipp-20110710/psphot/src/psphotSersicModelClass.c	(revision 32239)
@@ -115,4 +115,17 @@
 }
 
+/* the Sersic model class guess system uses a set of empirically-determined fits to several
+ * relationships: index vs psf-kron mags, total mag vs index, major axis vs index, minor axis
+ * vs index.  all are functions of the aspect ratio and of the ratio between the measure major
+ * axis and the size of the psf.  Below we have the fits for these different ranges.  
+
+ * aspect ratio values: 1.0, 0.5, 0.33, 0.2
+ * psf ratio values: 0.5, 1.0, 2.0, 4.0
+
+ * psf ratio ranges: 0.5-0.8,  0.8-1.5, 1.5-3.0, 3.0-4.0
+ * apt ratio ranges: 1.0-0.71, 0.71-0.41, 0.41-0.25, 0.25-0.20
+
+ */
+
 void psphotSersicModelClassInit () {
 
@@ -124,9 +137,9 @@
     classArray = psArrayAllocEmpty (4);
 
-    // image.00.01.fit.dat: PSFratio : 1.0, ASPratio : 1.0
-    class = psphotSersicModelClassAlloc();
-
-    class->PSFratioMin = 1.0;
-    class->PSFratioMax = 1.5;
+    // image.00.00.fit.dat: PSFratio : 0.5, ASPratio : 1.0
+    class = psphotSersicModelClassAlloc();
+
+    class->PSFratioMin =  0.5;
+    class->PSFratioMax =  0.8;
     class->ASPratioMin = 0.71;
     class->ASPratioMax = 1.00;
@@ -136,31 +149,15 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: -0.430070611162, C1: 0.0511725134843
-    class->IndexToMajor->coeff[0] = -0.430070611162;
-    class->IndexToMajor->coeff[1] = 0.0511725134843;
-
-    // minor: C0: -0.250221103738, C1: 0.0136204422354
-    class->IndexToMinor->coeff[0] = -0.250221103738;
-    class->IndexToMinor->coeff[1] = 0.0136204422354;
-
-    // MagOffset: C0: -0.0718507604436, C1: -0.0518624470415
-    class->IndexToTotalMag->coeff[0] = -0.0718507604436;
-    class->IndexToTotalMag->coeff[1] = -0.0518624470415;
-
-    // KronMag: C0: -1.80936771396, C1: 0.344933296013, C2: -0.0314000083805
-    class->KronToIndex->coeff[0] = -1.80936771396;
-    class->KronToIndex->coeff[1] = 0.344933296013;
-    class->KronToIndex->coeff[2] = -0.0314000083805;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
-
-    psArrayAdd(classArray, 4, class);
-    psFree (class);
-
-    // image.00.02.fit.dat: PSFratio : 2.0, ASPratio : 1.0
-    class = psphotSersicModelClassAlloc();
-
-    class->PSFratioMin =  1.5;
-    class->PSFratioMax =  4.0; // note : missing 4.0, 1.0
+# include "psphotSersicGuess.00.00.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
+
+    psArrayAdd(classArray, 4, class);
+    psFree (class);
+
+    // image.00.01.fit.dat: PSFratio : 1.0, ASPratio : 1.0
+    class = psphotSersicModelClassAlloc();
+
+    class->PSFratioMin =  0.8;
+    class->PSFratioMax =  1.5;
     class->ASPratioMin = 0.71;
     class->ASPratioMax = 1.00;
@@ -170,22 +167,60 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: -0.0611883230251, C1: 0.0498266924052
-    class->IndexToMajor->coeff[0] = -0.0611883230251;
-    class->IndexToMajor->coeff[1] = 0.0498266924052;
-
-    // minor: C0: -0.0471497475843, C1: 0.0498093464447
-    class->IndexToMinor->coeff[0] = -0.0471497475843;
-    class->IndexToMinor->coeff[1] = 0.0498093464447;
-
-    // MagOffset: C0: 0.133350843774, C1: -0.147490621217
-    class->IndexToTotalMag->coeff[0] = 0.133350843774;
-    class->IndexToTotalMag->coeff[1] = -0.147490621217;
-
-    // KronMag: C0: -3.81043970737, C1: 1.11738875295, C2: -0.121059914305
-    class->KronToIndex->coeff[0] = -3.81043970737;
-    class->KronToIndex->coeff[1] = 1.11738875295;
-    class->KronToIndex->coeff[2] = -0.121059914305;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
+# include "psphotSersicGuess.00.01.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
+
+    psArrayAdd(classArray, 4, class);
+    psFree (class);
+
+    // image.00.02.fit.dat: PSFratio : 2.0, ASPratio : 1.0
+    class = psphotSersicModelClassAlloc();
+
+    class->PSFratioMin =  1.5;
+    class->PSFratioMax =  3.0;
+    class->ASPratioMin = 0.71;
+    class->ASPratioMax = 1.00;
+    class->KronToIndex = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 2);
+    class->IndexToTotalMag = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMajor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+
+# include "psphotSersicGuess.00.02.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
+
+    psArrayAdd(classArray, 4, class);
+    psFree (class);
+    
+    // image.00.03.fit.dat: PSFratio : 4.0, ASPratio : 1.0
+    class = psphotSersicModelClassAlloc();
+
+    class->PSFratioMin =  3.0;
+    class->PSFratioMax =  4.0;
+    class->ASPratioMin = 0.71;
+    class->ASPratioMax = 1.00;
+    class->KronToIndex = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 2);
+    class->IndexToTotalMag = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMajor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+
+# include "psphotSersicGuess.00.03.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
+    
+    psArrayAdd(classArray, 4, class);
+    psFree (class);
+
+    // image.01.00.fit.dat: PSFratio : 0.5, ASPratio : 0.5
+    class = psphotSersicModelClassAlloc();
+
+    class->PSFratioMin =  0.5;
+    class->PSFratioMax =  0.8;
+    class->ASPratioMin = 0.41;
+    class->ASPratioMax = 0.71;
+    class->KronToIndex = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 2);
+    class->IndexToTotalMag = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMajor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+
+# include "psphotSersicGuess.01.00.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
     
     psArrayAdd(classArray, 4, class);
@@ -195,5 +230,5 @@
     class = psphotSersicModelClassAlloc();
 
-    class->PSFratioMin =  1.0;
+    class->PSFratioMin =  0.8;
     class->PSFratioMax =  1.5;
     class->ASPratioMin = 0.41;
@@ -204,27 +239,10 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: -0.315072669277, C1: 0.00877759328113
-    class->IndexToMajor->coeff[0] = -0.315072669277;
-    class->IndexToMajor->coeff[1] = 0.00877759328113;
-
-    // minor: C0: -0.315072669277, C1: 0.00877759328113
-    class->IndexToMinor->coeff[0] = -0.315072669277;
-    class->IndexToMinor->coeff[1] = 0.00877759328113;
-
-    // MagOffset: C0: -0.441283222989, C1: 0.0531287339075
-    class->IndexToTotalMag->coeff[0] = -0.441283222989;
-    class->IndexToTotalMag->coeff[1] = 0.0531287339075;
-
-    // KronMag: C0: -0.819564188427, C1: -0.0333590360661, C2: 0.00814022994725
-    // XXX use a linear fit?
-    class->KronToIndex->coeff[0] = -0.819564188427;
-    class->KronToIndex->coeff[1] = -0.0333590360661;
-    class->KronToIndex->coeff[2] = 0.00814022994725;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
-    
-    psArrayAdd(classArray, 4, class);
-    psFree (class);
-
+# include "psphotSersicGuess.01.01.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
+
+    psArrayAdd(classArray, 4, class);
+    psFree (class);
+    
     // image.01.02.fit.dat: PSFratio : 2.0, ASPratio : 0.5
     class = psphotSersicModelClassAlloc();
@@ -239,22 +257,6 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: 0.0394644381614, C1: -0.00261362634784
-    class->IndexToMajor->coeff[0] = 0.0394644381614;
-    class->IndexToMajor->coeff[1] = -0.00261362634784;
-
-    // minor: C0: -0.314123499959, C1: 0.0215627071372
-    class->IndexToMinor->coeff[0] = -0.314123499959;
-    class->IndexToMinor->coeff[1] = 0.0215627071372;
-
-    // MagOffset: C0: 0.00475524952411, C1: -0.0960576544787
-    class->IndexToTotalMag->coeff[0] = 0.00475524952411;
-    class->IndexToTotalMag->coeff[1] = -0.0960576544787;
-
-    // KronMag: C0: -2.77961654208, C1: 0.719625939973, C2: -0.0772103821458
-    class->KronToIndex->coeff[0] = -2.77961654208;
-    class->KronToIndex->coeff[1] = 0.719625939973;
-    class->KronToIndex->coeff[2] = -0.0772103821458;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
+# include "psphotSersicGuess.01.02.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
     
     psArrayAdd(classArray, 4, class);
@@ -273,22 +275,24 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: 0.0966828791109, C1: 0.0508749927221
-    class->IndexToMajor->coeff[0] = 0.0966828791109;
-    class->IndexToMajor->coeff[1] = 0.0508749927221;
-
-    // minor: C0: -0.163878057365, C1: 0.0621817242826
-    class->IndexToMinor->coeff[0] = -0.163878057365;
-    class->IndexToMinor->coeff[1] = 0.0621817242826;
-
-    // MagOffset: C0: -0.0584285249407, C1: -0.115758644152
-    class->IndexToTotalMag->coeff[0] = -0.0584285249407;
-    class->IndexToTotalMag->coeff[1] = -0.115758644152;
-
-    // KronMag: C0: -4.41677343695, C1: 1.23569951267, C2: -0.131733958476
-    class->KronToIndex->coeff[0] = -4.41677343695;
-    class->KronToIndex->coeff[1] = 1.23569951267;
-    class->KronToIndex->coeff[2] = -0.131733958476;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
+# include "psphotSersicGuess.01.03.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
+    
+    psArrayAdd(classArray, 4, class);
+    psFree (class);
+
+    // image.02.00.fit.dat: PSFratio : 0.5, ASPratio : 0.33
+    class = psphotSersicModelClassAlloc();
+
+    class->PSFratioMin =  0.5;
+    class->PSFratioMax =  0.8;
+    class->ASPratioMin = 0.25;
+    class->ASPratioMax = 0.41;
+    class->KronToIndex = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 2);
+    class->IndexToTotalMag = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMajor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+
+# include "psphotSersicGuess.02.00.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
     
     psArrayAdd(classArray, 4, class);
@@ -298,5 +302,5 @@
     class = psphotSersicModelClassAlloc();
 
-    class->PSFratioMin =  1.0;
+    class->PSFratioMin =  0.8;
     class->PSFratioMax =  1.5;
     class->ASPratioMin = 0.25;
@@ -307,23 +311,6 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: -0.154899753946, C1: -0.0193502412043
-    class->IndexToMajor->coeff[0] = -0.154899753946;
-    class->IndexToMajor->coeff[1] = -0.0193502412043;
-
-    // minor: C0: -0.154899753946, C1: -0.0193502412043
-    class->IndexToMinor->coeff[0] = -0.154899753946;
-    class->IndexToMinor->coeff[1] = -0.0193502412043;
-
-    // MagOffset: C0: -0.696799097791, C1: 0.098950200942
-    class->IndexToTotalMag->coeff[0] = -0.696799097791;
-    class->IndexToTotalMag->coeff[1] = 0.098950200942;
-
-    // KronMag: C0: -0.567489477137, C1: 0.00400934329328, C2: -0.00641637764069
-    // XXX use a linear fit?
-    class->KronToIndex->coeff[0] = -0.567489477137;
-    class->KronToIndex->coeff[1] = 0.00400934329328;
-    class->KronToIndex->coeff[2] = -0.00641637764069;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
+# include "psphotSersicGuess.02.01.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
     
     psArrayAdd(classArray, 4, class);
@@ -342,22 +329,6 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: -0.227923466363, C1: 0.078789082243
-    class->IndexToMajor->coeff[0] = -0.227923466363;
-    class->IndexToMajor->coeff[1] = 0.078789082243;
-
-    // minor: C0: -0.39010838322, C1: -0.0191311211209
-    class->IndexToMinor->coeff[0] = -0.39010838322;
-    class->IndexToMinor->coeff[1] = -0.0191311211209;
-
-    // MagOffset: C0: -0.196058611899, C1: -0.0364610432252
-    class->IndexToTotalMag->coeff[0] = -0.196058611899;
-    class->IndexToTotalMag->coeff[1] = -0.0364610432252;
-
-    // KronMag: C0: -1.94707725307, C1: 0.296502645791, C2: -0.0225310468023
-    class->KronToIndex->coeff[0] = -1.94707725307;
-    class->KronToIndex->coeff[1] = 0.296502645791;
-    class->KronToIndex->coeff[2] = -0.0225310468023;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
+# include "psphotSersicGuess.02.02.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
     
     psArrayAdd(classArray, 4, class);
@@ -376,22 +347,24 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: -0.00875235291975, C1: 0.0644897947208
-    class->IndexToMajor->coeff[0] = -0.00875235291975;
-    class->IndexToMajor->coeff[1] = 0.0644897947208;
-
-    // minor: C0: -0.250701690848, C1: 0.0431820606974
-    class->IndexToMinor->coeff[0] = -0.250701690848;
-    class->IndexToMinor->coeff[1] = 0.0431820606974;
-
-    // MagOffset: C0: -0.158069871256, C1: -0.0811671351817
-    class->IndexToTotalMag->coeff[0] = -0.158069871256;
-    class->IndexToTotalMag->coeff[1] = -0.0811671351817;
-
-    // KronMag: C0: -3.6119244064, C1: 0.8631113861, C2: -0.0853296107645
-    class->KronToIndex->coeff[0] = -3.6119244064;
-    class->KronToIndex->coeff[1] = 0.8631113861;
-    class->KronToIndex->coeff[2] = -0.0853296107645;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
+# include "psphotSersicGuess.02.03.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
+    
+    psArrayAdd(classArray, 4, class);
+    psFree (class);
+
+    // image.03.00.fit.dat: PSFratio : 0.5, ASPratio : 0.2
+    class = psphotSersicModelClassAlloc();
+
+    class->PSFratioMin =  0.5;
+    class->PSFratioMax =  0.8;
+    class->ASPratioMin = 0.20;
+    class->ASPratioMax = 0.25;
+    class->KronToIndex = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 2);
+    class->IndexToTotalMag = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMajor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+
+# include "psphotSersicGuess.03.00.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
     
     psArrayAdd(classArray, 4, class);
@@ -401,31 +374,15 @@
     class = psphotSersicModelClassAlloc();
 
-    class->PSFratioMin =   1.0;
-    class->PSFratioMax =   1.5;
-    class->ASPratioMin =  0.20;
-    class->ASPratioMax =  0.25;
-    class->KronToIndex = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 2);
-    class->IndexToTotalMag = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
-    class->IndexToMajor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
-    class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
-
-    // major: C0: -0.212431708382, C1: 0.00426679037981
-    class->IndexToMajor->coeff[0] = -0.212431708382;
-    class->IndexToMajor->coeff[1] = 0.00426679037981;
-
-    // minor: C0: -0.212431708382, C1: 0.00426679037981
-    class->IndexToMinor->coeff[0] = -0.212431708382;
-    class->IndexToMinor->coeff[1] = 0.00426679037981;
-
-    // MagOffset: C0: -0.62070857795, C1: 0.000773428325368
-    class->IndexToTotalMag->coeff[0] = -0.62070857795;
-    class->IndexToTotalMag->coeff[1] = 0.000773428325368;
-
-    // KronMag: C0: -0.460478728787, C1: 0.00587256401903, C2: -0.002344873666
-    class->KronToIndex->coeff[0] = -0.460478728787;
-    class->KronToIndex->coeff[1] = 0.00587256401903;
-    class->KronToIndex->coeff[2] = -0.002344873666;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
+    class->PSFratioMin =  0.8;
+    class->PSFratioMax =  1.5;
+    class->ASPratioMin = 0.20;
+    class->ASPratioMax = 0.25;
+    class->KronToIndex = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 2);
+    class->IndexToTotalMag = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMajor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+    class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+
+# include "psphotSersicGuess.03.01.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
     
     psArrayAdd(classArray, 4, class);
@@ -444,22 +401,6 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: -0.385105744329, C1: 0.066302247629
-    class->IndexToMajor->coeff[0] = -0.385105744329;
-    class->IndexToMajor->coeff[1] = 0.066302247629;
-
-    // minor: C0: -0.385105744329, C1: 0.066302247629
-    class->IndexToMinor->coeff[0] = -0.385105744329;
-    class->IndexToMinor->coeff[1] = 0.066302247629;
-
-    // MagOffset: C0: -0.359723538992, C1: 0.00907435268225
-    class->IndexToTotalMag->coeff[0] = -0.359723538992;
-    class->IndexToTotalMag->coeff[1] = 0.00907435268225;
-
-    // KronMag: C0: -1.42088663998, C1: 0.0988810020043, C2: -0.00428297294884
-    class->KronToIndex->coeff[0] = -1.42088663998;
-    class->KronToIndex->coeff[1] = 0.0988810020043;
-    class->KronToIndex->coeff[2] = -0.00428297294884;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
+# include "psphotSersicGuess.03.02.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
     
     psArrayAdd(classArray, 4, class);
@@ -478,22 +419,6 @@
     class->IndexToMinor = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
 
-    // major: C0: -0.132561970043, C1: 0.064707352393
-    class->IndexToMajor->coeff[0] = -0.132561970043;
-    class->IndexToMajor->coeff[1] = 0.064707352393;
-
-    // minor: C0: -0.195782196124, C1: -0.0457728222883
-    class->IndexToMinor->coeff[0] = -0.195782196124;
-    class->IndexToMinor->coeff[1] = -0.0457728222883;
-
-    // MagOffset: C0: -0.208808020613, C1: -0.0605412708629
-    class->IndexToTotalMag->coeff[0] = -0.208808020613;
-    class->IndexToTotalMag->coeff[1] = -0.0605412708629;
-
-    // KronMag: C0: -3.01650012413, C1: 0.618382890037, C2: -0.0615504992544
-    class->KronToIndex->coeff[0] = -3.01650012413;
-    class->KronToIndex->coeff[1] = 0.618382890037;
-    class->KronToIndex->coeff[2] = -0.0615504992544;
-
-    psphotSersicModelClassSetIndexRange(class, 0.5, 6.0);
+# include "psphotSersicGuess.03.03.h"    
+    psphotSersicModelClassSetIndexRange(class, 1.0, 4.0);
     
     psArrayAdd(classArray, 4, class);
