Changeset 23190 for trunk/ppStack/src/ppStackSources.c
- Timestamp:
- Mar 5, 2009, 9:19:00 AM (17 years ago)
- File:
-
- 1 edited
-
trunk/ppStack/src/ppStackSources.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppStack/src/ppStackSources.c
r21260 r23190 13 13 #define FAKE_ROWS 4913 14 14 15 float ppStackSourcesTransparency(const psArray *sourceLists, const pmFPAview *view, const pmConfig *config) 15 #ifdef TESTING 16 // Dump matches to a file 17 static void dumpMatches(const char *filename, // File to which to dump 18 int num, // Number of inputs 19 psArray *matches, // Star matches 20 psVector *zp, // Zero points 21 psVector *trans // Transparencies 22 ) 23 { 24 FILE *outMatches = fopen(filename, "w"); // Output matches 25 psVector *mag = psVectorAlloc(num, PS_TYPE_F32); // Magnitudes for each star 26 psVector *magErr = psVectorAlloc(num, PS_TYPE_F32); // Errors for each star 27 for (int i = 0; i < matches->n; i++) { 28 pmSourceMatch *match = matches->data[i]; // Match of interest 29 psVectorInit(mag, NAN); 30 psVectorInit(magErr, NAN); 31 for (int j = 0; j < match->num; j++) { 32 if (match->mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) { 33 continue; 34 } 35 int index = match->image->data.U32[j]; // Image index 36 mag->data.F32[index] = match->mag->data.F32[j] - zp->data.F32[index]; 37 if (trans) { 38 mag->data.F32[index] -= trans->data.F32[index]; 39 } 40 magErr->data.F32[index] = match->magErr->data.F32[j]; 41 } 42 for (int j = 0; j < num; j++) { 43 fprintf(outMatches, "%f (%f) ", mag->data.F32[j], magErr->data.F32[j]); 44 } 45 fprintf(outMatches, "\n"); 46 } 47 psFree(mag); 48 psFree(magErr); 49 fclose(outMatches); 50 return; 51 } 52 #endif 53 54 55 float ppStackSourcesTransparency(const psArray *sourceLists, psVector *inputMask, 56 const pmFPAview *view, const pmConfig *config) 16 57 { 17 58 PS_ASSERT_ARRAY_NON_NULL(sourceLists, NAN); 59 PS_ASSERT_VECTOR_NON_NULL(inputMask, NAN); 60 PS_ASSERT_VECTOR_TYPE(inputMask, PS_TYPE_U8, NAN); 61 PS_ASSERT_VECTOR_SIZE(inputMask, sourceLists->n, NAN); 18 62 PS_ASSERT_PTR_NON_NULL(view, NAN); 19 63 PS_ASSERT_PTR_NON_NULL(config, NAN); 20 64 21 #if def TESTING65 #if defined(TESTING) && 0 22 66 { 23 67 // Deliberately induce a major transparency difference … … 63 107 pmCell *cell = pmFPAviewThisCell(view, file->fpa); // Cell of interest 64 108 65 #if def TESTING109 #if defined(TESTING) && 0 66 110 pmReadout *fake = pmReadoutAlloc(NULL); // Fake readout 67 111 pmPSF *psf = psMetadataLookupPtr(NULL, config->arguments, "PSF.TARGET"); // PSF for fake image … … 114 158 return NAN; 115 159 } 160 161 #ifdef TESTING 162 dumpMatches("source_match.dat", num, matches, zp, NULL); 163 #endif 164 116 165 psVector *trans = pmSourceMatchRelphot(matches, zp, iter, tol, starLimit, transIter, transRej, 117 166 transThresh, starRej, starSys); // Transparencies for each image 118 119 #ifdef TESTING 120 { 121 // Dump the corrected magnitudes 122 FILE *outMatches = fopen("source_match.dat", "w"); // Output matches 123 psVector *mag = psVectorAlloc(num, PS_TYPE_F32); // Magnitudes for each star 124 psVector *magErr = psVectorAlloc(num, PS_TYPE_F32); // Errors for each star 125 for (int i = 0; i < matches->n; i++) { 126 pmSourceMatch *match = matches->data[i]; // Match of interest 127 psVectorInit(mag, NAN); 128 psVectorInit(magErr, NAN); 129 for (int j = 0; j < match->num; j++) { 130 if (match->mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) { 131 continue; 132 } 133 int index = match->image->data.U32[j]; // Image index 134 mag->data.F32[index] = match->mag->data.F32[j] - zp->data.F32[index] - trans->data.F32[index]; 135 magErr->data.F32[index] = match->magErr->data.F32[j]; 136 } 137 for (int j = 0; j < num; j++) { 138 fprintf(outMatches, "%f (%f) ", mag->data.F32[j], magErr->data.F32[j]); 139 } 140 fprintf(outMatches, "\n"); 141 } 142 psFree(mag); 143 psFree(magErr); 144 fclose(outMatches); 145 } 146 #endif 167 if (!trans) { 168 psError(PS_ERR_UNKNOWN, false, "Unable to measure transparencies"); 169 return NAN; 170 } 171 172 #ifdef TESTING 173 dumpMatches("source_mags.dat", num, matches, zp, trans); 174 #endif 175 176 for (int i = 0; i < trans->n; i++) { 177 if (!isfinite(trans->data.F32[i])) { 178 inputMask->data.U8[i] = PPSTACK_MASK_CAL; 179 } 180 } 147 181 148 182 // Save best matches SOMEWHERE for future photometry … … 154 188 int minMatches = PS_MAX (2, 0.5*num); 155 189 for (int i = 0; i < matches->n; i++) { 156 pmSourceMatch *match = matches->data[i]; // Match of interest157 if (match->num < minMatches) continue;158 159 // We need to grab a single instance of this source: just take the first available160 int nImage = match->image->data.S32[0];161 int nIndex = match->index->data.S32[0];162 psArray *sources = sourceLists->data[nImage];163 pmSource *source = sources->data[nIndex];164 165 // stick this sample source on sourcesBest166 psArrayAdd (sourcesBest, 100, source);190 pmSourceMatch *match = matches->data[i]; // Match of interest 191 if (match->num < minMatches) continue; 192 193 // We need to grab a single instance of this source: just take the first available 194 int nImage = match->image->data.S32[0]; 195 int nIndex = match->index->data.S32[0]; 196 psArray *sources = sourceLists->data[nImage]; 197 pmSource *source = sources->data[nIndex]; 198 199 // stick this sample source on sourcesBest 200 psArrayAdd (sourcesBest, 100, source); 167 201 } 168 202 psMetadataAdd (sourcesCell->analysis, PS_LIST_TAIL, "PSPHOT.SOURCES", PS_DATA_ARRAY | PS_META_REPLACE, "psphot sources", sourcesBest); … … 171 205 172 206 psFree(matches); 173 if (!trans) {174 psError(PS_ERR_UNKNOWN, false, "Unable to measure transparencies");175 return NAN;176 }177 207 178 208 // M = m + c0 + c1 * airmass - 2.5log(t) + transparency … … 182 212 // We don't need to know the magnitude zero point for the filter, since it cancels out 183 213 for (int i = 0; i < num; i++) { 214 if (!isfinite(trans->data.F32[i])) { 215 continue; 216 } 184 217 psArray *sources = sourceLists->data[i]; // Sources of interest 185 218 float magCorr = airmassTerm - 2.5*log10(sumExpTime) - zp->data.F32[i] - trans->data.F32[i];
Note:
See TracChangeset
for help on using the changeset viewer.
