#include "mrilib.h"
/*---------------------------------------------------------------
10 Jul 2001: sort a cluster by its "mag" array
-----------------------------------------------------------------*/
typedef struct { short i, j, k; } short3 ;
typedef struct { float v; short i, j, k; } fl_sh3 ;
void MCW_sort_cluster( MCW_cluster *cl )
{
int nn , ii ;
float *aa ;
short3 **ss ;
ENTRY("MCW_sort_cluster") ;
if( cl == NULL || cl->num_pt < 2 ) EXRETURN ;
nn = cl->num_pt ;
aa = (float * ) malloc(sizeof(float) *nn) ;
ss = (short3 **) malloc(sizeof(short3 *)*nn) ;
for( ii=0 ; ii < nn ; ii++ ){
aa[ii] = cl->mag[ii] ;
ss[ii] = (short3 *) malloc(sizeof(short3)) ;
ss[ii]->i = cl->i[ii] ;
ss[ii]->j = cl->j[ii] ;
ss[ii]->k = cl->k[ii] ;
}
qsort_floatstuff( nn , aa , (void **)ss ) ;
for( ii=0 ; ii < nn ; ii++ ){
cl->mag[ii] = aa[ii] ;
cl->i[ii] = ss[ii]->i ;
cl->j[ii] = ss[ii]->j ;
cl->k[ii] = ss[ii]->k ;
free(ss[ii]) ;
}
free(ss) ; free(aa) ; EXRETURN ;
}
/*----------------------------------------------------------------*/
/*! Sort a cluster by distance from (0,0,0) [e.g., a mask].
------------------------------------------------------------------*/
void MCW_radsort_cluster( MCW_cluster *cl , float dx, float dy, float dz )
{
int nn , ii ;
float *aa , x,y,z ;
fl_sh3 **ss ;
ENTRY("MCW_radsort_cluster") ;
if( cl == NULL || cl->num_pt < 2 ) EXRETURN ;
if( dx == 0.0f ) dx = 1.0f ;
if( dy == 0.0f ) dy = 1.0f ;
if( dz == 0.0f ) dz = 1.0f ;
nn = cl->num_pt ;
aa = (float * ) malloc(sizeof(float) *nn) ;
ss = (fl_sh3 **) malloc(sizeof(fl_sh3 *)*nn) ;
for( ii=0 ; ii < nn ; ii++ ){
x = cl->i[ii]*dx; y = cl->j[ii]*dy; z = cl->k[ii]*dz;
aa[ii] = sqrt( x*x + y*y + z*z ) ;
aa[ii] = cl->mag[ii] ;
ss[ii] = (fl_sh3 *) malloc(sizeof(fl_sh3)) ;
ss[ii]->i = cl->i[ii] ;
ss[ii]->j = cl->j[ii] ;
ss[ii]->k = cl->k[ii] ;
ss[ii]->v = cl->mag[ii] ;
}
qsort_floatstuff( nn , aa , (void **)ss ) ;
for( ii=0 ; ii < nn ; ii++ ){
cl->mag[ii] = ss[ii]->v ;
cl->i[ii] = ss[ii]->i ;
cl->j[ii] = ss[ii]->j ;
cl->k[ii] = ss[ii]->k ;
free(ss[ii]) ;
}
free(ss) ; free(aa) ; EXRETURN ;
}
syntax highlighted by Code2HTML, v. 0.9.1