IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 31, 2012, 4:02:00 PM (14 years ago)
Author:
eugene
Message:

add PS1_V4 schema; add set mean fluxes based on stacks; define the primary image ID (based on distance from center or boundary tree) and set mean flux from stacks based on that info; fix (uniquify) psps ID for stack detections; mean fluxes are in Jy; detection fluxes are instrumental counts per second

Location:
trunk/Ohana/src/relphot
Files:
5 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/relphot/Makefile

    r33963 r34260  
    4949$(SRC)/setExclusions.$(ARCH).o   \
    5050$(SRC)/setMrelFinal.$(ARCH).o    \
     51$(SRC)/BoundaryTreeOps.$(ARCH).o         \
    5152$(SRC)/write_coords.$(ARCH).o
    5253
     
    7778$(SRC)/setExclusions.$(ARCH).o   \
    7879$(SRC)/setMrelFinal.$(ARCH).o    \
     80$(SRC)/BoundaryTreeOps.$(ARCH).o         \
    7981$(SRC)/write_coords.$(ARCH).o
    8082
  • trunk/Ohana/src/relphot/include/relphot.h

    r33963 r34260  
    111111char        *BCATALOG;
    112112ModeType     MODE;
     113
     114char        *BOUNDARY_TREE;
    113115
    114116double MAG_LIM;
     
    242244float         getMrel             PROTO((Catalog *catalog, off_t meas, int cat));
    243245short         getUbercalDist      PROTO((off_t meas, int cat));
     246float         getCenterOffset     PROTO((off_t meas, int cat, Measure *measure, unsigned int *myID));
    244247Image        *getimage            PROTO((off_t N));
    245248Image        *getimages           PROTO((off_t *N, off_t **LineNumber));
     
    340343int client_logger_message (char *format,...);
    341344
     345int MatchImageName (off_t meas, int cat, char *name);
     346
     347int load_tree (char *treefile);
     348int BoundaryTreePrimaryCell (char *primaryCellName, double ra, double dec);
  • trunk/Ohana/src/relphot/src/ImageOps.c

    r33963 r34260  
    365365  distance = image[i].ubercalDist; // was dummy3 in structure
    366366  return (distance);
     367}
     368
     369// returns image.Mcal - ff(x,y)
     370float getCenterOffset (off_t meas, int cat, Measure *measure, unsigned int *myID) {
     371
     372  off_t i;
     373  float distance;
     374
     375  if (!MeasureToImage) return -1;
     376
     377  i = MeasureToImage[cat][meas];
     378  if (i == -1) return (1000);
     379
     380  float Xcenter = 0.5*image[i].NX;
     381  float Ycenter = 0.5*image[i].NY;
     382
     383  *myID = image[i].imageID;
     384
     385  distance = hypot (measure[0].Xccd - Xcenter, measure[0].Yccd - Ycenter);
     386  return (distance);
     387}
     388
     389// returns image.Mcal - ff(x,y)
     390int MatchImageName (off_t meas, int cat, char *name) {
     391
     392  off_t i;
     393
     394  if (!name) return FALSE;
     395  if (!name[0]) return FALSE;
     396
     397  if (!MeasureToImage) return FALSE;
     398
     399  i = MeasureToImage[cat][meas];
     400  if (i == -1) return FALSE;
     401
     402  // this is a bit crude: stack image names are of the form
     403  // RINGS.V3.skycell.1495.027.sky.191211.stk.988232.cmf
     404  // the primaryCell has a name of the form RINGS.V3.skycell.1495
     405
     406  if (!strncmp(image[i].name, name, strlen(name))) return TRUE;
     407  return FALSE;
    367408}
    368409
  • trunk/Ohana/src/relphot/src/StarOps.c

    r34088 r34260  
    1515  double *wlist;
    1616  double *aplist;
    17   double *daplist;
     17  double *kronlist;
     18  double *dkronlist;
    1819} SetMrelInfo;
    1920
     
    164165  SetMrelInfoInit (&results, TRUE); // allocates results->list,dlist,wlist
    165166  ALLOCATE (results.aplist, double, Nmax);
    166   ALLOCATE (results.daplist, double, Nmax);
     167  ALLOCATE (results.kronlist, double, Nmax);
     168  ALLOCATE (results.dkronlist, double, Nmax);
    167169
    168170  for (i = 0; i < Ncatalog; i++) {
     
    174176  SetMrelInfoFree (&results);
    175177  free (results.aplist);
    176   free (results.daplist);
     178  free (results.kronlist);
     179  free (results.dkronlist);
    177180  return (TRUE);
    178181}
     
    303306int setMrel_catalog (Catalog *catalog, int Nc, int pass, FlatCorrectionTable *flatcorr, SetMrelInfo *results, int Nsecfilt) {
    304307
    305   off_t j, k, m;
     308  off_t j, k, m, ID;
    306309  int N;
    307310  float Msys, Mcal, Mmos, Mgrid;
    308311
    309   StatType stats, apstats;
     312  StatType stats, apstats, kronstats;
    310313  liststats_setmode (&stats, STATMODE);
    311314  liststats_setmode (&apstats, STATMODE);
    312 
    313   double *list    = results->list;
    314   double *dlist   = results->dlist;
    315   double *wlist   = results->wlist;
    316   double *aplist  = results->aplist;
    317   double *daplist = results->daplist;
     315  liststats_setmode (&kronstats, STATMODE);
     316
     317  double *list      = results->list;
     318  double *dlist     = results->dlist;
     319  double *wlist     = results->wlist;
     320  double *aplist    = results->aplist;
     321  double *kronlist  = results->kronlist;
     322  double *dkronlist = results->dkronlist;
    318323
    319324  SetMrelInfoInit (results, FALSE); // do not allocate list,dlist,wlist arrays
    320325
    321326  int isSetMrelFinal = (pass >= 0);
     327
     328  char *primaryCell = NULL;
     329  ALLOCATE (primaryCell, char, DVO_MAX_PATH);
    322330
    323331  for (j = 0; j < catalog[Nc].Naverage; j++) {
     
    325333
    326334    // option for a test print
    327     if (FALSE && (catalog[Nc].average[j].objID == 0x46a4) && (catalog[Nc].average[j].catID == 0xf40e)) {
     335    if (FALSE && (catalog[Nc].average[j].objID == 0x7146) && (catalog[Nc].average[j].catID == 0x49d8)) {
    328336      fprintf (stderr, "test obj\n");
    329337      print_measure_set (&catalog[Nc].average[j], &catalog[Nc].secfilt[j*Nsecfilt], catalog[Nc].measure);
    330338    }
     339
     340    BoundaryTreePrimaryCell(primaryCell, catalog[Nc].average[j].R, catalog[Nc].average[j].D);
    331341
    332342    int GoodPS1 = FALSE;
     
    355365      int haveSynth = FALSE;
    356366      int haveStack = FALSE;
     367
     368      // need to find the measurement closest to the center of its skycell, as well as the
     369      // closest for the subset of primary projection cells
     370
     371      float stackCenterOffsetMin = 1e9;
     372      int stackCenterIDmin = -1;
     373      off_t stackCenterMeasureMin = -1;
     374
     375      float stackPrimaryOffsetMin = 1e9;
     376      int stackPrimaryIDmin = -1;
     377      off_t stackPrimaryMeasureMin = -1;
    357378
    358379      int forceSynth = FALSE;
     
    401422          float Map = PhotAper (&catalog[Nc].measure[m]);
    402423          aplist[N] = Map - Mcal - Mmos - Mgrid;
     424
     425          float Mkron = PhotKron (&catalog[Nc].measure[m]);
     426          kronlist[N] = Mkron - Mcal - Mmos - Mgrid;
     427          dkronlist[N] = catalog[Nc].measure[m].dMkron;
    403428
    404429          // special options for PS1 data
     
    416441          // gpc1 stack data
    417442          if ((catalog[Nc].measure[m].photcode >= 11000) && (catalog[Nc].measure[m].photcode <= 11400)) {
    418             if (pass < 2) continue;
     443            // if (pass < 2) continue;
    419444            haveStack = TRUE;
     445
     446            unsigned int stackImageID;
     447
     448            // which stack image should we use for the mean value?
     449            // if we request the primary (USE_TREE_FOR_PRIMARY), then find the min distances for data from the primary cell
     450            if (MatchImageName (m, Nc, primaryCell)) {
     451              float stackPrimaryOffset = getCenterOffset (m, Nc, &catalog[Nc].measure[m], &stackImageID);
     452              if (stackPrimaryOffset < stackPrimaryOffsetMin) {
     453                stackPrimaryOffsetMin = stackPrimaryOffset;
     454                stackPrimaryIDmin = stackImageID;
     455                stackPrimaryMeasureMin = m;
     456              }
     457            }
     458
     459            // get the center distance for the generic case:
     460            float stackCenterOffset = getCenterOffset (m, Nc, &catalog[Nc].measure[m], &stackImageID);
     461            if (stackCenterOffset < stackCenterOffsetMin) {
     462              stackCenterOffsetMin = stackCenterOffset;
     463              stackCenterIDmin = stackImageID;
     464              stackCenterMeasureMin = m;
     465            }
    420466          }
    421467
     
    549595
    550596        // NOTE : use the modified weight for apmags as well as psf mags
    551         liststats (aplist, daplist, wlist, N, &apstats);
    552 
     597        liststats (aplist, dlist, wlist, N, &apstats);
    553598        catalog[Nc].secfilt[Nsecfilt*j+Nsec].Map  = apstats.mean;
     599
     600        liststats (kronlist, dkronlist, wlist, N, &kronstats);
     601        catalog[Nc].secfilt[Nsecfilt*j+Nsec].Mkron  = kronstats.mean;
     602        catalog[Nc].secfilt[Nsecfilt*j+Nsec].dMkron = kronstats.error;
     603
     604        if (haveStack) {
     605          m  = (stackPrimaryMeasureMin >= 0) ? stackPrimaryMeasureMin : stackCenterMeasureMin;
     606          ID = (stackPrimaryMeasureMin >= 0) ? stackPrimaryIDmin      : stackCenterIDmin;
     607
     608          // get the zero point for the selected image
     609          float zp = Mcal + Mmos + Mgrid + PhotZeroPoint (&catalog[Nc].measure[m], &catalog[Nc].average[j], &catalog[Nc].secfilt[j*Nsecfilt]);
     610
     611          // flux_cgs : erg sec^1 cm^-2 Hz^-1
     612          // mag_inst : -2.5 log (cts/sec)
     613          // mag_inst : -2.5 log (flux_inst)
     614          // flux_inst = ten(-0.4*mag_inst)
     615
     616          // mag_AB = -2.5 log (flux_cgs) - 48.6 (~by definition) [~Vega flux in V-band]
     617          // flux_cgs = ten(-0.4*(mag_AB + 48.6))
     618
     619          // flux_AB : ten(-0.4*mag_AB)
     620
     621          // flux_cgs = ten(-0.4*48.6) * flux_AB
     622          // flux_AB  = ten(+0.4*48.6) * flux_cgs
     623           
     624          // flux_Jy : flux_cgs * 10^23
     625
     626          // flux_AB = ten(+0.4*48.6) * ten(-23) * flux_Jy
     627
     628          // mag_AB = mag_inst + ZP
     629
     630          // flux_inst = ten(-0.4*(mag_AB - ZP)) = ten(0.4*ZP) * flux_AB
     631
     632          // flux_AB = flux_inst * ten(-0.4*ZP)
     633
     634          // flux_inst * ten(-0.4*ZP) = ten(+0.4*48.6 - 23) * flux_Jy
     635
     636          // flux_inst = flux_Jy * ten(0.4*ZP + 0.4*48.6 - 23)
     637          // flux_inst = flux_Jy * ten(0.4*ZP - 3.56)
     638          // flux_Jy = flux_inst * ten(-0.4*ZP + 3.56)
     639
     640          // zpFactor to go from instrumental flux to Janskies
     641          float zpFactor = pow(10.0, -0.4*zp + 3.56);
     642
     643          // need to put in AB mag factor to get to Janskies (or uJy?)
     644          catalog[Nc].secfilt[Nsecfilt*j+Nsec].FluxPSF   = zpFactor * catalog[Nc].measure[m].FluxPSF; 
     645          catalog[Nc].secfilt[Nsecfilt*j+Nsec].dFluxPSF  = zpFactor * catalog[Nc].measure[m].dFluxPSF;
     646          catalog[Nc].secfilt[Nsecfilt*j+Nsec].FluxKron  = zpFactor * catalog[Nc].measure[m].FluxKron;
     647          catalog[Nc].secfilt[Nsecfilt*j+Nsec].dFluxKron = zpFactor * catalog[Nc].measure[m].dFluxKron;
     648
     649          catalog[Nc].secfilt[Nsecfilt*j+Nsec].stackID   = ID;
     650        }
    554651
    555652        // NOTE: for 2MASS measurements, Next should be 1, as should N
     
    607704    }
    608705  }
     706  if (primaryCell) free (primaryCell);
    609707  return (TRUE);
    610708}
  • trunk/Ohana/src/relphot/src/args.c

    r33963 r34260  
    197197  }
    198198
     199  if ((N = get_argument (argc, argv, "-boundary-tree"))) {
     200    remove_argument (N, &argc, argv);
     201    load_tree (argv[N]);
     202    remove_argument (N, &argc, argv);
     203  }
     204
    199205  SHOW_PARAMS = FALSE;
    200206  if ((N = get_argument (argc, argv, "-params"))) {
Note: See TracChangeset for help on using the changeset viewer.