#!/usr/bin/perl # Copyright 2013 O. Sotolongo use strict; use warnings; use Parallel::ForkManager; use GNTools qw(achtung); use File::Basename qw(basename); use constant CHROMOSOMES => 22; my $max_processes = 4; my $impute = '/usr/local/bin/plink --noweb --proxy-impute all --make-bed --allow-no-sex'; my $db = shift; die "Must supply database\n" unless $db; my $pm = new Parallel::ForkManager($max_processes); my $logfile = "/tmp/.parallel_impute_by_db_output.log"; my $ordfile = "/tmp/.parallel_impute_by_db_orders.log"; open ORDOUT, ">$ordfile" or die "Can't open file, $!"; open STDOUT, ">$logfile" or die "Can't redirect stdout"; open STDERR, ">&STDOUT" or die "Can't dup stdout"; my $bndb = basename($db); for(my $chr = 1; $chr <= CHROMOSOMES; $chr++){ my $order = $impute.' --bfile '.$db.'_chr'.$chr.' --out '.$bndb.'_chr'.$chr.'_plink_imputed'; $pm->start() and next; print ORDOUT "$order\n"; system($order); $pm->finish; } $pm->wait_all_children; close ORDOUT; close STDERR; close STDOUT; achtung "plink impute", "La imputacion de plink ha terminado\n"; print "Have a nice day! ;-)\n";