IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 29565


Ignore:
Timestamp:
Oct 26, 2010, 12:30:29 PM (16 years ago)
Author:
Serge CHASTEL
Message:

-version option vs file version taken into account/Field CMF_VERSION added to FITS file

Location:
trunk/ppTranslate/src
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppTranslate/src/Makefile.am

    r25923 r29565  
    3232        ppMopsRead.c            \
    3333        ppMopsWrite.c           \
    34         ppMopsMerge.c
     34        ppMopsMerge.c           \
     35        ppMopsGetSkyChipPsfVersion.c
    3536
    3637ppMonet_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULES_CFLAGS) $(PPMONET_CFLAGS)
  • trunk/ppTranslate/src/ppMops.c

    r28623 r29565  
    33
    44#include "ppMops.h"
     5
     6/*
     7  Behavior:
     8
     9  If the CMF input files have different versions, merging cannot be
     10  performed.
     11
     12  If -version option is not given:
     13    the output version is the version of the input file(s)
     14  otherwise
     15    the output version is (possibly forced to) the version option
     16
     17  If the input file(s) version is equals to the version option:
     18    no change in version (neither data creation nor data loss)
     19  If the input file(s) version is strictly less than the version option:
     20    Data for version option are set tp default values: 0, NaN, NULL
     21  If the input file(s) version is strictly greater than the version option:
     22    Data are those of the lower version
     23
     24  Example:
     25   -> ppMops dv1_input_files_list output -version 1
     26      is the same as 'ppMops dv1_input_files_list output'
     27   -> ppMops dv1_input_files_list output -version 1
     28      is the same as 'ppMops dv1_input_files_list output'
     29   -> ppMops dv1_input_files_list output -version 2
     30      Aggregate DV1 values and add default DV2 values
     31      Saved as DV2 file
     32   -> ppMops dv2_input_files_list output -version 1
     33      Aggregate DV1 values and truncate DV2 values
     34      Saved as DV1 file
     35 */
    536
    637int main(int argc, char *argv[])
  • trunk/ppTranslate/src/ppMops.h

    r29560 r29565  
    2525  float rmsAstrom;                    // Astrometric solution RMS
    2626  psString output;                    // Output filename
    27   psU16 version;                        // Version (for parameters)
     27  psU16 version;                      // Version (for parameters)
    2828} ppMopsArguments;
    2929
     
    125125
    126126/// Read detections
    127 psArray *ppMopsRead(const ppMopsArguments *args);
     127psArray *ppMopsRead(ppMopsArguments *args);
    128128
    129129/// Merge detections
     
    133133bool ppMopsWrite(const ppMopsDetections *detections, const ppMopsArguments *args);
    134134
     135/// Get the version contained in EXTTYPE of the "SkyChip.psf" table:
     136/// @returns 1 if EXTTYPE of "SkyChip.psf" is PS1_DV1
     137/// @returns 2 if EXTTYPE of "SkyChip.psf" is PS1_DV2
     138/// @returns 0 otherwise
     139int ppMopsGetSkyChipPsfVersion(const psFits* fits);
     140
    135141#endif
  • trunk/ppTranslate/src/ppMopsArguments.c

    r29560 r29565  
    7474    psMetadataAddF32(arguments, PS_LIST_TAIL, "-zp_error", 0, "Error in magnitude zero point", NAN);
    7575    psMetadataAddF32(arguments, PS_LIST_TAIL, "-astrom_rms", 0, "Astrometric solution RMS", NAN);
    76     psMetadataAddU16(arguments, PS_LIST_TAIL, "-version", 0, "Parameters version (see ICD)", 1);
     76    psMetadataAddU16(arguments, PS_LIST_TAIL, "-version", 0, "Parameters version (see ICD)", 0);
    7777
    7878    if (argc == 1 || !psArgumentParse(arguments, &argc, argv) || argc != 3) {
  • trunk/ppTranslate/src/ppMopsRead.c

    r29560 r29565  
    88#include "ppMops.h"
    99
    10 psArray *ppMopsRead(const ppMopsArguments *args)
     10/*
     11  ppMopsRead possibly modifies the args->version if the user did not
     12  set it explicitely.
     13 */
     14psArray *ppMopsRead(ppMopsArguments *args)
    1115{
    1216    psTrace("ppMops.read", 1, "Reading input detections\n");
     
    1721    for (int i = 0; i < num; i++) {
    1822        psFits *fits = psFitsOpen(inNames->data[i], "r"); // FITS file
     23
    1924        if (!fits) {
    2025            psError(PS_ERR_IO, false, "Unable to open input %d", i);
     
    3742            return false;
    3843        }
     44        int skyChipPsfVersion = ppMopsGetSkyChipPsfVersion(fits);
     45        if (args->version == 0) {
     46          psTrace("ppMops.read", 1, "Changing args->version to %d\n", skyChipPsfVersion);
     47          args->version = skyChipPsfVersion;
     48        }
     49        if (skyChipPsfVersion == 0) {
     50          // Try to read with the user specified version?
     51          skyChipPsfVersion = args->version;
     52        }
     53        /* Display a warning message if there are version
     54           inconsistencies between the file and the flag (note that
     55           those inconsistencies might be wanted) */
     56        if (skyChipPsfVersion != args->version) {
     57          if (skyChipPsfVersion > args->version) {
     58            psWarning("The FITS data will be downgraded from PS1_DV%d to PS1_DV%d\n",
     59                      skyChipPsfVersion, args->version);
     60          } else { // Necessarily: skyChipPsfVersion > args->version
     61            psWarning("The FITS data will be upgraded from PS1_DV%d to PS1_DV%d (new values set to default 0, NaN...)\n",
     62                      skyChipPsfVersion, args->version);           
     63          }
     64        }
    3965
    4066        long size = psFitsTableSize(fits); // Size of table
     
    117143            //Additions of 2010-10-25
    118144            if (args->version == 2) {
    119               det->psfInstFlux->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PSF_INST_FLUX");
    120               det->psfInstFluxSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PSF_INST_FLUX_SIG");
    121               det->apMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG");
    122               det->apMagRaw->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG_RAW");
    123               det->apMagRadius->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG_RADIUS");
    124               det->apFlux->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_FLUX");
    125               det->apFluxSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_FLUX_SIG");
    126               det->peakFluxAsMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PEAK_FLUX_AS_MAG");
    127               det->calPsfMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "CAL_PSF_MAG");
    128               det->calPsfMagSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "CAL_PSF_MAG_SIG");
    129               det->sky->data.F32[numGood] = psMetadataLookupS32(NULL, row, "SKY");
    130               det->skySig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "SKY_SIGMA");
    131               det->qualityPerfect->data.F32[numGood] = psMetadataLookupF32(NULL, row, "PSF_QF_PERFECT");
    132               det->momentsR1->data.F32[numGood] = psMetadataLookupF32(NULL, row, "MOMENTS_R1");
    133               det->momentsRH->data.F32[numGood] = psMetadataLookupF32(NULL, row, "MOMENTS_RH");
    134               det->kronFlux->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX");
    135               det->kronFluxErr->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_ERR");
    136               det->kronFluxInner->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_INNER");
    137               det->kronFluxOuter->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_OUTER");
    138               det->diffRP->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_R_P");
    139               det->diffSnP->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_SN_P");
    140               det->diffRM->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_R_M");
    141               det->diffSnM->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_SN_M");
    142               det->flags2->data.U32[numGood] = psMetadataLookupU32(NULL, row, "FLAGS2");
    143               det->ippIdet->data.U32[numGood] = psMetadataLookupU32(NULL, row, "IPP_IDET");
    144               det->nFrames->data.U16[numGood] = psMetadataLookupU16(NULL, row, "N_FRAMES");
    145               det->padding->data.S16[numGood] = psMetadataLookupS16(NULL, row, "PADDING");
    146             } else {
    147               det->psfInstFlux->data.F32[numGood] = NAN;
    148               det->psfInstFluxSig->data.F32[numGood] = NAN;
    149               det->apMag->data.F32[numGood] = NAN;
    150               det->apMagRaw->data.F32[numGood] = NAN;
    151               det->apMagRadius->data.F32[numGood] = NAN;
    152               det->apFlux->data.F32[numGood] = NAN;
    153               det->apFluxSig->data.F32[numGood] = NAN;
    154               det->peakFluxAsMag->data.F32[numGood] = NAN;
    155               det->calPsfMag->data.F32[numGood] = NAN;
    156               det->calPsfMagSig->data.F32[numGood] = NAN;
    157               det->sky->data.F32[numGood] = NAN;
    158               det->skySig->data.F32[numGood] = NAN;
    159               det->qualityPerfect->data.F32[numGood] = NAN;
    160               det->momentsR1->data.F32[numGood] = NAN;
    161               det->momentsRH->data.F32[numGood] = NAN;
    162               det->kronFlux->data.F32[numGood] = NAN;
    163               det->kronFluxErr->data.F32[numGood] = NAN;
    164               det->kronFluxInner->data.F32[numGood] = NAN;
    165               det->kronFluxOuter->data.F32[numGood] = NAN;
    166               det->diffRP->data.F32[numGood] = NAN;
    167               det->diffSnP->data.F32[numGood] = NAN;
    168               det->diffRM->data.F32[numGood] = NAN;
    169               det->diffSnM->data.F32[numGood] = NAN;
    170               det->flags2->data.U32[numGood] = 0;
    171               det->ippIdet->data.U32[numGood] = 0;
    172               det->nFrames->data.U16[numGood] = 0;
    173               det->padding->data.S16[numGood] = 0;
     145              //Values are set only if the version is 2
     146              if (skyChipPsfVersion == 2) {
     147                det->psfInstFlux->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PSF_INST_FLUX");
     148                det->psfInstFluxSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PSF_INST_FLUX_SIG");
     149                det->apMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG");
     150                det->apMagRaw->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG_RAW");
     151                det->apMagRadius->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG_RADIUS");
     152                det->apFlux->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_FLUX");
     153                det->apFluxSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_FLUX_SIG");
     154                det->peakFluxAsMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PEAK_FLUX_AS_MAG");
     155                det->calPsfMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "CAL_PSF_MAG");
     156                det->calPsfMagSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "CAL_PSF_MAG_SIG");
     157                det->sky->data.F32[numGood] = psMetadataLookupS32(NULL, row, "SKY");
     158                det->skySig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "SKY_SIGMA");
     159                det->qualityPerfect->data.F32[numGood] = psMetadataLookupF32(NULL, row, "PSF_QF_PERFECT");
     160                det->momentsR1->data.F32[numGood] = psMetadataLookupF32(NULL, row, "MOMENTS_R1");
     161                det->momentsRH->data.F32[numGood] = psMetadataLookupF32(NULL, row, "MOMENTS_RH");
     162                det->kronFlux->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX");
     163                det->kronFluxErr->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_ERR");
     164                det->kronFluxInner->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_INNER");
     165                det->kronFluxOuter->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_OUTER");
     166                det->diffRP->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_R_P");
     167                det->diffSnP->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_SN_P");
     168                det->diffRM->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_R_M");
     169                det->diffSnM->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_SN_M");
     170                det->flags2->data.U32[numGood] = psMetadataLookupU32(NULL, row, "FLAGS2");
     171                det->ippIdet->data.U32[numGood] = psMetadataLookupU32(NULL, row, "IPP_IDET");
     172                det->nFrames->data.U16[numGood] = psMetadataLookupU16(NULL, row, "N_FRAMES");
     173                det->padding->data.S16[numGood] = psMetadataLookupS16(NULL, row, "PADDING");
     174              } else {
     175                det->psfInstFlux->data.F32[numGood] = NAN;
     176                det->psfInstFluxSig->data.F32[numGood] = NAN;
     177                det->apMag->data.F32[numGood] = NAN;
     178                det->apMagRaw->data.F32[numGood] = NAN;
     179                det->apMagRadius->data.F32[numGood] = NAN;
     180                det->apFlux->data.F32[numGood] = NAN;
     181                det->apFluxSig->data.F32[numGood] = NAN;
     182                det->peakFluxAsMag->data.F32[numGood] = NAN;
     183                det->calPsfMag->data.F32[numGood] = NAN;
     184                det->calPsfMagSig->data.F32[numGood] = NAN;
     185                det->sky->data.F32[numGood] = NAN;
     186                det->skySig->data.F32[numGood] = NAN;
     187                det->qualityPerfect->data.F32[numGood] = NAN;
     188                det->momentsR1->data.F32[numGood] = NAN;
     189                det->momentsRH->data.F32[numGood] = NAN;
     190                det->kronFlux->data.F32[numGood] = NAN;
     191                det->kronFluxErr->data.F32[numGood] = NAN;
     192                det->kronFluxInner->data.F32[numGood] = NAN;
     193                det->kronFluxOuter->data.F32[numGood] = NAN;
     194                det->diffRP->data.F32[numGood] = NAN;
     195                det->diffSnP->data.F32[numGood] = NAN;
     196                det->diffRM->data.F32[numGood] = NAN;
     197                det->diffSnM->data.F32[numGood] = NAN;
     198                det->flags2->data.U32[numGood] = 0;
     199                det->ippIdet->data.U32[numGood] = 0;
     200                det->nFrames->data.U16[numGood] = 0;
     201                det->padding->data.S16[numGood] = 0;
     202              }
    174203            }
    175204
  • trunk/ppTranslate/src/ppMopsWrite.c

    r29560 r29565  
    5050    psMetadataAddF32(header, PS_LIST_TAIL, "MAGZPERR", 0, "Error in magnitude zero point", args->zpErr);
    5151    psMetadataAddF32(header, PS_LIST_TAIL, "ASTRORMS", 0, "RMS of astrometric fit", args->rmsAstrom);
     52    //New field in header that tells about the CMF version
     53    char cmfVersion[8];
     54    sprintf(cmfVersion, "PS1_DV%d", args->version);
     55    psMetadataAddStr(header, PS_LIST_TAIL, "CMFVERSION", 0, "CMF version", cmfVersion);
    5256
    5357    if (det->num == 0) {
Note: See TracChangeset for help on using the changeset viewer.