#include "mrilib.h"
int main( int argc , char * argv[] )
{
THD_3dim_dataset *dset ;
int iarg=1 ;
char *prefix = "flip" ;
void *row ;
int nx,ny,nz , ii,jj,kk , dcode , ival ;
if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
printf("Usage: 3dLRflip [-prefix ppp] dataset\n"
"Flips the Left-to-Right rows of a dataset.\n"
"This is useful only in the case where you have\n"
"constructed a dataset with the L-R direction\n"
"incorrectly labeled.\n"
) ;
exit(0) ;
}
mainENTRY("3dLRflip main"); machdep(); AFNI_logger("3dLRflip",argc,argv);
while( argv[iarg][0] == '-' ){
if( strcmp(argv[iarg],"-prefix") == 0 ){
prefix = argv[++iarg] ;
if( !THD_filename_ok(prefix) ){
fprintf(stderr,"** Illegal prefix: %s\n",prefix); exit(1);
}
iarg++ ; continue ;
}
}
/*-- read data --*/
dset = THD_open_dataset(argv[iarg]) ;
CHECK_OPEN_ERROR(dset,argv[iarg]) ;
DSET_mallocize(dset) ; DSET_load(dset) ; CHECK_LOAD_ERROR(dset) ;
nx=DSET_NX(dset); ny=DSET_NY(dset); nz=DSET_NZ(dset);
if( dset->daxes->xxorient == ORI_R2L_TYPE ||
dset->daxes->xxorient == ORI_L2R_TYPE ) dcode = 1 ;
else
if( dset->daxes->yyorient == ORI_R2L_TYPE ||
dset->daxes->yyorient == ORI_L2R_TYPE ) dcode = 2 ;
else
if( dset->daxes->zzorient == ORI_R2L_TYPE ||
dset->daxes->zzorient == ORI_L2R_TYPE ) dcode = 3 ;
else
{ fprintf(stderr,"** Dataset has no L-R axis!\n"); exit(1); }
/* modify dataset name */
dset->dblk->diskptr->storage_mode = STORAGE_BY_BRICK ; /* 14 Jan 2004 */
dset->idcode = MCW_new_idcode() ; /* 24 Aug 2003 - ooops */
EDIT_dset_items( dset , ADN_prefix , prefix , ADN_none ) ;
tross_Make_History( "3dLRflip", argc,argv, dset ) ;
/* loop over bricks */
for( ival=0 ; ival < DSET_NVALS(dset) ; ival++ ){
switch( dcode ){
case 1: /* flip x-axis rows */
for( kk=0 ; kk < nz ; kk++ )
for( jj=0 ; jj < ny ; jj++ ){
row = THD_get_dset_row( dset , ival , -dcode , 0,jj,kk ) ;
THD_put_dset_row( dset , ival , dcode , 0,jj,kk , row ) ;
free(row) ;
}
break ;
case 2: /* flip y-axis rows */
for( kk=0 ; kk < nz ; kk++ )
for( ii=0 ; ii < nx ; ii++ ){
row = THD_get_dset_row( dset , ival , -dcode , ii,0,kk ) ;
THD_put_dset_row( dset , ival , dcode , ii,0,kk , row ) ;
free(row) ;
}
break ;
case 3: /* flip z-axis rows */
for( jj=0 ; jj < ny ; jj++ )
for( ii=0 ; ii < nx ; ii++ ){
row = THD_get_dset_row( dset , ival , -dcode , ii,jj,0 ) ;
THD_put_dset_row( dset , ival , dcode , ii,jj,0 , row ) ;
free(row) ;
}
break ;
}
}
/* done */
DSET_write(dset) ; exit(0) ;
}
syntax highlighted by Code2HTML, v. 0.9.1