#!/usr/bin/perl use strict; use warnings; use File::Slurp qw(read_file); use File::Find::Rule; use File::Basename qw(basename); use Data::Dump qw(dump); use File::Copy::Recursive qw(dirmove); use NEURO qw(populate check_subj load_study print_help get_pair check_or_make); my $study; my $cfile; @ARGV = ("-h") unless @ARGV; while (@ARGV and $ARGV[0] =~ /^-/) { $_ = shift; last if /^--$/; if (/^-cut/) { $cfile = shift; chomp($cfile);} if (/^-h/) { print_help $ENV{'PIPEDIR'}.'/doc/dti_ica_one.hlp'; exit;} } $study = shift; unless ($study) { print_help $ENV{'PIPEDIR'}.'/doc/rs_ica_one.hlp'; exit;} my %std = load_study($study); my $subj_dir = $ENV{'SUBJECTS_DIR'}; my $pipe_dir = $ENV{'PIPEDIR'}; my $fsl = $ENV{'FSLDIR'}; my $w_dir=$std{'WORKING'}; my $fmri_dir=$std{'fMRI'}; my $mri_dir=$std{'MRI'}; my $db = $std{'DATABASE'}; my $data_dir=$std{'DATA'}; my $template_file = $pipe_dir.'/lib/fsf/lone_ica_template.fsf'; print "Collecting needed files\n"; my %fmris; my %plist = populate($db); if ($cfile){ my %cuts = get_pair($data_dir."/".$cfile); foreach my $cut (keys %cuts){ if(grep {/$cut/} %plist){ $fmris{$cut} = $plist{$cut}; } } }else{ %fmris = %plist; } my @feats = ("feat1", "feat2", "feat4"); check_or_make($w_dir.'/.files'); system("cp $fsl'/doc/fsl.css' $w_dir'/.files'"); system("cp -r $fsl'/doc/images' $w_dir'/.files/images'"); chdir($w_dir); foreach my $subject (sort keys %fmris){ my @names = find(file => 'name' => $fmris{$subject}.$subject."s*.nii.gz", in => $fmri_dir); if(@names){ my $output_dir = $w_dir.'/'.$fmris{$subject}.$subject.'_rsout'; check_or_make($output_dir); my $data = $w_dir.'/'.$fmris{$subject}.$subject.'_rs'; system("$fsl'/bin/imcp' $names[0] $data"); my $test_order = $fsl.'/bin/fslinfo '.$data; open(my $test_info, '-|', $test_order ) or die $!; my %test_data; while (<$test_info>){ if (/^dim1\s*(\d{1,3}).*/) {$test_data{'dim1'}=$1;} if (/^dim2\s*(\d{1,3}).*/) {$test_data{'dim2'}=$1;} if (/^dim3\s*(\d{1,3}).*/) {$test_data{'dim3'}=$1;} if (/^dim4\s*(\d{1,3}).*/) {$test_data{'dim4'}=$1;} if (/^pixdim4\s*(\d{1,2}\.\d{1,6})/) {$test_data{'tr'}=$1;} } my $data_size = $test_data{'dim1'}*$test_data{'dim2'}*$test_data{'dim3'}*$test_data{'dim4'}; my $data_dir = $data.'.ica'; my $logs_dir = $data_dir.'/logs'; my $scripts_dir = $data_dir.'/scripts'; check_or_make($data_dir); check_or_make($logs_dir); check_or_make($scripts_dir); my $dsg_file = $w_dir.'/'.$fmris{$subject}.$subject.'_design.fsf'; open TPF,"<$template_file"; open DSG,">$dsg_file"; while(){ s//\"$output_dir\"/; s//\"$data\"/; s//$test_data{'tr'}/; s//$test_data{'dim4'}/; s//$data_size/; print DSG; } close DSG; close TPF; my $jobid; foreach my $feat (sort @feats){ my $template = $pipe_dir.'/lib/script_templates/'.$feat.'.template'; my $script = $scripts_dir.'/'.$feat.'.sh'; open TPF, "<$template"; open SF, ">$script"; my $name = $fmris{$subject}.$subject; while(){ s//$name/; s//$ENV{'USER'}/; s//$output_dir/; s//$dsg_file/; s//$data_dir/g; s//1/; s//$test_data{'tr'}/; print SF; } close SF; close TPF; unless($jobid){ my $order = 'sbatch '.$script; print "$order\n"; $jobid = `$order`; $jobid = ( split ' ', $jobid )[ -1 ]; }else{ my $order = 'sbatch --depend=afterok:'.$jobid.' '.$script; print "$order\n"; $jobid = `$order`; $jobid = ( split ' ', $jobid )[ -1 ]; } } $jobid=""; } }