Changeset 19386
- Timestamp:
- Sep 5, 2008, 7:46:30 AM (18 years ago)
- Location:
- trunk/psastro/src
- Files:
-
- 2 edited
-
psastroModelAnalysis.c (modified) (4 diffs)
-
psastroMosaicAstrom.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psastro/src/psastroModelAnalysis.c
r19309 r19386 14 14 pmFPAfile *output = psMetadataLookupPtr (&status, config->files, "PSASTRO.OUT.MODEL"); 15 15 if (!status) psAbort ("Can't find output pmFPAfile PSASTRO.OUT.MODEL"); 16 17 char *outroot = psMetadataLookupStr (&status, config->arguments, "OUTPUT"); 18 if (!status || !outroot) psAbort ("Can't find outroot on config->arguments"); 16 19 17 20 // physical pixel scale in microns per pixel … … 58 61 output->fpa = NULL; 59 62 63 char filename[256]; 64 snprintf (filename, 256, "%s.bore", outroot); 65 FILE *outfile = fopen (filename, "w"); 66 if (!outfile) { 67 psError(PSASTRO_ERR_ARGUMENTS, true, "cannot open %s for output", filename); 68 return false; 69 } 70 71 float posBoundary = 0.0; 72 60 73 // extract the relevant measured and reported values from the reference chip 61 74 for (int i = 0; i < files->n; i++) { … … 80 93 81 94 // we have two measurements of the posangle (may be parity flipped to different quadrants) 95 // atan2 returns values in the range 0-2pi 96 // all posZero values should be clustered in some region, but we need to flip over the 0,360 boundary correctly. 97 // push all to one side or the other 82 98 float posangle = PM_DEG_RAD * atan2 (chip->toFPA->y->coeff[1][0], chip->toFPA->x->coeff[1][0]); 83 99 posZero->data.F32[n] = POSANGLE - posangle; 84 while (posZero->data.F32[n] > 360.0) posZero->data.F32[n] -= 360.0; 85 while (posZero->data.F32[n] < 0.0) posZero->data.F32[n] += 360.0; 100 if (n == 0) { 101 posBoundary = posZero->data.F32[n] + 180.0; 102 } else { 103 while (posZero->data.F32[n] > posBoundary) posZero->data.F32[n] -= 360.0; 104 while (posZero->data.F32[n] < posBoundary - 360.0) posZero->data.F32[n] += 360.0; 105 } 86 106 87 107 Po->data.F32[n] = POSANGLE * PM_RAD_DEG; // reported position angle 88 108 Xo->data.F32[n] = chip->fromFPA->x->coeff[0][0]; // reported boresite x position in ref chip coordinates 89 109 Yo->data.F32[n] = chip->fromFPA->y->coeff[0][0]; // reported boresite y position in ref chip coordinates 90 fprintf ( stderr, "%d : %f %f : %f = %f - %f\n", i, Xo->data.F32[n], Yo->data.F32[n], posZero->data.F32[n], POSANGLE, posangle);110 fprintf (outfile, "%d : %f %f : %f = %f - %f\n", i, Xo->data.F32[n], Yo->data.F32[n], posZero->data.F32[n], POSANGLE, posangle); 91 111 n ++; 92 112 } … … 100 120 psVectorStats (stats, posZero, NULL, NULL, 0); 101 121 102 fprintf ( stderr, "pos zero %f +/- %f\n", stats->sampleMedian, stats->sampleStdev);122 fprintf (outfile, "# pos zero %f +/- %f\n", stats->sampleMedian, stats->sampleStdev); 103 123 psMetadataAddF32 (output->fpa->concepts, PS_LIST_TAIL, "FPA.POS_ZERO", PS_META_REPLACE, "offset between obs and meas posangle", stats->sampleMedian); 124 fclose (outfile); 104 125 105 psVector *params = psastroModelFitBoresite (Xo, Yo, Po );126 psVector *params = psastroModelFitBoresite (Xo, Yo, Po, outroot); 106 127 if (params->n != 6) psAbort ("error"); 128 107 129 108 130 psMetadataAddF32 (output->fpa->concepts, PS_LIST_TAIL, "FPA.BORE.X0", PS_META_REPLACE, "boresite parameter", params->data.F32[PAR_X0]); -
trunk/psastro/src/psastroMosaicAstrom.c
r19310 r19386 2 2 # define NONLIN_TOL 0.001 /* tolerance in pixels */ 3 3 4 bool psastroMosaicFit (pmFPA *fpa, psMetadata *recipe, int pass);4 bool psastroMosaicFit (pmFPA *fpa, psMetadata *recipe, const char *rootname, int pass); 5 5 6 6 // XXX require this fpa to have multiple chip extensions and a PHU? 7 7 bool psastroMosaicAstrom (pmConfig *config) { 8 8 9 bool status; 10 char filename[256]; 11 9 12 // select the current recipe 10 psMetadata *recipe = psMetadataLookupPtr ( NULL, config->recipes, PSASTRO_RECIPE);13 psMetadata *recipe = psMetadataLookupPtr (&status, config->recipes, PSASTRO_RECIPE); 11 14 if (!recipe) { 12 15 psError(PSASTRO_ERR_CONFIG, false, "Can't find PSASTRO recipe!\n"); … … 36 39 # endif 37 40 38 if (!psastroMosaicFit (fpa, recipe, 0)) return false; 39 if (!psastroMosaicFit (fpa, recipe, 1)) return false; 40 if (!psastroMosaicFit (fpa, recipe, 2)) return false; 41 if (!psastroMosaicFit (fpa, recipe, 3)) return false; 41 char *outroot = psMetadataLookupStr (&status, config->arguments, "OUTPUT"); 42 if (!status || !outroot) psAbort ("Can't find outroot on config->arguments"); 43 44 if (!psastroMosaicFit (fpa, recipe, outroot, 0)) return false; 45 if (!psastroMosaicFit (fpa, recipe, outroot, 1)) return false; 46 if (!psastroMosaicFit (fpa, recipe, outroot, 2)) return false; 47 if (!psastroMosaicFit (fpa, recipe, outroot, 3)) return false; 42 48 43 49 // now fit the chips under the common distortion with higher-order terms … … 51 57 return false; 52 58 } 53 if (psTraceGetLevel("psastro.dump") > 0) { psastroDumpMatches (fpa, "match.10.dat"); } 59 if (psTraceGetLevel("psastro.dump") > 0) { 60 snprintf (filename, 256, "%s.10.dat", outroot); 61 psastroDumpMatches (fpa, filename); 62 } 54 63 55 64 // save WCS and analysis metadata in update header. … … 84 93 // 2: match 6,7 85 94 // 3: match 8,9 86 bool psastroMosaicFit (pmFPA *fpa, psMetadata *recipe, int pass) {95 bool psastroMosaicFit (pmFPA *fpa, psMetadata *recipe, const char *rootname, int pass) { 87 96 88 char filename[ 16];97 char filename[256]; 89 98 90 99 // given the existing per-chip astrometry, determine matches between raw and ref stars … … 95 104 } 96 105 97 if ((pass == 0) && (psTraceGetLevel("psastro.dump.psastroMosaicAstrom") > 0)) { psastroDumpMatches (fpa, "match.0.dat"); } 106 if ((pass == 0) && (psTraceGetLevel("psastro.dump.psastroMosaicAstrom") > 0)) { 107 snprintf (filename, 256, "%s.0.dat", rootname); 108 psastroDumpMatches (fpa, filename); 109 } 98 110 99 111 // fitted chips will follow the local plate-scale, hiding the distortion … … 105 117 } 106 118 107 if ((pass == 0) && (psTraceGetLevel("psastro.dump.psastroMosaicAstrom") > 0)) { psastroDumpMatches (fpa, "match.1.dat"); } 119 if ((pass == 0) && (psTraceGetLevel("psastro.dump.psastroMosaicAstrom") > 0)) { 120 snprintf (filename, 256, "%s.1.dat", rootname); 121 psastroDumpMatches (fpa, filename); 122 } 108 123 109 124 // fit the distortion by fitting its gradient … … 115 130 } 116 131 117 snprintf (filename, 16, "match.%d.dat", 2*pass + 2);132 snprintf (filename, 256, "%s.%d.dat", rootname, 2*pass + 2); 118 133 if (psTraceGetLevel("psastro.dump.psastroMosaicAstrom") > 0) { psastroDumpMatches (fpa, filename); } 119 134 … … 124 139 } 125 140 126 snprintf (filename, 16, "match.%d.dat", 2*pass + 3);141 snprintf (filename, 256, "%s.%d.dat", rootname, 2*pass + 3); 127 142 if (psTraceGetLevel("psastro.dump.psastroMosaicAstrom") > 0) { psastroDumpMatches (fpa, filename); } 128 143
Note:
See TracChangeset
for help on using the changeset viewer.
