#!/bin/sh # the next line restarts using wish \ exec pvWish "$0" $* # # global parameters # # PsKey: Parameter Space Key # UpdateDelay: defines the delay to refresh the parameter values # Psid: Parameter Space Id # global PvCmd Psid PsKey UpdateDelay Macro_Message afni_to3d set Psid -1 set NMRHOME $env(XWINNMRHOME) set HOMEPATH $env(HOME) set PvCmd "$env(XWINNMRHOME)/prog/bin/pvcmd" set afni_to3d "$HOMEPATH/afni/to3d" set PsKey [lindex $argv 0] set ParSpaceId [lindex $argv 1] set DataPathNew [lindex $argv 2] set UpdateDelay 300 set Macro_Message "Background Macro Starts!" # rename the default exit handler. rename exit __exit set DebugFile [open $env(HOME)/debug.txt w+] # # exit handler. # The opened parameter space must be closed. # proc exit {{status 0}} { global DebugFile global Psid PvCmd if { $Psid != -1 } { catch { exec $PvCmd -a ParxServer -r ClosePs -psid $Psid } } __exit $status } # set the window manager close to the exit handler. wm protocol . WM_DELETE_WINDOW exit wm title . "Macro Message during Acquisition" label .label -text "Macro_Message:" label .value -textvariable Macro_Message button .exit -text "Exit" -command exit pack .label .value .exit -padx 3m -pady 3m update # # main loop to perform the parameter refresh # set Path2dseq "$DataPathNew/2dseq" # Find ACQ_dim MR parameters from ParxServer set ACQ_dim [exec $PvCmd -a ParxServer -r ParamGetValue -psid $ParSpaceId -param ACQ_dim] if { $ACQ_dim != 3 } { set Macro_Message "This script does not work with 2D acquistion!" exit } # Get 3D Matrix Size set Matrix [exec $PvCmd -a ParxServer -r ParamGetValue -psid $ParSpaceId -param PVM_Matrix ] # Remove { } symbol set Matrix_temp [lindex $Matrix 0] # Split Matrix x,y,z set splitMatrixxyz [split $Matrix_temp ","] lassign $splitMatrixxyz Matrix_X Matrix_Y Matrix_Z set Matrix_X [format %d $Matrix_X] set Matrix_Y [format %d $Matrix_Y] set Matrix_Z [format %d $Matrix_Z] set Matrix_All "$Matrix_X*$Matrix_Y*$Matrix_Z" set SPackArrNSlices [exec $PvCmd -a ParxServer -r ParamGetValue -psid $ParSpaceId -param PVM_SPackArrNSlices] set SPackArrNSlices_temp [lindex $SPackArrNSlices 0] set SPackArrNSlices_temp [string index $SPackArrNSlices_temp 1] set NEchoImages [exec $PvCmd -a ParxServer -r ParamGetValue -psid $ParSpaceId -param PVM_NEchoImages 2> /dev/null] if { "$NEchoImages" != "0"} { set SPackArrNSlices_temp [expr $SPackArrNSlices_temp*$NEchoImages] } set Block [expr $Matrix_X*$Matrix_Y*$Matrix_Z*$SPackArrNSlices_temp*2] set FOVxyz [exec $PvCmd -a ParxServer -r ParamGetValue -psid $ParSpaceId -param PVM_Fov] set FOVxyz_temp [lindex $FOVxyz 0] # Split FOV x,y,z set splitFOVxyz [split $FOVxyz_temp ","] lassign $splitFOVxyz FOVx FOVy FOVz set FOVx [expr $FOVx*0.5] set FOVy [expr $FOVy*0.5] set FOVz [expr $FOVz*0.5] set FOV_X [format %#.5gL-R $FOVx] set FOV_Y [format %#.5gS-I $FOVy] set FOV_Z [format %#.5gP-A $FOVz] set FOVstring "-xFOV $FOV_X -yFOV $FOV_Y -zFOV $FOV_Z" puts $DebugFile "FOVstring=$FOVstring" set RepetitionTime [exec $PvCmd -a ParxServer -r ParamGetValue -psid $ParSpaceId -param PVM_RepetitionTime] set OneSecond 1000 set PauseTime [expr $RepetitionTime*0.025*$OneSecond] set NRepetitions [exec $PvCmd -a ParxServer -r ParamGetValue -psid $ParSpaceId -param PVM_NRepetitions] set TotalImages [expr $SPackArrNSlices*$NRepetitions] # wait until 2dseq has been created (with nonzero size) while { [ file exist $Path2dseq ] != 1} { after 1000 } set imgtype "-omri" # Convert each volume to AFNI format for {set iter 0} {$iter < $NRepetitions} {incr iter} { set BlockIter [expr $Block*$iter] set ImgFormat "3D:$BlockIter:0:$Matrix_X:$Matrix_Y:$Matrix_Z:" set Prefix [format realtime_%04d $iter] set LastVolName $Prefix set fsize [expr $Block*($iter+1)] while { [file size $Path2dseq] < $fsize } { after [expr {int($PauseTime)}] set Macro_Message "Path2dseq size less than block size!" } set systemTime [clock seconds] set date [clock format $systemTime -format %D] set time [clock format $systemTime -format %H:%M:%S] puts $DebugFile "\niter_num=$iter" puts $DebugFile "$date, $time " set directory "$HOMEPATH/rt_fMRI/data" cd $directory set afni_prefix "-prefix" puts $DebugFile "$afni_to3d $imgtype $FOVstring $afni_prefix $LastVolName $ImgFormat$Path2dseq &" set AFNI_RUN_ID [exec $afni_to3d -omri -xFOV $FOV_X -yFOV $FOV_Y -zFOV $FOV_Z -prefix $LastVolName $ImgFormat$Path2dseq &] puts $DebugFile "\n" } close $DebugFile