4444
4545# Default values
4646PIPELINE=" KumarLabJax/mouse-tracking-runtime"
47- REVISION=" v0.2.0 "
47+ REVISION=" stable "
4848WORKFLOW=" single-mouse"
4949PROFILE=" sumner2"
5050JOB_NAME=" KL_Tracking_Nextflow"
@@ -57,6 +57,12 @@ DRY_RUN=false
5757INPUT_BATCH=" "
5858OUTPUT_DIR=" "
5959ADDITIONAL_ARGS=()
60+ NEXTFLOW_MODULE_VERSION=" stable"
61+ # Put the nextflow cache into a unique directory associated with the launch directory.
62+ # e.g. /flashscratch/aberger/$HASH/.nextflow where $HASH is the md5sum of the full
63+ # path of the directory that nextflow was launched from.
64+ NEXTFLOW_CACHE_DIR_ROOT=" /flashscratch/$( whoami) "
65+ NEXTFLOW_CACHE_DIR=" $NEXTFLOW_CACHE_DIR_ROOT /$( pwd | md5sum | cut -d' ' -f1) /.nextflow"
6066
6167# Parse command line arguments
6268while [[ $# -gt 0 ]]; do
@@ -169,6 +175,54 @@ if [[ -n "$REVISION" ]]; then
169175 REVISION_FLAG=" -r $REVISION "
170176fi
171177
178+ # Generate resubmit.sh script
179+ RESUBMIT_SCRIPT=" $OUTPUT_DIR /resubmit.sh"
180+ generate_resubmit_script () {
181+ local script_path=$( readlink -f " $0 " )
182+
183+ cat > " $RESUBMIT_SCRIPT " << 'RESUBMIT_EOF '
184+ #!/bin/bash
185+ # Auto-generated resubmit script
186+ # Created: $(date)
187+ # Original command parameters saved for exact resubmission
188+
189+ RESUBMIT_EOF
190+
191+ # Add the actual command with all parameters
192+ echo -n " \" $script_path \" \\ " >> " $RESUBMIT_SCRIPT "
193+ echo " " >> " $RESUBMIT_SCRIPT "
194+
195+ # Add all the parameters
196+ echo " -i \" $INPUT_BATCH \" \\ " >> " $RESUBMIT_SCRIPT "
197+ echo " -o \" $OUTPUT_DIR \" \\ " >> " $RESUBMIT_SCRIPT "
198+ echo " -n \" $PIPELINE \" \\ " >> " $RESUBMIT_SCRIPT "
199+ [[ -n " $REVISION " ]] && echo " -r \" $REVISION \" \\ " >> " $RESUBMIT_SCRIPT "
200+ echo " -w \" $WORKFLOW \" \\ " >> " $RESUBMIT_SCRIPT "
201+ echo " -p \" $PROFILE \" \\ " >> " $RESUBMIT_SCRIPT "
202+ echo " -j \" $JOB_NAME \" \\ " >> " $RESUBMIT_SCRIPT "
203+ echo " -t \" $TIME_LIMIT \" \\ " >> " $RESUBMIT_SCRIPT "
204+ echo " -m \" $MEMORY \" \\ " >> " $RESUBMIT_SCRIPT "
205+ echo " --partition \" $PARTITION \" \\ " >> " $RESUBMIT_SCRIPT "
206+ echo " --qos \" $QOS \" \\ " >> " $RESUBMIT_SCRIPT "
207+ [[ -n " $RESUME " ]] && echo " --resume \\ " >> " $RESUBMIT_SCRIPT "
208+
209+ # Add additional arguments if any
210+ if [[ ${# ADDITIONAL_ARGS[@]} -gt 0 ]]; then
211+ echo -n " -- " >> " $RESUBMIT_SCRIPT "
212+ for arg in " ${ADDITIONAL_ARGS[@]} " ; do
213+ echo -n " \" $arg \" " >> " $RESUBMIT_SCRIPT "
214+ done
215+ echo " \\ " >> " $RESUBMIT_SCRIPT "
216+ fi
217+
218+ # Remove the last backslash
219+ sed -i ' $ s/ \\$//' " $RESUBMIT_SCRIPT "
220+ echo " " >> " $RESUBMIT_SCRIPT "
221+
222+ # Make it executable
223+ chmod +x " $RESUBMIT_SCRIPT "
224+ }
225+
172226# Generate the sbatch script content
173227SBATCH_SCRIPT=$( cat << EOF
174228#!/bin/bash
@@ -182,7 +236,9 @@ SBATCH_SCRIPT=$(cat << EOF
182236
183237# LOAD NEXTFLOW
184238module use --append /projects/kumar-lab/meta/modules
185- module load nextflow/stable
239+ module load nextflow/$NEXTFLOW_MODULE_VERSION
240+
241+ export NXF_CACHE_DIR="$NEXTFLOW_CACHE_DIR "
186242
187243# RUN NEXTFLOW PIPELINE
188244nextflow run $PIPELINE $REVISION_FLAG -profile $PROFILE --input_batch $INPUT_BATCH --workflow $WORKFLOW --pubdir $OUTPUT_DIR $RESUME $( printf " %s" " ${ADDITIONAL_ARGS[@]} " )
@@ -194,6 +250,15 @@ if [[ "$DRY_RUN" == true ]]; then
194250 echo " $SBATCH_SCRIPT "
195251 echo " =============================================="
196252 echo " Command that would be executed: sbatch <<< \"\$ SBATCH_SCRIPT\" "
253+ echo " "
254+
255+ # Inform user of cache directory
256+ echo " "
257+ echo " Would use cache directory: $NXF_CACHE_DIR "
258+
259+ # Generate resubmit script even in dry-run mode
260+ generate_resubmit_script
261+ echo " Resubmit script would be saved to: $RESUBMIT_SCRIPT "
197262else
198263 # Submit the job
199264 echo " Submitting Nextflow pipeline with the following parameters:"
@@ -214,4 +279,14 @@ else
214279
215280 # Submit using here-string to avoid temporary files
216281 sbatch <<< " $SBATCH_SCRIPT"
217- fi
282+
283+ # Inform user of cache directory
284+ echo " "
285+ echo " Using cache directory: $NXF_CACHE_DIR "
286+
287+ # Generate resubmit script after successful submission
288+ generate_resubmit_script
289+ echo " "
290+ echo " Resubmit script saved to: $RESUBMIT_SCRIPT "
291+ echo " To resubmit with identical parameters, run: $RESUBMIT_SCRIPT "
292+ fi
0 commit comments