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 }
 | 
 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
 
 
 
 
       
	   
	   
	   
	  