diff --git a/make_dyadic_vectors.cc b/make_dyadic_vectors.cc index 2fd0934fa711fbc86f135a1e5d991efddf8b5392..0d0e5942a5f23cbfe0f28190f1d7eeb353a28404 100644 --- a/make_dyadic_vectors.cc +++ b/make_dyadic_vectors.cc @@ -7,16 +7,28 @@ using namespace NEWIMAGE; int main ( int argc, char **argv ){ if(argc<4){ - cerr<<"usage: make_dyadic_vectors <theta_vol> <phi_vol> <output>"<<endl; + cerr<<"usage: make_dyadic_vectors <theta_vol> <phi_vol> [mask] <output>"<<endl; + cerr<<"[mask] is optional"<<endl; exit(0); } + volume4D<float> ths,phs; volumeinfo tempinfo; read_volume4D(ths,argv[1],tempinfo); read_volume4D(phs,argv[2]); + volume<float> mask; + string oname; + if(argc==5){ + oname=argv[4]; + read_volume(mask,argv[3]); + } + else{ + mask=ths[0]*0+1; + oname=argv[3]; + } volume4D<float> dyadic_vecs(ths.xsize(),ths.ysize(),ths.zsize(),3); dyadic_vecs=0; - copybasicproperties(ths,dyadic_vecs); + copybasicproperties(ths[0],dyadic_vecs[0]); SymmetricMatrix dyad(3);dyad=0; ColumnVector dir(3); @@ -26,35 +38,42 @@ int main ( int argc, char **argv ){ for(int k=ths.minz();k<=ths.maxz();k++){ for(int j=ths.miny();j<=ths.maxy();j++){ for(int i=ths.minx();i<=ths.maxx();i++){ - dyad=0; - for(int s=ths.mint();s<=ths.maxt();s++){ - float th=ths(i,j,k,s); - float ph=phs(i,j,k,s); - dir(1)=sin(th)*cos(ph); - dir(2)=sin(th)*sin(ph); - dir(3)=cos(th); - dyad << dyad+dir*dir.t(); - } - - EigenValues(dyad,dyad_D,dyad_V); - int maxeig; - if(dyad_D(1)>dyad_D(2)){ - if(dyad_D(1)>dyad_D(3)) maxeig=1; - else maxeig=3; + if(mask(i,j,k)>0){ + dyad=0; + for(int s=ths.mint();s<=ths.maxt();s++){ + + float th=ths(i,j,k,s); + float ph=phs(i,j,k,s); + dir(1)=sin(th)*cos(ph); + dir(2)=sin(th)*sin(ph); + dir(3)=cos(th); + dyad << dyad+dir*dir.t(); + } + + EigenValues(dyad,dyad_D,dyad_V); + int maxeig; + if(dyad_D(1)>dyad_D(2)){ + if(dyad_D(1)>dyad_D(3)) maxeig=1; + else maxeig=3; + } + else{ + if(dyad_D(2)>dyad_D(3)) maxeig=2; + else maxeig=3; + } + dyadic_vecs(i,j,k,0)=dyad_V(1,maxeig); + dyadic_vecs(i,j,k,1)=dyad_V(2,maxeig); + dyadic_vecs(i,j,k,2)=dyad_V(3,maxeig); } else{ - if(dyad_D(2)>dyad_D(3)) maxeig=2; - else maxeig=3; + dyadic_vecs(i,j,k,0)=0; + dyadic_vecs(i,j,k,1)=0; + dyadic_vecs(i,j,k,2)=0; } - dyadic_vecs(i,j,k,0)=dyad_V(1,maxeig); - dyadic_vecs(i,j,k,1)=dyad_V(2,maxeig); - dyadic_vecs(i,j,k,2)=dyad_V(3,maxeig); } - } } - save_volume4D(dyadic_vecs,argv[3],tempinfo); + save_volume4D(dyadic_vecs,oname,tempinfo); } diff --git a/old_bedpost b/old_bedpost index 7d5b306b823e103574e1090695d4bc97d0b58a7d..75c03fb48a49ea833c8e8bff5055b062bfc14e1e 100755 --- a/old_bedpost +++ b/old_bedpost @@ -197,6 +197,8 @@ ${FSLDIR}/bin/avwmaths ${subjdir}.bedpost/merged_thsamples -Tmean ${subjdir}.bed ${FSLDIR}/bin/avwmaths ${subjdir}.bedpost/merged_phsamples -Tmean ${subjdir}.bedpost/mean_phsamples ${FSLDIR}/bin/avwmaths ${subjdir}.bedpost/merged_fsamples -Tmean ${subjdir}.bedpost/mean_fsamples +${FSLDIR}/bin/make_dyadic_vectors ${subjdir}.bedpost/merged_thsamples ${subjdir}.bedpost/merged_phsamples ${subjdir}.bedpost/nodif_brain_mask ${subjdir}.bedpost/dyadic_vectors + if [ ${finished} -eq 1 ];then if [ `imtest ${subjdir}.bedpost/merged_thsamples` -eq 1 ];then if [ `imtest ${subjdir}.bedpost/merged_phsamples` -eq 1 ];then