IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 17, 2014, 12:32:26 PM (12 years ago)
Author:
eugene
Message:

merge changes (from past YEAR) into trunk

Location:
branches/eam_branches/ipp-ops-20130712/Ohana
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-ops-20130712/Ohana

    • Property svn:mergeinfo deleted
  • branches/eam_branches/ipp-ops-20130712/Ohana/src/libdvo/src/dvo_convert.c

    r35172 r37067  
    4141  CONVERT_FORMAT ("DVO_AVERAGE_PS1_V3",          PS1_V3);
    4242  CONVERT_FORMAT ("DVO_AVERAGE_PS1_V4",          PS1_V4);
     43  CONVERT_FORMAT ("DVO_AVERAGE_PS1_V5",          PS1_V5);
    4344  CONVERT_FORMAT ("DVO_AVERAGE_PS1_REF",         PS1_REF);
    4445# undef CONVERT_FORMAT
     
    6364    fprintf (stderr, "EXTNAME missing for average table\n");
    6465    return (FALSE);
     66  }
     67
     68  // block to convert broken tables (PS1_V4 made before the Xfix addition)
     69  if (!strcmp (extname, "DVO_AVERAGE_PS1_V4") && (ftable[0].header[0].Naxis[0] == 120)) {
     70    Average_PS1_V4alt *tmpAverage;
     71    tmpAverage = gfits_table_get_Average_PS1_V4alt (ftable, Naverage, NULL);
     72    if (!tmpAverage) {
     73      fprintf (stderr, "ERROR: failed to read averages\n");
     74      exit (2);
     75    }
     76    average = Average_PS1_V4alt_ToInternal (tmpAverage, *Naverage);
     77    free (tmpAverage);
     78    *format = DVO_FORMAT_PS1_V4;
     79    return (average);
    6580  }
    6681
     
    98113  CONVERT_FORMAT ("DVO_AVERAGE_PS1_V3",          PS1_V3,          PS1_V3);
    99114  CONVERT_FORMAT ("DVO_AVERAGE_PS1_V4",          PS1_V4,          PS1_V4);
     115  CONVERT_FORMAT ("DVO_AVERAGE_PS1_V5",          PS1_V5,          PS1_V5);
    100116  CONVERT_FORMAT ("DVO_AVERAGE_PS1_REF",         PS1_REF,         PS1_REF);
    101117# undef CONVERT_FORMAT
     
    133149      FORMAT_CASE (PS1_V3,          PS1_V3);
    134150      FORMAT_CASE (PS1_V4,          PS1_V4);
     151      FORMAT_CASE (PS1_V5,          PS1_V5);
    135152      FORMAT_CASE (PS1_REF,         PS1_REF);
    136153# undef FORMAT_CASE
     
    145162/*** Measure / FTable conversion functions ***/
    146163
    147 Measure *FtableToMeasure (FTable *ftable, off_t *Nmeasure, char *format) {
     164// FtableToMeasure needs the Average since old formats stored measure.dR,dD only
     165Measure *FtableToMeasure (FTable *ftable, Average *average, off_t *Nmeasure, char *format) {
    148166
    149167  Measure *measure;
     
    156174  }
    157175
    158 # define CONVERT_FORMAT(NAME, FORMAT, TYPE) \
    159   if (!strcmp (extname, NAME)) { \
    160     Measure_##TYPE *tmpMeasure; \
     176  // block to convert broken tables (PS1_V4 made before the Xfix addition)
     177  if (!strcmp (extname, "DVO_MEASURE_PS1_V4") && (ftable[0].header[0].Naxis[0] == 176)) {
     178    fprintf (stderr, "reading alt PS1_V4 format\n");
     179    Measure_PS1_V4alt *tmpMeasure;
     180    tmpMeasure = gfits_table_get_Measure_PS1_V4alt (ftable, Nmeasure, NULL);
     181    if (!tmpMeasure) {
     182      fprintf (stderr, "ERROR: failed to read measures\n");
     183      exit (2);
     184    }
     185    myAssert (average, "conversion to internal needs average table");
     186    measure = Measure_PS1_V4alt_ToInternal (average, tmpMeasure, *Nmeasure);
     187    free (tmpMeasure);
     188    *format = DVO_FORMAT_PS1_V4;
     189    return (measure);
     190  }
     191
     192# define CONVERT_FORMAT(NAME, FORMAT, TYPE, ABS_COORDS)         \
     193  if (!strcmp (extname, NAME)) {                                        \
     194    Measure_##TYPE *tmpMeasure;                                         \
    161195    tmpMeasure = gfits_table_get_Measure_##TYPE (ftable, Nmeasure, NULL); \
    162     if (!tmpMeasure) { \
    163       fprintf (stderr, "ERROR: failed to read measures\n"); \
    164       exit (2); \
    165     } \
    166     measure = Measure_##TYPE##_ToInternal (tmpMeasure, *Nmeasure); \
    167     free (tmpMeasure); \
    168     *format = DVO_FORMAT_##FORMAT; \
     196    if (!tmpMeasure) {                                                  \
     197      fprintf (stderr, "ERROR: failed to read measures\n");             \
     198      exit (2);                                                         \
     199    }                                                                   \
     200    myAssert (ABS_COORDS || average, "conversion to internal needs average table"); \
     201    measure = Measure_##TYPE##_ToInternal (average, tmpMeasure, *Nmeasure); \
     202    free (tmpMeasure);                                                  \
     203    *format = DVO_FORMAT_##FORMAT;                                      \
    169204    return (measure); }
    170205
     
    179214  }
    180215
    181   CONVERT_FORMAT ("DVO_MEASURE_ELIXIR",          ELIXIR,          Elixir);
    182   CONVERT_FORMAT ("DVO_MEASURE_LONEOS",          LONEOS,          Loneos);
    183   CONVERT_FORMAT ("DVO_MEASURE_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0);
    184   CONVERT_FORMAT ("DVO_MEASURE_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1);
    185   CONVERT_FORMAT ("DVO_MEASURE_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1);
    186   CONVERT_FORMAT ("DVO_MEASURE_PS1_DEV_2",       PS1_DEV_2,       PS1_DEV_2);
    187   CONVERT_FORMAT ("DVO_MEASURE_PS1_V1",          PS1_V1,          PS1_V1);
    188   CONVERT_FORMAT ("DVO_MEASURE_PS1_V2",          PS1_V2,          PS1_V2);
    189   CONVERT_FORMAT ("DVO_MEASURE_PS1_V3",          PS1_V3,          PS1_V3);
    190   CONVERT_FORMAT ("DVO_MEASURE_PS1_V4",          PS1_V4,          PS1_V4);
    191   CONVERT_FORMAT ("DVO_MEASURE_PS1_REF",         PS1_REF,         PS1_REF);
     216  CONVERT_FORMAT ("DVO_MEASURE_ELIXIR",          ELIXIR,          Elixir,          FALSE);
     217  CONVERT_FORMAT ("DVO_MEASURE_LONEOS",          LONEOS,          Loneos,          FALSE);
     218  CONVERT_FORMAT ("DVO_MEASURE_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0, FALSE);
     219  CONVERT_FORMAT ("DVO_MEASURE_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1, FALSE);
     220  CONVERT_FORMAT ("DVO_MEASURE_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1,       FALSE);
     221  CONVERT_FORMAT ("DVO_MEASURE_PS1_DEV_2",       PS1_DEV_2,       PS1_DEV_2,       FALSE);
     222  CONVERT_FORMAT ("DVO_MEASURE_PS1_V1",          PS1_V1,          PS1_V1,          FALSE);
     223  CONVERT_FORMAT ("DVO_MEASURE_PS1_V2",          PS1_V2,          PS1_V2,          FALSE);
     224  CONVERT_FORMAT ("DVO_MEASURE_PS1_V3",          PS1_V3,          PS1_V3,          FALSE);
     225  CONVERT_FORMAT ("DVO_MEASURE_PS1_V4",          PS1_V4,          PS1_V4,          FALSE);
     226  CONVERT_FORMAT ("DVO_MEASURE_PS1_V5",          PS1_V5,          PS1_V5,          TRUE);
     227  CONVERT_FORMAT ("DVO_MEASURE_PS1_REF",         PS1_REF,         PS1_REF,         FALSE);
    192228# undef CONVERT_FORMAT
    193229
     
    198234}
    199235
    200 int MeasureToFtable (FTable *ftable, Measure *measure, off_t Nmeasure, char format) {
    201 
    202 # define FORMAT_CASE(FORMAT, TYPE) \
     236// MeasureToFtable needs the Average since old formats stored measure.dR,dD only
     237int MeasureToFtable (FTable *ftable, Average *average, Measure *measure, off_t Nmeasure, char format) {
     238
     239# define FORMAT_CASE(FORMAT, TYPE, ABS_COORDS)          \
    203240    case DVO_FORMAT_##FORMAT: { \
    204241      Measure_##TYPE *tmpMeasure; \
    205       tmpMeasure = MeasureInternalTo_##TYPE (measure, Nmeasure); \
     242      myAssert (ABS_COORDS || average, "conversion to internal needs average table"); \
     243      tmpMeasure = MeasureInternalTo_##TYPE (average, measure, Nmeasure); \
    206244      gfits_table_set_Measure_##TYPE (ftable, tmpMeasure, Nmeasure); \
    207245      free (tmpMeasure); \
     
    214252      break; }
    215253
    216       FORMAT_CASE (ELIXIR,          Elixir);
    217       FORMAT_CASE (LONEOS,          Loneos);
    218       FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
    219       FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
    220       FORMAT_CASE (PS1_DEV_1,       PS1_DEV_1);
    221       FORMAT_CASE (PS1_DEV_2,       PS1_DEV_2);
    222       FORMAT_CASE (PS1_V1,          PS1_V1);
    223       FORMAT_CASE (PS1_V2,          PS1_V2);
    224       FORMAT_CASE (PS1_V3,          PS1_V3);
    225       FORMAT_CASE (PS1_V4,          PS1_V4);
    226       FORMAT_CASE (PS1_REF,         PS1_REF);
     254      FORMAT_CASE (ELIXIR,          Elixir,          FALSE);
     255      FORMAT_CASE (LONEOS,          Loneos,          FALSE);
     256      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0, FALSE);
     257      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1, FALSE);
     258      FORMAT_CASE (PS1_DEV_1,       PS1_DEV_1,       FALSE);
     259      FORMAT_CASE (PS1_DEV_2,       PS1_DEV_2,       FALSE);
     260      FORMAT_CASE (PS1_V1,          PS1_V1,          FALSE);
     261      FORMAT_CASE (PS1_V2,          PS1_V2,          FALSE);
     262      FORMAT_CASE (PS1_V3,          PS1_V3,          FALSE);
     263      FORMAT_CASE (PS1_V4,          PS1_V4,          FALSE);
     264      FORMAT_CASE (PS1_V5,          PS1_V5,          TRUE);
     265      FORMAT_CASE (PS1_REF,         PS1_REF,         FALSE);
    227266# undef FORMAT_CASE
    228267
     
    280319  CONVERT_FORMAT ("DVO_SECFILT_PS1_V3",          PS1_V3,          PS1_V3);
    281320  CONVERT_FORMAT ("DVO_SECFILT_PS1_V4",          PS1_V4,          PS1_V4);
     321  CONVERT_FORMAT ("DVO_SECFILT_PS1_V5",          PS1_V5,          PS1_V5);
    282322  CONVERT_FORMAT ("DVO_SECFILT_PS1_REF",         PS1_REF,         PS1_REF);
    283323# undef CONVERT_FORMAT
     
    315355      FORMAT_CASE (PS1_V3,          PS1_V3);
    316356      FORMAT_CASE (PS1_V4,          PS1_V4);
     357      FORMAT_CASE (PS1_V5,          PS1_V5);
    317358      FORMAT_CASE (PS1_REF,         PS1_REF);
    318359# undef FORMAT_CASE
     
    320361    default:
    321362      fprintf (stderr, "table format unknown (secfilt)\n");
     363      return (FALSE);
     364  }
     365  return (TRUE);
     366}
     367
     368/*** Lensing / FTable conversion functions ***/
     369
     370Lensing *FtableToLensing (FTable *ftable, off_t *Nlensing, char *format) {
     371
     372  Lensing *lensing;
     373  char extname[80];
     374
     375  /* convert to the internal format */
     376  if (!gfits_scan (ftable[0].header, "EXTNAME", "%s", 1, extname)) {
     377    fprintf (stderr, "EXTNAME missing for lensing table\n");
     378    return (FALSE);
     379  }
     380
     381# define CONVERT_FORMAT(NAME, FORMAT, TYPE)             \
     382  if (!strcmp (extname, NAME)) {                                        \
     383    Lensing_##TYPE *tmpLensing;                                         \
     384    tmpLensing = gfits_table_get_Lensing_##TYPE (ftable, Nlensing, NULL); \
     385    if (!tmpLensing) {                                                  \
     386      fprintf (stderr, "ERROR: failed to read lensings\n");             \
     387      exit (2);                                                         \
     388    }                                                                   \
     389    lensing = Lensing_##TYPE##_ToInternal (tmpLensing, *Nlensing); \
     390    free (tmpLensing);                                                  \
     391    *format = DVO_FORMAT_##FORMAT;                                      \
     392    return (lensing); }
     393
     394  if (!strcmp (extname, "DVO_LENSING")) {
     395    lensing = gfits_table_get_Lensing (ftable, Nlensing, NULL);
     396    if (!lensing) {
     397      fprintf (stderr, "ERROR: failed to read lensings\n");
     398      exit (2);
     399    }
     400    *format = DVO_FORMAT_INTERNAL;
     401    return (lensing);
     402  }
     403
     404// CONVERT_FORMAT ("DVO_LENSING_PS1_REF",         PS1_REF,         PS1_REF);
     405// CONVERT_FORMAT ("DVO_LENSING_ELIXIR",          ELIXIR,          Elixir);
     406// CONVERT_FORMAT ("DVO_LENSING_LONEOS",          LONEOS,          Loneos);
     407// CONVERT_FORMAT ("DVO_LENSING_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0);
     408// CONVERT_FORMAT ("DVO_LENSING_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1);
     409// CONVERT_FORMAT ("DVO_LENSING_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1);
     410// CONVERT_FORMAT ("DVO_LENSING_PS1_DEV_2",       PS1_DEV_2,       PS1_DEV_2);
     411// CONVERT_FORMAT ("DVO_LENSING_PS1_V1",          PS1_V1,          PS1_V1);
     412// CONVERT_FORMAT ("DVO_LENSING_PS1_V2",          PS1_V2,          PS1_V2);
     413// CONVERT_FORMAT ("DVO_LENSING_PS1_V3",          PS1_V3,          PS1_V3);
     414// CONVERT_FORMAT ("DVO_LENSING_PS1_V4",          PS1_V4,          PS1_V4);
     415  CONVERT_FORMAT ("DVO_LENSING_PS1_V5",          PS1_V5,          PS1_V5);
     416# undef CONVERT_FORMAT
     417
     418  fprintf (stderr, "table format unknown: %s\n", extname);
     419
     420  *Nlensing = 0;
     421  return (NULL);
     422}
     423
     424// LensingToFtable needs the Average since old formats stored lensing.dR,dD only
     425int LensingToFtable (FTable *ftable, Lensing *lensing, off_t Nlensing, char format) {
     426
     427# define FORMAT_CASE(FORMAT, TYPE)              \
     428    case DVO_FORMAT_##FORMAT: { \
     429      Lensing_##TYPE *tmpLensing; \
     430      tmpLensing = LensingInternalTo_##TYPE (lensing, Nlensing); \
     431      gfits_table_set_Lensing_##TYPE (ftable, tmpLensing, Nlensing); \
     432      free (tmpLensing); \
     433      break; }
     434
     435  /* convert from the internal format */
     436  switch (format) {
     437    case DVO_FORMAT_INTERNAL: {
     438      gfits_table_set_Lensing (ftable, lensing, Nlensing);
     439      break; }
     440
     441//    FORMAT_CASE (PS1_REF,         PS1_REF);
     442//    FORMAT_CASE (ELIXIR,          Elixir);
     443//    FORMAT_CASE (LONEOS,          Loneos);
     444//    FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
     445//    FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
     446//    FORMAT_CASE (PS1_DEV_1,       PS1_DEV_1);
     447//    FORMAT_CASE (PS1_DEV_2,       PS1_DEV_2);
     448//    FORMAT_CASE (PS1_V1,          PS1_V1);
     449//    FORMAT_CASE (PS1_V2,          PS1_V2);
     450//    FORMAT_CASE (PS1_V3,          PS1_V3);
     451//    FORMAT_CASE (PS1_V4,          PS1_V4);
     452      FORMAT_CASE (PS1_V5,          PS1_V5);
     453# undef FORMAT_CASE
     454
     455    default:
     456      fprintf (stderr, "table format unknown (lensing)\n");
     457      return (FALSE);
     458  }
     459  return (TRUE);
     460}
     461
     462/*** Lensobj / FTable conversion functions ***/
     463
     464Lensobj *FtableToLensobj (FTable *ftable, off_t *Nlensobj, char *format) {
     465
     466  Lensobj *lensobj;
     467  char extname[80];
     468
     469  /* convert to the internal format */
     470  if (!gfits_scan (ftable[0].header, "EXTNAME", "%s", 1, extname)) {
     471    fprintf (stderr, "EXTNAME missing for lensobj table\n");
     472    return (FALSE);
     473  }
     474
     475# define CONVERT_FORMAT(NAME, FORMAT, TYPE)             \
     476  if (!strcmp (extname, NAME)) {                                        \
     477    Lensobj_##TYPE *tmpLensobj;                                         \
     478    tmpLensobj = gfits_table_get_Lensobj_##TYPE (ftable, Nlensobj, NULL); \
     479    if (!tmpLensobj) {                                                  \
     480      fprintf (stderr, "ERROR: failed to read lensobjs\n");             \
     481      exit (2);                                                         \
     482    }                                                                   \
     483    lensobj = Lensobj_##TYPE##_ToInternal (tmpLensobj, *Nlensobj); \
     484    free (tmpLensobj);                                                  \
     485    *format = DVO_FORMAT_##FORMAT;                                      \
     486    return (lensobj); }
     487
     488  if (!strcmp (extname, "DVO_LENSOBJ")) {
     489    lensobj = gfits_table_get_Lensobj (ftable, Nlensobj, NULL);
     490    if (!lensobj) {
     491      fprintf (stderr, "ERROR: failed to read lensobjs\n");
     492      exit (2);
     493    }
     494    *format = DVO_FORMAT_INTERNAL;
     495    return (lensobj);
     496  }
     497
     498// CONVERT_FORMAT ("DVO_LENSOBJ_PS1_REF",         PS1_REF,         PS1_REF);
     499// CONVERT_FORMAT ("DVO_LENSOBJ_ELIXIR",          ELIXIR,          Elixir);
     500// CONVERT_FORMAT ("DVO_LENSOBJ_LONEOS",          LONEOS,          Loneos);
     501// CONVERT_FORMAT ("DVO_LENSOBJ_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0);
     502// CONVERT_FORMAT ("DVO_LENSOBJ_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1);
     503// CONVERT_FORMAT ("DVO_LENSOBJ_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1);
     504// CONVERT_FORMAT ("DVO_LENSOBJ_PS1_DEV_2",       PS1_DEV_2,       PS1_DEV_2);
     505// CONVERT_FORMAT ("DVO_LENSOBJ_PS1_V1",          PS1_V1,          PS1_V1);
     506// CONVERT_FORMAT ("DVO_LENSOBJ_PS1_V2",          PS1_V2,          PS1_V2);
     507// CONVERT_FORMAT ("DVO_LENSOBJ_PS1_V3",          PS1_V3,          PS1_V3);
     508// CONVERT_FORMAT ("DVO_LENSOBJ_PS1_V4",          PS1_V4,          PS1_V4);
     509  CONVERT_FORMAT ("DVO_LENSOBJ_PS1_V5",          PS1_V5,          PS1_V5);
     510# undef CONVERT_FORMAT
     511
     512  fprintf (stderr, "table format unknown: %s\n", extname);
     513
     514  *Nlensobj = 0;
     515  return (NULL);
     516}
     517
     518// LensobjToFtable needs the Average since old formats stored lensobj.dR,dD only
     519int LensobjToFtable (FTable *ftable, Lensobj *lensobj, off_t Nlensobj, char format) {
     520
     521# define FORMAT_CASE(FORMAT, TYPE)              \
     522    case DVO_FORMAT_##FORMAT: { \
     523      Lensobj_##TYPE *tmpLensobj; \
     524      tmpLensobj = LensobjInternalTo_##TYPE (lensobj, Nlensobj); \
     525      gfits_table_set_Lensobj_##TYPE (ftable, tmpLensobj, Nlensobj); \
     526      free (tmpLensobj); \
     527      break; }
     528
     529  /* convert from the internal format */
     530  switch (format) {
     531    case DVO_FORMAT_INTERNAL: {
     532      gfits_table_set_Lensobj (ftable, lensobj, Nlensobj);
     533      break; }
     534
     535//    FORMAT_CASE (PS1_REF,         PS1_REF);
     536//    FORMAT_CASE (ELIXIR,          Elixir);
     537//    FORMAT_CASE (LONEOS,          Loneos);
     538//    FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
     539//    FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
     540//    FORMAT_CASE (PS1_DEV_1,       PS1_DEV_1);
     541//    FORMAT_CASE (PS1_DEV_2,       PS1_DEV_2);
     542//    FORMAT_CASE (PS1_V1,          PS1_V1);
     543//    FORMAT_CASE (PS1_V2,          PS1_V2);
     544//    FORMAT_CASE (PS1_V3,          PS1_V3);
     545//    FORMAT_CASE (PS1_V4,          PS1_V4);
     546      FORMAT_CASE (PS1_V5,          PS1_V5);
     547# undef FORMAT_CASE
     548
     549    default:
     550      fprintf (stderr, "table format unknown (lensobj)\n");
    322551      return (FALSE);
    323552  }
     
    399628  CONVERT_FORMAT ("DVO_IMAGE_PS1_V3",          PS1_V3,          PS1_V3);
    400629  CONVERT_FORMAT ("DVO_IMAGE_PS1_V4",          PS1_V4,          PS1_V4);
     630  CONVERT_FORMAT ("DVO_IMAGE_PS1_V5",          PS1_V5,          PS1_V5);
    401631  CONVERT_FORMAT ("DVO_IMAGE_PS1_REF",         PS1_REF,         PS1_REF);
    402632
     
    438668      FORMAT_CASE (PS1_V3,          PS1_V3);
    439669      FORMAT_CASE (PS1_V4,          PS1_V4);
     670      FORMAT_CASE (PS1_V5,          PS1_V5);
    440671      FORMAT_CASE (PS1_REF,         PS1_REF);
    441672
     
    493724      FORMAT_CASE (PS1_V3,          PS1_V3);
    494725      FORMAT_CASE (PS1_V4,          PS1_V4);
     726      FORMAT_CASE (PS1_V5,          PS1_V5);
    495727      FORMAT_CASE (PS1_REF,         PS1_REF);
    496728
Note: See TracChangeset for help on using the changeset viewer.