Doxygen Source Code Documentation
edt_clustarr.c File Reference
#include "mrilib.h"Go to the source code of this file.
Functions | |
| void | EDIT_cluster_array (MCW_cluster_array *clar, int edit_clust, float dxyz, float vmul) |
Function Documentation
|
||||||||||||||||||||
|
Definition at line 25 of file edt_clustarr.c. References amax, MCW_cluster_array::clar, ECFLAG_AMAX, ECFLAG_MAX, ECFLAG_MEAN, ECFLAG_ORDER, ECFLAG_SIZE, ECFLAG_SMAX, ENTRY, MCW_cluster::mag, MCW_cluster_array::num_clu, MCW_cluster::num_pt, and SORT_CLARR. Referenced by EDIT_one_dataset().
00027 {
00028 int iclu; /* cluster index */
00029 int nclu; /* non-empty cluster index */
00030 int ii; /* voxel index */
00031 float
00032 mag, /* voxel intensity */
00033 sum, /* sum of voxel intensities */
00034 max, /* maximum of voxel intensities */
00035 amax, /* maximum of absolute voxel intensities */
00036 smax, /* signed maximum of absolute voxel intensities */
00037 mean, /* mean of voxel intensities */
00038 size; /* size of cluster (multiples of vmul) */
00039
00040 ENTRY("EDIT_cluster_array") ;
00041
00042 if( edit_clust == ECFLAG_ORDER ){
00043 SORT_CLARR(clar) ;
00044 }
00045
00046 nclu = 0;
00047 for (iclu = 0; iclu < clar->num_clu; iclu++)
00048 {
00049 if ((clar->clar[iclu] != NULL) && (clar->clar[iclu]->num_pt > 0))
00050 {
00051 nclu++;
00052
00053 /* initialization of basic statistics for this cluster */
00054 sum = max = smax = clar->clar[iclu]->mag[0];
00055 amax = fabs(smax);
00056
00057 /* calculate basic statistics for this cluster */
00058 for (ii = 1; ii < clar->clar[iclu]->num_pt; ii++)
00059 {
00060 mag = clar->clar[iclu]->mag[ii];
00061 switch (edit_clust)
00062 {
00063 case ECFLAG_MEAN :
00064 sum += mag; break;
00065 case ECFLAG_MAX :
00066 if (mag > max) max = mag; break;
00067 case ECFLAG_AMAX :
00068 if (fabs(mag) > amax) amax = fabs(mag); break;
00069 case ECFLAG_SMAX :
00070 if (fabs(mag) > fabs(smax)) smax = mag; break;
00071 case ECFLAG_SIZE : break;
00072 default : break;
00073 }
00074
00075 }
00076
00077 /* additional calculations */
00078 if (edit_clust == ECFLAG_MEAN)
00079 mean = sum / clar->clar[iclu]->num_pt;
00080 if (edit_clust == ECFLAG_SIZE)
00081 size = clar->clar[iclu]->num_pt * dxyz / vmul;
00082
00083 /* set all voxel intensities in this cluster to the same value */
00084 for (ii = 0; ii < clar->clar[iclu]->num_pt; ii++)
00085 {
00086 switch (edit_clust)
00087 {
00088 case ECFLAG_MEAN : clar->clar[iclu]->mag[ii] = mean;
00089 case ECFLAG_MAX : clar->clar[iclu]->mag[ii] = max; break;
00090 case ECFLAG_AMAX : clar->clar[iclu]->mag[ii] = amax; break;
00091 case ECFLAG_SMAX : clar->clar[iclu]->mag[ii] = smax; break;
00092 case ECFLAG_SIZE : clar->clar[iclu]->mag[ii] = size; break;
00093 case ECFLAG_ORDER: clar->clar[iclu]->mag[ii] = nclu; break;
00094 default : break;
00095 }
00096 }
00097 }
00098 } /* iclu */
00099
00100 EXRETURN ;
00101 }
|