Changeset 12917 for trunk/ppSim/src/ppSimLoop.c
- Timestamp:
- Apr 18, 2007, 4:11:34 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/ppSim/src/ppSimLoop.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppSim/src/ppSimLoop.c
r12907 r12917 6 6 #include <pslib.h> 7 7 #include <psmodules.h> 8 #include <psastro.h> 8 9 9 10 #include "ppSim.h" … … 268 269 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0); // Random number generator 269 270 270 psVector *ra = psMetadataLookupPtr(NULL, config->arguments, "CATALOG.RA");// Star RAs271 psVector *dec = psMetadataLookupPtr(NULL, config->arguments, "CATALOG.DEC");// Star Declinations272 psVector *mag = psMetadataLookupPtr(NULL, config->arguments, "CATALOG.MAG");// Star magnitudes271 psVector *ra = NULL; // Star RAs 272 psVector *dec = NULL; // Star Declinations 273 psVector *mag = NULL; // Star magnitudes 273 274 float seeing = psMetadataLookupF32(NULL, config->arguments, "SEEING"); // Seeing sigma (pix) 274 float scale = psMetadataLookupF32(NULL, config->arguments, "SCALE") ; // Plate scale (arcsec/pixel)275 scale *= M_PI / 3600.0 / 180.0; // Convert to radians/pixel275 float scale = psMetadataLookupF32(NULL, config->arguments, "SCALE") * 276 M_PI / 3600.0 / 180.0; // Plate scale (radians/pixel) 276 277 float zp = psMetadataLookupF32(NULL, config->arguments, "ZEROPOINT"); // Photometric zero point 277 278 278 279 // Add catalogue stars 279 if (type == PPSIM_TYPE_OBJECT && ra && dec && mag) { 280 // Convert star ra,dec to pixels from FPA centre 280 if (type == PPSIM_TYPE_OBJECT) { 281 281 float ra0 = psMetadataLookupF32(NULL, config->arguments, "RA"); // Boresight RA (radians) 282 282 float dec0 = psMetadataLookupF32(NULL, config->arguments, "DEC"); // Boresight Dec (radians) 283 283 float pa = psMetadataLookupF32(NULL, config->arguments, "PA"); // Position angle (radians) 284 284 285 // Read catalogue stars using psastro 286 psMetadata *astroRecipe = psMetadataLookupPtr(NULL, config->recipes, PSASTRO_RECIPE); 287 if (!astroRecipe) { 288 psError(PSASTRO_ERR_CONFIG, false, "Can't find recipe %s", PSASTRO_RECIPE); 289 psFree(rng); 290 psFree(bounds); 291 return PS_EXIT_CONFIG_ERROR; 292 } 293 294 // Size of FPA 295 float radius = 0.5 * PS_MAX(bounds->x1 - bounds->x0, bounds->y1 - bounds->y0) * scale; 296 297 psMetadataAdd(astroRecipe, PS_LIST_TAIL, "RA_MIN", PS_DATA_F32 | PS_META_REPLACE, "", ra0 - radius); 298 psMetadataAdd(astroRecipe, PS_LIST_TAIL, "RA_MAX", PS_DATA_F32 | PS_META_REPLACE, "", ra0 + radius); 299 psMetadataAdd(astroRecipe, PS_LIST_TAIL, "DEC_MIN", PS_DATA_F32 | PS_META_REPLACE, "", dec0 - radius); 300 psMetadataAdd(astroRecipe, PS_LIST_TAIL, "DEC_MAX", PS_DATA_F32 | PS_META_REPLACE, "", dec0 + radius); 301 psArray *refStars = psastroLoadRefstars(config); 302 if (!refStars || refStars->n == 0) { 303 psError(PS_ERR_UNKNOWN, false, "Unable to find reference stars."); 304 psFree(refStars); 305 psFree(rng); 306 psFree(bounds); 307 return PS_EXIT_CONFIG_ERROR; 308 } 309 psLogMsg("ppSim", PS_LOG_INFO, "Adding %ld reference stars", refStars->n); 310 311 ra = psVectorAlloc(refStars->n, PS_TYPE_F32); 312 dec = psVectorAlloc(refStars->n, PS_TYPE_F32); 313 mag = psVectorAlloc(refStars->n, PS_TYPE_F32); 314 285 315 // Conversion loop 286 for (long i = 0; i < ra->n; i++) { 287 float div = sin(dec->data.F32[i]) * sin(dec0) + 288 cos(dec->data.F32[i]) * cos(dec0) * cos(ra->data.F32[i] - ra0); // Divisor 316 for (long i = 0; i < refStars->n; i++) { 317 pmAstromObj *ref = refStars->data[i]; // Reference star 318 float raStar = ref->sky->r; // RA of star 319 float decStar = ref->sky->d; // Dec of star 320 float magStar = ref->Mag; // Magnitude of star 321 289 322 290 323 // Convert to x,y position on tangent plane, in pixels 291 float xi = cos(dec->data.F32[i]) * sin(ra->data.F32[i] - ra0) / div / scale; 292 float eta = (sin(dec->data.F32[i]) * cos(dec0) - 293 cos(dec->data.F32[i]) * sin(dec0) * cos(ra->data.F32[i] - ra0)) / div / scale; 324 float div = sin(decStar) * sin(dec0) + cos(decStar) * cos(dec0) * cos(raStar - ra0); // Divisor 325 float xi = cos(decStar) * sin(raStar - ra0) / div / scale; 326 float eta = (sin(decStar) * cos(dec0) - cos(decStar) * sin(dec0) * cos(raStar - ra0)) / 327 div / scale; 294 328 295 329 // Apply rotation … … 298 332 299 333 // Convert magnitude to peak flux 300 mag->data.F32[i] = powf(10.0, -0.4 * (mag->data.F32[i] - zp)) / sqrt(2.0*M_PI) / seeing * expTime; 301 } 334 mag->data.F32[i] = powf(10.0, -0.4 * (magStar - zp)) / sqrt(2.0*M_PI) / seeing * expTime; 335 } 336 psFree(refStars); 302 337 303 338 psMetadataAddF64(fpa->concepts, PS_LIST_TAIL, "FPA.RA", PS_META_REPLACE, "Right ascension", ra0);
Note:
See TracChangeset
for help on using the changeset viewer.
