IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 29, 2012, 2:15:01 PM (14 years ago)
Author:
eugene
Message:

merge changes from trunk

Location:
branches/eam_branches/ipp-20120905
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20120905

  • branches/eam_branches/ipp-20120905/ppTranslate/src/ppMopsRead.c

    r34566 r34735  
    1 /*
    2  *
    3  *
    4  *
    5  *
    6  *
    7  *
    8  *
    9  *
    10  *
    11  *
    12  *
    13  *
    14  *
    15  *
    16  *
    17  *
    18  *
    19  *
    20  *
    21  *
    22  *
    23  *
    24  *
    25  *
    26  *
    27  *
    28  *
    29  *
    30  * THIS CODE CONTAINS DIRTY BUG FIXES!
    31  *
    32  *
    33  *
    34  *
    35  *
    36  *
    37  *
    38  * Look for "DIRTY_BUG_FIX" to know where
    39  *
    40  * and set the following to 0 to change the code
    41  */
    42 #define DIRTY_BUG_FIX 1
    43 /*
    44  *
    45  *
    46  *
    47  *
    48  *
    49  *
    50  *
    51  *
    52  *
    53  *
    54  *
    55  *
    56  *
    57  *
    58  *
    59  *
    60  *
    61  *
    62  *
    63  *
    64  *
    65  *
    66  *
    67  *
    68  *
    69  *
    70  *
    71  *
    72  *
    73  *
    74  *
    75  *
    76  *
    77  */
     1#define DIRTY_BUG_FIX 0
    782
    793#ifdef HAVE_CONFIG_H
     
    9014static void replaceDummyValuesS32(const char* colName, psMetadata* source, psMetadata* target, psVector* indexes);
    9115static void renameDummyValuesF32(const char* colNameSource, psMetadata* source, const char* colNameTarget, psMetadata* target, psVector* indexes);
    92 #if DIRTY_BUG_FIX
    93 static psVector* createDummyF32_default(long size, float default_value);
    94 #endif
    9516
    9617/*
     
    14566    if (skyChipPsfVersion != args->version) {
    14667      if (skyChipPsfVersion > args->version) {
    147         psWarning("The FITS data will be downgraded from PS1_DV%d to PS1_DV%d\n",
    148                   skyChipPsfVersion, args->version);
     68        psWarning("The FITS data will be downgraded from PS1_DV%d to PS1_DV%d\n",
     69                  skyChipPsfVersion, args->version);
    14970      } else { // Necessarily: skyChipPsfVersion > args->version
    150         psWarning("The FITS data will be upgraded from PS1_DV%d to PS1_DV%d (new values set to default 0, NaN...)\n",
    151                   skyChipPsfVersion, args->version);
     71        psWarning("The FITS data will be upgraded from PS1_DV%d to PS1_DV%d (new values set to default 0, NaN...)\n",
     72                  skyChipPsfVersion, args->version);
    15273      }
    15374    }
     
    199120      addDummyValues(det->table, size, args->version);
    200121      if (!psFitsMoveExtName(fits, "SkyChip.xfit")) {
    201         psTrace("ppMops.read", 3, "No fitted trails extension");
     122        psTrace("ppMops.read", 3, "No fitted trails extension");
    202123      } else {
    203         psTrace("ppMops.read", 3, "Fitted trails extension found\n");
    204         psTrace("ppMops.read", 10, "Getting size?\n");
    205         int fittedTrailsSize = psFitsTableSize(fits);
    206         psTrace("ppMops.read", 10, "size = %d\n", fittedTrailsSize);
    207         if (fittedTrailsSize <= 0) {
    208           psErrorStackPrint(stderr, "Unable to determine size of fitted trails extension table %d", i);
    209           psTrace("ppMops.read", 3, "No entry in fitted trails extension!!!!\n");
    210           psErrorClear();
    211         } else {
    212           psTrace("ppMops.read", 10, "Reading table of interest?\n");
    213           psMetadata* fittedTrails = psFitsReadTableAllColumns(fits); // Table of interest
    214           psTrace("ppMops.read", 10, "OK for table of interest\n");
    215           if (!fittedTrails) {
    216             psError(PS_ERR_IO, false, "Unable to read fittedTrails table in file %d", i);
    217             return NULL;
    218           }
    219           //Iterate on the different names and types expected in the fittedTrails parameters
    220           psTrace("ppMops.read", 10, "Getting IPP_IDET\n");
    221           psVector* idet = psMetadataLookupVector(NULL, fittedTrails, "IPP_IDET");
    222           replaceDummyValuesF32("X_EXT", fittedTrails, det->table, idet);
    223           replaceDummyValuesF32("Y_EXT", fittedTrails, det->table, idet);
    224           replaceDummyValuesF32("X_EXT_SIG", fittedTrails, det->table, idet);
    225           replaceDummyValuesF32("Y_EXT_SIG", fittedTrails, det->table, idet);
    226           replaceDummyValuesF32("EXT_INST_MAG",  fittedTrails, det->table, idet);
    227           replaceDummyValuesF32("EXT_INST_MAG_SIG",  fittedTrails, det->table, idet);
    228           replaceDummyValuesS32("NPARAMS",  fittedTrails, det->table, idet);
    229           replaceDummyValuesF32("EXT_WIDTH_MAJ",  fittedTrails, det->table, idet);
    230           replaceDummyValuesF32("EXT_WIDTH_MIN",  fittedTrails, det->table, idet);
    231           replaceDummyValuesF32("EXT_THETA",  fittedTrails, det->table, idet);
    232           replaceDummyValuesF32("EXT_WIDTH_MAJ_ERR",  fittedTrails, det->table, idet);
    233           // EXT_WIDTH_MIN_ERR is actually undefined but set to 0. in CMF files
    234           // We explicitely let it set to NaN, hence the commented out
    235           // following line
    236           //replaceDummyValuesF32("EXT_WIDTH_MIN_ERR",  fittedTrails, det->table, idet);
    237           replaceDummyValuesF32("EXT_THETA_ERR",  fittedTrails, det->table, idet);
    238           psTrace("ppMops.read", 10, "Got all version 2 values\n");
    239           if (skyChipPsfVersion >= 3) {
    240             psTrace("ppMops.read", 10, "Getting PS1_DV3 data\n");
    241             replaceDummyValuesF32("RA_EXT",  fittedTrails, det->table, idet);
    242             // Note: RA_EXT_SIGMA is computed (see det->raExtErr)
    243             replaceDummyValuesF32("DEC_EXT",  fittedTrails, det->table, idet);
    244             // Note: DEC_EXT_SIGMA is computed (see det->decExtErr)
    245             //Note: POSANG_EXT is POSANGLE in xfit
    246 #if DIRTY_BUG_FIX
    247 #else
    248             renameDummyValuesF32("POSANGLE",  fittedTrails, "POSANG_EXT", det->table, idet);
    249 #endif   
    250             //Note: PLTSCALE_EXT in xfit is PLTSCALE
    251             renameDummyValuesF32("PLTSCALE", fittedTrails, "PLTSCALE_EXT", det->table, idet);
    252             renameDummyValuesF32("EXT_INST_FLUX", fittedTrails, "EXT_FLUX", det->table, idet);
    253             replaceDummyValuesF32("EXT_CAL_MAG", fittedTrails, det->table, idet);
    254             renameDummyValuesF32("EXT_INST_MAG_SIG", fittedTrails, "EXT_MAG_SIG", det->table, idet);
    255             replaceDummyValuesF32("EXT_CHISQ", fittedTrails, det->table, idet);
    256             replaceDummyValuesS32("EXT_NDOF", fittedTrails, det->table, idet);
    257             psTrace("ppMops.read", 10, "Got all version 3 values\n");
    258           }
    259         }
     124        psTrace("ppMops.read", 3, "Fitted trails extension found\n");
     125        psTrace("ppMops.read", 10, "Getting size?\n");
     126        int fittedTrailsSize = psFitsTableSize(fits);
     127        psTrace("ppMops.read", 10, "size = %d\n", fittedTrailsSize);
     128        if (fittedTrailsSize <= 0) {
     129          psErrorStackPrint(stderr, "Unable to determine size of fitted trails extension table %d", i);
     130          psTrace("ppMops.read", 3, "No entry in fitted trails extension!!!!\n");
     131          psErrorClear();
     132        } else {
     133          psTrace("ppMops.read", 10, "Reading table of interest?\n");
     134          psMetadata* fittedTrails = psFitsReadTableAllColumns(fits); // Table of interest
     135          psTrace("ppMops.read", 10, "OK for table of interest\n");
     136          if (!fittedTrails) {
     137            psError(PS_ERR_IO, false, "Unable to read fittedTrails table in file %d", i);
     138            return NULL;
     139          }
     140          //Iterate on the different names and types expected in the fittedTrails parameters
     141          psTrace("ppMops.read", 10, "Getting IPP_IDET\n");
     142          psVector* idet = psMetadataLookupVector(NULL, fittedTrails, "IPP_IDET");
     143          replaceDummyValuesF32("X_EXT", fittedTrails, det->table, idet);
     144          replaceDummyValuesF32("Y_EXT", fittedTrails, det->table, idet);
     145          replaceDummyValuesF32("X_EXT_SIG", fittedTrails, det->table, idet);
     146          replaceDummyValuesF32("Y_EXT_SIG", fittedTrails, det->table, idet);
     147          replaceDummyValuesF32("EXT_INST_MAG",  fittedTrails, det->table, idet);
     148          replaceDummyValuesF32("EXT_INST_MAG_SIG",  fittedTrails, det->table, idet);
     149          replaceDummyValuesS32("NPARAMS",  fittedTrails, det->table, idet);
     150          replaceDummyValuesF32("EXT_WIDTH_MAJ",  fittedTrails, det->table, idet);
     151          replaceDummyValuesF32("EXT_WIDTH_MIN",  fittedTrails, det->table, idet);
     152          replaceDummyValuesF32("EXT_THETA",  fittedTrails, det->table, idet);
     153          replaceDummyValuesF32("EXT_WIDTH_MAJ_ERR",  fittedTrails, det->table, idet);
     154          // EXT_WIDTH_MIN_ERR is actually undefined but set to 0. in CMF files
     155          // We explicitely let it set to NaN, hence the commented out
     156          // following line
     157          //replaceDummyValuesF32("EXT_WIDTH_MIN_ERR",  fittedTrails, det->table, idet);
     158          replaceDummyValuesF32("EXT_THETA_ERR",  fittedTrails, det->table, idet);
     159          psTrace("ppMops.read", 10, "Got all version 2 values\n");
     160          if (skyChipPsfVersion >= 3) {
     161            psTrace("ppMops.read", 10, "Getting PS1_DV3 data\n");
     162            replaceDummyValuesF32("RA_EXT",  fittedTrails, det->table, idet);
     163            // Note: RA_EXT_SIGMA is computed (see det->raExtErr)
     164            replaceDummyValuesF32("DEC_EXT",  fittedTrails, det->table, idet);
     165            // Note: DEC_EXT_SIGMA is computed (see det->decExtErr)
     166            //Note: POSANG_EXT is POSANGLE in xfit
     167            renameDummyValuesF32("POSANGLE",  fittedTrails, "POSANG_EXT", det->table, idet);
     168            //Not written anymore but still used in computation
     169            renameDummyValuesF32("PLTSCALE", fittedTrails, "PLTSCALE_EXT", det->table, idet);
     170            renameDummyValuesF32("EXT_INST_FLUX", fittedTrails, "EXT_FLUX", det->table, idet);
     171            replaceDummyValuesF32("EXT_CAL_MAG", fittedTrails, det->table, idet);
     172            renameDummyValuesF32("EXT_INST_MAG_SIG", fittedTrails, "EXT_MAG_SIG", det->table, idet);
     173            replaceDummyValuesF32("EXT_CHISQ", fittedTrails, det->table, idet);
     174            replaceDummyValuesS32("EXT_NDOF", fittedTrails, det->table, idet);
     175            psTrace("ppMops.read", 10, "Got all version 3 values\n");
     176          }
     177        }
    260178      }
    261179    }
     
    264182    if (args->version == 0) {
    265183      if (skyChipPsfVersion < 2) {
    266         // XXX: TODO: Do we need to add dummy vectors for the missing columns?
     184        // XXX: TODO: Do we need to add dummy vectors for the missing columns?
    267185      }
    268186    }
     
    324242      psU32 flags = flagsV->data.U32[row]; // psFitsTableGetU32(NULL, table, row, "FLAGS");
    325243      if (flags & SOURCE_MASK) {
    326         psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of flags: %ud", row, i, flags);
    327         det->mask->data.U8[row] = 0xFF;
    328         continue;
     244        psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of flags: %ud", row, i, flags);
     245        det->mask->data.U8[row] = 0xFF;
     246        continue;
    329247      }
    330248
     
    333251      double yErr = yErrV->data.F32[row];
    334252      double scale = scaleV->data.F32[row];
    335 #if DIRTY_BUG_FIX
    336       double angle = 0. * angleV->data.F32[row];
    337 #else
    338253      double angle = angleV->data.F32[row];
    339 #endif
    340 
    341254      if (!isfinite(det->x->data.F32[row]) || !isfinite(det->y->data.F32[row]) ||
    342           !isfinite(det->ra->data.F64[row]) || !isfinite(det->dec->data.F64[row]) ||
    343           !isfinite(mag->data.F32[row]) || !isfinite(magErr->data.F32[row]) ||
    344           !isfinite(xErr) || !isfinite(yErr) || !isfinite(scale) || !isfinite(angle)) {
    345         psTrace("ppMops.read", 10,
    346                 "Discarding row %ld from input %d because of non-finite values: "
    347                 "%f %f %lf %lf %f %f %f %f %f %f",
    348                 row, i,
    349                 det->x->data.F32[row], det->y->data.F32[row],
    350                 det->ra->data.F64[row], det->dec->data.F64[row],
    351                 mag->data.F32[row], magErr->data.F32[row],
    352                 xErr, yErr, scale, angle);
    353         det->mask->data.U8[row] = 0xFF;
    354         continue;
     255          !isfinite(det->ra->data.F64[row]) || !isfinite(det->dec->data.F64[row]) ||
     256          !isfinite(mag->data.F32[row]) || !isfinite(magErr->data.F32[row]) ||
     257          !isfinite(xErr) || !isfinite(yErr) || !isfinite(scale) || !isfinite(angle)) {
     258        psTrace("ppMops.read", 10,
     259                "Discarding row %ld from input %d because of non-finite values: "
     260                "%f %f %lf %lf %f %f %f %f %f %f",
     261                row, i,
     262                det->x->data.F32[row], det->y->data.F32[row],
     263                det->ra->data.F64[row], det->dec->data.F64[row],
     264                mag->data.F32[row], magErr->data.F32[row],
     265                xErr, yErr, scale, angle);
     266        det->mask->data.U8[row] = 0xFF;
     267        continue;
    355268      }
    356269
     
    364277      det->mask->data.U8[row] = 0;
    365278      plateScale += scale;
     279      //Update the platescale value (should be a constant)
     280      if (isfinite(scale)) {
     281          det->platescale = scale;
     282      }
    366283      numGood++;
    367284
    368285      // Same for EXT data if version permits
    369286      if (skyChipPsfVersion >= 3) {
    370         xErr = xExtErrV->data.F32[row];
    371         yErr = yExtErrV->data.F32[row];
    372         scale = scaleExtV->data.F32[row]/3600.;
    373 #if DIRTY_BUG_FIX
    374         angle = 0.;
    375 #else
    376         angle = angleExtV->data.F32[row];
    377 #endif
    378         cosAngle = cos(angle);
    379         sinAngle = sin(angle);
    380         cosAngle2 = PS_SQR(cosAngle);
    381         sinAngle2 = PS_SQR(sinAngle);
    382         xErr2 = PS_SQR(xErr);
    383         yErr2 = PS_SQR(yErr);
    384         errScale = scale / 3600.0;
    385         det->raExtErr->data.F64[row] = errScale * sqrt(cosAngle2 * xErr2 + sinAngle2 * yErr2);
    386         det->decExtErr->data.F64[row] = errScale * sqrt(sinAngle2 * xErr2 + cosAngle2 * yErr2);
     287        xErr = xExtErrV->data.F32[row];
     288        yErr = yExtErrV->data.F32[row];
     289        scale = scaleExtV->data.F32[row]/3600.;
     290        angle = angleExtV->data.F32[row];
     291        cosAngle = cos(angle);
     292        sinAngle = sin(angle);
     293        cosAngle2 = PS_SQR(cosAngle);
     294        sinAngle2 = PS_SQR(sinAngle);
     295        xErr2 = PS_SQR(xErr);
     296        yErr2 = PS_SQR(yErr);
     297        errScale = scale / 3600.0;
     298        det->raExtErr->data.F64[row] = errScale * sqrt(cosAngle2 * xErr2 + sinAngle2 * yErr2);
     299        det->decExtErr->data.F64[row] = errScale * sqrt(sinAngle2 * xErr2 + cosAngle2 * yErr2);
    387300      }
    388301    }
     
    406319  return dummy;
    407320}
    408 #if DIRTY_BUG_FIX
    409 static psVector* createDummyF32_default(long size, float default_value) {
    410   psVector* dummy = psVectorAlloc(size, PS_TYPE_F32);
    411   psVectorInit(dummy, default_value);
    412   return dummy;
    413 }
    414 #endif
     321
    415322static psVector* createDummyS32(long size) {
    416323  psVector* dummy = psVectorAlloc(size, PS_TYPE_S32);
    417   psVectorInit(dummy, NAN);
     324  psVectorInit(dummy, 0);
    418325  return dummy;
    419326}
     
    439346    psMetadataAdd(md, PS_LIST_TAIL, "DEC_EXT",  PS_DATA_VECTOR, "Fitted centroid DEC", createDummyF32(size));
    440347/*     psMetadataAdd(md, PS_LIST_TAIL, "DEC_EXT_SIGMA",  PS_DATA_VECTOR, "Fitted DEC sigma", createDummyF32(size)); *\/ */
    441 #if DIRTY_BUG_FIX
    442     psMetadataAdd(md, PS_LIST_TAIL, "POSANG_EXT",  PS_DATA_VECTOR, "Fitted position angle", createDummyF32_default(size, 0.));
    443 #else
    444348    psMetadataAdd(md, PS_LIST_TAIL, "POSANG_EXT",  PS_DATA_VECTOR, "Fitted position angle", createDummyF32(size));
    445 #endif
    446349    psMetadataAdd(md, PS_LIST_TAIL, "PLTSCALE_EXT",  PS_DATA_VECTOR, "Plate scale at centroid", createDummyF32(size));
    447350    psMetadataAdd(md, PS_LIST_TAIL, "EXT_FLUX",  PS_DATA_VECTOR, "Fitted flux", createDummyF32(size));
Note: See TracChangeset for help on using the changeset viewer.