- Timestamp:
- Aug 10, 2009, 3:43:50 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20090715/Ohana/src/opihi/cmd.astro/petrosian.c
r25018 r25033 5 5 int i, above; 6 6 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; 9 9 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"); 12 12 return (FALSE); 13 13 } … … 15 15 /* select input vectors */ 16 16 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); 20 23 21 24 // difficult work goes into cleaning the input galaxy profile: … … 34 37 ResetVector (Fvec, OPIHI_FLT, fvec[0].Nelements); 35 38 ResetVector (Rvec, OPIHI_FLT, fvec[0].Nelements); 39 ResetVector (Svec, OPIHI_FLT, fvec[0].Nelements); 40 ResetVector (Avec, OPIHI_FLT, fvec[0].Nelements); 36 41 37 42 above = TRUE; 38 43 Fsum = 0.0; 44 Asum = 0.0; 45 Area = avec[0].elements.Flt[0]; 39 46 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; 42 59 Fvec[0].elements.Flt[i] = Fsum; 60 Svec[0].elements.Flt[i] = Fsum / Asum; 61 Avec[0].elements.Flt[i] = Asum; 43 62 44 63 // anytime we transition below the petrosian ratio R_90, calculate the radius and flux
Note:
See TracChangeset
for help on using the changeset viewer.
