diff --git a/bin/dev-shell b/bin/dev-shell deleted file mode 100755 index 0295f14bd010fb6539d0dc966c7a984bad1fc608..0000000000000000000000000000000000000000 --- a/bin/dev-shell +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -## ============================================================================= -## Setup (if needed) and start a development shell environment on Linux or MacOS -## ============================================================================= - -## make sure we launch this script from the project root directory -PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/.. -pushd ${PROJECT_ROOT} - -## We do not load the global development environment here, as this script is -## to be executed on a "naked" system outside of any container - -## ============================================================================= -## Step 1: Parse command line options - -## do we want to force-update the container (only affects Linux) -## default: we do not want to do this. -FORCE_UPDATE= - -function print_the_help { - echo "USAGE: ./util/start_dev_shell [-f]" - echo "OPTIONS:" - echo " -f,--force Force-update container (Only affects Linux)" - echo " -h,--help Print this message" - echo "" - echo " This script will setup and launch a containerized development - environment" - exit -} -while [ $# -gt 0 ] -do - key="$1" - case $key in - -f|--force) - FORCE_UPDATE="true" - shift # past value - ;; - -h|--help) - print_the_help - shift - ;; - *) # unknown option - echo "unknown option $1" - exit 1 - ;; - esac -done - -## get OS type -OS=`uname -s` - -## ============================================================================= -## Step 2: Update container and launch shell -echo "Launching a containerized development shell" - -case ${OS} in - Linux) - echo " - Detected OS: Linux" - ## Use the same prefix as we use for other local packages - export PREFIX=.local/lib - if [ ! -f $PREFIX/juggler_latest.sif ] || [ ! -z ${FORCE_UPDATE} ]; then - echo " - Fetching singularity image" - mkdir -p $PREFIX - wget https://eicweb.phy.anl.gov/eic/juggler/-/jobs/artifacts/master/raw/build/juggler.sif?job=singularity:latest -O $PREFIX/juggler_latest.sif - fi - echo " - Using singularity to launch shell..." - singularity exec $PREFIX/juggler_latest.sif eic-shell - ;; - Darwin) - echo " - Detector OS: MacOS" - echo " - Syncing docker container" - docker pull sly2j/juggler:latest - echo " - Using docker to launch shell..." - docker run -v /Users:/Users -w=$PWD -i -t --rm sly2j/juggler:latest eic-shell - ;; - *) - echo "ERROR: dev shell not available for this OS (${OS})" - exit 1 -esac - -## ============================================================================= -## Step 3: All done -echo "Exiting development environment..." diff --git a/bin/run_many.py b/bin/run_many.py deleted file mode 100755 index ccb7e83a7f81d1bc502fcddb32900e5a31eebdb1..0000000000000000000000000000000000000000 --- a/bin/run_many.py +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env python3 - -""" -This script will run a CI generator or processing script for multiple configurations. - -Author: Sylvester Joosten <sjoosten@anl.gov> -""" - -import os -import argparse -from multiprocessing import Pool, get_context -from tempfile import NamedTemporaryFile - -class InvalidArgumentError(Exception): - pass - -parser = argparse.ArgumentParser() -parser.add_argument( - 'command', - help="Script to be launched in parallel") -parser.add_argument( - '--energy', '-e', - dest='energies', - action='append', - help='One or more beam energy pairs (e.g. 10x100)', - required=True) -parser.add_argument( - '--config', '-c', - dest='configs', - action='append', - help='One or more configurations', - required=True) -parser.add_argument( - '--leading', - dest='leads', - action='append', - help='One or more leading particles(opt.)', - required=False) -parser.add_argument( - '--decay', - dest='decays', - action='append', - help='One or more decay channels (opt.)', - required=False) -parser.add_argument( - '--nproc', - dest='nproc', - default=5, - type=int, - help='Number of processes to launch in parallel', - required=False) - -def worker(command): - '''Execute the command in a system call, with the supplied argument string.''' - ## use a temporary file to capture the terminal output, and then - ## print the terminal output once the command finishes - with NamedTemporaryFile() as f: - cmd = [command, ' 2>&1 >', f.name] - cmd = ' '.join(cmd) - print("Executing '{}'".format(cmd)) - ret = os.system(cmd) - with open(f.name) as log: - print(log.read()) - return ret - -if __name__ == '__main__': - args = parser.parse_args() - print('Launching CI script in parallel for multiple settings') - for e in args.energies: - beam_setting = e.split('x') - if not beam_setting[0].isnumeric() or not beam_setting[1].isnumeric(): - print("Error: invalid beam energy setting:", e) - raise InvalidArgumentError - - if not os.path.exists(args.command): - print("Error: Script not found:", args.command) - raise InvalidArgumentError - - if args.nproc < 1 or args.nproc > 50: - print("Error: Invalid process limit (should be 1-50):", args.nproc) - raise InvalidArgumentError - - print(' - command: {}'.format(args.command)) - print(' - energies: {}'.format(args.energies)) - print(' - config: {}'.format(args.configs)) - print(' - nproc: {}'.format(args.nproc)) - if (args.leads): - print(' - leading: {}'.format(args.leads)) - if (args.decays): - print(' - decay: {}'.format(args.decays)) - - ## Expand our command and argument list for all combinatorics - cmds = [] - decays = args.decays if args.decays else [None] - leads = args.leads if args.leads else [None] - for e in args.energies: - for c in args.configs: - for l in leads: - for d in decays: - beam_setting = e.split('x') - cmd = [args.command, - '--ebeam', beam_setting[0], - '--pbeam', beam_setting[1], - '--config', c] - if l is not None: - cmd += ['--leading', l] - if d is not None: - cmd += ['--decay', d] - cmds.append(' '.join(cmd)) - - ## create a process pool - ## note that I'm using themultiprocessing.get_context function to setup - ## a context where subprocesses are created using the new "spawn" process - ## which avoids deadlocks that sometimes happen in the default dispatch - with get_context('spawn').Pool(processes=args.nproc) as pool: - return_values = pool.map(worker, cmds) - ## check if we all exited nicely, else exit with status 1 - if not all(ret == 0 for ret in return_values): - n_fail = sum([1 for ret in return_values if ret != 0]) - print('ERROR, {} of {} jobs failed'.format(n_fail, len(cmds))) - print('Return values:', [ret for ret in return_values if ret != 0]) - exit(1) - - ## That's all!