IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 10, 2009, 3:43:50 AM (17 years ago)
Author:
eugene
Message:

more tests of robust petrosian analysis

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20090715/Ohana/src/opihi/cmd.astro/petrosian.c

    r25018 r25033  
    55  int i, above;
    66  float *in;
    7   double Fsum, R_90, rad_90, flux_90;
    8   Vector *rvec, *fvec, *Rvec, *Fvec;
     7  double Fsum, Asum, Area, R_90, rad_90, flux_90;
     8  Vector *rvec, *avec, *fvec, *Rvec, *Fvec, *Svec, *Avec;
    99
    10   if (argc != 2) {
    11     gprint (GP_ERR, "USAGE: petrosian (radius) (flux) (P_ratio) (P_flux)\n");
     10  if (argc != 8) {
     11    gprint (GP_ERR, "USAGE: petrosian (radius) (area) (flux) (P_ratio) (P_flux) (P_sb) (P_area)\n");
    1212    return (FALSE);
    1313  }
     
    1515  /* select input vectors */
    1616  if ((rvec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
    17   if ((fvec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
    18   if ((Rvec = SelectVector (argv[3], ANYVECTOR, TRUE)) == NULL) return (FALSE);
    19   if ((Fvec = SelectVector (argv[4], ANYVECTOR, TRUE)) == NULL) return (FALSE);
     17  if ((avec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
     18  if ((fvec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
     19  if ((Rvec = SelectVector (argv[4], ANYVECTOR, TRUE)) == NULL) return (FALSE);
     20  if ((Fvec = SelectVector (argv[5], ANYVECTOR, TRUE)) == NULL) return (FALSE);
     21  if ((Svec = SelectVector (argv[6], ANYVECTOR, TRUE)) == NULL) return (FALSE);
     22  if ((Avec = SelectVector (argv[7], ANYVECTOR, TRUE)) == NULL) return (FALSE);
    2023
    2124  // difficult work goes into cleaning the input galaxy profile:
     
    3437  ResetVector (Fvec, OPIHI_FLT, fvec[0].Nelements);
    3538  ResetVector (Rvec, OPIHI_FLT, fvec[0].Nelements);
     39  ResetVector (Svec, OPIHI_FLT, fvec[0].Nelements);
     40  ResetVector (Avec, OPIHI_FLT, fvec[0].Nelements);
    3641
    3742  above = TRUE;
    3843  Fsum = 0.0;
     44  Asum = 0.0;
     45  Area = avec[0].elements.Flt[0];
    3946  for (i = 0; i < fvec[0].Nelements; i++) {
    40     Fsum += fvec[0].elements.Flt[i] * M_PI * SQ(rvec[0].elements.Flt[i]);
    41     Rvec[0].elements.Flt[i] = Fsum / fvec[0].elements.Flt[i];
     47    // for nan bins, we keep the area for use with the next valid bin
     48    if (isnan(fvec[0].elements.Flt[i])) {
     49      Area += avec[0].elements.Flt[i];
     50      continue;
     51    }
     52    Fsum += fvec[0].elements.Flt[i] * Area;
     53    Asum += Area;
     54    if (i+1 < fvec[0].Nelements) {
     55      Area = avec[0].elements.Flt[i+1];
     56    }
     57
     58    Rvec[0].elements.Flt[i] = Asum * fvec[0].elements.Flt[i] / Fsum;
    4259    Fvec[0].elements.Flt[i] = Fsum;
     60    Svec[0].elements.Flt[i] = Fsum / Asum;
     61    Avec[0].elements.Flt[i] = Asum;
    4362
    4463    // anytime we transition below the petrosian ratio R_90, calculate the radius and flux
Note: See TracChangeset for help on using the changeset viewer.