@DesignSearch 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #!/bin/tcsh
  2. # search for most efficient event-related design
  3. # TOGGLE the following 2 model parameters
  4. set model = GAM # toggle btw GAM and TENT: pre-fixed or whatever fits?
  5. set eff = SUM # toggle btw SUM and MAX: summing the normalized std dev or minimax?
  6. # experiment parameters
  7. set ts = 300 # length of timeseries
  8. set stim = 3 # number of input stimuli
  9. set num_on = 50 # time points per stimulus (between 0 and $ts/3)
  10. # execution parameters
  11. set iterations = 100 # number of iterations
  12. set seed = 2483907 # initial random seed
  13. set outdir = Results # move all output files to this directory
  14. set TR = 2 # TR Length in seconds
  15. set ignore = 4 # number of TRs ignored at the beginning of the run
  16. set show = 10 # number of designs in a descendent order of efficiency
  17. # directories to store intermediate files
  18. set outdir = ${outdir}_${model}_$eff
  19. set LCfile = $outdir/LC
  20. if ("$model" == "TENT") set model = ${model}'(0,12,7)'
  21. # ------------------------------------------------------------
  22. # make sure $outdir exists
  23. if ( ! -d $outdir ) then
  24. mkdir $outdir
  25. if ( $status ) then
  26. echo "failure, cannot create output directory, $outdir"
  27. exit
  28. endif
  29. endif
  30. # create empty LC file
  31. echo -n "" > $LCfile
  32. echo ""
  33. echo -n "Running iteration: 000"
  34. # ------------------------------------------------------------
  35. # run the test many times
  36. foreach iter (`count -digits 3 1 $iterations`)
  37. # make some other random seed
  38. @ seed = $seed + 1
  39. # create random order stim files
  40. RSFgen -nt ${ts} \
  41. -num_stimts ${stim} \
  42. -nreps 1 ${num_on} \
  43. -nreps 2 ${num_on} \
  44. -nreps 3 ${num_on} \
  45. -seed ${seed} \
  46. -prefix RSFstim${iter}. >& /dev/null
  47. # convert stimulus coding into timing files
  48. make_stim_times.py -files RSFstim${iter}.1.1D RSFstim${iter}.2.1D RSFstim${iter}.3.1D \
  49. -prefix stim${iter} \
  50. -nt 300 \
  51. -tr ${TR} \
  52. -nruns 1
  53. # now evaluate the stimulus timings
  54. 3dDeconvolve \
  55. -nodata ${ts} $TR \
  56. -nfirst $ignore \
  57. -nlast 299 \
  58. -polort 2 \
  59. -num_stimts ${stim} \
  60. -stim_times 1 "stim${iter}.01.1D" "$model" \
  61. -stim_label 1 "stimA" \
  62. -stim_times 2 "stim${iter}.02.1D" "$model" \
  63. -stim_label 2 "stimB" \
  64. -stim_times 3 "stim${iter}.03.1D" "$model" \
  65. -stim_label 3 "stimC" \
  66. -gltsym "SYM: stimA -stimB" \
  67. -gltsym "SYM: stimA -stimC" \
  68. -gltsym "SYM: stimB -stimC" \
  69. >& Eff${iter}
  70. set nums = ( `awk -F= '/LC/ {print $2}' Eff${iter}` )
  71. if ("$eff" == "SUM") then
  72. # save the sum of the 3 normalized std dev
  73. set num_sum = `ccalc -eval "$nums[1] + $nums[2] + $nums[3]"`
  74. echo -n "$num_sum = $nums[1] + $nums[2] + $nums[3] : " >> $LCfile
  75. echo "iteration $iter, seed $seed" >> $LCfile
  76. endif
  77. if ("$eff" == "MAX") then
  78. # get the max of the 3 normalized std dev
  79. set imax = `ccalc -form int -eval "argmax($nums[1],$nums[2],$nums[3])"`
  80. set max = $nums[$imax]
  81. echo -n "$max = max($nums[1], $nums[2], $nums[3]) " >> $LCfile
  82. echo "iteration $iter, seed $seed" >> $LCfile
  83. endif
  84. mv RSFstim*.1D stim*.1D Eff* nodata*.x1D $outdir
  85. echo -n "...$iter"
  86. end
  87. echo ""
  88. echo "Done, results are in '$outdir', LC sums are in '$LCfile'"
  89. echo ""
  90. echo "The most 10 efficient designs are (in descending order):"
  91. echo ""
  92. sort $LCfile | head -$show
  93. echo ""