Doxygen Source Code Documentation
        
Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search   
1dnorm.c
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 #include "mrilib.h"
00008 
00009 int main( int argc , char * argv[] )
00010 {
00011    MRI_IMAGE * inim ;
00012    int ii , jj , nx,ny , nopt;
00013    float * iar ;
00014    double sq ;
00015 
00016    
00017 
00018    if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
00019      printf("Usage: 1dnorm infile outfile\n"
00020             "where infile is an AFNI *.1D file (ASCII list of numbers arranged\n"
00021             "in columns); outfile will be a similar file, with each column being\n"
00022             "L2 normalized.\n"
00023            ) ;
00024       exit(0) ;
00025    }
00026 
00027    machdep() ;
00028 
00029    nopt = 1 ;
00030    if( nopt+1 >= argc ){
00031       fprintf(stderr,"** Need input and output filenames!\n");exit(1);
00032    }
00033 
00034    if( argc > nopt+1 && !THD_filename_ok(argv[nopt+1]) ){
00035       fprintf(stderr,"** Illegal output filename!\n"); exit(1);
00036    }
00037    if( argc > nopt+1 && strcmp(argv[nopt+1],"-") != 0 && THD_is_file(argv[nopt+1]) ){
00038       fprintf(stderr,"** Output file already exists!\n"); exit(1);
00039    }
00040 
00041    
00042 
00043    inim = mri_read_1D( argv[nopt] ) ;
00044    if( inim == NULL ){
00045       fprintf(stderr,"** Can't read input file!\n"); exit(1);
00046    }
00047 
00048    nx = inim->nx ; ny = inim->ny ; iar = MRI_FLOAT_PTR(inim) ;
00049 
00050    for( jj=0 ; jj < ny ; jj++ ){
00051       sq = 0.0 ;
00052       for( ii=0 ; ii < nx ; ii++ ) sq += SQR(iar[ii+jj*nx]) ;
00053       if( sq > 0.0 ){
00054          sq = 1.0 / sq ;
00055          for( ii=0 ; ii < nx ; ii++ ) iar[ii+jj*nx] *= sq ;
00056       }
00057    }
00058 
00059    mri_write_1D( (argc > nopt+1) ? argv[nopt+1] : "-" , inim ) ;
00060    exit(0) ;
00061 }