#!/usr/bin/perl -w use strict; use warnings; unless ($ARGV[0]){ print "sm_timecourse.pl version 2.0 (4/30/07) - szymon\@nmr.mgh.harvard.edu\n"; print "\n"; print "Takes screenshots of MEG data and arranges them in printable SVG figures\n"; print "\n"; print "Usage: sm_timecourse [options]\n"; print "\n"; print "Options:\n"; # Rob, please fill this in based on the arguments below print "\n"; exit; } # set defaults here: my $MEG_DIR=$ENV{MEG_DIR}; my @view=('lat'); my @hemi=('lh', 'rh'); my $sub='meg_normals'; my $comment=''; my $curv='sulc'; my $smooth=5; my $web='/space/ventzl/15/users/szymon_web/meg_results/'; my $sizex=990; # width of page in px (use 990 for 8.5x11) my $sizey=765; # height of page in px (use 765 for 8.5x11) my $rowspace=25; # spacing between rows (px) my $colspace=10; # spacing bewteen columns (px) my $xmin=20; # left margin width (px) my $ymin=80; # top edge of topmost brain (px) my $width=182; my $height=124; # my $width=145; # my $height=90; #my $width=116; #my $height=72; my $offset=0; my $dosvg=1; my $dopng=1; my $format='png'; my $sub='meg_normals'; my $comment=''; my $suf=''; my(@pre,$analysis,$tmin,$tmax,$tstep,$fthresh,$fmid,$fmax); my($i,$j,$k,$l); my @args=@ARGV; if ($ARGV[0]){ while($ARGV[0]){ my $flag=shift; if($flag eq '--pre'){ @pre=(); while ($ARGV[0]&&$ARGV[0]!~m/^--/){ $pre[$j++]=shift; } }elsif($flag eq '--hemi'){ @hemi=(); while ($ARGV[0]&&$ARGV[0]!~m/^--/){ $hemi[$k++]=shift; } }elsif($flag eq '--view'){ @view=(); while ($ARGV[0]&&$ARGV[0]!~m/^--/){ $view[$l++]=shift; } }elsif($flag eq '--suf'){ $suf=shift; }elsif($flag eq '--sub'){ $sub=shift; }elsif($flag eq '--analysis'){ $analysis=shift; }elsif($flag eq '--tmin'){ $tmin=shift; }elsif($flag eq '--tmax'){ $tmax=shift; }elsif($flag eq '--tstep'){ $tstep=shift; }elsif($flag eq '--offset'){ $offset=shift; }elsif($flag eq '--fthresh'){ $fthresh=shift; }elsif($flag eq '--fmid'){ $fmid=shift; }elsif($flag eq '--fmax'){ $fmax=shift; }elsif($flag eq '--format'){ $format=shift; }elsif($flag eq '--pngonly'){ $dopng=1;$dosvg=0; }elsif($flag eq '--svgonly'){ $dopng=0;$dosvg=1; }elsif($flag eq '--comment'){ $comment=(shift); }elsif($flag eq '--smooth'){ $smooth=(shift); }else{ print "\nInvalid Argument: $flag !\n"; exit 1; } } } my $src="$MEG_DIR/$sub/$analysis/stc/"; my $trg="$src/svg"; if(!-d$trg){ system("mkdir $trg"); } my $unique=int(rand 10000000)+1; my $tmpf="/usr/tmp/png_${unique}.sh"; open (TMP,">$tmpf") or die; print TMP "#\!/bin/csh -f\n"; print TMP "source /space/orsay/8/megdev/megsw/mne/setup/mne/mne_setup_analysis_csh\n"; my $tp; if($dopng==1){ for(my $n=0;$n<@pre;$n++){ foreach my $v (@view){ my $dir="$trg/$pre[$n]-$tmin-$tmax-$v"; unless(-d$dir){ system("mkdir $dir"); } print TMP "\n"; print TMP "mne_make_movie --stcin ${src}/${pre[$n]}${suf}-${hemi[1]}.stc --view $v --subject $sub --curv $curv --fthresh $fthresh --fmid $fmid --fmax $fmax --smooth $smooth --spm --noscalebar --nocomments --$format ${dir}/${pre[$n]} "; for($tp=$tmin;$tp<=$tmax;$tp=$tp+$tstep){ print TMP "--pick $tp "; } print TMP "\n"; } } close (TMP); chmod(0755, $tmpf); system("$tmpf"); for(my $n=0;$n<@pre;$n++){ foreach my $v (@view){ my $dir="$trg/$pre[$n]-$tmin-$tmax-$v"; system("mogrify -fill \"#fff\" -opaque \"#000\" -trim ${dir}/${pre[$n]}-*-${v}-*h.${format}"); } } } my $hy=$ymin-50; # vertical position of header (px) my $tymin=$ymin-5; # vertical position of timepoint (offset) labels relative to brains my $txmin=$xmin+$width/2; # horizontal position of timepoint (offset) labels relative to brains if($dosvg==1){ for(my $n=0;$n<@pre;$n++){ foreach my $v (@view){ my $dir="$trg/$pre[$n]-$tmin-$tmax-$v"; foreach my $h (@hemi){ my @outputs; my $x=$xmin; my $y=$ymin; my $tx=$txmin; my $ty=$tymin; my $tstart; for($tp=$tmin;$tp<=$tmax;$tp=$tp+$tstep){ my $timepoint=$tp+($offset); if($y==$ymin && $x==$xmin){ my $svgf="$dir/$pre[$n]-$tp-$tmax-$v-$h.svg"; $tstart=$tp; open (SVG,">$svgf") or die; print SVG "\n"; print SVG "\n"; print SVG "\n"; print SVG "\n"; print SVG "\n"; print SVG "\n"; print SVG "\n"; print SVG "$analysis $pre[$n] $h ($fthresh;$fmid;$fmax) $comment \n"; } print SVG "\n",$tp; print SVG "\n"; print SVG "\n"; print SVG "$timepoint\n"; $x=$x+$width; $tx=$tx+$width; if($x+$width>$sizex-$xmin){ $y=$y+$height+$rowspace; $ty=$ty+$height+$rowspace; $x=$xmin; $tx=$txmin; } if($y+$height>$sizey-$xmin && $tp!=$tmax){ $y=$ymin; $ty=$tymin; print SVG "\n"; close (SVG); system("mv $dir/${pre[$n]}-$tstart-$tmax-$v-$h.svg $dir/${pre[$n]}-$tstart-$tp-$v-$h.svg"); push(@outputs,"${pre[$n]}-$tstart-$tp-$v-$h"); } if($tp==$tmax){ print SVG "\n"; close (SVG); push(@outputs,"${pre[$n]}-$tstart-$tp-$v-$h"); } } unless (-d"$web/$analysis/$v/$h"){ system("mkdir -p $web/$analysis/$v/$h"); open (IDX,">>$web/index.html") or die; print IDX "$analysis : $v : $h
\n"; close (IDX); } foreach my $op (@outputs){ system("inkscape -e $web/$analysis/$v/$h/$op.png -b #ffffff $dir/$op.svg"); } open (WWW,">$web/$analysis/$v/$h/${pre[$n]}-$tmin-$tmax-$v-$h.html") or die; print WWW "\n"; foreach my $op (@outputs){ print WWW "\n"; close (WWW); open (IDX,">>$web/$analysis/$v/$h/index.html") or die; print IDX "${pre[$n]}-$tmin-$tmax-$v-$h
\n"; close (IDX); } } } }