Changeset 36615 for trunk/ppBackground/src/ppBackgroundStackMath.c
- Timestamp:
- Mar 27, 2014, 4:21:00 PM (12 years ago)
- File:
-
- 1 edited
-
trunk/ppBackground/src/ppBackgroundStackMath.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppBackground/src/ppBackgroundStackMath.c
r36580 r36615 20 20 #include "ppBackgroundStack.h" 21 21 22 // data->models->name->XY__->{image/ra/dec/calibrated/offset/scale} 23 // data->models->counter->XY__->{image/ra/dec/calibrated/offset/scale} 24 22 25 // 23 26 // Determine the best OTA-to-OTA solution for this set of exposures/chips. … … 26 29 // solution_{OTA}(u,v) = < data_{OTA}(u,v) >_{exposures} 27 30 bool ppBackgroundStackModelFitOTASolution(ppBackgroundStackData *data) { 28 long i; 29 int u,v; 30 pmFPAview *view = pmFPAviewAlloc(0); 31 int u,v; 31 32 psMetadataIterator *iter = psMetadataIteratorAlloc(data->OTA_solutions, PS_LIST_HEAD, NULL); // Iterate over all chips. 32 33 psMetadataItem *item; 33 34 psStats *stats = psStatsAlloc( PS_STAT_ROBUST_MEDIAN ); 35 psS16 N = psMetadataLookupS16(NULL, data->models, "N"); 34 36 35 37 while ((item = psMetadataGetAndIncrement(iter))) { … … 43 45 for (v = 0; v < solution->numRows; v++) { 44 46 for (u = 0; u < solution->numCols; u++) { 45 psVector *tmp = psVectorAllocEmpty(data->smfs->n,PS_TYPE_F32); 46 47 for (i = 0; i < data->smfs->n; i++) { 48 pmFPAviewReset(view); 49 pmFPAfile *smfFile = data->smfs->data[i]; 50 51 pmChip *chip; // Chip from FPA 52 while ((chip = pmFPAviewNextChip(view, smfFile->fpa, 1))) { 53 if (!chip->process || !chip->file_exists) { 54 continue; 55 } 56 const char *chipName = psMetadataLookupStr(NULL, chip->concepts, "CHIP.NAME"); // Name of chip 57 if (workingChip && strcmp(chipName, workingChip) != 0) { // Is this chip the one we want? 58 continue; 59 } 60 psImage *image = psMetadataLookupPtr(NULL,chip->concepts, "bkg image"); 61 psVectorAppend(tmp,image->data.F32[v][u]); 62 } // End chip scan 63 } // End smf scan 47 48 psVector *tmp = psVectorAllocEmpty(N,PS_TYPE_F32); 49 50 psMetadataIterator *expIter = psMetadataIteratorAlloc(data->models, PS_LIST_HEAD, NULL); 51 psMetadataItem *expItem; 52 while ((expItem = psMetadataGetAndIncrement(expIter))) { 53 if (expItem->type != PS_DATA_METADATA) { 54 continue; // This is the N counter 55 } 56 psMetadata *chipData = psMetadataLookupPtr(NULL, expItem->data.md, workingChip); 57 psImage *image = psMetadataLookupPtr(NULL, chipData, "bkg image"); 58 psVectorAppend(tmp,image->data.F32[v][u]); 59 } // End loop over exposures 64 60 psStatsInit(stats); 65 61 psVectorStats(stats,tmp,NULL,NULL,0); 66 62 solution->data.F32[v][u] = stats->robustMedian; 63 64 psFree(expIter); 67 65 } // End u 68 66 } // End v 69 67 } // End working chip scan 70 68 69 psFree(iter); 70 psFree(stats); 71 71 return(true); 72 72 } … … 78 78 // FOR: scale, offset 79 79 bool ppBackgroundStackDataModelFit(ppBackgroundStackData *data) { 80 long i; 81 int u,v; 82 83 pmFPAview *view = pmFPAviewAlloc(0); 84 for (i = 0; i < data->smfs->n; i++) { 85 pmFPAviewReset(view); 86 pmFPAfile *smfFile = data->smfs->data[i]; 80 int u,v; 81 82 psMetadataIterator *expIter = psMetadataIteratorAlloc(data->models, PS_LIST_HEAD, NULL); 83 psMetadataItem *expItem; 84 while ((expItem = psMetadataGetAndIncrement(expIter))) { 85 if (expItem->type != PS_DATA_METADATA) { 86 continue; // This is the N counter 87 } 87 88 88 pmChip *chip; // Chip from FPA 89 while ((chip = pmFPAviewNextChip(view, smfFile->fpa, 1))) { 90 if (!chip->process || !chip->file_exists) { 91 continue; 92 } 93 psImage *image = psMetadataLookupPtr(NULL, chip->concepts, "bkg image"); 94 psImage *ra = psMetadataLookupPtr(NULL, chip->concepts, "bkg ra"); 95 psImage *dec = psMetadataLookupPtr(NULL, chip->concepts, "bkg dec"); 89 psMetadataIterator *chipIter = psMetadataIteratorAlloc(expItem->data.md, PS_LIST_HEAD, NULL); 90 psMetadataItem *chipItem; 91 while ((chipItem = psMetadataGetAndIncrement(chipIter))) { 92 psImage *image = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg image"); 93 psImage *ra = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg ra"); 94 psImage *dec = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg dec"); 96 95 97 96 psVector *obs = psVectorAlloc(image->numRows * image->numCols, PS_TYPE_F32); … … 108 107 int status = psVectorFitPolynomial1D(poly,NULL,0,model,NULL,obs); 109 108 if (!status) { 110 psMetadataAddF32(chip ->analysis,PS_LIST_TAIL,"bkg offset", PS_META_REPLACE, "background offset for this exposure/ota pair", poly->coeff[0]);111 psMetadataAddF32(chip ->analysis,PS_LIST_TAIL,"bkg scale", PS_META_REPLACE, "background scale for this exposure/ota pair", poly->coeff[1]);112 } 113 // psFree(tmp);109 psMetadataAddF32(chipItem->data.md,PS_LIST_TAIL,"bkg offset", PS_META_REPLACE, "background offset for this exposure/ota pair", poly->coeff[0]); 110 psMetadataAddF32(chipItem->data.md,PS_LIST_TAIL,"bkg scale", PS_META_REPLACE, "background scale for this exposure/ota pair", poly->coeff[1]); 111 } 112 psFree(poly); 114 113 } // End OTA loop 114 psFree(chipIter); 115 115 } // End smf/exp loop 116 psFree( view);116 psFree(expIter); 117 117 return(true); 118 118 } … … 124 124 // calib_{exposure,OTA}(r,d) = scale * data_{exposure,OTA}(r,d) + offset + solution_{OTA}(u,v) 125 125 bool ppBackgroundStackCalibApply(ppBackgroundStackData *data) { 126 long i; 127 int u,v; 128 129 pmFPAview *view = pmFPAviewAlloc(0); 130 // psStats *stats = psStatsAlloc(PS_STAT_ROBUST_MEDIAN); 131 for (i = 0; i < data->smfs->n; i++) { 132 pmFPAviewReset(view); 133 pmFPAfile *smfFile = data->smfs->data[i]; 134 135 pmChip *chip; // Chip from FPA 136 while ((chip = pmFPAviewNextChip(view, smfFile->fpa, 1))) { 137 if (!chip->process || !chip->file_exists) { 138 continue; 139 } 140 const char *chipName = psMetadataLookupStr(NULL, chip->concepts, "CHIP.NAME"); // Name of chip 141 142 psImage *image = psMetadataLookupPtr(NULL, chip->concepts, "bkg image"); 143 psImage *model = psMetadataLookupPtr(NULL, chip->concepts, "bkg calibrated data"); 126 int u,v; 127 128 psMetadataIterator *expIter = psMetadataIteratorAlloc(data->models, PS_LIST_HEAD, NULL); 129 psMetadataItem *expItem; 130 while ((expItem = psMetadataGetAndIncrement(expIter))) { 131 if (expItem->type != PS_DATA_METADATA) { 132 continue; // This is the N counter 133 } 134 psMetadataIterator *chipIter = psMetadataIteratorAlloc(expItem->data.md, PS_LIST_HEAD, NULL); 135 psMetadataItem *chipItem; 136 while ((chipItem = psMetadataGetAndIncrement(chipIter))) { 137 const char *chipName = chipItem->name; 138 139 psImage *image = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg image"); 140 psImage *model = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg calibrated data"); 144 141 psImage *camera= psMetadataLookupPtr(NULL, data->OTA_solutions, chipName); 145 142 146 psF32 offset = psMetadataLookupF32(NULL,chip ->concepts,"bkg offset");147 psF32 scale = psMetadataLookupF32(NULL,chip ->concepts,"bkg scale");143 psF32 offset = psMetadataLookupF32(NULL,chipItem->data.md,"bkg offset"); 144 psF32 scale = psMetadataLookupF32(NULL,chipItem->data.md,"bkg scale"); 148 145 149 146 for (v = 0; v < image->numRows; v++) { … … 153 150 } 154 151 } // End chip 152 psFree(chipIter); 155 153 } // End smf 156 psFree( view);154 psFree(expIter); 157 155 return(true); 158 156 } … … 163 161 // This "averaging" is done using the psImageMapClipFit. 164 162 bool ppBackgroundStackModelFit(ppBackgroundStackData *data) { 165 long i,j; 166 int u,v; 167 168 psVector *X = psVectorAllocEmpty(data->smfs->n,PS_TYPE_F32); 169 psVector *Y = psVectorAllocEmpty(data->smfs->n,PS_TYPE_F32); 170 psVector *Z = psVectorAllocEmpty(data->smfs->n,PS_TYPE_F32); 171 psVector *E = psVectorAllocEmpty(data->smfs->n,PS_TYPE_F32); 163 long j; 164 int u,v; 165 166 psS16 N = psMetadataLookupS16(NULL, data->models, "N"); 167 psVector *X = psVectorAlloc(N * 60 * 13 * 13,PS_TYPE_F32); 168 psVector *Y = psVectorAlloc(N * 60 * 13 * 13,PS_TYPE_F32); 169 psVector *Z = psVectorAlloc(N * 60 * 13 * 13,PS_TYPE_F32); 170 psVector *E = psVectorAlloc(N * 60 * 13 * 13,PS_TYPE_F32); 171 psVector *mask = psVectorAlloc(N * 60 * 13 * 13,PS_TYPE_VECTOR_MASK); 172 172 j = 0; 173 173 174 174 pmFPAview *view = pmFPAviewAlloc(0); 175 175 psStats *stats = psStatsAlloc( PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV ); 176 for (i = 0; i < data->smfs->n; i++) { 177 pmFPAviewReset(view);178 pmFPAfile *smfFile = data->smfs->data[i];179 180 pmChip *chip; // Chip from FPA181 while ((chip = pmFPAviewNextChip(view, smfFile->fpa, 1))) {182 if (!chip->process || !chip->file_exists) {183 continue;184 }185 // const char *chipName = psMetadataLookupStr(NULL, chip->concepts, "CHIP.NAME"); // Name of chip186 psImage *calib = psMetadataLookupPtr(NULL, chip ->concepts, "bkg calibrated data");187 psImage *ra = psMetadataLookupPtr(NULL, chip ->concepts, "bkg ra");188 psImage *dec = psMetadataLookupPtr(NULL, chip->concepts, "bkg dec");176 177 psMetadataIterator *expIter = psMetadataIteratorAlloc(data->models, PS_LIST_HEAD, NULL); 178 psMetadataItem *expItem; 179 while ((expItem = psMetadataGetAndIncrement(expIter))) { 180 if (expItem->type != PS_DATA_METADATA) { 181 continue; // This is the N counter 182 } 183 psMetadataIterator *chipIter = psMetadataIteratorAlloc(expItem->data.md, PS_LIST_HEAD, NULL); 184 psMetadataItem *chipItem; 185 while ((chipItem = psMetadataGetAndIncrement(chipIter))) { 186 psImage *calib = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg calibrated data"); 187 psImage *ra = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg ra"); 188 psImage *dec = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg dec"); 189 189 for (v = 0; v < calib->numRows; v++) { 190 190 for (u = 0; u < calib->numCols; u++) { … … 193 193 Z->data.F32[j] = calib->data.F32[v][u]; 194 194 E->data.F32[j] = 1.0; 195 mask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0; 196 j++; 195 197 } 196 198 } 197 199 } // End chip 200 psFree(chipIter); 198 201 } // End smfs 199 202 200 203 bool fitStatus; 201 bool status = psImageMapClipFit(&fitStatus,data->modelMap,stats, NULL, 0, X, Y, Z, E); 202 204 bool status = psImageMapClipFit(&fitStatus,data->modelMap,stats, mask, 0, X, Y, Z, E); 205 206 psFree(expIter); 203 207 psFree(X); 204 208 psFree(Y); 205 209 psFree(Z); 206 210 psFree(E); 211 psFree(mask); 207 212 psFree(stats); 208 213 psFree(view);
Note:
See TracChangeset
for help on using the changeset viewer.
