IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 18, 2007, 4:11:34 PM (19 years ago)
Author:
Paul Price
Message:

Using psastro to get the reference stars, instead of a text file.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppSim/src/ppSimLoop.c

    r12907 r12917  
    66#include <pslib.h>
    77#include <psmodules.h>
     8#include <psastro.h>
    89
    910#include "ppSim.h"
     
    268269    psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0); // Random number generator
    269270
    270     psVector *ra = psMetadataLookupPtr(NULL, config->arguments, "CATALOG.RA"); // Star RAs
    271     psVector *dec = psMetadataLookupPtr(NULL, config->arguments, "CATALOG.DEC"); // Star Declinations
    272     psVector *mag = psMetadataLookupPtr(NULL, config->arguments, "CATALOG.MAG"); // Star magnitudes
     271    psVector *ra = NULL;                // Star RAs
     272    psVector *dec = NULL;              // Star Declinations
     273    psVector *mag = NULL;              // Star magnitudes
    273274    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/pixel
     275    float scale = psMetadataLookupF32(NULL, config->arguments, "SCALE") *
     276        M_PI / 3600.0 / 180.0; // Plate scale (radians/pixel)
    276277    float zp = psMetadataLookupF32(NULL, config->arguments, "ZEROPOINT"); // Photometric zero point
    277278
    278279    // 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) {
    281281        float ra0 = psMetadataLookupF32(NULL, config->arguments, "RA"); // Boresight RA (radians)
    282282        float dec0 = psMetadataLookupF32(NULL, config->arguments, "DEC"); // Boresight Dec (radians)
    283283        float pa = psMetadataLookupF32(NULL, config->arguments, "PA"); // Position angle (radians)
    284284
     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
    285315        // 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
    289322
    290323            // 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;
    294328
    295329            // Apply rotation
     
    298332
    299333            // 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);
    302337
    303338        psMetadataAddF64(fpa->concepts, PS_LIST_TAIL, "FPA.RA", PS_META_REPLACE, "Right ascension", ra0);
Note: See TracChangeset for help on using the changeset viewer.