Coverage for yaptide/batch/fluka_string_templates.py: 100%

3 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-03-31 19:18 +0000

1SUBMIT_FLUKA: str = """#!/bin/bash 

2OUT=`mktemp` 

3module load fluka 

4 

5ROOT_DIR={root_dir} 

6cd $ROOT_DIR 

7mkdir -p $ROOT_DIR/workspaces/task_{{0001..{n_tasks}}} 

8mkdir -p $ROOT_DIR/input 

9 

10INPUT_DIR=$ROOT_DIR/input 

11ARRAY_SCRIPT=$ROOT_DIR/array_script.sh 

12COLLECT_SCRIPT=$ROOT_DIR/collect_script.sh 

13 

14unzip -d $INPUT_DIR $ROOT_DIR/input.zip 

15rm $ROOT_DIR/input.zip 

16 

17FLUKA_CMD="sbatch --array=1-{n_tasks} {array_options} --parsable $ARRAY_SCRIPT > $OUT" 

18eval $FLUKA_CMD 

19JOB_ID=`cat $OUT | cut -d ";" -f 1` 

20echo "Job id: $JOB_ID" 

21 

22if [ -n "$JOB_ID" ] ; then 

23 COLLECT_CMD="sbatch --dependency=afterany:$JOB_ID {collect_options} --parsable $COLLECT_SCRIPT > $OUT" 

24 eval $COLLECT_CMD 

25 COLLECT_ID=`cat $OUT | cut -d ";" -f 1` 

26 echo "Collect id: $COLLECT_ID" 

27fi 

28""" 

29 

30COLLECT_FLUKA_BASH: str = """#!/bin/bash 

31{collect_header} 

32ROOT_DIR={root_dir} 

33 

34INPUT_WILDCARD="$ROOT_DIR/workspaces/task_*/*_fort.*" 

35OUTPUT_DIRECTORY=$ROOT_DIR/output 

36 

37mkdir -p $OUTPUT_DIRECTORY 

38 

39cd $OUTPUT_DIRECTORY 

40 

41python3 $ROOT_DIR/simulation_data_sender.py --sim_id={sim_id} --update_key={update_key} \\ 

42 --backend_url={backend_url} --simulation_state=MERGING_RUNNING 

43 

44module load pymchelper 

45convertmc json --many "$INPUT_WILDCARD" 

46 

47CLEAR_FORTS={remove_output_from_workspace} 

48 

49if $CLEAR_FORTS; then 

50 rm $INPUT_WILDCARD 

51fi 

52 

53python3 $ROOT_DIR/simulation_data_sender.py --output_dir=$OUTPUT_DIRECTORY \\ 

54 --sim_id={sim_id} --update_key={update_key} --backend_url={backend_url} 

55 

56python3 $ROOT_DIR/simulation_data_sender.py --sim_id={sim_id} --update_key={update_key} \\ 

57 --backend_url={backend_url} --simulation_state=COMPLETED 

58""" 

59 

60ARRAY_FLUKA_BASH: str = """#!/bin/bash 

61{array_header} 

62ROOT_DIR={root_dir} 

63WORK_DIR=$ROOT_DIR/workspaces/task_`printf %04d $SLURM_ARRAY_TASK_ID` 

64 

65# seed of RNG 

66RNG_SEED=$SLURM_ARRAY_TASK_ID 

67 

68# main FLUKA input files 

69INPUT_DIR=$ROOT_DIR/input 

70 

71# go to working directory 

72cd $WORK_DIR 

73 

74# copy .inp file from input folder to working directory 

75cp $INPUT_DIR/*.inp . 

76 

77# assign .inp file to a variable 

78INPUT_FILE=$(ls *.inp) 

79 

80module load pymchelper 

81python3 -c "from pymchelper.executor.runner import Runner;Runner._Runner__update_fluka_input_file('\\''${{INPUT_FILE}}'\\'',${{RNG_SEED}}.0)" # noqa: E501 

82sig_handler() 

83{{ 

84 echo "BATCH interrupted" 

85 wait # wait for all children, this is important! 

86}} 

87 

88# FILE_TO_WATCH=$WORK_DIR/fluka_`printf %04d $SLURM_ARRAY_TASK_ID`.log 

89# python3 $ROOT_DIR/watcher.py \ 

90# --filepath=$FILE_TO_WATCH\ 

91# --sim_id={sim_id}\ 

92# --task_id=$SLURM_ARRAY_TASK_ID\ 

93# --update_key={update_key}\ 

94# --backend_url={backend_url}\ 

95# --verbose 1>watcher_$SLURM_ARRAY_TASK_ID.stdout 2>watcher_$SLURM_ARRAY_TASK_ID.stderr & 

96 

97trap 'sig_handler' SIGUSR1 

98 

99# execute simulation 

100srun rfluka -N0 -M1 $WORK_DIR/*.inp & 

101 

102wait 

103"""