Changeset 6921 for trunk/psModules/src/detrend/pmFringeStats.c
- Timestamp:
- Apr 19, 2006, 6:28:00 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/detrend/pmFringeStats.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/detrend/pmFringeStats.c
r6872 r6921 3 3 * @author Eugene Magnier, IfA 4 4 * 5 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $6 * @date $Date: 2006-04- 17 18:01:05$5 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-04-20 04:28:00 $ 7 7 * 8 8 * Copyright 2004 IfA … … 12 12 #include "pmFPA.h" 13 13 #include "pmFringeStats.h" 14 15 #define MAX(x,y) ((x) > (y) ? (x) : (y)) 16 #define MIN(x,y) ((x) < (y) ? (x) : (y)) 14 17 15 18 static void fringeRegionsFree(pmFringeRegions *fringe) … … 56 59 stats->regions = psMemIncrRefCounter(regions); 57 60 stats->f = psVectorAlloc(regions->x->n, PS_TYPE_F32); 61 stats->f->n = regions->x->n; 58 62 stats->df = psVectorAlloc(regions->x->n, PS_TYPE_F32); 63 stats->df->n = regions->x->n; 59 64 60 65 return stats; … … 77 82 scale->coeff = psVectorAlloc(nFringeFrames + 1, PS_TYPE_F32); 78 83 scale->coeffErr = psVectorAlloc(nFringeFrames + 1, PS_TYPE_F32); 84 scale->coeff->n = nFringeFrames + 1; 85 scale->coeff->n = nFringeFrames + 1; 79 86 80 87 return scale; 81 88 } 82 89 83 bool pmFringe StatsCreatePoints(pmFringeRegions *fringe, psImage *image)90 bool pmFringeRegionsCreatePoints(pmFringeRegions *fringe, psImage *image) 84 91 { 85 92 … … 92 99 fringe->y = psVectorRecycle(fringe->y, fringe->nRequested, PS_TYPE_F32); 93 100 fringe->mask = psVectorRecycle(fringe->mask, fringe->nRequested, PS_TYPE_U8); 101 fringe->x->n = fringe->y->n = fringe->mask->n = fringe->nRequested; 94 102 95 103 int nX = image->numCols; … … 116 124 if (!fringe->x || !fringe->y) { 117 125 // create the fringe vectors for this image 118 pmFringe StatsCreatePoints(fringe, readout->image);126 pmFringeRegionsCreatePoints(fringe, readout->image); 119 127 } 120 128 … … 138 146 139 147 for (int i = 0; i < fringe->x->n; i++) { 140 psRegion region = psRegionSet(xPt[i] - dX, yPt[i] - dY, xPt[i] + dX + 1, yPt[i] + dY + 1);148 psRegion region = psRegionSet(xPt[i] - dX, xPt[i] + dX + 1, yPt[i] - dY, yPt[i] + dY + 1); 141 149 region = psRegionForImage(image, region); 142 150 psImage *subImage = psImageSubset(image, region); … … 144 152 psImageStats(stats, subImage, subMask, maskVal); 145 153 146 fPt[i] = stats->sampleMedian; 147 dfPt[i] = stats->sampleStdev; 154 fPt[i] = stats->robustMedian; 155 dfPt[i] = stats->robustStdev; 156 157 psTrace(__func__, 7, "[%d:%d,%d:%d]: %f %f\n", region.x0, region.x1, region.y0, region.y1, 158 fPt[i], dfPt[i]); 148 159 } 149 160 … … 154 165 pmFringeScale *pmFringeScaleMeasure(pmFringeStats *science, psArray *fringes) 155 166 { 156 double sum; 157 psVector *v1; 158 psVector *v2; 159 160 pmFringeScale *scale = pmFringeScaleAlloc(fringes->n); 161 162 int nCof = fringes->n + 1; 163 int nPts = science->f->n; 164 165 psImage *A = psImageAlloc(nCof, nCof, PS_TYPE_F64); 166 psVector *B = psVectorAlloc(nCof, PS_TYPE_F64); 167 168 for (int i = 0; i < nCof; i++) { 169 psF32 *p1 = NULL; 167 pmFringeScale *scale = pmFringeScaleAlloc(fringes->n); // The resultant fringe scales 168 169 int numCoeffs = fringes->n + 1; 170 int numPoints = science->f->n; 171 172 psImage *A = psImageAlloc(numCoeffs, numCoeffs, PS_TYPE_F64); 173 psVector *B = psVectorAlloc(numCoeffs, PS_TYPE_F64); 174 B->n = numCoeffs; 175 176 for (int i = 0; i < numCoeffs; i++) { 177 psVector *fringe1 = NULL; 170 178 if (i != 0) { 171 v1= fringes->data[i - 1];172 p1 = v1->data.F32;179 pmFringeStats *fringe = fringes->data[i - 1]; 180 fringe1 = fringe->f; 173 181 } 174 for (int j = 0; j < n Cof; j++) {175 ps F32 *p2 = NULL;182 for (int j = 0; j < numCoeffs; j++) { 183 psVector *fringe2 = NULL; 176 184 if (j != 0) { 177 v2= fringes->data[j - 1];178 p2 = v2->data.F32;185 pmFringeStats *fringe = fringes->data[j - 1]; 186 fringe2 = fringe->f; 179 187 } 180 188 181 sum =0;182 for (int k = 0; k < n Pts; k++) {183 psF32 f1 = ( p1 == NULL) ? 1.0 : p1[k];184 psF32 f2 = ( p2 == NULL) ? 1.0 : p2[k];189 double sum = 0.0; 190 for (int k = 0; k < numPoints; k++) { 191 psF32 f1 = (fringe1 == NULL) ? 1.0 : fringe1->data.F32[k]; 192 psF32 f2 = (fringe2 == NULL) ? 1.0 : fringe2->data.F32[k]; 185 193 sum += f1*f2; 186 194 } 187 A->data.F 32[i][j] = sum;195 A->data.F64[i][j] = sum; 188 196 } 189 197 190 sum = 0; 191 psF32 *p2 = science->f->data.F32; 192 for (int j = 0; j < nPts; j++) { 193 psF32 f1 = (p1 == NULL) ? 1.0 : p1[j]; 194 psF32 f2 = p2[j]; 198 double sum = 0.0; 199 for (int j = 0; j < numPoints; j++) { 200 psF32 f1 = (fringe1 == NULL) ? 1.0 : fringe1->data.F32[j]; 201 psF32 f2 = science->f->data.F32[j]; 195 202 sum += f1*f2; 196 203 } 197 B->data.F 32[i] = sum;204 B->data.F64[i] = sum; 198 205 } 199 206 … … 202 209 } 203 210 204 205 for (int i = 0; i < nCof; i++) { 206 scale->coeff->data.F32[i] = B->data.F32[i]; 207 scale->coeffErr->data.F32[i] = sqrt(A->data.F32[i][i]); 211 for (int i = 0; i < numCoeffs; i++) { 212 scale->coeff->data.F32[i] = B->data.F64[i]; 213 scale->coeffErr->data.F32[i] = sqrt(A->data.F64[i][i]); 208 214 } 209 215 … … 219 225 psFree(scienceStats); 220 226 227 psTrace(__func__, 7, "Fringe solution:\n"); 228 for (int i = 0; i < fringeImages->n; i++) { 229 psTrace(__func__, 7, "%d: %f %f\n", i, scale->coeff->data.F32[i], 230 scale->coeffErr->data.F32[i]); 231 } 232 221 233 // build the fringe correction image 222 234 // XXX we could save data space by making the first image the output image 223 psImage *sumFringe = NULL;235 psImage *sumFringe = psImageAlloc(readout->image->numCols, readout->image->numRows, PS_TYPE_F32); 224 236 for (int i = 0; i < fringeImages->n; i++) { 225 237
Note:
See TracChangeset
for help on using the changeset viewer.
