[Bio] / FigKernelScripts / make_partition_reps.pl Repository:
ViewVC logotype

View of /FigKernelScripts/make_partition_reps.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (download) (as text) (annotate)
Sun Feb 1 18:32:55 2009 UTC (11 years ago) by overbeek
Branch: MAIN
CVS Tags: mgrast_dev_08112011, rast_rel_2009_05_18, mgrast_dev_08022011, rast_rel_2014_0912, myrast_rel40, mgrast_dev_05262011, mgrast_dev_04082011, rast_rel_2010_0928, mgrast_version_3_2, mgrast_dev_12152011, mgrast_dev_06072011, rast_rel_2009_0925, rast_rel_2010_0526, rast_rel_2014_0729, mgrast_dev_02212011, rast_rel_2010_1206, mgrast_release_3_0, mgrast_dev_03252011, rast_rel_2010_0118, rast_rel_2009_02_05, rast_rel_2011_0119, mgrast_release_3_0_4, mgrast_release_3_0_2, mgrast_release_3_0_3, mgrast_release_3_0_1, mgrast_dev_03312011, mgrast_release_3_1_2, mgrast_release_3_1_1, mgrast_release_3_1_0, mgrast_dev_04132011, mgrast_dev_04012011, rast_rel_2009_07_09, rast_rel_2010_0827, myrast_33, rast_rel_2011_0928, mgrast_dev_04052011, mgrast_dev_02222011, rast_rel_2009_03_26, mgrast_dev_10262011, HEAD
try

use FIG;

my $usage = "usage: make_partition_reps SimPartDir Procs [restart]";
(
 ($SimPart = shift @ARGV) &&
 ($procs   = shift @ARGV)
)
    || die $usage;

my %done;
if ((@ARGV > 0) && ($ARGV[0] =~ /restart/i))
{
    opendir(DIR,$SimPart) || die "could not open $SimPart";
    my @reps = grep { ($_ =~ /representatives.\d+/) && (-s "$SimPart/$_") } readdir(DIR);
    closedir(DIR);
    (@reps > 0) || die "no files to restart with";
    open(REPS,">>$SimPart/representatives")  || die "could not open  $SimPart/$file";
    foreach my $file (@reps)
    {
	my $full_path = "$SimPart/$file";
	open(OLD,"<$full_path") || die "could not open $full_path";
	my $last = <OLD>;
	while ($last && ($last =~ /^(\d+)/))
	{
	    my @set = ();
	    my $curr = $1;
	    while ($last && ($last =~ /^(\d+)/) && ($1 == $curr))
	    {
		push(@set,$last);
		$last = <OLD>;
	    }
	    if ($last)
	    {
		foreach $_ (@set)
		{
		    print REPS $_;
		}
	    }
	}
	close(OLD);
    }
    close(REPS);
    open(TMP,"cut -f1 $SimPart/representatives |") || die "could not open $SimPart/representatives";
    while (defined($_ = <TMP>))
    {
	if ($_ =~ /^(\d+)/)
	{
	    $done{$1} = 1;
	}
    }
    close(TMP);
}
else
{
    system "rm $SimPart/representatives*";
}

my @procs = &start_procs("make_partition_repsW $SimPart",$procs);

opendir(PART,"$SimPart/Partitions") || die "bad";
my @subDs = sort { $a <=> $b } grep { $_ =~ /^\d/ } readdir(PART);
closedir(PART);

foreach my $subD (@subDs)
{
    opendir(TMP,"$SimPart/Partitions/$subD") || die "could not open $SimPart/Partitions/$subD";
    my @tmp = sort { $a <=> $b } map { (($_ =~ /^(\d+)$/) && (! $done{$1}))  ? $1 : () } readdir(TMP);
    closedir(TMP);
    
    foreach my $n (@tmp)
    {
	my $nextP = $n % $procs;
	my $file = "$SimPart/Partitions/$subD/$n";
	if (-s $file)
	{
	    my $fh = $procs[$nextP];
	    print $fh "$file\n";
	}
    }
}

&close_procs(\@procs);
print STDERR "closed processes\n";
for ($i=1; ($i <= $procs); $i++)
{
    system "cat $SimPart/representatives.$i >> $SimPart/representatives";
#   unlink "$SimPart/representatives.$i";
}

sub start_procs {
    my($cmd,$procsN) = @_;

    my @procs = ();
    open(F1,"| $cmd 1") || die 1;
    my $ofh = select F1; $| = 1; select $ofh;
    push(@procs,\*F1);
    print STDERR "starting process 1\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F2,"| $cmd 2") || die 2;
    my $ofh = select F2; $| = 1; select $ofh;
    push(@procs,\*F2);
    print STDERR "starting process 2\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F3,"| $cmd 3") || die 3;
    my $ofh = select F3; $| = 1; select $ofh;
    push(@procs,\*F3);
    print STDERR "starting process 3\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F4,"| $cmd 4") || die 4;
    my $ofh = select F4; $| = 1; select $ofh;
    push(@procs,\*F4);
    print STDERR "starting process 4\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F5,"| $cmd 5") || die 5;
    my $ofh = select F5; $| = 1; select $ofh;
    push(@procs,\*F5);
    print STDERR "starting process 5\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F6,"| $cmd 6") || die 6;
    my $ofh = select F6; $| = 1; select $ofh;
    push(@procs,\*F6);
    print STDERR "starting process 6\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F7,"| $cmd 7") || die 7;
    my $ofh = select F7; $| = 1; select $ofh;
    push(@procs,\*F7);
    print STDERR "starting process 7\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F8,"| $cmd 8") || die 8;
    my $ofh = select F8; $| = 1; select $ofh;
    push(@procs,\*F8);
    print STDERR "starting process 8\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F9,"| $cmd 9") || die 9;
    my $ofh = select F9; $| = 1; select $ofh;
    push(@procs,\*F9);
    print STDERR "starting process 9\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F10,"| $cmd 10") || die 10;
    my $ofh = select F10; $| = 1; select $ofh;
    push(@procs,\*F10);
    print STDERR "starting process 10\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F11,"| $cmd 11") || die 11;
    my $ofh = select F11; $| = 1; select $ofh;
    push(@procs,\*F11);
    print STDERR "starting process 11\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F12,"| $cmd 12") || die 12;
    my $ofh = select F12; $| = 1; select $ofh;
    push(@procs,\*F12);
    print STDERR "starting process 12\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F13,"| $cmd 13") || die 13;
    my $ofh = select F13; $| = 1; select $ofh;
    push(@procs,\*F13);
    print STDERR "starting process 13\n";

    $procsN--; if ($procsN == 0) { return @procs }
    open(F14,"| $cmd 14") || die 14;
    my $ofh = select F14; $| = 1; select $ofh;
    push(@procs,\*F14);
    print STDERR "starting process 14\n";

    return @procs;
}

sub close_procs {
    my($procs) = @_;
    my $proc;

    for (my $i=0; ($i < @$procs); $i++)
    {
	print STDERR "CLOSING ",$i+1,"\n";
	my $fh = $procs->[$i];
	print $fh "x\n";
	close($fh);
	print STDERR "CLOSED ",$i+1,"\n";
    }
}


MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3