#!/usr1/local/bin/perl5 -w # Make a simple shell script that can call multiple # instances of like_bphase.pl ################################### # Robin Corbet (UMBC), 2021-05-14 # ################################### use strict 'subs'; use strict 'refs'; $VERSION = "0.1"; $TRUE = 1; $FALSE = 0; $BATCH = $FALSE; #$DEBUG = $FALSE; $DEFAULT_BIN_SIZE = 0.1; $DEFAULT_PERIOD = -1; $DEFAULT_T0 = -1; $DEFAULT_ZENITH_LIMIT = 105; $DEFAULT_ROCK = 90; $DEFAULT_BORE = 180; $DEFAULT_EVENT_CLASS_MIN = 3; $DEFAULT_MODEL_FILE = "outmodel.xml"; $DEFAULT_SOURCE_LIST = "slist.dat"; $DEFAULT_FT1_LIST = "plist.dat"; $DEFAULT_IRF_CODE = 9; # 4FGL + new Galactic diffuse $DEFAULT_SUN_MINIMUM = 5.0; #$DEFAULT_SAVE_PRODUCTS = $FALSE; $DEFAULT_AUTO_MODEL = $TRUE; $DEFAULT_USE_BINNED = $TRUE; $DEFAULT_TS_THRESHOLD = 2; # Region size $DEFAULT_ROI = 10; # Default, "hidden" parameters $DEFAULT_EMIN = 100; $DEFAULT_EMAX = 500000; # prefix for output files $DEFAULT_PREFIX = ""; #4FGL DR2 $DEFAULT_CATALOG = "gll_psc_v27.fit"; $DEFAULT_FT2 = "lat_spacecraft_merged.fits"; $DEFAULT_CHATTER = 0; print "Give output shell script name\: "; chomp($shell_file = ); open(SHELL, "> $shell_file") || die "Can't open $shell_file\n"; print "opened $shell_file\n"; $DEFAULT_PAR = $shell_file . ".par"; $make_par = get_yn("Make a new parameter file", $TRUE); $par_file = get_string("Give parameter file name", $DEFAULT_PAR); #print "Give name of parameter file to use\: "; #chomp($par_file = ); print "How many phase bins\: "; chomp($nbins = ); $phase_length = 1.0/$nbins; $DEFAULT_BIN_SIZE = $phase_length; $start_phase = 0.0; $stop_phase = $start_phase + $phase_length; while ($stop_phase < (1.0 + $phase_length/10.0)){ printf SHELL "like_bphase.pl -start_phase %.4f -stop_phase %.4f -debug -batch -file $par_file \& \n", $start_phase, $stop_phase ; $start_phase = $stop_phase; $stop_phase = $start_phase + $phase_length; } close (SHELL); # Create the parameter file if needed if($make_par){ $output_parameter_filename = $par_file; write_defaults(); } system ("chmod +x $shell_file"); ############################################################ # Prompt for a Y/N response and return true or false (1 or 0) # default value is determined by argument # Usage: $response = get_yn("Prompt", $default); # $default should be 1, 0, or "INDEF" sub get_yn{ my $prompt = $_[0]; my $default = $_[1]; if($BATCH){ return $default; } if($default eq 1){$default_yn = "Y";} elsif($default eq 0){$default_yn = "N";} my $INDEF = "INDEF"; my $waiting = 1; while($waiting){ if($default eq $INDEF){ print "$prompt [y/n]\: "; } else{ if ($default){ print "$prompt [y/n; default = y]\: "; } else{ print "$prompt [y/n; default = n]\: "; } } chomp($response = substr(uc(),0,1)); #print "response = $response\n"; #if($response eq "" && ($default != $INDEF)) if($response eq "") {$value = $default; print "(Using default: \"$default_yn\")\n"; $waiting = 0;} # Check response format OK elsif($response eq "Y"){ # print "got y\n"; $value = 1; $waiting = 0; } elsif($response eq "N"){ # print "got n\n"; $value = 0; $waiting = 0; } else { print "Response ($response) is not \"y\" or \"n\"\n"; } } return $value; } ############################################################ # Prompt for and get a string. # No range check. # Usage: $value = get_string("String to prompt for value", default) # If a default is not to be specified, call with value set to # the string "INDEF" sub get_string{ $prompt = $_[0]; $default = $_[1]; #$minimum = $_[2]; #$maximum = $_[3]; if($BATCH){ return $default; } $INDEF = "INDEF"; $waiting = 1; while($waiting){ if ($default){ print "$prompt [default = $default]\: "; } else{ print "$prompt\: "; } chomp($value = ); #print "value = $value\n"; if($value eq "" && ($value ne $INDEF)) {$value = $default; print "(Using default: \"$default\")\n"; $waiting = 0;} if($value ne ""){$waiting = 0;} # Check data range is OK #if (($value <= $maximum || $maximum eq $INDEF) && # ( $value > $minimum ) || $minimum eq $INDEF ){ # $waiting = 0; # } #else { # print "Value ($value) is not in the range $minimum to $maximum\n"; # } } return $value; } ########################################## # Write current file defaults to a parameter file # This can then be edited (if desired) then used as # future input. sub write_defaults{ open(PARAMETERS, ">$output_parameter_filename") || die "Can't open output parameter file: $output_parameter_filename\n"; print PARAMETERS "\# Default parameters of the \"like_bphase\" binary phase resolved aperture photometry code \# can be set with a file like this. \# Use the syntax such as \# \$ like_bphase -file like_bphase.par \# This can be most useful when running in \"batch\" mode where parameters \# are not prompted for. \# e.g. \# \$ like_bphase -batch -file like_bphase.par use_binned $DEFAULT_USE_BINNED ft2 $DEFAULT_FT2 bin_size $DEFAULT_BIN_SIZE period $DEFAULT_PERIOD t0 $DEFAULT_T0 roi $DEFAULT_ROI zenith_limit $DEFAULT_ZENITH_LIMIT rock $DEFAULT_ROCK bore $DEFAULT_BORE event_class_min $DEFAULT_EVENT_CLASS_MIN source_list $DEFAULT_SOURCE_LIST ft1_list $DEFAULT_FT1_LIST catalog $DEFAULT_CATALOG irf_code $DEFAULT_IRF_CODE auto_model $DEFAULT_AUTO_MODEL model_file $DEFAULT_MODEL_FILE ts_threshold $DEFAULT_TS_THRESHOLD sun_minimum $DEFAULT_SUN_MINIMUM emin $DEFAULT_EMIN emax $DEFAULT_EMAX prefix $DEFAULT_PREFIX chatter $DEFAULT_CHATTER\n"; close(PARAMETERS); exit; }