Changeset 20036 for trunk/psastro/src/psastroLuminosityFunction.c
- Timestamp:
- Oct 9, 2008, 3:07:38 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/psastro/src/psastroLuminosityFunction.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psastro/src/psastroLuminosityFunction.c
r17677 r20036 27 27 } 28 28 29 pmLumFunc *psastroLuminosityFunction (psArray *stars ) {29 pmLumFunc *psastroLuminosityFunction (psArray *stars, pmLumFunc *rawFunc) { 30 30 31 31 if (stars->n == 0) return NULL; … … 36 36 double mMax = star->Mag; 37 37 for (int i = 0; i < stars->n; i++) { 38 star = stars->data[i];39 mMin = PS_MIN (star->Mag, mMin);40 mMax = PS_MAX (star->Mag, mMax);38 star = stars->data[i]; 39 mMin = PS_MIN (star->Mag, mMin); 40 mMax = PS_MAX (star->Mag, mMax); 41 41 } 42 42 43 43 int nBin = 1 + (mMax - mMin) / dMag; 44 44 if (nBin <= 1) { 45 psLogMsg ("psastro", 4, "insufficient valid stars for this readout\n");46 return NULL;45 psLogMsg ("psastro", 4, "insufficient valid stars for this readout\n"); 46 return NULL; 47 47 } 48 48 … … 54 54 55 55 for (int i = 0; i < stars->n; i++) { 56 star = stars->data[i];57 if (!isfinite(star->Mag)) continue;58 int bin = (star->Mag - mMin) / dMag;59 if (bin < 0) psAbort("bin cannot be negative!");60 if (bin >= nBin) psAbort("bin cannot be > %d!", nBin);61 nMags->data.F32[bin] += 1.0;56 star = stars->data[i]; 57 if (!isfinite(star->Mag)) continue; 58 int bin = (star->Mag - mMin) / dMag; 59 if (bin < 0) psAbort("bin cannot be negative!"); 60 if (bin >= nBin) psAbort("bin cannot be > %d!", nBin); 61 nMags->data.F32[bin] += 1.0; 62 62 } 63 63 … … 67 67 int sPeak = 0; 68 68 for (int i = 0; i < nMags->n; i++) { 69 if (nMags->data.F32[i] < nPeak) continue;70 iPeak = i;71 nPeak = nMags->data.F32[i];72 sPeak += nPeak;69 if (nMags->data.F32[i] < nPeak) continue; 70 iPeak = i; 71 nPeak = nMags->data.F32[i]; 72 sPeak += nPeak; 73 73 } 74 74 … … 81 81 int n = 0; 82 82 for (int i = 0; i < nMags->n; i++) { 83 if (nMags->data.F32[i] < 1) continue;84 if ((i > iPeak) && (nMags->data.F32[i] < 0.8*nPeak)) continue;85 lnMag->data.F32[n] = log10 (nMags->data.F32[i]);86 Mag->data.F32[n] = mMin + (i + 0.5)*dMag;87 n++;83 if (nMags->data.F32[i] < 1) continue; 84 if ((i > iPeak) && (nMags->data.F32[i] < 0.8*nPeak)) continue; 85 lnMag->data.F32[n] = log10 (nMags->data.F32[i]); 86 Mag->data.F32[n] = mMin + (i + 0.5)*dMag; 87 n++; 88 88 } 89 89 lnMag->n = n; … … 100 100 101 101 if (!psVectorClipFitPolynomial1D(line, stats, mask, 0xff, lnMag, NULL, Mag)) { 102 psLogMsg ("psastro", 4, "Failed to fit the luminosity function\n");103 return(NULL);102 psLogMsg ("psastro", 4, "Failed to fit the luminosity function\n"); 103 return(NULL); 104 104 } 105 105 … … 108 108 double mMaxValid = NAN; 109 109 for (int i = 0; i < Mag->n; i++) { 110 if (mask->data.U8[i]) continue;111 if (isnan(mMinValid) || (Mag->data.F32[i] < mMinValid)) {112 mMinValid = Mag->data.F32[i];113 }114 if (isnan(mMaxValid) || (Mag->data.F32[i] > mMaxValid)) {115 mMaxValid = Mag->data.F32[i];116 }110 if (mask->data.U8[i]) continue; 111 if (isnan(mMinValid) || (Mag->data.F32[i] < mMinValid)) { 112 mMinValid = Mag->data.F32[i]; 113 } 114 if (isnan(mMaxValid) || (Mag->data.F32[i] > mMaxValid)) { 115 mMaxValid = Mag->data.F32[i]; 116 } 117 117 } 118 118 … … 129 129 lumFunc->sPeak = sPeak; 130 130 131 psastroLuminosityFunctionPlot(lnMag, Mag, lumFunc, rawFunc); 132 131 133 psFree (lnMag); 132 134 psFree (nMags);
Note:
See TracChangeset
for help on using the changeset viewer.
