IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 17, 2007, 6:29:18 PM (19 years ago)
Author:
Paul Price
Message:

Fixing bias, adding catalog and random stars.

File:
1 edited

Legend:

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

    r12834 r12873  
    1616{
    1717    fprintf(stderr, "\nPan-STARRS data simulator\n\n");
    18     fprintf(stderr, "Usage: %s -camera CAMERA_NAME -format FORMAT_NAME\n", config->argv[0]);
     18    fprintf(stderr, "Usage: %s -camera CAMERA_NAME\n", config->argv[0]);
    1919    fprintf(stderr, "\n");
    2020    psArgumentHelp(arguments);
     
    3535    float value = psMetadataLookupF32(NULL, arguments, argName); // Bias level
    3636    if (isnan(value)) {
    37         value = psMetadataLookupF32(NULL, recipe, recipeName);
    38         if (isnan(value)) {
     37        bool mdok;                      // Status of MD lookup
     38        value = psMetadataLookupF32(&mdok, recipe, recipeName);
     39        if (!mdok) {
    3940            psErrorStackPrint(stderr, "Unable to find %s in recipe %s", recipeName, PPSIM_RECIPE);
    4041            psFree((psPtr)arguments);
     
    4344        }
    4445    }
    45 
    4646    return psMetadataAddF32(target, PS_LIST_TAIL, recipeName, 0, NULL, value);
    4747}
    48 
    4948
    5049void ppSimArguments(pmConfig *config)
     
    6463    psMetadataAddF32(arguments, PS_LIST_TAIL, "-shuttertime", 0, "Shutter time (s)", NAN);
    6564    psMetadataAddF32(arguments, PS_LIST_TAIL, "-skyrate", 0, "Sky rate (e/s)", NAN);
     65    psMetadataAddStr(arguments, PS_LIST_TAIL, "-stars", 0, "File with star RA, Dec, Mag", NULL);
     66    psMetadataAddF32(arguments, PS_LIST_TAIL, "-ra", 0, "RA (degrees)", NAN);
     67    psMetadataAddF32(arguments, PS_LIST_TAIL, "-dec", 0, "Dec (degrees)", NAN);
     68    psMetadataAddF32(arguments, PS_LIST_TAIL, "-pa", 0, "Position angle (degrees)", NAN);
     69    psMetadataAddF32(arguments, PS_LIST_TAIL, "-scale", 0, "Plate scale (arcsec/pixel)", NAN);
     70    psMetadataAddF32(arguments, PS_LIST_TAIL, "-zp", 0, "Photometric zero point", NAN);
     71    psMetadataAddF32(arguments, PS_LIST_TAIL, "-seeing", 0, "Seeing FWHM (arcsec)", NAN);
     72    psMetadataAddF32(arguments, PS_LIST_TAIL, "-starslum", 0, "Fake star luminosity function slope", NAN);
     73    psMetadataAddF32(arguments, PS_LIST_TAIL, "-starsmag", 0, "Brightest magnitude for fake stars", NAN);
     74    psMetadataAddF32(arguments, PS_LIST_TAIL, "-starsdensity", 0, "Density of fake stars at magnitude", NAN);
    6675
    6776    if (!config->camera) {
     
    7483    }
    7584
    76     const char *formatName = psMetadataLookupStr(NULL, arguments, "-format"); // Name of format
    77     if (!formatName) {
    78         psErrorStackPrint(stderr, "A camera format must be specified using -format");
    79         usage(arguments, config);
    80     }
    81     psMetadataAddStr(config->arguments, PS_LIST_TAIL, "FORMAT", 0, "Camera format name", formatName);
     85    psString formatName = psMetadataLookupStr(NULL, arguments, "-format"); // Name of format
     86    if (formatName) {
     87        config->formatName = psMemIncrRefCounter(formatName);
     88
     89        psMetadata *formats = psMetadataLookupMetadata(NULL, config->camera, "FORMATS"); // The camera formats
     90        if (!formats) {
     91            psErrorStackPrint(stderr, "Unable to find FORMATS in camera configuration.");
     92            psFree(arguments);
     93            psFree(config);
     94            exit(PS_EXIT_CONFIG_ERROR);
     95        }
     96        psMetadata *format = psMetadataLookupMetadata(NULL, formats, formatName); // Format of interest
     97        if (!format) {
     98            psErrorStackPrint(stderr, "Unable to find format %s in camera FORMATS.", formatName);
     99            psFree(arguments);
     100            psFree(config);
     101            exit(PS_EXIT_CONFIG_ERROR);
     102        }
     103        config->format = psMemIncrRefCounter(format);
     104    }
    82105
    83106    const char *typeStr = psMetadataLookupStr(NULL, arguments, "-type"); // Exposure type
     
    124147    }
    125148
    126     valueArgRecipe(config, arguments, "-biaslevel",   recipe, "BIAS.LEVEL",   config->arguments);
    127     valueArgRecipe(config, arguments, "-biasrange",   recipe, "BIAS.RANGE",   config->arguments);
    128     valueArgRecipe(config, arguments, "-darkrate",    recipe, "DARK.RATE",    config->arguments);
    129     valueArgRecipe(config, arguments, "-flatsigma",   recipe, "FLAT.SIGMA",   config->arguments);
    130     valueArgRecipe(config, arguments, "-flatrate",    recipe, "FLAT.RATE",    config->arguments);
    131     valueArgRecipe(config, arguments, "-shuttertime", recipe, "SHUTTER.TIME", config->arguments);
    132     valueArgRecipe(config, arguments, "-skyrate",     recipe, "SKY.RATE",     config->arguments);
     149    valueArgRecipe(config, arguments, "-biaslevel",    recipe, "BIAS.LEVEL",    config->arguments);
     150    valueArgRecipe(config, arguments, "-biasrange",    recipe, "BIAS.RANGE",    config->arguments);
     151    valueArgRecipe(config, arguments, "-darkrate",     recipe, "DARK.RATE",     config->arguments);
     152    valueArgRecipe(config, arguments, "-flatsigma",    recipe, "FLAT.SIGMA",    config->arguments);
     153    valueArgRecipe(config, arguments, "-flatrate",     recipe, "FLAT.RATE",     config->arguments);
     154    valueArgRecipe(config, arguments, "-shuttertime",  recipe, "SHUTTER.TIME",  config->arguments);
     155    valueArgRecipe(config, arguments, "-skyrate",      recipe, "SKY.RATE",      config->arguments);
     156    valueArgRecipe(config, arguments, "-starslum",     recipe, "STARS.LUM",     config->arguments);
     157    valueArgRecipe(config, arguments, "-starsmag",     recipe, "STARS.MAG",     config->arguments);
     158    valueArgRecipe(config, arguments, "-starsdensity", recipe, "STARS.DENSITY", config->arguments);
     159
     160    bool mdok;                          // Status of MD lookup
     161    int biasOrder = psMetadataLookupS32(&mdok, recipe, "BIAS.ORDER"); // Overscan polynomial order
     162    if (!mdok) {
     163        psWarning("BIAS.ORDER(S32) is not set in the recipe %s --- assuming %d", PPSIM_RECIPE, biasOrder);
     164    }
     165    psMetadataAddS32(config->arguments, PS_LIST_TAIL, "BIAS.ORDER", 0,
     166                     "Overscan polynomial order", biasOrder);
     167
    133168
    134169    psMetadataAddStr(config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "Name of the output image",
    135170                     config->argv[1]);
    136171
     172
     173    // Values common for stars
     174    float scale = psMetadataLookupF32(NULL, arguments, "-scale"); // Plate scale
     175    float zp = psMetadataLookupF32(NULL, arguments, "-zp"); // Zero point
     176    float seeing = psMetadataLookupF32(NULL, arguments, "-seeing"); // Zero point
     177    psMetadataAddF32(config->arguments, PS_LIST_TAIL, "SCALE", 0, "Plate scale (arcsec/pix)", scale);
     178    psMetadataAddF32(config->arguments, PS_LIST_TAIL, "ZEROPOINT", 0, "Photometric zeropoint", zp);
     179    psMetadataAddF32(config->arguments, PS_LIST_TAIL, "SEEING", 0, "Seeing simga (pix)",
     180                     seeing / 2.0 / sqrt(2.0 * log(2.0)) / scale);
     181
     182    const char *starName = psMetadataLookupStr(NULL, arguments, "-stars"); // Name of file with stars
     183    if (starName) {
     184        float ra0 = psMetadataLookupF32(NULL, arguments, "-ra"); // Right Ascension of boresight
     185        float dec0 = psMetadataLookupF32(NULL, arguments, "-dec"); // Declination of boresight
     186        float pa = psMetadataLookupF32(NULL, arguments, "-pa"); // Position angle
     187
     188        if (isnan(ra0) || isnan(dec0) || isnan(pa) || isnan(scale) || isnan(zp) || isnan(seeing)) {
     189            psError(PS_ERR_BAD_PARAMETER_VALUE, false,
     190                    "-ra, -dec, -pa -scale, -zp, -seeing must be specified with -stars");
     191            usage(arguments, config);
     192        }
     193        psMetadataAddF32(config->arguments, PS_LIST_TAIL, "RA", 0, "Boresight RA (radians)",
     194                         ra0 * M_PI / 180.0);
     195        psMetadataAddF32(config->arguments, PS_LIST_TAIL, "DEC", 0, "Boresight Declination (radians)",
     196                         dec0 * M_PI / 180.0);
     197        psMetadataAddF32(config->arguments, PS_LIST_TAIL, "PA", 0, "Boresight position angle (radians)",
     198                         pa * M_PI / 180.0);
     199
     200        psArray *raDecMag = psVectorsReadFromFile(starName, "%f %f %f"); // Vectors for RA Dec Mag
     201        if (!raDecMag || raDecMag->n != 3) {
     202            psError(PS_ERR_IO, false, "Unable to read RA Dec Mag from %s", starName);
     203            psFree(raDecMag);
     204            psFree(arguments);
     205            psFree(config);
     206            exit(PS_EXIT_CONFIG_ERROR);
     207        }
     208
     209        psVector *ra = raDecMag->data[0]; // Star RAs
     210        psVector *dec = raDecMag->data[1]; // Star Declinations
     211        psVector *mag = raDecMag->data[2]; // Star magnitudes
     212        for (long i = 0; i < ra->n; i++) {
     213            ra->data.F32[i] *= M_PI / 180.0;
     214            dec->data.F32[i] *= M_PI / 180.0;
     215        }
     216
     217        psMetadataAddVector(config->arguments, PS_LIST_TAIL, "CATALOG.RA", 0, "Star RAs (radians)", ra);
     218        psMetadataAddVector(config->arguments, PS_LIST_TAIL, "CATALOG.DEC", 0, "Star Decs (radians)", dec);
     219        psMetadataAddVector(config->arguments, PS_LIST_TAIL, "CATALOG.MAG", 0, "Star magnitudes", mag);
     220        psFree(raDecMag);
     221    }
     222
     223    if (psMetadataLookupF32(NULL, config->arguments, "STARS.DENSITY") > 0 &&
     224        (isnan(scale) || isnan(zp) || isnan(seeing))) {
     225        psWarning("-scale, -zp, -seeing must be specified if fake stars are to be generated --- turned off.");
     226        psMetadataAddS32(config->arguments, PS_LIST_TAIL, "STASR.NUM", PS_META_REPLACE,
     227                         "Fake stars turned off", 0);
     228    }
     229
     230
    137231    psFree(arguments);
     232    return;
    138233}
Note: See TracChangeset for help on using the changeset viewer.