PerlScript

From Daya Bay
Revision as of 14:15, 13 April 2008 by Djaffe (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Here is an example perl script run_test_mac.pl to submit multiple jobs.

#!/usr/bin/perl
# a wrapper script to run multiple jobs
use strict;
use Getopt::Std;      # Command line option parsing
use vars qw/$opt_f $opt_l/;

#Modify the following for your own MC
my $loginshell = "#!/bin/csh\n";
my $loginscript = "/home/jianglai/.login";
my $work = "/home/jianglai/work/dyb";
# define macro key and root file name as array here for flexibility
my @macrokey = ("test");
my @rootsurfix = ("dybsim");

#-----------------------------------------------------------
# Process command line
#-----------------------------------------------------------

# first run number, last run number

my $opts = "f:l:";
getopts($opts);

my $first_run = 0;
my $last_run = 0;
$first_run = $opt_f if (defined($opt_f));
$last_run = $opt_l if (defined($opt_l));

#NOTE, for each run, need to have a separate macro file, 
#so that the jobs are not confused at running time.
#For each macro file, we change the run number and the root file name

for (my $runno=$first_run; $runno<=$last_run; $runno=$runno+1){
    my $index = 0;
    foreach my $thismackey (@macrokey){
	#back up the macro first
	system("cp -f $thismackey.mac $thismackey.bk.mac");
    
	my $oldoutstr = "$rootsurfix[$index].root";
	my $newoutstr = "$rootsurfix[$index]\_r$runno.root";
	my $command = "replace.pl -no_bak \'$oldoutstr\' \'$newoutstr\' $thismackey.mac";
	system($command);

	$oldoutstr = "/dyw/run/runNumber 0";
	$newoutstr = "/dyw/run/runNumber $runno";
	$command = "replace.pl -no_bak \'$oldoutstr\' \'$newoutstr\' $thismackey.mac";
	system($command);

	my $macro2run = "$thismackey\_r$runno";
	system("cp -f $thismackey.mac macros/$macro2run.mac");
	
	# now compose the job file and submit the job
	my $commandfile = "commands/$macro2run.command";
	open(MYCMDFILE, ">$commandfile"); #open for write, overwrite

	print MYCMDFILE "$loginshell\n";
	print MYCMDFILE "source $loginscript\n";
	print MYCMDFILE "G4dyb.exe $work/macros/$macro2run.mac\n";
	close(MYCMDFILE);
	
	# make the command file executable
	system("chmod 755 $commandfile");
	system("qsub -hard -e $work/logs -o $work/logs -l h_cpu=02:00:00 $commandfile");
	$index = $index+1;
    
	#recover the original macro file
	system("cp -f $thismackey.bk.mac $thismackey.mac");
    } # end of loop over macros
} #end of run loop


-- Main.JianglaiLiu - 13 Dec 2006