Doxygen Source Code Documentation
pdf.h File Reference
Go to the source code of this file.
Data Structures | |
struct | |
Defines | |
#define | PDF_MTEST(ptr) |
Typedefs | |
typedef pdf | |
Functions | |
void | PDF_error (char *message) |
void | PDF_initialize (pdf *p) |
void | PDF_destroy (pdf *p) |
void | PDF_normalize (pdf *p) |
void | PDF_create (int nbin, float *prob, float lower_bnd, float upper_bnd, pdf *p) |
void | PDF_copy (pdf p, pdf *pc) |
float | PDF_ibin_to_xvalue (pdf p, int ibin) |
int | PDF_xvalue_to_ibin (pdf p, float xvalue) |
float | PDF_xvalue_to_pvalue (pdf p, float xvalue) |
void | PDF_print (pdf p) |
void | PDF_sprint (char *str, pdf p) |
void | PDF_write_file (char *filename, pdf p) |
void | PDF_smooth (pdf *p) |
void | PDF_trim (float lower_per, float upper_per, pdf *p) |
void | PDF_short_range (int npts, short *sarray, short *min_val, short *max_val) |
void | PDF_float_range (int npts, float *farray, float *min_val, float *max_val) |
void | PDF_short_to_pdf (int npts, short *sarray, pdf *p) |
void | PDF_float_to_pdf (int npts, float *farray, int num_bins, pdf *p) |
void | PDF_find_extrema (pdf p, int *num_min, int *pdf_min, int *num_max, int *pdf_max) |
int | PDF_find_bimodal (pdf p, int *gmax, int *wmax) |
Define Documentation
|
Value: if((ptr)==NULL) \ ( PDF_error ("Cannot allocate memory") ) Definition at line 47 of file pdf.h. Referenced by PDF_create(), PDF_float_to_pdf(), and PDF_short_to_pdf(). |
Typedef Documentation
|
|
Function Documentation
|
Definition at line 127 of file pdf.c. References pdf::lower_bnd, pdf::nbin, p, PDF_create(), pdf::prob, and pdf::upper_bnd. Referenced by estpdf_float_initialize(), and estpdf_short_initialize().
00128 { 00129 PDF_create (p.nbin, p.prob, p.lower_bnd, p.upper_bnd, pc); 00130 00131 return; 00132 } |
|
Definition at line 96 of file pdf.c. References pdf::lower_bnd, malloc, pdf::nbin, p, PDF_destroy(), PDF_MTEST, PDF_normalize(), pdf::prob, pdf::upper_bnd, and pdf::width. Referenced by PDF_copy(), PDF_float_to_pdf(), and PDF_short_to_pdf().
00098 { 00099 int ibin; 00100 00101 00102 PDF_destroy (p); 00103 00104 p->nbin = nbin; 00105 00106 p->prob = (float *) malloc (sizeof(float) * nbin); 00107 PDF_MTEST (p->prob); 00108 for (ibin = 0; ibin < nbin; ibin++) 00109 p->prob[ibin] = prob[ibin]; 00110 00111 p->lower_bnd = lower_bnd; 00112 p->upper_bnd = upper_bnd; 00113 00114 p->width = (upper_bnd - lower_bnd) / (nbin-1); 00115 00116 PDF_normalize (p); 00117 00118 return; 00119 } |
|
Definition at line 56 of file pdf.c. References free, p, PDF_initialize(), and pdf::prob. Referenced by estpdf_float_initialize(), estpdf_short_initialize(), and PDF_create().
00057 { 00058 00059 if (p->prob != NULL) free (p->prob); 00060 00061 PDF_initialize (p); 00062 00063 return; 00064 } |
|
Definition at line 27 of file pdf.c. Referenced by PDF_float_to_pdf(), and PDF_short_to_pdf().
00028 {
00029 printf ("PDF error: %s \n", message);
00030 exit (1);
00031 }
|
|
Definition at line 580 of file pdf.c. References free, malloc, pdf::nbin, NPTS, PDF_find_extrema(), pdf::prob, and wmax. Referenced by estpdf_float_initialize(), and estpdf_short_initialize().
00581 { 00582 const int NPTS = 12; 00583 int * pdf_min = NULL, * pdf_max = NULL; 00584 int num_min, num_max; 00585 int imax, temp; 00586 00587 00588 pdf_min = (int *) malloc (sizeof(int) * p.nbin); 00589 pdf_max = (int *) malloc (sizeof(int) * p.nbin); 00590 00591 PDF_find_extrema (p, &num_min, pdf_min, &num_max, pdf_max); 00592 00593 00594 if (num_max >= 2) 00595 { 00596 if (p.prob[pdf_max[1]] >= p.prob[pdf_max[0]]) 00597 { 00598 *wmax = pdf_max[1]; 00599 *gmax = pdf_max[0]; 00600 } 00601 else 00602 { 00603 *wmax = pdf_max[0]; 00604 *gmax = pdf_max[1]; 00605 } 00606 00607 if (num_max > 2) 00608 { 00609 for (imax = 2; imax < num_max; imax++) 00610 { 00611 if (p.prob[pdf_max[imax]] >= p.prob[*wmax]) 00612 { 00613 *gmax = *wmax; 00614 *wmax = pdf_max[imax]; 00615 } 00616 else if (p.prob[pdf_max[imax]] >= p.prob[*gmax]) 00617 { 00618 *gmax = pdf_max[imax]; 00619 } 00620 } 00621 } 00622 00623 if (*gmax > *wmax) 00624 { 00625 temp = *gmax; 00626 *gmax = *wmax; 00627 *wmax = temp; 00628 } 00629 00630 } /* end if (num_max >= 2) */ 00631 00632 00633 free (pdf_min); pdf_min = NULL; 00634 free (pdf_max); pdf_max = NULL; 00635 00636 00637 if (num_max < 2) return (0); 00638 else return (1); 00639 00640 } |
|
Definition at line 528 of file pdf.c. References i, pdf::nbin, PDF_ibin_to_xvalue(), pdf::prob, and quiet. Referenced by PDF_find_bimodal().
00530 { 00531 int ibin; 00532 int i; 00533 00534 00535 *num_min = 0; 00536 *num_max = 0; 00537 00538 for (ibin = 1; ibin < p.nbin-1; ibin++) 00539 { 00540 if ((p.prob[ibin] < p.prob[ibin-1]) && (p.prob[ibin] < p.prob[ibin+1])) 00541 { 00542 pdf_min[*num_min] = ibin; 00543 (*num_min)++; 00544 } 00545 00546 if ((p.prob[ibin] > p.prob[ibin-1]) && (p.prob[ibin] > p.prob[ibin+1])) 00547 { 00548 pdf_max[*num_max] = ibin; 00549 (*num_max)++; 00550 } 00551 } 00552 00553 if( !quiet ){ 00554 printf ("\nExtrema of PDF: \n"); 00555 printf ("\nNum Local Min = %d \n", *num_min); 00556 for (i = 0; i < *num_min; i++) 00557 { 00558 ibin = pdf_min[i]; 00559 printf ("x[%3d] = %8.3f p[%3d] = %12.6f \n", 00560 ibin, PDF_ibin_to_xvalue(p, ibin), ibin, p.prob[ibin]); 00561 } 00562 00563 printf ("\nNum Local Max = %d \n", *num_max); 00564 for (i = 0; i < *num_max; i++) 00565 { 00566 ibin = pdf_max[i]; 00567 printf ("x[%3d] = %8.3f p[%3d] = %12.6f \n", 00568 ibin, PDF_ibin_to_xvalue(p, ibin), ibin, p.prob[ibin]); 00569 } 00570 } 00571 00572 } |
|
Definition at line 382 of file pdf.c. Referenced by PDF_float_to_pdf().
00384 { 00385 int ipt; 00386 00387 00388 *min_val = farray[0]; 00389 *max_val = farray[0]; 00390 00391 for (ipt = 1; ipt < npts; ipt++) 00392 { 00393 if (farray[ipt] < *min_val) *min_val = farray[ipt]; 00394 if (farray[ipt] > *max_val) *max_val = farray[ipt]; 00395 } 00396 00397 return; 00398 } |
|
Definition at line 466 of file pdf.c. References free, malloc, PDF_create(), PDF_error(), PDF_float_range(), and PDF_MTEST. Referenced by estimate_field(), and estpdf_float_initialize().
00467 { 00468 const int MIN_COUNT = 5; 00469 const int MIN_BINS = 5; 00470 int ipt, ibin, count; 00471 float * fbin = NULL; 00472 float width; 00473 float min_val, max_val; 00474 char message[80]; 00475 00476 00477 /*----- Make histogram of input float array -----*/ 00478 if (num_bins < MIN_BINS) 00479 { 00480 sprintf (message, "histogram contains only %d bins", num_bins); 00481 PDF_error (message); 00482 } 00483 00484 fbin = (float *) malloc (sizeof(float) * num_bins); PDF_MTEST (fbin); 00485 for (ibin = 0; ibin < num_bins; ibin++) 00486 fbin[ibin] = 0.0; 00487 00488 PDF_float_range (npts, farray, &min_val, &max_val); 00489 width = (max_val - min_val) / num_bins; 00490 00491 count = 0; 00492 for (ipt = 0; ipt < npts; ipt++) 00493 { 00494 ibin = (farray[ipt] - min_val) / width; 00495 if ((ibin >= 0) && (ibin < num_bins)) 00496 { 00497 fbin[ibin] += 1.0; 00498 count++; 00499 } 00500 } 00501 00502 00503 /*----- Check for too few points -----*/ 00504 if (count < MIN_COUNT) 00505 { 00506 sprintf (message, "histogram contains only %d points", count); 00507 PDF_error (message); 00508 } 00509 00510 00511 /*----- Create PDF -----*/ 00512 PDF_create (num_bins, fbin, min_val, max_val, p); 00513 00514 00515 /*----- Release memory -----*/ 00516 free (fbin); fbin = NULL; 00517 00518 00519 return; 00520 } |
|
Definition at line 140 of file pdf.c. References pdf::lower_bnd, p, and pdf::width. Referenced by calc_error(), create_map(), estpdf_float_initialize(), estpdf_short_initialize(), PDF_find_extrema(), PDF_trim(), and PDF_write_file().
|
|
Definition at line 39 of file pdf.c. References pdf::lower_bnd, pdf::nbin, p, pdf::prob, pdf::upper_bnd, and pdf::width. Referenced by estimate_field(), estpdf_float_initialize(), estpdf_short_initialize(), and PDF_destroy().
|
|
Definition at line 72 of file pdf.c. References pdf::nbin, p, and pdf::prob. Referenced by PDF_create(), PDF_smooth(), and PDF_trim().
|
|
Definition at line 191 of file pdf.c. References PDF_print(), and quiet. Referenced by PDF_print(), and PDF_sprint().
00192 { 00193 int ibin; 00194 00195 00196 if( !quiet ){ 00197 printf ("Number of bins = %d \n", p.nbin); 00198 printf ("Lower bound = %f \n", p.lower_bnd); 00199 printf ("Upper bound = %f \n", p.upper_bnd); 00200 printf ("Bin width = %f \n", p.width); 00201 00202 /* 00203 printf ("%3s %10.6s %10.6s \n", "i", "x[i]", "p[i]"); 00204 00205 for (ibin = 0; ibin < p.nbin; ibin++) 00206 printf ("%3d %10.6f %10.6f \n", 00207 ibin, PDF_ibin_to_xvalue(p, ibin), p.prob[ibin]); 00208 */ 00209 } 00210 00211 return; 00212 } |
|
Definition at line 358 of file pdf.c. Referenced by PDF_short_to_pdf().
00360 { 00361 int ipt; 00362 00363 00364 *min_val = sarray[0]; 00365 *max_val = sarray[0]; 00366 00367 for (ipt = 1; ipt < npts; ipt++) 00368 { 00369 if (sarray[ipt] < *min_val) *min_val = sarray[ipt]; 00370 if (sarray[ipt] > *max_val) *max_val = sarray[ipt]; 00371 } 00372 00373 return; 00374 } |
|
Definition at line 406 of file pdf.c. References free, malloc, PDF_create(), PDF_error(), PDF_MTEST, and PDF_short_range(). Referenced by estpdf_short_initialize().
00407 { 00408 const int MIN_COUNT = 5; 00409 const int MIN_BINS = 5; 00410 int ipt, ibin, count; 00411 float * fbin = NULL; 00412 int num_bins; 00413 short lower_lim, upper_lim; 00414 char message[80]; 00415 00416 00417 /*----- Make histogram of input short array -----*/ 00418 PDF_short_range (npts, sarray, &lower_lim, &upper_lim); 00419 num_bins = upper_lim - lower_lim + 1; 00420 if (num_bins < MIN_BINS) 00421 { 00422 sprintf (message, "histogram contains only %d bins", num_bins); 00423 PDF_error (message); 00424 } 00425 00426 fbin = (float *) malloc (sizeof(float) * num_bins); PDF_MTEST (fbin); 00427 for (ibin = 0; ibin < num_bins; ibin++) 00428 fbin[ibin] = 0.0; 00429 00430 count = 0; 00431 for (ipt = 0; ipt < npts; ipt++) 00432 { 00433 ibin = sarray[ipt] - lower_lim; 00434 if ((ibin >= 0) && (ibin < num_bins)) 00435 { 00436 fbin[ibin] += 1.0; 00437 count++; 00438 } 00439 } 00440 00441 00442 /*----- Check for too few points -----*/ 00443 if (count < MIN_COUNT) 00444 { 00445 sprintf (message, "histogram contains only %d points", count); 00446 PDF_error (message); 00447 } 00448 00449 00450 /*----- Create PDF -----*/ 00451 PDF_create (num_bins, fbin, (float) lower_lim, (float) upper_lim, p); 00452 00453 00454 /*----- Release memory -----*/ 00455 free (fbin); fbin = NULL; 00456 00457 00458 return; 00459 } |
|
Definition at line 260 of file pdf.c. References free, malloc, pdf::nbin, PDF_normalize(), and pdf::prob. Referenced by estpdf_float_initialize(), and estpdf_short_initialize().
00261 { 00262 float * sprob; 00263 int ibin; 00264 00265 00266 sprob = (float *) malloc (sizeof(float) * p->nbin); 00267 00268 sprob[0] = 0.5*(p->prob[0] + p->prob[1]); 00269 sprob[p->nbin-1] = 0.5*(p->prob[p->nbin-2] + p->prob[p->nbin-1]); 00270 00271 for (ibin = 1; ibin < p->nbin-1; ibin++) 00272 sprob[ibin] = 0.25 * (p->prob[ibin-1] + 2*p->prob[ibin] + p->prob[ibin+1]); 00273 00274 free (p->prob); 00275 p->prob = sprob; 00276 00277 PDF_normalize (p); 00278 00279 return; 00280 } |
|
Definition at line 220 of file pdf.c. References PDF_print(). Referenced by estimate_field(), estpdf_float_initialize(), and estpdf_short_initialize().
00221 { 00222 if( quiet ) return ; 00223 printf ("%s \n", str); 00224 00225 PDF_print (p); 00226 00227 return; 00228 } |
|
Definition at line 288 of file pdf.c. References free, pdf::lower_bnd, malloc, pdf::nbin, PDF_ibin_to_xvalue(), PDF_normalize(), pdf::prob, and pdf::upper_bnd. Referenced by estpdf_float_initialize(), and estpdf_short_initialize().
00289 { 00290 int ibin; 00291 float * fbin = NULL; 00292 float cum_prob; 00293 float lower_bnd, upper_bnd; 00294 int lo_bin, hi_bin; 00295 00296 00297 /*----- Trim lower values -----*/ 00298 cum_prob = 0.0; 00299 for (ibin = 0; ibin < p->nbin; ibin++) 00300 { 00301 cum_prob += p->prob[ibin]; 00302 p->prob[ibin] = 0.0; 00303 if (cum_prob > lower_per) 00304 { 00305 lo_bin = ibin + 1; 00306 break; 00307 } 00308 } 00309 00310 00311 /*----- Trim upper values -----*/ 00312 cum_prob = 0.0; 00313 for (ibin = p->nbin-1; ibin >= 0; ibin--) 00314 { 00315 cum_prob += p->prob[ibin]; 00316 p->prob[ibin] = 0.0; 00317 if (cum_prob > 1.0 - upper_per) 00318 { 00319 hi_bin = ibin - 1; 00320 break; 00321 } 00322 } 00323 00324 00325 /*----- Reset lower and upper bounds -----*/ 00326 lower_bnd = PDF_ibin_to_xvalue (*p, lo_bin); 00327 upper_bnd = PDF_ibin_to_xvalue (*p, hi_bin); 00328 00329 p->lower_bnd = lower_bnd; 00330 p->upper_bnd = upper_bnd; 00331 p->nbin = hi_bin - lo_bin + 1; 00332 00333 00334 /*----- Copy data -----*/ 00335 fbin = (float *) malloc (sizeof(float) * p->nbin); 00336 for (ibin = 0; ibin < p->nbin; ibin++) 00337 fbin[ibin] = p->prob[ibin+lo_bin]; 00338 00339 00340 /*----- Reset pointer to data -----*/ 00341 free (p->prob); 00342 p->prob = fbin; 00343 00344 00345 /*----- Normalize to unity area -----*/ 00346 PDF_normalize (p); 00347 00348 00349 return; 00350 } |
|
Definition at line 236 of file pdf.c. References pdf::nbin, PDF_ibin_to_xvalue(), and pdf::prob. Referenced by estimate_field().
00237 { 00238 int ibin; 00239 FILE * outfile = NULL; 00240 00241 00242 outfile = fopen (filename, "w"); 00243 00244 for (ibin = 0; ibin < p.nbin; ibin++) 00245 fprintf (outfile, "%d %f %f \n", 00246 ibin, PDF_ibin_to_xvalue(p, ibin), p.prob[ibin]); 00247 00248 00249 fclose (outfile); 00250 00251 return; 00252 } |
|
Definition at line 155 of file pdf.c. References pdf::lower_bnd, p, and pdf::width. Referenced by map_vtou(), and PDF_xvalue_to_pvalue().
|
|
Definition at line 170 of file pdf.c. References PDF_xvalue_to_ibin(), and PDF_xvalue_to_pvalue(). Referenced by PDF_xvalue_to_pvalue().
00171 { 00172 int ibin; 00173 float pvalue; 00174 00175 ibin = PDF_xvalue_to_ibin (p, xvalue); 00176 00177 if ((ibin < 0) || (ibin >= p.nbin)) 00178 pvalue = 0.0; 00179 else 00180 pvalue = p.prob[ibin]; 00181 00182 return (pvalue); 00183 } |