Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- #use diagnositcs
- #use strict;
- use Cwd;
- $batchname = "Cosmics_smearing20_v01";
- $maxEventsPerRun = 1000; #max number of events to process per run (job)
- $numRuns = 17; #number of input files
- $maxProc = 20; #maximum number of processes allowed at one time for this shell
- $waitTime = 3; #time to wait before updating number of processes in seconds
- $runOffset = 0;
- $numRuns = $numRuns+$runOffset;
- $genheadfile = "prodtext_lariat_PiAbsAndChEx.fcl";
- $recoheadfile = "RecoMC.fcl";
- $inTextFileBase = "/scratch/jhugon/cosmicMC/cosmicsPaddles_1MTries_0to300GeV/file";
- $smearing = 1.20; #additional smearing proportional to magnitude, before convolution. Log-normal distribution
- #Set to 1+relative uncertainty, e.g. 1 for 0%, 1.1 for 10%, 1.25 for 25%, 3 for 200%
- $genOutFileBase = "single_gen"; #base for name of generator output files; needs .root appended
- $recoOutFileBase = "Reco2d"; #same for reco
- $genFileBase = "prodsingle_lariat";
- $recoFileBase = "Reco_MC_nopid";
- $resultsDir = "/scratch/jhugon/lariat/MC";
- if(!(-e "$resultsDir/$batchname"))
- {
- mkdir "$resultsDir/$batchname" or die "Error: unable to make directory $resultsDir/$batchname\n";
- }
- $workDir = "$resultsDir/$batchname"; #directory where all output will be stored
- $fclDir = "$workDir/fcl"; #name of directory where fhicl files produced in this script will be stored
- $genDir = "$workDir/gen"; #directory where generated files will be stored
- $recoDir = "$workDir/reco"; #directory where reconstructed files will be stored
- $logFileName = "$workDir/logFile";
- #prepare working area
- if(!(-e $fclDir))
- {
- mkdir $fclDir or die "Unable to make $fclDir in $workDir\n";
- }
- if(!(-e $genDir))
- {
- mkdir $genDir or die "Unable to make $genDir in $workDir\n";
- }
- if(!(-e $recoDir))
- {
- mkdir $recoDir or die "Unable to make $recoDir in $workDir\n";
- }
- #produce fcl files
- for($it = $runOffset; $it < $numRuns; ++$it)
- {
- $intextfilename = sprintf("%s%02u",$inTextFileBase,$it);
- $larrunnum = 1000 + $it;
- #produce gen file
- open(GENFILE, ">>$fclDir/$genFileBase\_run\_$it\.fcl");
- print GENFILE "\#include \"$genheadfile\"\n";
- print GENFILE "source.maxEvents: $maxEventsPerRun\n";
- print GENFILE "source.firstRun: $larrunnum\n";
- print GENFILE "physics.producers.generator.InputFileName\: \"$intextfilename\"\n";
- print GENFILE "outputs.out1.fileName: \"$genOutFileBase\_run\_$it\.root\"\n";
- print GENFILE "physics.producers.daq.AdditionalPropSmearPreConv: $smearing\n";
- close(GENFILE);
- #produce reco file
- #`cp $templateDir/$recoFile $fclDir/$recoFileBase\_run\_$it\.fcl`;
- open(RECOFILE, ">>$fclDir/$recoFileBase\_run\_$it\.fcl");
- print RECOFILE "\#include \"$recoheadfile\"\n";
- print RECOFILE "source.maxEvents: $maxEventsPerRun\n";
- print RECOFILE "outputs.out1.fileName: \"$recoDir/$recoOutFileBase\_run\_$it\.root\"\n";
- close(RECOFILE);
- } # for it
- print STDOUT "Made fcl files\n";
- #run jobs up to maximum number of processes
- $genJob = $runOffset;
- $recoJob = $runOffset;
- $numProc = `ps -T | grep lar | grep -v 00:00:00 | wc -l`;
- while($recoJob < $numRuns)
- {
- sleep($waitTime);
- $numProc = `ps -T | grep lar | grep -v 00:00:00 | wc -l`;
- while(($numProc < $maxProc) && ($recoJob < $numRuns))
- {
- if($genJob < $numRuns)
- {
- print STDOUT "Running gen job $genJob\n";
- `lar -c $fclDir/$genFileBase\_run\_$genJob\.fcl --output $genDir/$genOutFileBase\_run\_$genJob\.root -T $genDir/$genOutFileBase\_run\_$genJob\_hist.root >> $logFileName\_gen\_$genJob.log 2>&1 &`; # or die "Failed to run gen job number $genJob with command lar -c $fclDir/$genFileBase\_run\_$genJob\.fcl > $logFileName 2>&1 &\n";
- print STDOUT "lar job: lar -c $fclDir/$genFileBase\_run\_$genJob\.fcl -T $genDir/$genOutFileBase\_run\_$genJob\.root --output $genDir/$genOutFileBase\_run\_$genJob\_hist.root >> $logFileName\_gen\_$genJob.log 2>&1 &\n";
- #print STDOUT "Finished gen job $genJob\n";
- ++$genJob;
- sleep($waitTime);
- $numProc = `ps -T | grep lar | grep -v 00:00:00 | wc -l`;
- }
- if($recoJob < $numRuns && (-e "$genDir/$genOutFileBase\_run\_$recoJob.root") && (!`lsof $genDir/$genOutFileBase\_run\_$recoJob.root`)) #second condition checks that at least the gen job
- #whose results this reco job needs has finished
- {
- print STDOUT "Running reco job $recoJob\n";
- `lar -c $fclDir/$recoFileBase\_run\_$recoJob\.fcl -T $recoDir/$recoOutFileBase\_run\_$recoJob\_hist\.root $genDir/$genOutFileBase\_run\_$recoJob.root >> $logFileName\_reco\_$recoJob.log 2>&1 &`; # or die "Failed to run reco job number $recoJob\n";
- ++$recoJob;
- }
- sleep($waitTime);
- $numProc = `ps -T | grep lar | grep -v 00:00:00 | wc -l`;
- }
- print STDOUT "Number of running processes is $numProc\n";
- print STDOUT "numRuns: $numRuns genJob: $genJob recoJob: $recoJob\n";
- } # while recoJob < numRuns
- print STDOUT "Finished while loop over processes and out of loop. genJob is $genJob and recoJob is $recoJob\. Process report:\n $numProc\n";
Add Comment
Please, Sign In to add comment