From cf4fa9226b59ef71e978e695684a9d03ad9209c3 Mon Sep 17 00:00:00 2001 From: gwct Date: Thu, 23 Oct 2025 12:09:46 -0400 Subject: [PATCH] a few minor edits and comments; added the rulegraph image --- img/workflow-demo-01.drawio | 208 ++++++++++++++++++++++++++++++++ img/workflow-demo-01.drawio.png | Bin 0 -> 36393 bytes mkdocs.yml | 17 --- run/index.md | 60 +++++---- 4 files changed, 245 insertions(+), 40 deletions(-) create mode 100644 img/workflow-demo-01.drawio create mode 100644 img/workflow-demo-01.drawio.png delete mode 100644 mkdocs.yml diff --git a/img/workflow-demo-01.drawio b/img/workflow-demo-01.drawio new file mode 100644 index 0000000..ac1c70e --- /dev/null +++ b/img/workflow-demo-01.drawio @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/workflow-demo-01.drawio.png b/img/workflow-demo-01.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..cb315251a293416b06984fc332562ac6007e73d4 GIT binary patch literal 36393 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 @@ -315,7 +315,9 @@ The workflow portion of the nextflow file is where the processes are activated. ## Running the workflow -Now let's run the workflow according to the instructions on the README. In your terminal, run the following command: +Now let's run the workflow according to the instructions on the README. + +> **Activity**: In your terminal, run the following command: ```bash nextflow run main.nf @@ -341,7 +343,7 @@ The important part of this output are the process lines, which tells you which p When you run Nextflow for the first time in a directory, it creates a directory called `work` where it will stage and write all files generated in the course of execution. Within the work directory, each instance of a process gets its own subdirectory, named with a hash in order to make it unique. Within this subdirectory, Nextflow stages inputs, writes helper files, writes out any logs, executes the script, and creates the output files for that process. -The path to this subdirectory is shown in truncated form in your terminal output, but by default only one representative directory is shown for each process. To see all the subdirectories for every process, you can run the nextflow command using the option `-ansi-log false`: +The path to this subdirectory is shown in truncated form in your terminal output within square brackets at the beginning of the log. By default only one representative directory is shown for each process. To see all the subdirectories for every process, you can run the nextflow command using the option `-ansi-log false`: ``` N E X T F L O W ~ version 25.04.3 @@ -355,7 +357,9 @@ Launching `main.nf` [furious_swanson] DSL2 - revision: d216eb5f95 [56/867990] Submitted process > AGGREGATE ``` -You can see that the `COUNT_LINES` process was run two times, and each time it created a subdirectory in the `work` directory. Let's look at one of these directories. `cd` to the subdirectory **that appears in your own terminal** corresponding to one of the COUNT_LINES processes (press tab to complete the directory path), run `tree -a` and you should see something like this: +You can see that the `COUNT_LINES` process was run two times and each time it created a subdirectory in the `work` directory. For example, during this run, `COUNT_LINES` created a directory `work/6d/c955dc....`, since `[6d/c955dc]` appears before the `COUNT_LINES` process' log line. Note that the actual directory name is longer than what is displayed in the log, and these directories will be different for your own run! Let's look at one of these directories. + +> **Activity**: `cd` to the subdirectory **that appears in your own terminal** corresponding to one of the COUNT_LINES processes (press tab to complete the directory path), run `tree -a` and you should see something like this: ```bash training/run/01-nextflow-simple/work/80/aa96730e803bfa2cf68af15b6a09c3 -> tree -a @@ -375,17 +379,21 @@ The files that begin with `.` are all helper or log files. The `sample1.lines` f Let's go over each of these dot files and what they contain: -* `.command.begin`: Metadata related to the beginning of the execution of the process call -* `.command.err`: Error messages (stderr) emitted by the process call -* `.command.log`: Complete log output emitted by the process call (Both stdout and stderr) -* `.command.out`: Regular output (stdout) by the process call -* `.command.run`: Full script run by Nextflow to execute the process call -* `.command.sh`: The command that was actually run by the process call -* `.exitcode`: The exit code resulting from the command +| File | Description | +| ---------------- | ----------- | +| `.command.begin` | Metadata related to the beginning of the execution of the process call | +| `.command.err` | Error messages (stderr) emitted by the process call | +| `.command.log` | Complete log output emitted by the process call (Both stdout and stderr) | +| `.command.out` | Regular output (stdout) by the process call | +| `.command.run` | Full script run by Nextflow to execute the process call | +| `.command.sh` | The command that was actually run by the process call | +| `.exitcode` | The exit code resulting from the command | The `.command.sh` file tells you what command Nextflow actually ran. Any file name wildcards will be expanded into actual file names and parameters passed to the command line software call will also be fully parsed here. So this is a good place to start when you are debugging your nextflow workflow. When we get to the troubleshooting section, we will see how these files can be useful for debugging. -Note: the work directory can be full very quickly, because each time you run a process, it creates a new subdirectory in the `work` directory. If you run the same process multiple times, it will create multiple subdirectories. We recommend setting the work directory to a scratch directory rather than your home or lab share so that it does not fill up your allocation. You should think of everything in the `work` directory as temporary files that can be deleted at any time. +!!! note + + The work directory can be full very quickly, because each time you run a process, it creates a new subdirectory in the `work` directory. If you run the same process multiple times, it will create multiple subdirectories. We recommend setting the work directory to a scratch directory rather than your home or lab share so that it does not fill up your allocation. You should think of everything in the `work` directory as temporary files that can be deleted at any time. ### The `publishDir` directory @@ -424,16 +432,17 @@ Now, if we look into the `results` directory, we should see a file called `aggre ## Resuming a workflow -One of the best features of a workflow manager like nextflow is resumability. Resumability is the ability to restart a workflow from where it left off, rather than starting over from scratch. This is especially useful when running long-running workflows or when you want to make changes to a workflow without losing progress. Let's see how this works by modifying the `samplesheet.txt` file and resuming the workflow. Open the `samplesheet.txt` file in the `01-nextflow-simple` directory and add a new sample to the file (`sample3`), then save it. It should look something like this: +One of the best features of a workflow manager like nextflow is resumability. Resumability is the ability to restart a workflow from where it left off, rather than starting over from scratch. This is especially useful when running long-running workflows or when you want to make changes to a workflow without losing progress. Let's see how this works by modifying the `samplesheet.txt` file and resuming the workflow. + +> **Exercise**: Open the `samplesheet.txt` file in the `01-nextflow-simple` directory and add a new sample to the file (`sample3`), then save it. It should look something like this: ```csv sample1 sample2 sample3 - ``` -Now, in your terminal, run the following command to resume the workflow: +> Now, in your terminal, run the following command to resume the workflow: ```bash nextflow run main.nf -resume @@ -451,9 +460,11 @@ executor > local (4) [47/b75dec] AGGREGATE [100%] 1 of 1 ✔ ``` -You can see that nextflow recognized that the first two samples were already processed. The line "cached: 2" indicates that there were 2 process calls that nextflow did not need to run again. So it ran `COUNT_LINES`, `COUNT_WORDS`, and `COMBINE_COUNTS`, for the new greeting and then had to rerun `AGGREGATE` to collect all the counts into one file. If you look in the `results` directory, you should see that the `aggregate-summary.tsv` file now contains the new sample as well. +You should see that nextflow recognized that the first two samples were already processed. The line "cached: 2" indicates that there were 2 process calls that nextflow did not need to run again. So it ran `COUNT_LINES`, `COUNT_WORDS`, and `COMBINE_COUNTS`, for the new greeting and then had to rerun `AGGREGATE` to collect all the counts into one file. If you look in the `results` directory, you should see that the `aggregate-summary.tsv` file now contains the new sample as well. + +### What kinds of modifications will trigger a rerun vs a cache? -What kinds of modifications will trigger a rerun vs a cache? Here are some examples: +Here are some examples: 1. **Input file changes**: If you modify the input files (e.g., `sample1.txt` or `samplesheet.txt`), nextflow will detect the changes and rerun the affected processes 2. **Process script changes**: Changing the script section of a process will affect that process and any downstream processes that depend on it. @@ -461,7 +472,7 @@ What kinds of modifications will trigger a rerun vs a cache? Here are some examp 4. **Output file changes**: Deleting/modifying the output files (e.g., `aggregate-summary.tsv`) 5. **Work directory deletion**: If you delete the `work` directory, nextflow will rerun all processes because it has no record of what was previously run. -What are some modifications that will not trigger a rerun? +### What are some modifications that will not trigger a rerun? 1. **Deleting irrelevant files**: If you delete work directory files that did not participate in the previous run, it will not affect the next run. For example, if you did a bunch of test runs on test data and then a production run on real data, deleting the work directories related to the test runs will not affect the production run. 2. **Adding new files**: If you add new files to the input directory that were not part of the previous run, nextflow will not rerun the previous processes, but it will run the new processes for the new files. @@ -472,14 +483,16 @@ As you run nextflow workflows, the `work` directory can fill up quickly. This is If you want to clear the `work` directory, you can simply delete it. However, be aware that if you delete the `work` directory and then try to resume a workflow, nextflow will not be able to find any cached results and will rerun all processes from scratch. -Each time you run nextflow, that run gets assigned a run name that's a combination of an adjective and a scientist name. That's the "furious_swanson" etc that we've seen in the output. You can also see the log of all your runs using the command `nextflow log`. Once you know the run names of the runs you want to delete, you can use the command `nextflow clean -f` to delete that run's work directories. You can also use `-before`, `-after`, and `-but` to control how many sessions of work directories to delete. Another way to clean your work directory is simply to trash the entire thing using the classic `rm -rf work` command. Let's do that now and then rerun the workflow with `-resume` to see what happens. +Each time you run nextflow, that run gets assigned a run name that's a combination of an adjective and a scientist name. That's the "furious_swanson" etc that we've seen in the output. You can also see the log of all your runs using the command `nextflow log`. Once you know the run names of the runs you want to delete, you can use the command `nextflow clean -f` to delete that run's work directories. You can also use `-before`, `-after`, and `-but` to control how many sessions of work directories to delete. Another way to clean your work directory is simply to trash the entire thing using the classic `rm -rf work` command. + +> **Exercise**: Let's do that now and then rerun the workflow with `-resume` to see what happens. ```bash rm -rf work nextflow run main.nf -resume ``` -You should see that everything got rerun because nextflow could not find any cached results. +You should see that everything was run again because nextflow could not find any cached results. ``` N E X T F L O W ~ version 25.04.3 @@ -498,13 +511,14 @@ executor > local (7) ## Using Config files !!! alert + We will now be switching our focus to configuration of nextflow runs, and using the directory `run/02-nextflow-config`. -Often times, you will find in the instructions for a nextflow workflow that you will need to provide a configuration file or some parameters. This is because the workflow author has made the workflow more flexible and customizable. In this version of the workflow, we have the same processes as before, but there are some additional files that the author has provided. The README.md file is also a bit different and contains more information on how to customize the workflow. +Often times, you will find in the instructions for a nextflow workflow that you will need to provide a configuration file or some parameters. Config files enable the workflow to be used generally for any properly formatted input data. In this version of the workflow, we have the same processes as before, but there are some additional files that the author has provided. The README.md file is also a bit different and contains more information on how to customize the workflow. ### Software environments -Let's take a brief digression into talking about software environments, which is one of the configurable options of this pipeline. Good pipeline writers will include a couple of options for how to manage the software dependencies of their workflow. The two most common options are conda and docker/singularity. Conda is a package manager that allows you to create isolated environments with specific versions of software. Docker and Singularity are containerization technologies that allow you to package software and its dependencies into a single image that can be run on any system with the appropriate container runtime. +Let's take a brief digression into talking about software environments, which is one of the configurable options of this pipeline. Many pipelines will include a couple of options for how to manage the software dependencies of their workflow. The two most common options are conda and docker/singularity. Conda is a package manager that allows you to create isolated environments with specific versions of software. Docker and Singularity are containerization technologies that allow you to package software and its dependencies into a single image that can be run on any system with the appropriate container runtime. Conda: