Repository: Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit (language: python)

Issue:
ENH: Option to use Nipype Callback Log to profile resources used by one node
Nipype docs: https://nipype.readthedocs.io/en/0.13.1/users/resource_sched_profiler.html#runtime-profiler-and-using-the-callback-log


Discussion / hints:

Fix patch:
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 6256f35fe..2204e2f60 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -196,10 +196,12 @@ jobs:
                 --masks_derivatives_dir 'manual_masks'
 
             # Rename log
-            mv /tmp/src/mialsuperresolutiontoolkit/data/code/log.txt /tmp/src/mialsuperresolutiontoolkit/data/test/test-01_log.txt
+            mv /tmp/src/mialsuperresolutiontoolkit/data/code/log.txt \
+                /tmp/src/mialsuperresolutiontoolkit/data/test/test-01_log.txt
 
             # Rename partial coverage
-            mv /tmp/src/mialsuperresolutiontoolkit/data/code/coverage.xml /tmp/src/mialsuperresolutiontoolkit/data/test/test-01_coverage.xml
+            mv /tmp/src/mialsuperresolutiontoolkit/data/code/coverage.xml \
+                /tmp/src/mialsuperresolutiontoolkit/data/test/test-01_coverage.xml
       # - save_cache:
       #    key: ds-sample-derivatives-{{ .Branch }}-{{ epoch }}
       #    paths:
@@ -207,9 +209,17 @@ jobs:
       - run:
           name: "Test-01 - Checking outputs of MIALSRTK BIDS App run"
           command: |
-            # Get all files in derivatives except the _*.json interface hash generated by nipype (find) / remove the full path of the derivatives (sed) / sort the files and write it to a text file
-            sudo find /tmp/src/mialsuperresolutiontoolkit/data/derivatives -path */figures -prune -o -not -name "_*.json" -type f -print | sed s+/tmp/src/mialsuperresolutiontoolkit/data/derivatives/++ | sort > /tmp/src/mialsuperresolutiontoolkit/data/test/test-01_outputs.out
-            diff /home/circleci/src/mialsuperresolutiontoolkit/.circleci/test-01_outputs.txt /tmp/src/mialsuperresolutiontoolkit/data/test/test-01_outputs.out
+            # Get all files in derivatives except the _*.json interface hash generated by nipype (find)
+            # remove the full path of the derivatives (sed) / sort the files and write it to a text file
+            sudo find /tmp/src/mialsuperresolutiontoolkit/data/derivatives \
+                -path */figures -prune -o \
+                -not -name "_*.json" \
+                -not -name "*.proc*" \
+                -type f -print | \
+                sed s+/tmp/src/mialsuperresolutiontoolkit/data/derivatives/++ | \
+                sort > /tmp/src/mialsuperresolutiontoolkit/data/test/test-01_outputs.out
+            diff /home/circleci/src/mialsuperresolutiontoolkit/.circleci/test-01_outputs.txt \
+                /tmp/src/mialsuperresolutiontoolkit/data/test/test-01_outputs.out
             exit $?
       - run:
           name: "Test-02 - Run super-resolution pipelines on sample testing dataset with automatic brain extraction"
@@ -233,27 +243,44 @@ jobs:
                 /bids_dir /output_dir participant --participant_label 01 \
                 --param_file /bids_dir/code/participants_params.json \
                 --openmp_nb_of_cores 1 \
-                --nipype_nb_of_cores 1
+                --nipype_nb_of_cores 1 \
+                --profiling
 
             # Rename log
-            mv /tmp/src/mialsuperresolutiontoolkit/data/code/log.txt /tmp/src/mialsuperresolutiontoolkit/data/test/test-02_log.txt
+            mv /tmp/src/mialsuperresolutiontoolkit/data/code/log.txt \
+                /tmp/src/mialsuperresolutiontoolkit/data/test/test-02_log.txt
 
             # Rename partial coverage
-            mv /tmp/src/mialsuperresolutiontoolkit/data/code/coverage.xml /tmp/src/mialsuperresolutiontoolkit/data/test/test-02_coverage.xml
+            mv /tmp/src/mialsuperresolutiontoolkit/data/code/coverage.xml \
+                /tmp/src/mialsuperresolutiontoolkit/data/test/test-02_coverage.xml
       - run:
           name: "Test-02 - Checking outputs of MIALSRTK BIDS App run"
           command: |
-            # Get all files in derivatives except the _*.json interface hash generated by nipype (find) / remove the full path of the derivatives (sed) / sort the files and write it to a text file
-            sudo find /tmp/src/mialsuperresolutiontoolkit/data/derivatives -path */figures -prune -o -not -name "_*.json" -type f -print | sed s+/tmp/src/mialsuperresolutiontoolkit/data/derivatives/++ | sort > /tmp/src/mialsuperresolutiontoolkit/data/test/test-02_outputs.out
-            diff /home/circleci/src/mialsuperresolutiontoolkit/.circleci/test-02_outputs.txt /tmp/src/mialsuperresolutiontoolkit/data/test/test-02_outputs.out
+            # Get all files in derivatives except the _*.json interface hash generated by nipype (find)
+            # remove the full path of the derivatives (sed) / sort the files and write it to a text file
+            sudo find /tmp/src/mialsuperresolutiontoolkit/data/derivatives \
+                -path */figures -prune -o \
+                -not -name "_*.json" \
+                -not -name "*.proc*" \
+                -type f -print | \
+                sed s+/tmp/src/mialsuperresolutiontoolkit/data/derivatives/++ | \
+                sort > /tmp/src/mialsuperresolutiontoolkit/data/test/test-02_outputs.out
+            diff /home/circleci/src/mialsuperresolutiontoolkit/.circleci/test-02_outputs.txt \
+                /tmp/src/mialsuperresolutiontoolkit/data/test/test-02_outputs.out
             exit $?
       - run:
           name: "Clean working directory"
           when: always
           command: |
             sudo chown $(id -un):$(id -gn) -R /tmp/src/mialsuperresolutiontoolkit/data
-            find /tmp/src/mialsuperresolutiontoolkit/data/derivatives -not -name "*.svg" -not -name "*.png" -not -name "*.html"  -not -name "*.nii.gz" -not -name "*.rst" \
-                -not -name "*.mat" -not -name "*.gpickle" -not -name "*.lta" -not -name "*.json" -not -name "*.txt" -not -name "*.pklz" -type f -delete
+            find /tmp/src/mialsuperresolutiontoolkit/data/derivatives \
+                -not -name "*.svg" -not -name "*.png" \
+                -not -name "*.nii.gz" -not -name "*.rst" \
+                -not -name "*.mat" -not -name "*.gpickle" \
+                -not -name "*.lta" -not -name "*.json" \
+                -not -name "*.txt" -not -name "*.pklz" \
+                -not -name "*.log" -not -name "*.html" \
+                -type f -delete
       - persist_to_workspace:
           root: /tmp
           paths:
@@ -307,7 +334,8 @@ jobs:
           no_output_timeout: 1h
           command: |
             mkdir -p /tmp/src/mialsuperresolutiontoolkit/data/test
-            cp -R /tmp/src/mialsuperresolutiontoolkit/data/derivatives /tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives
+            cp -R /tmp/src/mialsuperresolutiontoolkit/data/derivatives \
+                /tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives
       - run:
           name: "Test-03 - Run super-resolution pipeline on sample testing dataset with manual masks"
           no_output_timeout: 6h
@@ -332,9 +360,17 @@ jobs:
       - run:
           name: "Test-03 - Checking outputs of MIALSRTK BIDS App run"
           command: |
-            # Get all files in derivatives except the _*.json interface hash generated by nipype (find) / remove the full path of the derivatives (sed) / sort the files and write it to a text file
-            sudo find /tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives -path */figures -prune -o -not -name "_*.json" -type f -print | sed s+/tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives/++ | sort > /tmp/src/mialsuperresolutiontoolkit/data/test/test-03_outputs.out
-            diff /home/circleci/src/mialsuperresolutiontoolkit/.circleci/test-03_outputs.txt /tmp/src/mialsuperresolutiontoolkit/data/test/test-03_outputs.out
+            # Get all files in derivatives except the _*.json interface hash generated by nipype (find)
+            # remove the full path of the derivatives (sed) / sort the files and write it to a text file
+            sudo find /tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives \
+                -path */figures -prune -o \
+                -not -name "_*.json" \
+                -not -name "*.proc*" \
+                -type f -print | \
+                sed s+/tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives/++ | \
+                sort > /tmp/src/mialsuperresolutiontoolkit/data/test/test-03_outputs.out
+            diff /home/circleci/src/mialsuperresolutiontoolkit/.circleci/test-03_outputs.txt \
+                /tmp/src/mialsuperresolutiontoolkit/data/test/test-03_outputs.out
             exit $?
       - run:
           name: "Test-04 - Run super-resolution pipelines on sample testing dataset with automatic brain extraction"
@@ -358,21 +394,36 @@ jobs:
                 /bids_dir /output_dir participant --participant_label 01 \
                 --param_file /bids_dir/code/participants_params.json \
                 --openmp_nb_of_cores 1 \
-                --nipype_nb_of_cores 1
+                --nipype_nb_of_cores 1 \
+                --profiling
       - run:
           name: "Test-04 - Checking outputs of MIALSRTK BIDS App run"
           command: |
-            # Get all files in derivatives except the _*.json interface hash generated by nipype (find) / remove the full path of the derivatives (sed) / sort the files and write it to a text file
-            sudo find /tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives -path */figures -prune -o -not -name "_*.json" -type f -print | sed s+/tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives/++ | sort > /tmp/src/mialsuperresolutiontoolkit/data/test/test-04_outputs.out
-            diff /home/circleci/src/mialsuperresolutiontoolkit/.circleci/test-04_outputs.txt /tmp/src/mialsuperresolutiontoolkit/data/test/test-04_outputs.out
+            # Get all files in derivatives except the _*.json interface hash generated by nipype (find)
+            # remove the full path of the derivatives (sed) / sort the files and write it to a text file
+            sudo find /tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives \
+                -path */figures -prune -o \
+                -not -name "_*.json" \
+                -not -name "*.proc*" \
+                -type f -print | \
+                sed s+/tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives/++ | \
+                sort > /tmp/src/mialsuperresolutiontoolkit/data/test/test-04_outputs.out
+            diff /home/circleci/src/mialsuperresolutiontoolkit/.circleci/test-04_outputs.txt \
+                /tmp/src/mialsuperresolutiontoolkit/data/test/test-04_outputs.out
             exit $?
       - run:
           name: "Clean working directory"
           when: always
           command: |
             sudo chown $(id -un):$(id -gn) -R /tmp/src/mialsuperresolutiontoolkit/data
-            find /tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives -not -name "*.svg" -not -name "*.png" -not -name "*.html"  -not -name "*.nii.gz" -not -name "*.rst" \
-                -not -name "*.mat" -not -name "*.gpickle" -not -name "*.lta" -not -name "*.json" -not -name "*.txt" -not -name "*.pklz" -type f -delete
+            find /tmp/src/mialsuperresolutiontoolkit/data/singularity-derivatives \
+                -not -name "*.svg" -not -name "*.png" \
+                -not -name "*.nii.gz" -not -name "*.rst" \
+                -not -name "*.mat" -not -name "*.gpickle" \
+                -not -name "*.lta" -not -name "*.json" \
+                -not -name "*.txt" -not -name "*.pklz" \
+                -not -name "*.log" -not -name "*.html" \
+                -type f -delete
       - persist_to_workspace:
           root: /tmp
           paths:
diff --git a/docker/bidsapp/Dockerfile b/docker/bidsapp/Dockerfile
index 4ea8f149e..7384fb701 100644
--- a/docker/bidsapp/Dockerfile
+++ b/docker/bidsapp/Dockerfile
@@ -51,13 +51,13 @@ RUN /bin/bash -c 'ls -al && $CONDA_ACTIVATE && pip install .'
 WORKDIR /app
 
 ##############################################################
-# Use tcmalloc instead of malloc in TensorFLow
+# Use jemalloc instead of malloc in TensorFLow
 # that suffers less from fragmentation when
 # allocating and deallocating large objects
 ##############################################################
-RUN apt-get update && apt-get install -y google-perftools && \
+RUN apt-get update && apt-get install -y libjemalloc-dev && \
     rm -rf /var/lib/apt/lists/*
-ENV LD_PRELOAD=/usr/lib/libtcmalloc.so.4
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so
 
 ##############################################################
 # Create entrypoint scripts
diff --git a/docker/bidsapp/environment.yml b/docker/bidsapp/environment.yml
index 1f093554e..38ba9f5fa 100644
--- a/docker/bidsapp/environment.yml
+++ b/docker/bidsapp/environment.yml
@@ -6,13 +6,12 @@ channels:
 - anaconda
 
 dependencies:
-- python=3.6.8
-- pip=19.0.3
+- python=3.7.10
+- pip=21.0.1
 - nibabel=3.0.1
-- nipype=1.5.1
+- pandas=1.2.3
+- nipype=1.6.0
 - traits=5.1.2
-- traitsui=6.0.0
-- pyface=7.0.0
 - pydotplus=2.0.2
 - pandoc=2.11.0.1
 
@@ -20,13 +19,13 @@ dependencies:
     - coverage==5.1
     - duecredit==0.8.0
     - apptools==4.4.0
-    # - niworkflows==0.10.2
     - graphviz
-    - numpy==1.16.4 # numpy 1.18.5 caused error (fix: https://github.com/DeepLabCut/Docker4DeepLabCut2.0/issues/26)
-    - tensorflow==1.13.1 # https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp36-cp36m-linux_x86_64.whl # tensorflow==1.15 # tflearn needs tensorflow 1.0+
-    - tensorflow-estimator==1.13.0
-    - tensorboard==1.13.1
-    - tflearn==0.3.2
+    - numpy==1.16.6
+    # - niworkflows==0.10.2
+    - tensorflow==2.3.0
+    - tensorflow-estimator==2.3.0
+    - tensorboard==2.3.0
+    - tflearn==0.5.0
     - MedPy==0.4.0
     - opencv-python==4.1.0.25
     - scikit-learn==0.20.3
diff --git a/docker/bidsapp/run.py b/docker/bidsapp/run.py
index 9f89dc3e0..681d24e6d 100644
--- a/docker/bidsapp/run.py
+++ b/docker/bidsapp/run.py
@@ -31,17 +31,17 @@ def return_default_nb_of_cores(nb_of_cores, openmp_proportion=2):
 
     Parameters
     ----------
-    nb_of_cores <int>
+    nb_of_cores : int
         Number of cores available on the computer
-    openmp_proportion <int>
+    openmp_proportion : int
         Proportion of cores dedicated to OpenMP threads
 
     Returns
     -------
-    openmp_nb_of_cores <int>
+    openmp_nb_of_cores : int
         Number of cores used by default by openmp
 
-    nipype_nb_of_cores <int>
+    nipype_nb_of_cores : int
         Number of cores used by default by openmp
     """
     openmp_nb_of_cores = nb_of_cores // openmp_proportion
@@ -63,18 +63,18 @@ def check_and_return_valid_nb_of_cores(openmp_nb_of_cores, nipype_nb_of_cores, o
 
     Parameters
     ----------
-    openmp_nb_of_cores <int>
+    openmp_nb_of_cores : int
         Number of cores used by openmp that was initially set
 
-    nipype_nb_of_cores <int>
+    nipype_nb_of_cores : int
         Number of cores used by Niype that was initially set
 
     Returns
     -------
-    openmp_nb_of_cores <int>
+    openmp_nb_of_cores : int
         Valid number of cores used by openmp
 
-    nipype_nb_of_cores <int>
+    nipype_nb_of_cores : int
         Valid number of cores used by Niype
     """
     nb_of_cores = multiprocessing.cpu_count()
@@ -140,8 +140,17 @@ def check_and_return_valid_nb_of_cores(openmp_nb_of_cores, nipype_nb_of_cores, o
     return openmp_nb_of_cores, nipype_nb_of_cores
 
 
-def main(bids_dir, output_dir, subject, p_stacks, session, paramTV=None, number_of_cores=1, srID=None,
-         masks_derivatives_dir='', dict_custom_interfaces=None): #skip_svr=False, do_refine_hr_mask=False, skip_nlm_denoising=False, skip_stacks_ordering=False):
+def main(bids_dir, output_dir,
+         subject,
+         session,
+         p_stacks,
+         paramTV=None,
+         srID=None,
+         masks_derivatives_dir='',
+         dict_custom_interfaces=None,
+         number_of_cores=1,
+         memory=0,
+         save_profiler_log=False):
     """Main function that creates and executes the workflow of the BIDS App on one subject.
 
     It creates an instance of the class :class:`pymialsrtk.pipelines.anatomical.srr.AnatomicalPipeline`,
@@ -149,45 +158,43 @@ def main(bids_dir, output_dir, subject, p_stacks, session, paramTV=None, number_
 
     Parameters
     ----------
-    bids_dir <string>
+    bids_dir : string
         BIDS root directory (required)
 
-    output_dir <string>
+    output_dir : string
         Output derivatives directory (required)
 
-    subject <string>
+    subject : string
         Subject ID (in the form ``sub-XX``)
 
-    p_stacks list<<int>>
-        List of stack to be used in the reconstruction. The specified order is kept if `skip_stacks_ordering` is True.
-
-    session <string>
+    session : string
         Session ID if applicable (in the form ``ses-YY``)
 
-    paramTV dict <'deltatTV': float, 'lambdaTV': float, 'primal_dual_loops': int>>
-        Dictionary of Total-Variation super-resolution optimizer parameters
+    p_stacks : list(int)
+        List of stack to be used in the reconstruction. The specified order is kept if `skip_stacks_ordering` is True.
 
-    number_of_cores <int>
-        Number of cores / CPUs used by the Nipype worflow execution engine
+    paramTV dict : {'deltatTV': float, 'lambdaTV': float, 'primal_dual_loops': int}
+        Dictionary of Total-Variation super-resolution optimizer parameters
 
-    srID <string>
+    srID : string
         ID of the reconstruction useful to distinguish when multiple reconstructions
         with different order of stacks are run on the same subject
 
-    masks_derivatives_dir <string>
+    masks_derivatives_dir : string
         directory basename in BIDS directory derivatives where to search for masks (optional)
 
-    skip_svr <bool> (optional)
-        Weither the Slice-to-Volume Registration should be skipped in the image reconstruction. (default is False)
+    dict_custom_interfaces : {'do_refine_hr_mask': False, 'skip_nlm_denoising': False, 'skip_stacks_ordering': False}
+        Dictionary that customize the workflow (skip interfaces).
 
-    do_refine_hr_mask <bool> (optional)
-        Weither a refinement of the HR mask should be performed. (default is False)
+    number_of_cores : int
+        Number of cores / CPUs used by the Nipype worflow execution engine
 
-    skip_nlm_denoising <bool> (optional)
-        Weither the NLM denoising preprocessing should be skipped. (default is False)
+    memory : int
+        Maximal amount of memory used by the workflow
+        (Default: 0, workflow uses all available memory)
 
-    skip_stacks_ordering <bool> (optional)
-        Weither the automatic stacks ordering should be skipped. (default is False)
+    save_profiler_log : bool (optional)
+        Save the node profiler (runtime stats) log. (default is False)
 
     """
 
@@ -200,6 +207,7 @@ def main(bids_dir, output_dir, subject, p_stacks, session, paramTV=None, number_
 
     if srID is None:
         srID = "01"
+
     # Initialize an instance of AnatomicalPipeline
     pipeline = AnatomicalPipeline(bids_dir,
                                   output_dir,
@@ -210,19 +218,20 @@ def main(bids_dir, output_dir, subject, p_stacks, session, paramTV=None, number_
                                   paramTV,
                                   masks_derivatives_dir,
                                   p_dict_custom_interfaces=dict_custom_interfaces)
+
     # Create the super resolution Nipype workflow
-    pipeline.create_workflow()
+    pipeline.create_workflow(save_profiler_log=save_profiler_log)
 
     # Execute the workflow
-    res = pipeline.run(number_of_cores=number_of_cores)
+    res = pipeline.run(number_of_cores=number_of_cores,
+                       memory=memory,
+                       save_profiler_log=save_profiler_log)
 
     return res
 
 
 if __name__ == '__main__':
 
-    bids_dir = os.path.join('/fetaldata')
-
     parser = get_parser()
     args = parser.parse_args()
 
@@ -266,13 +275,15 @@ def main(bids_dir, output_dir, subject, p_stacks, session, paramTV=None, number_
                     res = main(bids_dir=args.bids_dir,
                                output_dir=args.output_dir,
                                subject=sub,
-                               p_stacks=stacks,
                                session=ses,
+                               p_stacks=stacks,
                                paramTV=paramTV,
                                srID=sr_params['sr-id'],
                                masks_derivatives_dir=args.masks_derivatives_dir,
+                               dict_custom_interfaces = dict_custom_interfaces,
                                number_of_cores=nipype_nb_of_cores,
-                               dict_custom_interfaces = dict_custom_interfaces)
+                               memory=args.memory,
+                               save_profiler_log=args.profiling)
 
     else:
         print('ERROR: Processing of all dataset not implemented yet\n At least one participant label should be provided')
diff --git a/documentation/_static/run_stats.log.html b/documentation/_static/run_stats.log.html
new file mode 100644
index 000000000..796e2a3ec
--- /dev/null
+++ b/documentation/_static/run_stats.log.html
@@ -0,0 +1,1253 @@
+<!DOCTYPE html>
+    <head>
+        <style>
+            #content{
+                width:99%;
+                height:100%;
+                position:absolute;
+            }
+            .node{
+                background-color:#7070FF;
+                border-radius: 5px;
+                position:absolute;
+                width:20px;
+                white-space:pre-wrap;
+            }
+            .line{
+                position: absolute;
+                color: #C2C2C2;
+                opacity: 0.5;
+                margin: 0px;
+            }
+            .time{
+                position: absolute;
+                font-size: 16px;
+                color: #666666;
+                margin: 0px;
+            }
+            .bar{
+                position: absolute;
+                height: 1px;
+                opacity: 0.7;
+            }
+            .dot{
+                position: absolute;
+                width: 1px;
+                height: 1px;
+                background-color: red;
+            }
+            .label {
+                width:20px;
+                height:20px;
+                opacity: 0.7;
+                display: inline-block;
+            }
+        </style>
+    </head>
+    <body>
+        <div id="content">
+            <div style="display:inline-block;">
+    <p>Start: 2021-03-23 21:45:18</p><p>Finish: 2021-03-23 22:00:58</p><p>Duration: 15.66 minutes</p><p>Nodes: 45</p><p>Cores: 1</p>
+    </div>
+    <div style="display:inline-block;margin-left:60px;vertical-align: top;">
+        <p><span><div class="label" style="background-color:#90BBD7;"></div> Estimated Resource</span></p>
+        <p><span><div class="label" style="background-color:#03969D;"></div> Actual Resource</span></p>
+        <p><span><div class="label" style="background-color:#f00;"></div> Failed Node</span></p>
+    </div>
+    <hr class='line' width='98%' style='top:220px;'><p class='time' style='top:200px;'> 21:45 </p><hr class='line' width='98%' style='top:720px;'><p class='time' style='top:700px;'> 21:55 </p><hr class='line' width='98%' style='top:1220px;'><p class='time' style='top:1200px;'> 22:05 </p><div class='node' style='left:60px;top:220.0px;height:3px;background-color:#7070FF;'title='data_grabber
+duration:0.0034372166666666666
+start:2021-03-23 21:45:18
+end:2021-03-23 21:45:19'></div><div class='node' style='left:60px;top:221.70743166666668px;height:3px;background-color:#9B9BFF;'title='t2ws_filter_prior_masks
+duration:0.0033797666666666665
+start:2021-03-23 21:45:20
+end:2021-03-23 21:45:21'></div><div class='node' style='left:60px;top:224.9904925px;height:3.3564716666666667px;background-color:#4E4EB2;'title='_brainExtraction0
+duration:0.10712943333333333
+start:2021-03-23 21:45:24
+end:2021-03-23 21:45:31'></div><div class='node' style='left:60px;top:231.66871666666665px;height:3.100386666666666px;background-color:#4E4EB2;'title='_brainExtraction1
+duration:0.10200773333333334
+start:2021-03-23 21:45:32
+end:2021-03-23 21:45:39'></div><div class='node' style='left:60px;top:238.3402725px;height:3.151486666666667px;background-color:#9B9BFF;'title='_brainExtraction2
+duration:0.10302973333333335
+start:2021-03-23 21:45:40
+end:2021-03-23 21:45:47'></div><div class='node' style='left:60px;top:246.68153166666667px;height:3px;background-color:#7070FF;'title='stackOrdering
+duration:0.009143033333333333
+start:2021-03-23 21:45:50
+end:2021-03-23 21:45:51'></div><div class='node' style='left:60px;top:248.35257833333333px;height:3px;background-color:#2D2D66;'title='filenames_gen
+duration:0.003378
+start:2021-03-23 21:45:52
+end:2021-03-23 21:45:53'></div><div class='node' style='left:60px;top:250.02389583333334px;height:3px;background-color:#4E4EB2;'title='masks_filtered
+duration:0.0033728499999999997
+start:2021-03-23 21:45:54
+end:2021-03-23 21:45:55'></div><div class='node' style='left:60px;top:251.6922575px;height:3px;background-color:#7070FF;'title='t2ws_filtered
+duration:0.0033749166666666667
+start:2021-03-23 21:45:56
+end:2021-03-23 21:45:57'></div><div class='node' style='left:60px;top:255.02110583333334px;height:3px;background-color:#7070FF;'title='_srtkCorrectSliceIntensity010
+duration:0.009364866666666666
+start:2021-03-23 21:46:00
+end:2021-03-23 21:46:01'></div><div class='node' style='left:60px;top:256.6997733333333px;height:3px;background-color:#7070FF;'title='_srtkCorrectSliceIntensity011
+duration:0.009384916666666666
+start:2021-03-23 21:46:02
+end:2021-03-23 21:46:03'></div><div class='node' style='left:60px;top:258.3672925px;height:3px;background-color:#9B9BFF;'title='_srtkCorrectSliceIntensity012
+duration:0.009956033333333333
+start:2021-03-23 21:46:04
+end:2021-03-23 21:46:05'></div><div class='node' style='left:60px;top:261.69869166666666px;height:3px;background-color:#9B9BFF;'title='_nlmDenoise0
+duration:0.05480828333333333
+start:2021-03-23 21:46:08
+end:2021-03-23 21:46:12'></div><div class='node' style='left:60px;top:265.0419591666667px;height:3px;background-color:#4E4EB2;'title='_nlmDenoise1
+duration:0.049114783333333335
+start:2021-03-23 21:46:12
+end:2021-03-23 21:46:15'></div><div class='node' style='left:60px;top:268.37549916666666px;height:3px;background-color:#4E4EB2;'title='_nlmDenoise2
+duration:0.057814366666666665
+start:2021-03-23 21:46:16
+end:2021-03-23 21:46:20'></div><div class='node' style='left:60px;top:275.04323416666665px;height:3px;background-color:#7070FF;'title='_srtkCorrectSliceIntensity01_nlm0
+duration:0.009348733333333333
+start:2021-03-23 21:46:24
+end:2021-03-23 21:46:25'></div><div class='node' style='left:60px;top:276.71719083333335px;height:3px;background-color:#7070FF;'title='_srtkCorrectSliceIntensity01_nlm1
+duration:0.0094369
+start:2021-03-23 21:46:26
+end:2021-03-23 21:46:27'></div><div class='node' style='left:60px;top:278.38663583333334px;height:3px;background-color:#4E4EB2;'title='_srtkCorrectSliceIntensity01_nlm2
+duration:0.00937845
+start:2021-03-23 21:46:28
+end:2021-03-23 21:46:29'></div><div class='node' style='left:60px;top:283.38576916666665px;height:3px;background-color:#7070FF;'title='_srtkSliceBySliceN4BiasFieldCorrection0
+duration:0.04807218333333333
+start:2021-03-23 21:46:34
+end:2021-03-23 21:46:37'></div><div class='node' style='left:60px;top:286.72736px;height:3px;background-color:#4E4EB2;'title='_srtkSliceBySliceN4BiasFieldCorrection1
+duration:0.04658175
+start:2021-03-23 21:46:38
+end:2021-03-23 21:46:41'></div><div class='node' style='left:60px;top:290.06477083333334px;height:3px;background-color:#2D2D66;'title='_srtkSliceBySliceN4BiasFieldCorrection2
+duration:0.048972383333333334
+start:2021-03-23 21:46:42
+end:2021-03-23 21:46:45'></div><div class='node' style='left:60px;top:296.7328358333333px;height:3px;background-color:#9B9BFF;'title='_srtkCorrectSliceIntensity02_nlm0
+duration:0.009414116666666666
+start:2021-03-23 21:46:50
+end:2021-03-23 21:46:51'></div><div class='node' style='left:60px;top:298.40654416666666px;height:3px;background-color:#4E4EB2;'title='_srtkCorrectSliceIntensity02_nlm1
+duration:0.009218166666666666
+start:2021-03-23 21:46:52
+end:2021-03-23 21:46:53'></div><div class='node' style='left:60px;top:300.0747958333333px;height:3px;background-color:#4E4EB2;'title='_srtkCorrectSliceIntensity02_nlm2
+duration:0.009360966666666666
+start:2021-03-23 21:46:54
+end:2021-03-23 21:46:55'></div><div class='node' style='left:60px;top:303.4110075px;height:3px;background-color:#4E4EB2;'title='srtkIntensityStandardization01_nlm
+duration:0.011908683333333333
+start:2021-03-23 21:46:58
+end:2021-03-23 21:46:59'></div><div class='node' style='left:60px;top:305.0870275px;height:3px;background-color:#4E4EB2;'title='srtkHistogramNormalization_nlm
+duration:0.03338223333333334
+start:2021-03-23 21:47:00
+end:2021-03-23 21:47:02'></div><div class='node' style='left:60px;top:308.42059083333334px;height:3px;background-color:#2D2D66;'title='srtkIntensityStandardization02_nlm
+duration:0.010578416666666667
+start:2021-03-23 21:47:04
+end:2021-03-23 21:47:05'></div><div class='node' style='left:60px;top:310.09629583333333px;height:3px;background-color:#9B9BFF;'title='_srtkSliceBySliceCorrectBiasField0
+duration:0.009391816666666667
+start:2021-03-23 21:47:06
+end:2021-03-23 21:47:07'></div><div class='node' style='left:60px;top:311.7563108333333px;height:3px;background-color:#7070FF;'title='_srtkSliceBySliceCorrectBiasField1
+duration:0.009245233333333333
+start:2021-03-23 21:47:08
+end:2021-03-23 21:47:09'></div><div class='node' style='left:60px;top:313.4237175px;height:3px;background-color:#7070FF;'title='_srtkSliceBySliceCorrectBiasField2
+duration:0.009225866666666667
+start:2021-03-23 21:47:10
+end:2021-03-23 21:47:11'></div><div class='node' style='left:60px;top:316.76351px;height:3px;background-color:#4E4EB2;'title='_srtkMaskImage010
+duration:0.008166516666666667
+start:2021-03-23 21:47:14
+end:2021-03-23 21:47:15'></div><div class='node' style='left:60px;top:318.42675916666667px;height:3px;background-color:#9B9BFF;'title='_srtkMaskImage011
+duration:0.008194483333333334
+start:2021-03-23 21:47:16
+end:2021-03-23 21:47:17'></div><div class='node' style='left:60px;top:320.0985191666667px;height:3px;background-color:#9B9BFF;'title='_srtkMaskImage012
+duration:0.008187999999999999
+start:2021-03-23 21:47:18
+end:2021-03-23 21:47:19'></div><div class='node' style='left:60px;top:323.43388416666664px;height:583.971815px;background-color:#7070FF;'title='srtkImageReconstruction
+duration:11.7194363
+start:2021-03-23 21:47:22
+end:2021-03-23 21:59:06'></div><div class='node' style='left:60px;top:910.6860983333332px;height:3px;background-color:#2D2D66;'title='_srtkCorrectSliceIntensity020
+duration:0.009540433333333332
+start:2021-03-23 21:59:07
+end:2021-03-23 21:59:08'></div><div class='node' style='left:60px;top:912.341265px;height:3px;background-color:#9B9BFF;'title='_srtkCorrectSliceIntensity021
+duration:0.009386383333333333
+start:2021-03-23 21:59:09
+end:2021-03-23 21:59:10'></div><div class='node' style='left:60px;top:914.0104674999999px;height:3px;background-color:#7070FF;'title='_srtkCorrectSliceIntensity022
+duration:0.009122966666666668
+start:2021-03-23 21:59:11
+end:2021-03-23 21:59:12'></div><div class='node' style='left:60px;top:917.3449291666667px;height:3px;background-color:#9B9BFF;'title='srtkIntensityStandardization01
+duration:0.0122605
+start:2021-03-23 21:59:15
+end:2021-03-23 21:59:16'></div><div class='node' style='left:60px;top:919.0189991666666px;height:3px;background-color:#9B9BFF;'title='srtkHistogramNormalization
+duration:0.03402353333333333
+start:2021-03-23 21:59:17
+end:2021-03-23 21:59:19'></div><div class='node' style='left:60px;top:922.3517441666667px;height:3px;background-color:#9B9BFF;'title='srtkIntensityStandardization02
+duration:0.011746066666666666
+start:2021-03-23 21:59:21
+end:2021-03-23 21:59:22'></div><div class='node' style='left:60px;top:924.0249116666666px;height:64.50212666666667px;background-color:#9B9BFF;'title='srtkTVSuperResolution
+duration:1.3300425333333334
+start:2021-03-23 21:59:23
+end:2021-03-23 22:00:43'></div><div class='node' style='left:60px;top:990.7610283333333px;height:3px;background-color:#2D2D66;'title='srtkHRMask
+duration:0.008579183333333332
+start:2021-03-23 22:00:43
+end:2021-03-23 22:00:44'></div><div class='node' style='left:60px;top:992.4239725000001px;height:5.117901666666667px;background-color:#2D2D66;'title='srtkN4BiasFieldCorrection
+duration:0.14235803333333333
+start:2021-03-23 22:00:45
+end:2021-03-23 22:00:54'></div><div class='node' style='left:60px;top:1000.7765875px;height:3px;background-color:#4E4EB2;'title='data_sinker
+duration:0.003631216666666667
+start:2021-03-23 22:00:55
+end:2021-03-23 22:00:56'></div><div class='node' style='left:60px;top:1002.4311566666667px;height:3px;background-color:#9B9BFF;'title='srtkMaskImage02
+duration:0.01586575
+start:2021-03-23 22:00:57
+end:2021-03-23 22:00:58'></div><p class='time' style='top:198px;left:470px;'>Memory</p><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:220.000px;'title='0.200 GB
+duration:0.003
+start:2021-03-23 21:45:18
+end:2021-03-23 21:45:19'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:220.172px;'title='0.000 GB
+duration:0.031
+start:2021-03-23 21:45:19
+end:2021-03-23 21:45:20'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:221.707px;'title='0.200 GB
+duration:0.003
+start:2021-03-23 21:45:20
+end:2021-03-23 21:45:21'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:221.876px;'title='0.000 GB
+duration:0.062
+start:2021-03-23 21:45:21
+end:2021-03-23 21:45:24'></div><div class='bar' style='background-color:#90BBD7;height:3.356px;width:200.000px;left:470px; top:224.990px;'title='0.200 GB
+duration:0.107
+start:2021-03-23 21:45:24
+end:2021-03-23 21:45:31'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:230.347px;'title='0.000 GB
+duration:0.026
+start:2021-03-23 21:45:31
+end:2021-03-23 21:45:32'></div><div class='bar' style='background-color:#90BBD7;height:3.100px;width:200.000px;left:470px; top:231.669px;'title='0.200 GB
+duration:0.102
+start:2021-03-23 21:45:32
+end:2021-03-23 21:45:39'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:236.769px;'title='0.000 GB
+duration:0.031
+start:2021-03-23 21:45:39
+end:2021-03-23 21:45:40'></div><div class='bar' style='background-color:#90BBD7;height:3.151px;width:200.000px;left:470px; top:238.340px;'title='0.200 GB
+duration:0.103
+start:2021-03-23 21:45:40
+end:2021-03-23 21:45:47'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:243.492px;'title='0.000 GB
+duration:0.064
+start:2021-03-23 21:45:47
+end:2021-03-23 21:45:50'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:246.682px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:45:50
+end:2021-03-23 21:45:51'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:247.139px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:45:51
+end:2021-03-23 21:45:52'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:248.353px;'title='0.200 GB
+duration:0.003
+start:2021-03-23 21:45:52
+end:2021-03-23 21:45:53'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:248.521px;'title='0.000 GB
+duration:0.030
+start:2021-03-23 21:45:53
+end:2021-03-23 21:45:54'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:250.024px;'title='0.200 GB
+duration:0.003
+start:2021-03-23 21:45:54
+end:2021-03-23 21:45:55'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:250.193px;'title='0.000 GB
+duration:0.030
+start:2021-03-23 21:45:55
+end:2021-03-23 21:45:56'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:251.692px;'title='0.200 GB
+duration:0.003
+start:2021-03-23 21:45:56
+end:2021-03-23 21:45:57'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:251.861px;'title='0.000 GB
+duration:0.063
+start:2021-03-23 21:45:57
+end:2021-03-23 21:46:00'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:255.021px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:46:00
+end:2021-03-23 21:46:01'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:255.489px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:01
+end:2021-03-23 21:46:02'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:256.700px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:46:02
+end:2021-03-23 21:46:03'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:257.169px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:03
+end:2021-03-23 21:46:04'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:258.367px;'title='0.200 GB
+duration:0.010
+start:2021-03-23 21:46:04
+end:2021-03-23 21:46:05'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:258.865px;'title='0.000 GB
+duration:0.057
+start:2021-03-23 21:46:05
+end:2021-03-23 21:46:08'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:261.699px;'title='0.200 GB
+duration:0.055
+start:2021-03-23 21:46:08
+end:2021-03-23 21:46:12'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:264.439px;'title='0.000 GB
+duration:0.012
+start:2021-03-23 21:46:12
+end:2021-03-23 21:46:12'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:265.042px;'title='0.200 GB
+duration:0.049
+start:2021-03-23 21:46:12
+end:2021-03-23 21:46:15'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:267.498px;'title='0.000 GB
+duration:0.018
+start:2021-03-23 21:46:15
+end:2021-03-23 21:46:16'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:268.375px;'title='0.200 GB
+duration:0.058
+start:2021-03-23 21:46:16
+end:2021-03-23 21:46:20'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:271.266px;'title='0.000 GB
+duration:0.076
+start:2021-03-23 21:46:20
+end:2021-03-23 21:46:24'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:275.043px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:46:24
+end:2021-03-23 21:46:25'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:275.511px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:25
+end:2021-03-23 21:46:26'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:276.717px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:46:26
+end:2021-03-23 21:46:27'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:277.189px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:27
+end:2021-03-23 21:46:28'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:278.387px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:46:28
+end:2021-03-23 21:46:29'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:278.856px;'title='0.000 GB
+duration:0.091
+start:2021-03-23 21:46:29
+end:2021-03-23 21:46:34'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:283.386px;'title='0.200 GB
+duration:0.048
+start:2021-03-23 21:46:34
+end:2021-03-23 21:46:37'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:285.789px;'title='0.000 GB
+duration:0.019
+start:2021-03-23 21:46:37
+end:2021-03-23 21:46:38'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:286.727px;'title='0.200 GB
+duration:0.047
+start:2021-03-23 21:46:38
+end:2021-03-23 21:46:41'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:289.056px;'title='0.000 GB
+duration:0.020
+start:2021-03-23 21:46:41
+end:2021-03-23 21:46:42'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:290.065px;'title='0.200 GB
+duration:0.049
+start:2021-03-23 21:46:42
+end:2021-03-23 21:46:45'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:292.513px;'title='0.000 GB
+duration:0.084
+start:2021-03-23 21:46:45
+end:2021-03-23 21:46:50'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:296.733px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:46:50
+end:2021-03-23 21:46:51'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:297.204px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:51
+end:2021-03-23 21:46:52'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:298.407px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:46:52
+end:2021-03-23 21:46:53'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:298.867px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:53
+end:2021-03-23 21:46:54'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:300.075px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:46:54
+end:2021-03-23 21:46:55'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:300.543px;'title='0.000 GB
+duration:0.057
+start:2021-03-23 21:46:55
+end:2021-03-23 21:46:58'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:303.411px;'title='0.200 GB
+duration:0.012
+start:2021-03-23 21:46:58
+end:2021-03-23 21:46:59'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:304.006px;'title='0.000 GB
+duration:0.022
+start:2021-03-23 21:46:59
+end:2021-03-23 21:47:00'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:305.087px;'title='0.200 GB
+duration:0.033
+start:2021-03-23 21:47:00
+end:2021-03-23 21:47:02'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:306.756px;'title='0.000 GB
+duration:0.033
+start:2021-03-23 21:47:02
+end:2021-03-23 21:47:04'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:308.421px;'title='0.200 GB
+duration:0.011
+start:2021-03-23 21:47:04
+end:2021-03-23 21:47:05'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:308.950px;'title='0.000 GB
+duration:0.023
+start:2021-03-23 21:47:05
+end:2021-03-23 21:47:06'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:310.096px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:47:06
+end:2021-03-23 21:47:07'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:310.566px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:47:07
+end:2021-03-23 21:47:08'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:311.756px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:47:08
+end:2021-03-23 21:47:09'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:312.219px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:47:09
+end:2021-03-23 21:47:10'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:313.424px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:47:10
+end:2021-03-23 21:47:11'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:313.885px;'title='0.000 GB
+duration:0.058
+start:2021-03-23 21:47:11
+end:2021-03-23 21:47:14'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:316.764px;'title='0.200 GB
+duration:0.008
+start:2021-03-23 21:47:14
+end:2021-03-23 21:47:15'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:317.172px;'title='0.000 GB
+duration:0.025
+start:2021-03-23 21:47:15
+end:2021-03-23 21:47:16'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:318.427px;'title='0.200 GB
+duration:0.008
+start:2021-03-23 21:47:16
+end:2021-03-23 21:47:17'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:318.836px;'title='0.000 GB
+duration:0.025
+start:2021-03-23 21:47:17
+end:2021-03-23 21:47:18'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:320.099px;'title='0.200 GB
+duration:0.008
+start:2021-03-23 21:47:18
+end:2021-03-23 21:47:19'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:320.508px;'title='0.000 GB
+duration:0.059
+start:2021-03-23 21:47:19
+end:2021-03-23 21:47:22'></div><div class='bar' style='background-color:#90BBD7;height:583.972px;width:200.000px;left:470px; top:323.434px;'title='0.200 GB
+duration:11.719
+start:2021-03-23 21:47:22
+end:2021-03-23 21:59:06'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:909.406px;'title='0.000 GB
+duration:0.026
+start:2021-03-23 21:59:06
+end:2021-03-23 21:59:07'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:910.686px;'title='0.200 GB
+duration:0.010
+start:2021-03-23 21:59:07
+end:2021-03-23 21:59:08'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:911.163px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:59:08
+end:2021-03-23 21:59:09'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:912.341px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:59:09
+end:2021-03-23 21:59:10'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:912.811px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:59:10
+end:2021-03-23 21:59:11'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:914.010px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 21:59:11
+end:2021-03-23 21:59:12'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:914.467px;'title='0.000 GB
+duration:0.058
+start:2021-03-23 21:59:12
+end:2021-03-23 21:59:15'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:917.345px;'title='0.200 GB
+duration:0.012
+start:2021-03-23 21:59:15
+end:2021-03-23 21:59:16'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:917.958px;'title='0.000 GB
+duration:0.021
+start:2021-03-23 21:59:16
+end:2021-03-23 21:59:17'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:919.019px;'title='0.200 GB
+duration:0.034
+start:2021-03-23 21:59:17
+end:2021-03-23 21:59:19'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:920.720px;'title='0.000 GB
+duration:0.033
+start:2021-03-23 21:59:19
+end:2021-03-23 21:59:21'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:922.352px;'title='0.200 GB
+duration:0.012
+start:2021-03-23 21:59:21
+end:2021-03-23 21:59:22'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:922.939px;'title='0.000 GB
+duration:0.022
+start:2021-03-23 21:59:22
+end:2021-03-23 21:59:23'></div><div class='bar' style='background-color:#90BBD7;height:64.502px;width:200.000px;left:470px; top:924.025px;'title='0.200 GB
+duration:1.330
+start:2021-03-23 21:59:23
+end:2021-03-23 22:00:43'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:990.527px;'title='0.000 GB
+duration:0.005
+start:2021-03-23 22:00:43
+end:2021-03-23 22:00:43'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:990.761px;'title='0.200 GB
+duration:0.009
+start:2021-03-23 22:00:43
+end:2021-03-23 22:00:44'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:991.190px;'title='0.000 GB
+duration:0.025
+start:2021-03-23 22:00:44
+end:2021-03-23 22:00:45'></div><div class='bar' style='background-color:#90BBD7;height:5.118px;width:200.000px;left:470px; top:992.424px;'title='0.200 GB
+duration:0.142
+start:2021-03-23 22:00:45
+end:2021-03-23 22:00:54'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:999.542px;'title='0.000 GB
+duration:0.025
+start:2021-03-23 22:00:54
+end:2021-03-23 22:00:55'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:1000.777px;'title='0.200 GB
+duration:0.004
+start:2021-03-23 22:00:55
+end:2021-03-23 22:00:56'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:1000.958px;'title='0.000 GB
+duration:0.029
+start:2021-03-23 22:00:56
+end:2021-03-23 22:00:57'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:470px; top:1002.431px;'title='0.200 GB
+duration:0.016
+start:2021-03-23 22:00:57
+end:2021-03-23 22:00:58'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:470px; top:1003.224px;'title='0.000 GB
+duration:0.000
+start:2021-03-23 22:00:58
+end:2021-03-23 22:00:58'></div><p class='time' style='top:198px;left:470px;'>Memory</p><div class='bar' style='background-color:#03969D;height:3.000px;width:23.775px;left:470px; top:220.000px;'title='0.211 GB
+duration:0.003
+start:2021-03-23 21:45:18
+end:2021-03-23 21:45:19'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:220.172px;'title='0.000 GB
+duration:0.031
+start:2021-03-23 21:45:19
+end:2021-03-23 21:45:20'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:23.973px;left:470px; top:221.707px;'title='0.213 GB
+duration:0.003
+start:2021-03-23 21:45:20
+end:2021-03-23 21:45:21'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:221.876px;'title='0.000 GB
+duration:0.062
+start:2021-03-23 21:45:21
+end:2021-03-23 21:45:24'></div><div class='bar' style='background-color:#03969D;height:3.356px;width:58.305px;left:470px; top:224.990px;'title='0.517 GB
+duration:0.107
+start:2021-03-23 21:45:24
+end:2021-03-23 21:45:31'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:230.347px;'title='0.000 GB
+duration:0.026
+start:2021-03-23 21:45:31
+end:2021-03-23 21:45:32'></div><div class='bar' style='background-color:#03969D;height:3.100px;width:59.078px;left:470px; top:231.669px;'title='0.524 GB
+duration:0.102
+start:2021-03-23 21:45:32
+end:2021-03-23 21:45:39'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:236.769px;'title='0.000 GB
+duration:0.031
+start:2021-03-23 21:45:39
+end:2021-03-23 21:45:40'></div><div class='bar' style='background-color:#03969D;height:3.151px;width:60.283px;left:470px; top:238.340px;'title='0.535 GB
+duration:0.103
+start:2021-03-23 21:45:40
+end:2021-03-23 21:45:47'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:243.492px;'title='0.000 GB
+duration:0.064
+start:2021-03-23 21:45:47
+end:2021-03-23 21:45:50'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.317px;left:470px; top:246.682px;'title='0.535 GB
+duration:0.009
+start:2021-03-23 21:45:50
+end:2021-03-23 21:45:51'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:247.139px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:45:51
+end:2021-03-23 21:45:52'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.317px;left:470px; top:248.353px;'title='0.535 GB
+duration:0.003
+start:2021-03-23 21:45:52
+end:2021-03-23 21:45:53'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:248.521px;'title='0.000 GB
+duration:0.030
+start:2021-03-23 21:45:53
+end:2021-03-23 21:45:54'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.317px;left:470px; top:250.024px;'title='0.535 GB
+duration:0.003
+start:2021-03-23 21:45:54
+end:2021-03-23 21:45:55'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:250.193px;'title='0.000 GB
+duration:0.030
+start:2021-03-23 21:45:55
+end:2021-03-23 21:45:56'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.317px;left:470px; top:251.692px;'title='0.535 GB
+duration:0.003
+start:2021-03-23 21:45:56
+end:2021-03-23 21:45:57'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:251.861px;'title='0.000 GB
+duration:0.063
+start:2021-03-23 21:45:57
+end:2021-03-23 21:46:00'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.352px;left:470px; top:255.021px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:46:00
+end:2021-03-23 21:46:01'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:255.489px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:01
+end:2021-03-23 21:46:02'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.351px;left:470px; top:256.700px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:46:02
+end:2021-03-23 21:46:03'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:257.169px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:03
+end:2021-03-23 21:46:04'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.351px;left:470px; top:258.367px;'title='0.536 GB
+duration:0.010
+start:2021-03-23 21:46:04
+end:2021-03-23 21:46:05'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:258.865px;'title='0.000 GB
+duration:0.057
+start:2021-03-23 21:46:05
+end:2021-03-23 21:46:08'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:71.796px;left:470px; top:261.699px;'title='0.637 GB
+duration:0.055
+start:2021-03-23 21:46:08
+end:2021-03-23 21:46:12'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:264.439px;'title='0.000 GB
+duration:0.012
+start:2021-03-23 21:46:12
+end:2021-03-23 21:46:12'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:71.729px;left:470px; top:265.042px;'title='0.637 GB
+duration:0.049
+start:2021-03-23 21:46:12
+end:2021-03-23 21:46:15'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:267.498px;'title='0.000 GB
+duration:0.018
+start:2021-03-23 21:46:15
+end:2021-03-23 21:46:16'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:71.732px;left:470px; top:268.375px;'title='0.637 GB
+duration:0.058
+start:2021-03-23 21:46:16
+end:2021-03-23 21:46:20'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:271.266px;'title='0.000 GB
+duration:0.076
+start:2021-03-23 21:46:20
+end:2021-03-23 21:46:24'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.354px;left:470px; top:275.043px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:46:24
+end:2021-03-23 21:46:25'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:275.511px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:25
+end:2021-03-23 21:46:26'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.354px;left:470px; top:276.717px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:46:26
+end:2021-03-23 21:46:27'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:277.189px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:27
+end:2021-03-23 21:46:28'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.354px;left:470px; top:278.387px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:46:28
+end:2021-03-23 21:46:29'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:278.856px;'title='0.000 GB
+duration:0.091
+start:2021-03-23 21:46:29
+end:2021-03-23 21:46:34'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:69.280px;left:470px; top:283.386px;'title='0.615 GB
+duration:0.048
+start:2021-03-23 21:46:34
+end:2021-03-23 21:46:37'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:285.789px;'title='0.000 GB
+duration:0.019
+start:2021-03-23 21:46:37
+end:2021-03-23 21:46:38'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:69.286px;left:470px; top:286.727px;'title='0.615 GB
+duration:0.047
+start:2021-03-23 21:46:38
+end:2021-03-23 21:46:41'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:289.056px;'title='0.000 GB
+duration:0.020
+start:2021-03-23 21:46:41
+end:2021-03-23 21:46:42'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:69.281px;left:470px; top:290.065px;'title='0.615 GB
+duration:0.049
+start:2021-03-23 21:46:42
+end:2021-03-23 21:46:45'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:292.513px;'title='0.000 GB
+duration:0.084
+start:2021-03-23 21:46:45
+end:2021-03-23 21:46:50'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.355px;left:470px; top:296.733px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:46:50
+end:2021-03-23 21:46:51'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:297.204px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:51
+end:2021-03-23 21:46:52'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.356px;left:470px; top:298.407px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:46:52
+end:2021-03-23 21:46:53'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:298.867px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:46:53
+end:2021-03-23 21:46:54'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.356px;left:470px; top:300.075px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:46:54
+end:2021-03-23 21:46:55'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:300.543px;'title='0.000 GB
+duration:0.057
+start:2021-03-23 21:46:55
+end:2021-03-23 21:46:58'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.367px;left:470px; top:303.411px;'title='0.536 GB
+duration:0.012
+start:2021-03-23 21:46:58
+end:2021-03-23 21:46:59'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:304.006px;'title='0.000 GB
+duration:0.022
+start:2021-03-23 21:46:59
+end:2021-03-23 21:47:00'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:79.783px;left:470px; top:305.087px;'title='0.708 GB
+duration:0.033
+start:2021-03-23 21:47:00
+end:2021-03-23 21:47:02'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:306.756px;'title='0.000 GB
+duration:0.033
+start:2021-03-23 21:47:02
+end:2021-03-23 21:47:04'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.368px;left:470px; top:308.421px;'title='0.536 GB
+duration:0.011
+start:2021-03-23 21:47:04
+end:2021-03-23 21:47:05'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:308.950px;'title='0.000 GB
+duration:0.023
+start:2021-03-23 21:47:05
+end:2021-03-23 21:47:06'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:113.149px;left:470px; top:310.096px;'title='1.004 GB
+duration:0.009
+start:2021-03-23 21:47:06
+end:2021-03-23 21:47:07'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:310.566px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:47:07
+end:2021-03-23 21:47:08'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:113.149px;left:470px; top:311.756px;'title='1.004 GB
+duration:0.009
+start:2021-03-23 21:47:08
+end:2021-03-23 21:47:09'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:312.219px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:47:09
+end:2021-03-23 21:47:10'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.368px;left:470px; top:313.424px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:47:10
+end:2021-03-23 21:47:11'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:313.885px;'title='0.000 GB
+duration:0.058
+start:2021-03-23 21:47:11
+end:2021-03-23 21:47:14'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.370px;left:470px; top:316.764px;'title='0.536 GB
+duration:0.008
+start:2021-03-23 21:47:14
+end:2021-03-23 21:47:15'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:317.172px;'title='0.000 GB
+duration:0.025
+start:2021-03-23 21:47:15
+end:2021-03-23 21:47:16'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:113.154px;left:470px; top:318.427px;'title='1.004 GB
+duration:0.008
+start:2021-03-23 21:47:16
+end:2021-03-23 21:47:17'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:318.836px;'title='0.000 GB
+duration:0.025
+start:2021-03-23 21:47:17
+end:2021-03-23 21:47:18'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.370px;left:470px; top:320.099px;'title='0.536 GB
+duration:0.008
+start:2021-03-23 21:47:18
+end:2021-03-23 21:47:19'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:320.508px;'title='0.000 GB
+duration:0.059
+start:2021-03-23 21:47:19
+end:2021-03-23 21:47:22'></div><div class='bar' style='background-color:#03969D;height:583.972px;width:200.000px;left:470px; top:323.434px;'title='1.775 GB
+duration:11.719
+start:2021-03-23 21:47:22
+end:2021-03-23 21:59:06'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:909.406px;'title='0.000 GB
+duration:0.026
+start:2021-03-23 21:59:06
+end:2021-03-23 21:59:07'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.387px;left:470px; top:910.686px;'title='0.536 GB
+duration:0.010
+start:2021-03-23 21:59:07
+end:2021-03-23 21:59:08'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:911.163px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:59:08
+end:2021-03-23 21:59:09'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.387px;left:470px; top:912.341px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:59:09
+end:2021-03-23 21:59:10'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:912.811px;'title='0.000 GB
+duration:0.024
+start:2021-03-23 21:59:10
+end:2021-03-23 21:59:11'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.387px;left:470px; top:914.010px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 21:59:11
+end:2021-03-23 21:59:12'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:914.467px;'title='0.000 GB
+duration:0.058
+start:2021-03-23 21:59:12
+end:2021-03-23 21:59:15'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.387px;left:470px; top:917.345px;'title='0.536 GB
+duration:0.012
+start:2021-03-23 21:59:15
+end:2021-03-23 21:59:16'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:917.958px;'title='0.000 GB
+duration:0.021
+start:2021-03-23 21:59:16
+end:2021-03-23 21:59:17'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:78.824px;left:470px; top:919.019px;'title='0.699 GB
+duration:0.034
+start:2021-03-23 21:59:17
+end:2021-03-23 21:59:19'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:920.720px;'title='0.000 GB
+duration:0.033
+start:2021-03-23 21:59:19
+end:2021-03-23 21:59:21'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.387px;left:470px; top:922.352px;'title='0.536 GB
+duration:0.012
+start:2021-03-23 21:59:21
+end:2021-03-23 21:59:22'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:922.939px;'title='0.000 GB
+duration:0.022
+start:2021-03-23 21:59:22
+end:2021-03-23 21:59:23'></div><div class='bar' style='background-color:#03969D;height:64.502px;width:169.199px;left:470px; top:924.025px;'title='1.501 GB
+duration:1.330
+start:2021-03-23 21:59:23
+end:2021-03-23 22:00:43'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:990.527px;'title='0.000 GB
+duration:0.005
+start:2021-03-23 22:00:43
+end:2021-03-23 22:00:43'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.401px;left:470px; top:990.761px;'title='0.536 GB
+duration:0.009
+start:2021-03-23 22:00:43
+end:2021-03-23 22:00:44'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:991.190px;'title='0.000 GB
+duration:0.025
+start:2021-03-23 22:00:44
+end:2021-03-23 22:00:45'></div><div class='bar' style='background-color:#03969D;height:5.118px;width:92.308px;left:470px; top:992.424px;'title='0.819 GB
+duration:0.142
+start:2021-03-23 22:00:45
+end:2021-03-23 22:00:54'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:999.542px;'title='0.000 GB
+duration:0.025
+start:2021-03-23 22:00:54
+end:2021-03-23 22:00:55'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.407px;left:470px; top:1000.777px;'title='0.536 GB
+duration:0.004
+start:2021-03-23 22:00:55
+end:2021-03-23 22:00:56'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:1000.958px;'title='0.000 GB
+duration:0.029
+start:2021-03-23 22:00:56
+end:2021-03-23 22:00:57'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:60.407px;left:470px; top:1002.431px;'title='0.536 GB
+duration:0.016
+start:2021-03-23 22:00:57
+end:2021-03-23 22:00:58'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:470px; top:1003.224px;'title='0.000 GB
+duration:0.000
+start:2021-03-23 22:00:58
+end:2021-03-23 22:00:58'></div><p class='time' style='top:198px;left:150px;'>Threads</p><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:220.000px;'title='1 threads
+duration:0.003
+start:2021-03-23 21:45:18
+end:2021-03-23 21:45:19'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:220.172px;'title='0 threads
+duration:0.031
+start:2021-03-23 21:45:19
+end:2021-03-23 21:45:20'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:221.707px;'title='1 threads
+duration:0.003
+start:2021-03-23 21:45:20
+end:2021-03-23 21:45:21'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:221.876px;'title='0 threads
+duration:0.062
+start:2021-03-23 21:45:21
+end:2021-03-23 21:45:24'></div><div class='bar' style='background-color:#90BBD7;height:3.356px;width:200.000px;left:150px; top:224.990px;'title='1 threads
+duration:0.107
+start:2021-03-23 21:45:24
+end:2021-03-23 21:45:31'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:230.347px;'title='0 threads
+duration:0.026
+start:2021-03-23 21:45:31
+end:2021-03-23 21:45:32'></div><div class='bar' style='background-color:#90BBD7;height:3.100px;width:200.000px;left:150px; top:231.669px;'title='1 threads
+duration:0.102
+start:2021-03-23 21:45:32
+end:2021-03-23 21:45:39'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:236.769px;'title='0 threads
+duration:0.031
+start:2021-03-23 21:45:39
+end:2021-03-23 21:45:40'></div><div class='bar' style='background-color:#90BBD7;height:3.151px;width:200.000px;left:150px; top:238.340px;'title='1 threads
+duration:0.103
+start:2021-03-23 21:45:40
+end:2021-03-23 21:45:47'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:243.492px;'title='0 threads
+duration:0.064
+start:2021-03-23 21:45:47
+end:2021-03-23 21:45:50'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:246.682px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:45:50
+end:2021-03-23 21:45:51'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:247.139px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:45:51
+end:2021-03-23 21:45:52'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:248.353px;'title='1 threads
+duration:0.003
+start:2021-03-23 21:45:52
+end:2021-03-23 21:45:53'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:248.521px;'title='0 threads
+duration:0.030
+start:2021-03-23 21:45:53
+end:2021-03-23 21:45:54'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:250.024px;'title='1 threads
+duration:0.003
+start:2021-03-23 21:45:54
+end:2021-03-23 21:45:55'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:250.193px;'title='0 threads
+duration:0.030
+start:2021-03-23 21:45:55
+end:2021-03-23 21:45:56'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:251.692px;'title='1 threads
+duration:0.003
+start:2021-03-23 21:45:56
+end:2021-03-23 21:45:57'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:251.861px;'title='0 threads
+duration:0.063
+start:2021-03-23 21:45:57
+end:2021-03-23 21:46:00'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:255.021px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:46:00
+end:2021-03-23 21:46:01'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:255.489px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:01
+end:2021-03-23 21:46:02'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:256.700px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:46:02
+end:2021-03-23 21:46:03'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:257.169px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:03
+end:2021-03-23 21:46:04'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:258.367px;'title='1 threads
+duration:0.010
+start:2021-03-23 21:46:04
+end:2021-03-23 21:46:05'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:258.865px;'title='0 threads
+duration:0.057
+start:2021-03-23 21:46:05
+end:2021-03-23 21:46:08'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:261.699px;'title='1 threads
+duration:0.055
+start:2021-03-23 21:46:08
+end:2021-03-23 21:46:12'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:264.439px;'title='0 threads
+duration:0.012
+start:2021-03-23 21:46:12
+end:2021-03-23 21:46:12'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:265.042px;'title='1 threads
+duration:0.049
+start:2021-03-23 21:46:12
+end:2021-03-23 21:46:15'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:267.498px;'title='0 threads
+duration:0.018
+start:2021-03-23 21:46:15
+end:2021-03-23 21:46:16'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:268.375px;'title='1 threads
+duration:0.058
+start:2021-03-23 21:46:16
+end:2021-03-23 21:46:20'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:271.266px;'title='0 threads
+duration:0.076
+start:2021-03-23 21:46:20
+end:2021-03-23 21:46:24'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:275.043px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:46:24
+end:2021-03-23 21:46:25'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:275.511px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:25
+end:2021-03-23 21:46:26'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:276.717px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:46:26
+end:2021-03-23 21:46:27'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:277.189px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:27
+end:2021-03-23 21:46:28'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:278.387px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:46:28
+end:2021-03-23 21:46:29'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:278.856px;'title='0 threads
+duration:0.091
+start:2021-03-23 21:46:29
+end:2021-03-23 21:46:34'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:283.386px;'title='1 threads
+duration:0.048
+start:2021-03-23 21:46:34
+end:2021-03-23 21:46:37'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:285.789px;'title='0 threads
+duration:0.019
+start:2021-03-23 21:46:37
+end:2021-03-23 21:46:38'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:286.727px;'title='1 threads
+duration:0.047
+start:2021-03-23 21:46:38
+end:2021-03-23 21:46:41'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:289.056px;'title='0 threads
+duration:0.020
+start:2021-03-23 21:46:41
+end:2021-03-23 21:46:42'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:290.065px;'title='1 threads
+duration:0.049
+start:2021-03-23 21:46:42
+end:2021-03-23 21:46:45'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:292.513px;'title='0 threads
+duration:0.084
+start:2021-03-23 21:46:45
+end:2021-03-23 21:46:50'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:296.733px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:46:50
+end:2021-03-23 21:46:51'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:297.204px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:51
+end:2021-03-23 21:46:52'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:298.407px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:46:52
+end:2021-03-23 21:46:53'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:298.867px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:53
+end:2021-03-23 21:46:54'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:300.075px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:46:54
+end:2021-03-23 21:46:55'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:300.543px;'title='0 threads
+duration:0.057
+start:2021-03-23 21:46:55
+end:2021-03-23 21:46:58'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:303.411px;'title='1 threads
+duration:0.012
+start:2021-03-23 21:46:58
+end:2021-03-23 21:46:59'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:304.006px;'title='0 threads
+duration:0.022
+start:2021-03-23 21:46:59
+end:2021-03-23 21:47:00'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:305.087px;'title='1 threads
+duration:0.033
+start:2021-03-23 21:47:00
+end:2021-03-23 21:47:02'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:306.756px;'title='0 threads
+duration:0.033
+start:2021-03-23 21:47:02
+end:2021-03-23 21:47:04'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:308.421px;'title='1 threads
+duration:0.011
+start:2021-03-23 21:47:04
+end:2021-03-23 21:47:05'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:308.950px;'title='0 threads
+duration:0.023
+start:2021-03-23 21:47:05
+end:2021-03-23 21:47:06'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:310.096px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:47:06
+end:2021-03-23 21:47:07'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:310.566px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:47:07
+end:2021-03-23 21:47:08'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:311.756px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:47:08
+end:2021-03-23 21:47:09'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:312.219px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:47:09
+end:2021-03-23 21:47:10'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:313.424px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:47:10
+end:2021-03-23 21:47:11'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:313.885px;'title='0 threads
+duration:0.058
+start:2021-03-23 21:47:11
+end:2021-03-23 21:47:14'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:316.764px;'title='1 threads
+duration:0.008
+start:2021-03-23 21:47:14
+end:2021-03-23 21:47:15'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:317.172px;'title='0 threads
+duration:0.025
+start:2021-03-23 21:47:15
+end:2021-03-23 21:47:16'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:318.427px;'title='1 threads
+duration:0.008
+start:2021-03-23 21:47:16
+end:2021-03-23 21:47:17'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:318.836px;'title='0 threads
+duration:0.025
+start:2021-03-23 21:47:17
+end:2021-03-23 21:47:18'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:320.099px;'title='1 threads
+duration:0.008
+start:2021-03-23 21:47:18
+end:2021-03-23 21:47:19'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:320.508px;'title='0 threads
+duration:0.059
+start:2021-03-23 21:47:19
+end:2021-03-23 21:47:22'></div><div class='bar' style='background-color:#90BBD7;height:583.972px;width:200.000px;left:150px; top:323.434px;'title='1 threads
+duration:11.719
+start:2021-03-23 21:47:22
+end:2021-03-23 21:59:06'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:909.406px;'title='0 threads
+duration:0.026
+start:2021-03-23 21:59:06
+end:2021-03-23 21:59:07'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:910.686px;'title='1 threads
+duration:0.010
+start:2021-03-23 21:59:07
+end:2021-03-23 21:59:08'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:911.163px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:59:08
+end:2021-03-23 21:59:09'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:912.341px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:59:09
+end:2021-03-23 21:59:10'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:912.811px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:59:10
+end:2021-03-23 21:59:11'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:914.010px;'title='1 threads
+duration:0.009
+start:2021-03-23 21:59:11
+end:2021-03-23 21:59:12'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:914.467px;'title='0 threads
+duration:0.058
+start:2021-03-23 21:59:12
+end:2021-03-23 21:59:15'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:917.345px;'title='1 threads
+duration:0.012
+start:2021-03-23 21:59:15
+end:2021-03-23 21:59:16'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:917.958px;'title='0 threads
+duration:0.021
+start:2021-03-23 21:59:16
+end:2021-03-23 21:59:17'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:919.019px;'title='1 threads
+duration:0.034
+start:2021-03-23 21:59:17
+end:2021-03-23 21:59:19'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:920.720px;'title='0 threads
+duration:0.033
+start:2021-03-23 21:59:19
+end:2021-03-23 21:59:21'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:922.352px;'title='1 threads
+duration:0.012
+start:2021-03-23 21:59:21
+end:2021-03-23 21:59:22'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:922.939px;'title='0 threads
+duration:0.022
+start:2021-03-23 21:59:22
+end:2021-03-23 21:59:23'></div><div class='bar' style='background-color:#90BBD7;height:64.502px;width:200.000px;left:150px; top:924.025px;'title='1 threads
+duration:1.330
+start:2021-03-23 21:59:23
+end:2021-03-23 22:00:43'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:990.527px;'title='0 threads
+duration:0.005
+start:2021-03-23 22:00:43
+end:2021-03-23 22:00:43'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:990.761px;'title='1 threads
+duration:0.009
+start:2021-03-23 22:00:43
+end:2021-03-23 22:00:44'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:991.190px;'title='0 threads
+duration:0.025
+start:2021-03-23 22:00:44
+end:2021-03-23 22:00:45'></div><div class='bar' style='background-color:#90BBD7;height:5.118px;width:200.000px;left:150px; top:992.424px;'title='1 threads
+duration:0.142
+start:2021-03-23 22:00:45
+end:2021-03-23 22:00:54'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:999.542px;'title='0 threads
+duration:0.025
+start:2021-03-23 22:00:54
+end:2021-03-23 22:00:55'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:1000.777px;'title='1 threads
+duration:0.004
+start:2021-03-23 22:00:55
+end:2021-03-23 22:00:56'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:1000.958px;'title='0 threads
+duration:0.029
+start:2021-03-23 22:00:56
+end:2021-03-23 22:00:57'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:200.000px;left:150px; top:1002.431px;'title='1 threads
+duration:0.016
+start:2021-03-23 22:00:57
+end:2021-03-23 22:00:58'></div><div class='bar' style='background-color:#90BBD7;height:3.000px;width:0.000px;left:150px; top:1003.224px;'title='0 threads
+duration:0.000
+start:2021-03-23 22:00:58
+end:2021-03-23 22:00:58'></div><p class='time' style='top:198px;left:150px;'>Threads</p><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:220.000px;'title='0 threads
+duration:0.100
+start:2021-03-23 21:45:18
+end:2021-03-23 21:45:24'></div><div class='bar' style='background-color:#03969D;height:3.356px;width:40.716px;left:150px; top:224.990px;'title='198 threads
+duration:0.107
+start:2021-03-23 21:45:24
+end:2021-03-23 21:45:31'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:230.347px;'title='0 threads
+duration:0.026
+start:2021-03-23 21:45:31
+end:2021-03-23 21:45:32'></div><div class='bar' style='background-color:#03969D;height:3.100px;width:40.510px;left:150px; top:231.669px;'title='197 threads
+duration:0.102
+start:2021-03-23 21:45:32
+end:2021-03-23 21:45:39'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:236.769px;'title='0 threads
+duration:0.031
+start:2021-03-23 21:45:39
+end:2021-03-23 21:45:40'></div><div class='bar' style='background-color:#03969D;height:3.151px;width:40.510px;left:150px; top:238.340px;'title='197 threads
+duration:0.103
+start:2021-03-23 21:45:40
+end:2021-03-23 21:45:47'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:243.492px;'title='0 threads
+duration:0.064
+start:2021-03-23 21:45:47
+end:2021-03-23 21:45:50'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:34.917px;left:150px; top:246.682px;'title='169 threads
+duration:0.009
+start:2021-03-23 21:45:50
+end:2021-03-23 21:45:51'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:247.139px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:45:51
+end:2021-03-23 21:45:52'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:101.152px;left:150px; top:248.353px;'title='491 threads
+duration:0.003
+start:2021-03-23 21:45:52
+end:2021-03-23 21:45:53'></div><div class='bar' style='background-color:#03969D;height:4.500px;width:0.000px;left:150px; top:248.521px;'title='0 threads
+duration:0.130
+start:2021-03-23 21:45:53
+end:2021-03-23 21:46:00'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:1.131px;left:150px; top:255.021px;'title='5 threads
+duration:0.009
+start:2021-03-23 21:46:00
+end:2021-03-23 21:46:01'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:255.489px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:01
+end:2021-03-23 21:46:02'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:1.131px;left:150px; top:256.700px;'title='5 threads
+duration:0.009
+start:2021-03-23 21:46:02
+end:2021-03-23 21:46:03'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:257.169px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:03
+end:2021-03-23 21:46:04'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:179.231px;left:150px; top:258.367px;'title='871 threads
+duration:0.010
+start:2021-03-23 21:46:04
+end:2021-03-23 21:46:05'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:258.865px;'title='0 threads
+duration:0.057
+start:2021-03-23 21:46:05
+end:2021-03-23 21:46:08'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.206px;left:150px; top:261.699px;'title='1 threads
+duration:0.055
+start:2021-03-23 21:46:08
+end:2021-03-23 21:46:12'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:264.439px;'title='0 threads
+duration:0.012
+start:2021-03-23 21:46:12
+end:2021-03-23 21:46:12'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:165.659px;left:150px; top:265.042px;'title='805 threads
+duration:0.049
+start:2021-03-23 21:46:12
+end:2021-03-23 21:46:15'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:267.498px;'title='0 threads
+duration:0.018
+start:2021-03-23 21:46:15
+end:2021-03-23 21:46:16'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:184.886px;left:150px; top:268.375px;'title='899 threads
+duration:0.058
+start:2021-03-23 21:46:16
+end:2021-03-23 21:46:20'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:271.266px;'title='0 threads
+duration:0.076
+start:2021-03-23 21:46:20
+end:2021-03-23 21:46:24'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:1.152px;left:150px; top:275.043px;'title='5 threads
+duration:0.009
+start:2021-03-23 21:46:24
+end:2021-03-23 21:46:25'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:275.511px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:25
+end:2021-03-23 21:46:26'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:194.756px;left:150px; top:276.717px;'title='947 threads
+duration:0.009
+start:2021-03-23 21:46:26
+end:2021-03-23 21:46:27'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:277.189px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:27
+end:2021-03-23 21:46:28'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.576px;left:150px; top:278.387px;'title='2 threads
+duration:0.009
+start:2021-03-23 21:46:28
+end:2021-03-23 21:46:29'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:278.856px;'title='0 threads
+duration:0.091
+start:2021-03-23 21:46:29
+end:2021-03-23 21:46:34'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.206px;left:150px; top:283.386px;'title='1 threads
+duration:0.048
+start:2021-03-23 21:46:34
+end:2021-03-23 21:46:37'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:285.789px;'title='0 threads
+duration:0.019
+start:2021-03-23 21:46:37
+end:2021-03-23 21:46:38'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.350px;left:150px; top:286.727px;'title='1 threads
+duration:0.047
+start:2021-03-23 21:46:38
+end:2021-03-23 21:46:41'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:289.056px;'title='0 threads
+duration:0.020
+start:2021-03-23 21:46:41
+end:2021-03-23 21:46:42'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:193.687px;left:150px; top:290.065px;'title='941 threads
+duration:0.049
+start:2021-03-23 21:46:42
+end:2021-03-23 21:46:45'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:292.513px;'title='0 threads
+duration:0.084
+start:2021-03-23 21:46:45
+end:2021-03-23 21:46:50'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:1.131px;left:150px; top:296.733px;'title='5 threads
+duration:0.009
+start:2021-03-23 21:46:50
+end:2021-03-23 21:46:51'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:297.204px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:51
+end:2021-03-23 21:46:52'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:1.172px;left:150px; top:298.407px;'title='5 threads
+duration:0.009
+start:2021-03-23 21:46:52
+end:2021-03-23 21:46:53'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:298.867px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:46:53
+end:2021-03-23 21:46:54'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.576px;left:150px; top:300.075px;'title='2 threads
+duration:0.009
+start:2021-03-23 21:46:54
+end:2021-03-23 21:46:55'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:300.543px;'title='0 threads
+duration:0.057
+start:2021-03-23 21:46:55
+end:2021-03-23 21:46:58'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.802px;left:150px; top:303.411px;'title='3 threads
+duration:0.012
+start:2021-03-23 21:46:58
+end:2021-03-23 21:46:59'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:304.006px;'title='0 threads
+duration:0.022
+start:2021-03-23 21:46:59
+end:2021-03-23 21:47:00'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:167.016px;left:150px; top:305.087px;'title='812 threads
+duration:0.033
+start:2021-03-23 21:47:00
+end:2021-03-23 21:47:02'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:306.756px;'title='0 threads
+duration:0.033
+start:2021-03-23 21:47:02
+end:2021-03-23 21:47:04'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.473px;left:150px; top:308.421px;'title='2 threads
+duration:0.011
+start:2021-03-23 21:47:04
+end:2021-03-23 21:47:05'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:308.950px;'title='0 threads
+duration:0.023
+start:2021-03-23 21:47:05
+end:2021-03-23 21:47:06'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:1.707px;left:150px; top:310.096px;'title='8 threads
+duration:0.009
+start:2021-03-23 21:47:06
+end:2021-03-23 21:47:07'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:310.566px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:47:07
+end:2021-03-23 21:47:08'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.576px;left:150px; top:311.756px;'title='2 threads
+duration:0.009
+start:2021-03-23 21:47:08
+end:2021-03-23 21:47:09'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:312.219px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:47:09
+end:2021-03-23 21:47:10'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:1.172px;left:150px; top:313.424px;'title='5 threads
+duration:0.009
+start:2021-03-23 21:47:10
+end:2021-03-23 21:47:11'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:313.885px;'title='0 threads
+duration:0.058
+start:2021-03-23 21:47:11
+end:2021-03-23 21:47:14'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:192.679px;left:150px; top:316.764px;'title='937 threads
+duration:0.008
+start:2021-03-23 21:47:14
+end:2021-03-23 21:47:15'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:317.172px;'title='0 threads
+duration:0.025
+start:2021-03-23 21:47:15
+end:2021-03-23 21:47:16'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:1.419px;left:150px; top:318.427px;'title='6 threads
+duration:0.008
+start:2021-03-23 21:47:16
+end:2021-03-23 21:47:17'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:318.836px;'title='0 threads
+duration:0.025
+start:2021-03-23 21:47:17
+end:2021-03-23 21:47:18'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:2.139px;left:150px; top:320.099px;'title='10 threads
+duration:0.008
+start:2021-03-23 21:47:18
+end:2021-03-23 21:47:19'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:320.508px;'title='0 threads
+duration:0.059
+start:2021-03-23 21:47:19
+end:2021-03-23 21:47:22'></div><div class='bar' style='background-color:#03969D;height:583.972px;width:190.644px;left:150px; top:323.434px;'title='927 threads
+duration:11.719
+start:2021-03-23 21:47:22
+end:2021-03-23 21:59:06'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:909.406px;'title='0 threads
+duration:0.026
+start:2021-03-23 21:59:06
+end:2021-03-23 21:59:07'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:193.893px;left:150px; top:910.686px;'title='942 threads
+duration:0.010
+start:2021-03-23 21:59:07
+end:2021-03-23 21:59:08'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:911.163px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:59:08
+end:2021-03-23 21:59:09'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:1.131px;left:150px; top:912.341px;'title='5 threads
+duration:0.009
+start:2021-03-23 21:59:09
+end:2021-03-23 21:59:10'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:912.811px;'title='0 threads
+duration:0.024
+start:2021-03-23 21:59:10
+end:2021-03-23 21:59:11'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:194.242px;left:150px; top:914.010px;'title='944 threads
+duration:0.009
+start:2021-03-23 21:59:11
+end:2021-03-23 21:59:12'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:914.467px;'title='0 threads
+duration:0.058
+start:2021-03-23 21:59:12
+end:2021-03-23 21:59:15'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.761px;left:150px; top:917.345px;'title='3 threads
+duration:0.012
+start:2021-03-23 21:59:15
+end:2021-03-23 21:59:16'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:917.958px;'title='0 threads
+duration:0.021
+start:2021-03-23 21:59:16
+end:2021-03-23 21:59:17'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:172.671px;left:150px; top:919.019px;'title='839 threads
+duration:0.034
+start:2021-03-23 21:59:17
+end:2021-03-23 21:59:19'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:920.720px;'title='0 threads
+duration:0.033
+start:2021-03-23 21:59:19
+end:2021-03-23 21:59:21'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:194.983px;left:150px; top:922.352px;'title='948 threads
+duration:0.012
+start:2021-03-23 21:59:21
+end:2021-03-23 21:59:22'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:922.939px;'title='0 threads
+duration:0.022
+start:2021-03-23 21:59:22
+end:2021-03-23 21:59:23'></div><div class='bar' style='background-color:#03969D;height:64.502px;width:0.350px;left:150px; top:924.025px;'title='1 threads
+duration:1.330
+start:2021-03-23 21:59:23
+end:2021-03-23 22:00:43'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:990.527px;'title='0 threads
+duration:0.005
+start:2021-03-23 22:00:43
+end:2021-03-23 22:00:43'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:194.797px;left:150px; top:990.761px;'title='947 threads
+duration:0.009
+start:2021-03-23 22:00:43
+end:2021-03-23 22:00:44'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:991.190px;'title='0 threads
+duration:0.025
+start:2021-03-23 22:00:44
+end:2021-03-23 22:00:45'></div><div class='bar' style='background-color:#03969D;height:5.118px;width:199.013px;left:150px; top:992.424px;'title='967 threads
+duration:0.142
+start:2021-03-23 22:00:45
+end:2021-03-23 22:00:54'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:999.542px;'title='0 threads
+duration:0.025
+start:2021-03-23 22:00:54
+end:2021-03-23 22:00:55'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:12.770px;left:150px; top:1000.777px;'title='62 threads
+duration:0.004
+start:2021-03-23 22:00:55
+end:2021-03-23 22:00:56'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:1000.958px;'title='0 threads
+duration:0.029
+start:2021-03-23 22:00:56
+end:2021-03-23 22:00:57'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:200.000px;left:150px; top:1002.431px;'title='972 threads
+duration:0.016
+start:2021-03-23 22:00:57
+end:2021-03-23 22:00:58'></div><div class='bar' style='background-color:#03969D;height:3.000px;width:0.000px;left:150px; top:1003.224px;'title='0 threads
+duration:0.000
+start:2021-03-23 22:00:58
+end:2021-03-23 22:00:58'></div>
+        </div>
+    </body>
\ No newline at end of file
diff --git a/documentation/changes.rst b/documentation/changes.rst
index 3eeeaa6c2..75ddd992c 100644
--- a/documentation/changes.rst
+++ b/documentation/changes.rst
@@ -2,12 +2,75 @@
 Changes
 **************
 
+
+Version 2.0.2
+--------------
+
+Date: March/April XX, 2020
+
+This corresponds to the release of MIAL Super-Resolution Toolkit 2.0.2,
+that includes in particular the following changes.
+
+New feature
+=============
+
+* ``pymialsrtk`` enables to monitor resources (time, threads, memory) used by the
+  interface of the pipeline at execution with the ``--profiling`` option flag.
+  This includes the creation of a new module `pymialsrtk.utils.monitoring` that
+  includes all methods originating from Nipype and modified to support this task
+  (See `pull request 92 <https://github.com/Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit/pull/92>`_).
+
+* ``pymialsrtk`` enables to fix the maximal amount of memory (in Gb) that could be used by the
+  pipelines at execution with the ``--memory MEMORY_Gb`` option flag.
+  (See `pull request 92 <https://github.com/Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit/pull/92>`_).
+
+Python update
+===============
+
+* From `3.6.8` to `3.7.10`
+
+New package
+==============
+
+* pandas `1.2.3`
+
+Package update
+===============
+
+* pip from `19.0.3` to `21.0.1`
+* numpy from `1.16.4` to `1.16.6`
+* tflearn from `0.3.2` to `0.5.0`
+* tensorflow from `1.13.1` to `2.3.0`
+* tensorflow-estimator from `1.13.0` to `2.3.0`
+* tensorboard from `1.13.1` to `2.3.0`
+
+Bug fix
+========
+
+* Correct the output filename of the high-resolution brain mask sunk
+  in ``mialsrtk/sub-<label>/anat``
+  (See `pull request 92 <https://github.com/Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit/pull/92>`_).
+
+Software development life cycle
+================================
+
+* Add `--profiling` option flag to test-02 and test-04
+  (See `pull request 92 <https://github.com/Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit/pull/92>`_).
+
+More...
+========
+
+Please check `pull request 70 <https://github.com/Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit/pull/70>`_
+for more change details and development discussions.
+
+
 Version 2.0.1
 --------------
 
 Date: December 24, 2020
 
-This corresponds to the release of MIAL Super-Resolution Toolkit 2.0.1, that includes in particular the following changes.
+This corresponds to the release of MIAL Super-Resolution Toolkit 2.0.1,
+that includes in particular the following changes.
 
 Major change
 =============
@@ -25,7 +88,6 @@ New feature
 * Support of Singularity to execute MIALSTK on high-performance computing cluster (See `pull request 60 <https://github.com/Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit/pull/60>`_).
 * ``pymialsrtk`` implements for convenience a Python wrapper that generates the Singularity command line of the BIDS App for you, prints it out for reporting purposes, and then executes it without further action needed (See `pull request 61 <https://github.com/Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit/pull/61>`_).
 
-
 Software development life cycle
 ================================
 
@@ -36,7 +98,6 @@ Software development life cycle
 	* Test 03: Run BIDS App on the sample `data/` BIDS dataset with the ``--manual_masks`` option without code coverage.
 	* Test 04: Run BIDS App on the sample `data/` BIDS dataset with automated brain extraction (masking) without code coverage.
 
-
 More...
 ========
 
@@ -50,19 +111,14 @@ Date: November 25, 2020
 
 This corresponds to the first release of the second version of the MIAL Super-Resolution Toolkit, which has evolved massively over the last years in terms of the underlying codebase and the scope of the functionality provided, following recent advances in standardization of neuroimaging data organization and processing workflows.
 
-
 Major changes
 =============
 
 * Adoption of the `Brain Imaging Data Structure standard <https://bids.neuroimaging.io/>`_ for data organization and the sample dataset available in data/ has been modified accordingly. (See :ref:`BIDS and BIDS App standards <cmpbids>` for more details)
-
 * MIALSRTK is going to Python with the creation of the ``pymialsrtk`` workflow library which extends the `Nipype dataflow library <https://nipype.readthedocs.io/en/latest/>`_ with the implementation of interfaces to all C++ MIALSRTK tools connected in a common workflow to perform super-resolution reconstruction of fetal brain MRI with data provenance and execution detail recordings. (See :ref:`API Documentation <api-doc>`)
-
 * Docker image encapsulating MIALSRTK is distributed as a BIDS App, a standard for containerized workflow that handles BIDS datasets with a set of predefined commandline input argument. (See :ref:`BIDS App Commadline Usage <cmdusage>` for more details)
-
 * Main documentation of MIALSRTK is rendered using readthedocs at https://mialsrtk.readthedocs.io/.
 
-
 New feature
 =============
 
@@ -77,7 +133,6 @@ New feature
 * ``pymialsrtk`` implements for convenience a Python wrapper that generates the Docker command line of the BIDS App for you,
 prints it out for reporting purposes, and then executes it without further action needed (See `pull request 47 <https://github.com/Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit/pull/47>`_)
 
-
 Software development life cycle
 ================================
 
@@ -93,7 +148,6 @@ Software development life cycle
 
 * Use `coveragepy <https://coverage.readthedocs.io/en/coverage-5.2/>`_  in CircleCI during regression tests of the BIDS app and create code coverage reports published on our `Codacy project page <https://app.codacy.com/gh/Medical-Image-Analysis-Laboratory/mialsuperresolutiontoolkit/dashboard>`_.
 
-
 More...
 ========
 
diff --git a/documentation/outputs.rst b/documentation/outputs.rst
index 64221bd88..7288b3a81 100644
--- a/documentation/outputs.rst
+++ b/documentation/outputs.rst
@@ -94,3 +94,11 @@ Execution details (data provenance) of each interface (node) of a given pipeline
 .. image:: images/nipype_node_report.png
     :width: 600
     :align: center
+
+`MIALSRTK` can monitor the computational resources used by each interface / node of the workflow,
+if run `--profiling` option flag. It will generate ``srr_pipeline/run_stats.log.html`` which reports
+run times, number of executed threads, and amount of used memory in the form of a HTML gantt chart.
+
+.. raw:: html
+
+    <iframe src="_static/run_stats.log.html" height="345px" width="100%"></iframe>
diff --git a/pymialsrtk/interfaces/postprocess.py b/pymialsrtk/interfaces/postprocess.py
index 93908f180..28890399a 100644
--- a/pymialsrtk/interfaces/postprocess.py
+++ b/pymialsrtk/interfaces/postprocess.py
@@ -258,67 +258,58 @@ class FilenamesGeneration(BaseInterface):
     def _run_interface(self, runtime):
 
         for stack in self.inputs.stacks_order:
-            # print(self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_nlm_uni_bcorr_histnorm.nii.gz',
-            #       '    --->     ',
-            #       self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(self.inputs.sr_id) + '_desc-preprocSDI_T2w.nii.gz')
-            self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_nlm_uni_bcorr_histnorm.nii.gz',
-                                  self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(
-                                      self.inputs.sr_id) + '_desc-preprocSDI_T2w.nii.gz'))
+            self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) +
+                                         '_T2w_nlm_uni_bcorr_histnorm.nii.gz',
+                                        self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(
+                                        self.inputs.sr_id) + '_desc-preprocSDI_T2w.nii.gz'))
 
             if not self.inputs.use_manual_masks:
-                # print(self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_brainMask.nii.gz',
-                #       '    --->     ',
-                #       self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(self.inputs.sr_id) + '_desc-brain_mask.nii.gz')
-                self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_brainMask.nii.gz',
-                                      self.inputs.sub_ses + '_run-' + str(stack) + '_desc-brain_mask.nii.gz'))
-
-            # print(self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_nlm_uni_bcorr_histnorm.nii.gz',
-            #       '    --->     ',
-            #       self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(self.inputs.sr_id) + '_desc-preprocSR_T2w.nii.gz')
-            self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_uni_bcorr_histnorm.nii.gz',
-                                  self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(
-                                      self.inputs.sr_id) + '_desc-preprocSR_T2w.nii.gz'))
-
-            # print(self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_nlm_uni_bcorr_histnorm_transform_' + str(
-            #     len(self.inputs.stacks_order)) + 'V.txt',
-            #       '    --->     ',
-            #       self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(
-            #           self.inputs.sr_id) + '_T2w_from-origin_to-SDI_mode-image_xfm.txt')
-            self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_nlm_uni_bcorr_histnorm_transform_' + str(
-                len(self.inputs.stacks_order)) + 'V.txt',
-                                  self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(
-                                      self.inputs.sr_id) + '_T2w_from-origin_to-SDI_mode-image_xfm.txt'))
-
-            # print(self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_uni_bcorr_histnorm_LRmask.nii.gz',
-            #       '    --->     ',
-            #       self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(self.inputs.sr_id) + '_T2w_desc-brain_mask.nii.gz')
-            self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) + '_T2w_uni_bcorr_histnorm_LRmask.nii.gz',
-                                  self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(
-                                      self.inputs.sr_id) + '_T2w_desc-brain_mask.nii.gz'))
-
-        # print('SDI_' + self.inputs.sub_ses + '_' + str(len(self.inputs.stacks_order)) + 'V_rad1.nii.gz',
-        #       '    --->     ',
-        #       self.inputs.sub_ses + '_rec-SDI' + '_id-' + str(self.inputs.sr_id) + '_T2w.nii.gz')
-        self.m_substitutions.append(('SDI_' + self.inputs.sub_ses + '_' + str(len(self.inputs.stacks_order)) + 'V_rad1.nii.gz',
-                              self.inputs.sub_ses + '_rec-SDI' + '_id-' + str(self.inputs.sr_id) + '_T2w.nii.gz'))
-
-        # print('SRTV_' + self.inputs.sub_ses + '_' + str(len(self.inputs.stacks_order)) + 'V_rad1_gbcorr.nii.gz',
-        #       '    --->     ',
-        #       self.inputs.sub_ses + '_rec-SR' + '_id-' + str(self.inputs.sr_id) + '_T2w.nii.gz')
-        self.m_substitutions.append(('SRTV_' + self.inputs.sub_ses + '_' + str(len(self.inputs.stacks_order)) + 'V_rad1_gbcorr.nii.gz',
-                              self.inputs.sub_ses + '_rec-SR' + '_id-' + str(self.inputs.sr_id) + '_T2w.nii.gz'))
-
-        # print('SRTV_' + self.inputs.sub_ses + '_' + str(len(self.inputs.stacks_order)) + 'V_rad1.json',
-        #       '    --->     ',
-        #       self.inputs.sub_ses + '_rec-SR' + '_id-' + str(self.inputs.sr_id) + '_T2w.json')
-        self.m_substitutions.append(('SRTV_' + self.inputs.sub_ses + '_' + str(len(self.inputs.stacks_order)) + 'V_rad1.json',
-                              self.inputs.sub_ses + '_rec-SR' + '_id-' + str(self.inputs.sr_id) + '_T2w.json'))
-
-        # print(self.inputs.sub_ses + '_T2w_uni_bcorr_histnorm_srMask.nii.gz',
-        #       '    --->     ',
-        #       self.inputs.sub_ses + '_rec-SR' + '_id-' + str(self.inputs.sr_id) + '_T2w_desc-brain_mask.nii.gz')
+                self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) +
+                                             '_T2w_brainMask.nii.gz',
+                                            self.inputs.sub_ses + '_run-' + str(stack) +
+                                             '_desc-brain_mask.nii.gz'))
+
+            self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) +
+                                         '_T2w_uni_bcorr_histnorm.nii.gz',
+                                        self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(
+                                        self.inputs.sr_id) + '_desc-preprocSR_T2w.nii.gz'))
+
+            self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) +
+                                         '_T2w_nlm_uni_bcorr_histnorm_transform_' + str(
+                                        len(self.inputs.stacks_order)) + 'V.txt',
+                                        self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(
+                                        self.inputs.sr_id) + '_T2w_from-origin_to-SDI_mode-image_xfm.txt'))
+
+            self.m_substitutions.append((self.inputs.sub_ses + '_run-' + str(stack) +
+                                         '_T2w_uni_bcorr_histnorm_LRmask.nii.gz',
+                                        self.inputs.sub_ses + '_run-' + str(stack) + '_id-' + str(
+                                        self.inputs.sr_id) + '_T2w_desc-brain_mask.nii.gz'))
+
+        self.m_substitutions.append(('SDI_' + self.inputs.sub_ses + '_' +
+                                     str(len(self.inputs.stacks_order)) + 'V_rad1.nii.gz',
+                                     self.inputs.sub_ses + '_rec-SDI' + '_id-' +
+                                     str(self.inputs.sr_id) + '_T2w.nii.gz'))
+
+        self.m_substitutions.append(('SRTV_' + self.inputs.sub_ses + '_' +
+                                     str(len(self.inputs.stacks_order)) + 'V_rad1_gbcorr.nii.gz',
+                                    self.inputs.sub_ses + '_rec-SR' + '_id-' +
+                                     str(self.inputs.sr_id) + '_T2w.nii.gz'))
+
+        self.m_substitutions.append(('SRTV_' + self.inputs.sub_ses + '_' +
+                                     str(len(self.inputs.stacks_order)) + 'V_rad1.json',
+                                    self.inputs.sub_ses + '_rec-SR' + '_id-' +
+                                     str(self.inputs.sr_id) + '_T2w.json'))
+
         self.m_substitutions.append((self.inputs.sub_ses + '_T2w_uni_bcorr_histnorm_srMask.nii.gz',
-                                     self.inputs.sub_ses + '_rec-SR' + '_id-' + str(self.inputs.sr_id) + '_T2w_desc-brain_mask.nii.gz'))
+                                     self.inputs.sub_ses + '_rec-SR' +
+                                     '_id-' + str(self.inputs.sr_id) +
+                                     '_T2w_desc-brain_mask.nii.gz'))
+
+        self.m_substitutions.append(('SRTV_' + self.inputs.sub_ses +
+                                     '_' + str(len(self.inputs.stacks_order)) +
+                                     'V_rad1_srMask.nii.gz',
+                                     self.inputs.sub_ses + '_rec-SR' +
+                                     '_id-' + str(self.inputs.sr_id) + '_T2w_desc-brain_mask.nii.gz'))
 
         return runtime
 
@@ -329,19 +320,33 @@ def _list_outputs(self):
         return outputs
 
 
-
 def binarize_image(input_image):
+    """Binarize an image and save the mask.
+
+    Parameters
+    ----------
+    input_image : string
+        Path of input image
+
+    Returns
+    -------
+    output_mask : string
+        Absolute path of output mask
+
+    """
     import nibabel as nib
     import os
     from nipype.utils.filemanip import split_filename
 
     im = nib.load(input_image)
 
-    out = nib.Nifti1Image(dataobj=(im.get_fdata() > 0.01).astype(int), affine=im.affine)
+    out = nib.Nifti1Image(dataobj=(im.get_fdata() > 0.01).astype(int),
+                          affine=im.affine)
     out._header = im.header
 
-    _,name,ext = split_filename(input_image)
+    _, name, ext = split_filename(input_image)
     output_mask = name + '_srMask' + ext
     nib.save(filename=output_mask, img=out)
+    output_mask = os.path.abspath(output_mask)
 
-    return os.path.abspath(output_mask)
\ No newline at end of file
+    return output_mask
diff --git a/pymialsrtk/interfaces/preprocess.py b/pymialsrtk/interfaces/preprocess.py
index 2b7882dc9..7e364c41e 100644
--- a/pymialsrtk/interfaces/preprocess.py
+++ b/pymialsrtk/interfaces/preprocess.py
@@ -15,16 +15,17 @@
 from glob import glob
 
 import numpy as np
+from traits.api import *
+
 import nibabel
 import cv2
 import skimage.measure
-
 import scipy.ndimage as snd
 from skimage import morphology
 from scipy.signal import argrelextrema
 
 try:
-    import tensorflow as tf
+    import tensorflow.compat.v1 as tf
 except ImportError:
     print("Tensorflow not available. Can not run brain extraction")
 
@@ -34,9 +35,6 @@
 except ImportError:
     print("tflearn not available. Can not run brain extraction")
 
-
-from traits.api import *
-
 from nipype.utils.filemanip import split_filename
 from nipype.interfaces.base import traits, \
     TraitedSpec, File, InputMultiPath, OutputMultiPath, BaseInterface, BaseInterfaceInputSpec
diff --git a/pymialsrtk/interfaces/utils.py b/pymialsrtk/interfaces/utils.py
index bb96294f1..f669a8029 100644
--- a/pymialsrtk/interfaces/utils.py
+++ b/pymialsrtk/interfaces/utils.py
@@ -15,13 +15,13 @@ def run(command, env=None, cwd=None):
 
     Parameters
     ----------
-    command <string>
+    command : string
         String containing the command to be executed (required)
 
-    env <os.environ>
+    env : os.environ
         Specify a custom os.environ
 
-    cwd <Directory>
+    cwd : Directory
         Specify a custom current working directory
 
     Examples
@@ -56,7 +56,7 @@ def sort_ascending(p_files):
 
     Parameters
     ----------
-    p_files <list<string>>
+    p_files : list
         List of image paths to be sorted in ascending order
 
     Examples
diff --git a/pymialsrtk/parser.py b/pymialsrtk/parser.py
index ece2d9937..e0b5ceea4 100644
--- a/pymialsrtk/parser.py
+++ b/pymialsrtk/parser.py
@@ -59,9 +59,23 @@ def get_parser():
                    default=0,
                    type=int)
 
+    p.add_argument('--memory',
+                   help='Limit the workflow to using the amount of specified memory [in gb] '
+                        '(Default: 0, the workflow memory consumption is not limited)',
+                   default=0,
+                   type=int)
+
     p.add_argument('--masks_derivatives_dir',
                    help='Use manual brain masks found in '
                         '``<output_dir>/<masks_derivatives_dir>/ directory`` directory')
+
+    p.add_argument('--profiling',
+                   help='Save node runtime statistics (processing times, number of threads, memory) '
+                        'in a JSON-style `run_stats.log` and in the form '
+                        'of a gantt chart in a HTML `run_stats.log.html`',
+                   action='store_true',
+                   default=False)
+
     p.add_argument('-v', '--version',
                    action='version',
                    version=f'BIDS-App MIALSRTK version {__version__} (Released: {__release_date__})')
diff --git a/pymialsrtk/pipelines/anatomical/srr.py b/pymialsrtk/pipelines/anatomical/srr.py
index 26e52cdb6..c81a9f9b1 100644
--- a/pymialsrtk/pipelines/anatomical/srr.py
+++ b/pymialsrtk/pipelines/anatomical/srr.py
@@ -9,17 +9,18 @@
 import pkg_resources
 
 from nipype import config, logging
+
 # from nipype.interfaces.io import BIDSDataGrabber
 from nipype.interfaces.io import DataGrabber, DataSink
 from nipype.pipeline import Node, MapNode, Workflow
 from nipype.interfaces.utility import IdentityInterface, Function
 
-
 # Import the implemented interface from pymialsrtk
 import pymialsrtk.interfaces.preprocess as preprocess
 import pymialsrtk.interfaces.reconstruction as reconstruction
 import pymialsrtk.interfaces.postprocess as postprocess
 import pymialsrtk.interfaces.utils as utils
+from pymialsrtk.utils.monitoring import log_nodes_cb, generate_gantt_chart
 
 # Get pymialsrtk version
 from pymialsrtk.info import __version__
@@ -30,55 +31,58 @@ class AnatomicalPipeline:
 
     Attributes
     -----------
-    bids_dir <string>
+    pipeline_name : string
+        BIDS root directory (required)
+
+    bids_dir : string
         BIDS root directory (required)
 
-    output_dir <string>
+    output_dir : string
         Output derivatives directory (required)
 
-    subject <string>
+    subject : string
         Subject ID (in the form ``sub-XX``)
 
-    wf <nipype.pipeline.Workflow>
+    wf : nipype.pipeline.Workflow
         Nipype workflow of the reconstruction pipeline
 
-    dictsink <nipype.interfaces.io.JSONFileSink>
+    dictsink : nipype.interfaces.io.JSONFileSink
         Nipype node used to generate a JSON file that store provenance metadata
         for the SR-reconstructed images
 
-    deltatTV <string>
+    deltatTV : string
         Super-resolution optimization time-step
 
-    lambdaTV <Float>
+    lambdaTV : float
         Regularization weight (default is 0.75)
 
-    primal_dual_loops <string>
+    primal_dual_loops : string
         Number of primal/dual loops used in the optimization of the total-variation
         super-resolution algorithm.
 
-    sr_id <string>
+    sr_id : string
         ID of the reconstruction useful to distinguish when multiple reconstructions
         with different order of stacks are run on the same subject
 
-    session <string>
+    session : string
         Session ID if applicable (in the form ``ses-YY``)
 
-    m_stacks list<<int>>
+    m_stacks : list(int)
         List of stack to be used in the reconstruction. The specified order is kept if `skip_stacks_ordering` is True.
 
-    m_masks_derivatives_dir <string>
+    m_masks_derivatives_dir : string
         directory basename in BIDS directory derivatives where to search for masks (optional)
 
-    m_skip_svr <bool>
+    m_skip_svr : bool
         Weither the Slice-to-Volume Registration should be skipped in the image reconstruction. (default is False)
 
-    m_do_refine_hr_mask <bool>
+    m_do_refine_hr_mask : bool
         Weither a refinement of the HR mask should be performed. (default is False)
 
-    m_skip_nlm_denoising <bool>
+    m_skip_nlm_denoising : bool
         Weither the NLM denoising preprocessing should be skipped. (default is False)
 
-    m_skip_stacks_ordering <bool> (optional)
+    m_skip_stacks_ordering : bool (optional)
         Weither the automatic stacks ordering should be skipped. (default is False)
 
 
@@ -86,16 +90,17 @@ class AnatomicalPipeline:
     --------
     >>> from pymialsrtk.pipelines.anatomical.srr import AnatomicalPipeline
     >>> # Create a new instance
-    >>> pipeline = AnatomicalPipeline('/path/to/bids_dir',
-                                  '/path/to/output_dir',
-                                  'sub-01',
-                                  [1,3,2,0],
-                                  01,
-                                  None,
-                                  paramTV={deltatTV = "0.001",
-                                           lambdaTV = "0.75",
-                                           primal_dual_loops = "20"},
-                                  use_manual_masks=False)
+    >>> pipeline = AnatomicalPipeline(pipeline_name='srr_pipeline',
+                                      '/path/to/bids_dir',
+                                      '/path/to/output_dir',
+                                      'sub-01',
+                                      [1,3,2,0],
+                                      01,
+                                      None,
+                                      paramTV={deltatTV = "0.001",
+                                               lambdaTV = "0.75",
+                                               primal_dual_loops = "20"},
+                                      use_manual_masks=False)
     >>> # Create the super resolution Nipype workflow
     >>> pipeline.create_workflow()
     >>> # Execute the workflow
@@ -103,6 +108,7 @@ class AnatomicalPipeline:
 
     """
 
+    pipeline_name = "srr_pipeline"
     bids_dir = None
     output_dir = None
     subject = None
@@ -163,12 +169,17 @@ def __init__(self, bids_dir, output_dir, subject, p_stacks=None, sr_id=1,
             self.m_skip_nlm_denoising =  False
             self.m_skip_stacks_ordering = False
 
-    def create_workflow(self):
+    def create_workflow(self, save_profiler_log=False):
         """Create the Niype workflow of the super-resolution pipeline.
 
         It is composed of a succession of Nodes and their corresponding parameters,
         where the output of node i goes to the input of node i+1.
 
+        Parameters
+        ----------
+        save_profiler_log : bool
+            If `True`, save node runtime statistics to a JSON-style log file.
+
         """
 
         sub_ses = self.subject
@@ -201,37 +212,60 @@ def create_workflow(self):
             os.makedirs(wf_base_dir)
         print("Process directory: {}".format(wf_base_dir))
 
-        # Workflow name cannot begin with a number (oterhwise ValueError)
-        pipeline_name = "srr_pipeline"
-
-        self.wf = Workflow(name=pipeline_name,base_dir=wf_base_dir)
-        # srr_nipype_dir = os.path.join(self.wf.base_dir, self.wf.name )
-
         # Initialization (Not sure we can control the name of nipype log)
         if os.path.isfile(os.path.join(wf_base_dir, "pypeline_" + sub_ses + ".log")):
             os.unlink(os.path.join(wf_base_dir, "pypeline_" + sub_ses + ".log"))
             # open(os.path.join(self.output_dir,"pypeline.log"), 'a').close()
 
-        config.update_config({'logging': {'log_directory': os.path.join(wf_base_dir),
-                                          'log_to_file': True},
-                              'execution': {
-                                  'remove_unnecessary_outputs': False,
-                                  'stop_on_first_crash': True,
-                                  'stop_on_first_rerun': False,
-                                  'crashfile_format': "txt",
-                                  'write_provenance': False},
-                              'monitoring': {'enabled': True}
-                              })
+        if save_profiler_log:
+            log_filename = os.path.join(wf_base_dir, 'pypeline_stats.log')
+            if os.path.isfile(log_filename):
+                os.unlink(log_filename)
 
-        # config.enable_provenance()
+        self.wf = Workflow(name=self.pipeline_name,base_dir=wf_base_dir)
+        # srr_nipype_dir = os.path.join(self.wf.base_dir, self.wf.name )
 
+        config.update_config(
+            {
+                'logging': {
+                      'log_directory': os.path.join(wf_base_dir),
+                      'log_to_file': True
+                },
+                'execution': {
+                    'remove_unnecessary_outputs': False,
+                    'stop_on_first_crash': True,
+                    'stop_on_first_rerun': False,
+                    'crashfile_format': "txt",
+                    'use_relative_paths': True,
+                    'write_provenance': False
+                }
+            }
+        )
+
+        if save_profiler_log:
+            config.update_config(
+                {
+                    'monitoring': {
+                            'enabled': save_profiler_log,
+                            'sample_frequency': "1.0",
+                            'summary_append': True
+                    }
+                }
+            )
+            config.enable_resource_monitor()
+
+        # Update logging with config
         logging.update_logging(config)
-        iflogger = logging.getLogger('nipype.interface')
 
+        # config.enable_provenance()
+
+        # Use nipype.interface logger to print some information messages
+        iflogger = logging.getLogger('nipype.interface')
         iflogger.info("**** Processing ****")
 
         if self.use_manual_masks:
-            dg = Node(interface=DataGrabber(outfields=['T2ws', 'masks']), name='data_grabber')
+            dg = Node(interface=DataGrabber(outfields=['T2ws', 'masks']),
+                      name='data_grabber')
 
             dg.inputs.base_directory = self.bids_dir
             dg.inputs.template = '*'
@@ -268,7 +302,8 @@ def create_workflow(self):
             dg.inputs.sort_filelist = True
 
             dg.inputs.field_template = dict(T2ws=os.path.join(self.subject,
-                                                              'anat', sub_ses+'*_run-*_T2w.nii.gz'))
+                                                              'anat',
+                                                              sub_ses+'*_run-*_T2w.nii.gz'))
             if self.session is not None:
                 dg.inputs.field_template = dict(T2ws=os.path.join(self.subject,
                                                                   self.session, 'anat', '_'.join([sub_ses, '*run-*', '*T2w.nii.gz'])))
@@ -299,7 +334,6 @@ def create_workflow(self):
         t2ws_filtered = Node(interface=preprocess.FilteringByRunid(), name='t2ws_filtered')
         masks_filtered = Node(interface=preprocess.FilteringByRunid(), name='masks_filtered')
 
-
         if not self.m_skip_stacks_ordering:
             stacksOrdering = Node(interface=preprocess.StacksOrdering(), name='stackOrdering')
         else:
@@ -335,8 +369,7 @@ def create_workflow(self):
                                                    iterfield=['in_file', 'in_mask', 'in_field'])
         srtkSliceBySliceCorrectBiasField.inputs.bids_dir = self.bids_dir
 
-
-    # 4-modules sequence to be defined as a stage.
+        # 4-modules sequence to be defined as a stage.
         if not self.m_skip_nlm_denoising:
             srtkCorrectSliceIntensity02_nlm = MapNode(interface=preprocess.MialsrtkCorrectSliceIntensity(),
                                                       name='srtkCorrectSliceIntensity02_nlm',
@@ -352,8 +385,7 @@ def create_workflow(self):
             srtkIntensityStandardization02_nlm = Node(interface=preprocess.MialsrtkIntensityStandardization(), name='srtkIntensityStandardization02_nlm')
             srtkIntensityStandardization02_nlm.inputs.bids_dir = self.bids_dir
 
-
-    # 4-modules sequence to be defined as a stage.
+        # 4-modules sequence to be defined as a stage.
         srtkCorrectSliceIntensity02 = MapNode(interface=preprocess.MialsrtkCorrectSliceIntensity(),
                                           name='srtkCorrectSliceIntensity02',
                                           iterfield=['in_file', 'in_mask'])
@@ -368,7 +400,6 @@ def create_workflow(self):
         srtkIntensityStandardization02 = Node(interface=preprocess.MialsrtkIntensityStandardization(), name='srtkIntensityStandardization02')
         srtkIntensityStandardization02.inputs.bids_dir = self.bids_dir
 
-
         srtkMaskImage01 = MapNode(interface=preprocess.MialsrtkMaskImage(),
                                   name='srtkMaskImage01',
                                   iterfield=['in_file', 'in_mask'])
@@ -408,10 +439,8 @@ def create_workflow(self):
         datasink = Node(DataSink(), name='data_sinker')
         datasink.inputs.base_directory = final_res_dir
 
-
-        # - Build workflow : connections of the nodes
-
-        # Nodes ready - Linking now
+        # Build workflow : connections of the nodes
+        # Nodes ready : Linking now
         if self.use_manual_masks:
             self.wf.connect(dg, "masks", brainMask, "out_file")
         else:
@@ -461,12 +490,10 @@ def create_workflow(self):
         self.wf.connect(masks_filtered, ("output_files", utils.sort_ascending), srtkCorrectSliceIntensity02, "in_mask")
         self.wf.connect(srtkCorrectSliceIntensity02, ("out_file", utils.sort_ascending), srtkIntensityStandardization01, "input_images")
 
-
         self.wf.connect(srtkIntensityStandardization01, ("output_images", utils.sort_ascending), srtkHistogramNormalization, "input_images")
         self.wf.connect(masks_filtered, ("output_files", utils.sort_ascending), srtkHistogramNormalization, "input_masks")
         self.wf.connect(srtkHistogramNormalization, ("output_images", utils.sort_ascending), srtkIntensityStandardization02, "input_images")
 
-
         if not self.m_skip_nlm_denoising:
             self.wf.connect(srtkIntensityStandardization02_nlm, ("output_images", utils.sort_ascending), srtkMaskImage01, "in_file")
             self.wf.connect(masks_filtered, ("output_files", utils.sort_ascending), srtkMaskImage01, "in_mask")
@@ -485,7 +512,6 @@ def create_workflow(self):
 
         self.wf.connect(srtkImageReconstruction, "output_sdi", srtkTVSuperResolution, "input_sdi")
 
-
         if self.m_do_refine_hr_mask:
             self.wf.connect(srtkIntensityStandardization02, ("output_images", utils.sort_ascending), srtkHRMask, "input_images")
             self.wf.connect(masks_filtered, ("output_files", utils.sort_ascending), srtkHRMask, "input_masks")
@@ -497,7 +523,6 @@ def create_workflow(self):
         self.wf.connect(srtkTVSuperResolution, "output_sr", srtkMaskImage02, "in_file")
         self.wf.connect(srtkHRMask, "output_srmask", srtkMaskImage02, "in_mask")
 
-
         self.wf.connect(srtkTVSuperResolution, "output_sr", srtkN4BiasFieldCorrection, "input_image")
         self.wf.connect(srtkHRMask, "output_srmask", srtkN4BiasFieldCorrection, "input_mask")
 
@@ -514,7 +539,7 @@ def create_workflow(self):
         self.wf.connect(srtkTVSuperResolution, "output_json_path", datasink, 'anat.@SRjson')
         self.wf.connect(srtkHRMask, "output_srmask", datasink, 'anat.@SRmask')
 
-    def run(self, number_of_cores=1):
+    def run(self, number_of_cores=1, memory=None, save_profiler_log=False):
         """Execute the workflow of the super-resolution reconstruction pipeline.
 
         Nipype execution engine will take care of the management and execution of
@@ -524,16 +549,50 @@ def run(self, number_of_cores=1):
 
         Parameters
         ----------
-        number_of_cores <int>
+        number_of_cores : int
             Number of cores / CPUs used by the workflow
 
-        """
+        memory : int
+            Maximal memory used by the workflow
 
+        save_profiler_log : bool
+            If `True`, generates the profiling callback log
+            (Default: `False`)
+        """
         self.wf.write_graph(dotfilename='graph.dot', graph2use='colored', format='png', simple_form=True)
-        if number_of_cores > 1:
-            res = self.wf.run(plugin='MultiProc', plugin_args={'n_procs': number_of_cores})
 
-        else:
-            res = self.wf.run()
+        # Create dictionary of arguments passed to plugin_args
+        args_dict = {
+            'maxtasksperchild': 1,
+            'raise_insufficient': False,
+            'n_procs': number_of_cores
+        }
+
+        if (memory is not None) and (memory > 0):
+            args_dict['memory_gb'] = memory
+
+        if save_profiler_log:
+            args_dict['status_callback'] = log_nodes_cb
+            # Set path to log file and create callback logger
+            callback_log_path = os.path.join(self.wf.base_dir,
+                                             self.wf.name,
+                                             'run_stats.log')
+            import logging
+            import logging.handlers
+            logger = logging.getLogger('callback')
+            logger.setLevel(logging.DEBUG)
+            handler = logging.FileHandler(callback_log_path)
+            logger.addHandler(handler)
+
+        res = self.wf.run(plugin='MultiProc',
+                          plugin_args=args_dict)
+
+        if save_profiler_log:
+            generate_gantt_chart(logfile=callback_log_path,
+                                 cores=number_of_cores,
+                                 minute_scale=10,
+                                 space_between_minutes=50,
+                                 pipeline_name=os.path.join(self.wf.base_dir,
+                                                            self.wf.name))
 
         return res
diff --git a/pymialsrtk/utils/__init__.py b/pymialsrtk/utils/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/pymialsrtk/utils/monitoring.py b/pymialsrtk/utils/monitoring.py
new file mode 100644
index 000000000..c8822c96e
--- /dev/null
+++ b/pymialsrtk/utils/monitoring.py
@@ -0,0 +1,462 @@
+# Copyright © 2016-2021 Medical Image Analysis Laboratory, University Hospital Center and University of Lausanne (UNIL-CHUV), Switzerland
+#
+#  This software is distributed under the open-source license Modified BSD.
+
+"""PyMIALSRTK utils functions for resource monitoring originated from Nipype.
+
+See https://nipype.readthedocs.io/en/latest/api/generated/nipype.utils.profiler.html for Nipype's documentation.
+See https://nipype.readthedocs.io/en/latest/api/generated/nipype.utils.draw_gantt_chart.html
+"""
+# Import packages
+import datetime
+import simplejson as json
+
+from nipype.utils.draw_gantt_chart import calculate_resource_timeseries,\
+    create_event_dict, draw_nodes, draw_lines
+
+# Pandas
+try:
+    import pandas as pd
+except ImportError:
+    print(
+        "Pandas not found; in order for full functionality of this module "
+        "install the pandas package"
+    )
+    pass
+
+
+# Log node stats function
+def log_nodes_cb(node, status):
+    """Function to record node run statistics to a log file as json
+    dictionaries (source: https://github.com/nipy/nipype/blob/10388b0bb5d341628b68258f655b9f86fb2cf5a6/nipype/utils/profiler.py#L111-L153)
+
+    Modified to ignore mapnodes.
+
+    Parameters
+    ----------
+    node : nipype.pipeline.engine.Node
+        the node being logged
+
+    status : string
+        acceptable values are 'start', 'end'; otherwise it is
+        considered and error
+
+    Returns
+    -------
+    None
+        this function does not return any values, it logs the node
+        status info to the callback logger
+
+    """
+    if status != "end":
+        return
+
+    # Ignore MapNodes by checking for lists, since
+    # the subnodes already called
+    # source: https://github.com/nipy/nipype/issues/2571#issuecomment-396209516
+    if isinstance(node.result.runtime, list):
+        return
+
+    # Import packages
+    import logging
+    import json
+
+    status_dict = {
+        "name": node.name,
+        "id": node._id,
+        "start": getattr(node.result.runtime, "startTime"),
+        "finish": getattr(node.result.runtime, "endTime"),
+        "duration": getattr(node.result.runtime, "duration"),
+        "runtime_threads": getattr(node.result.runtime, "cpu_percent", "N/A"),
+        "runtime_memory_gb": getattr(node.result.runtime, "mem_peak_gb", "N/A"),
+        "estimated_memory_gb": node.mem_gb,
+        "num_threads": node.n_procs,
+    }
+
+    if status_dict["start"] is None or status_dict["finish"] is None:
+        status_dict["error"] = True
+
+    # Dump string to log
+    logging.getLogger("callback").debug(json.dumps(status_dict))
+
+
+def log_to_dict(logfile):
+    """
+    Function to extract log node dictionaries into a list of python
+    dictionaries and return the list as well as the final node
+
+    Parameters
+    ----------
+    logfile : string
+        path to the json-formatted log file generated from a nipype
+        workflow execution
+
+    Returns
+    -------
+    nodes_list : list
+        a list of python dictionaries containing the runtime info
+        for each nipype node
+
+    """
+    # Init variables
+    with open(logfile, "r") as content:
+        # read file separating each line
+        lines = content.readlines()
+
+    nodes_list = []
+    for l in lines:
+        node = json.loads(l)
+        node["start"] = datetime.datetime.strptime(node["start"],
+                                                   '%Y-%m-%dT%H:%M:%S.%f')
+        node["finish"] = datetime.datetime.strptime(node["finish"],
+                                                    '%Y-%m-%dT%H:%M:%S.%f')
+        nodes_list.append(node)
+
+    # Return list of nodes
+    return nodes_list
+
+
+def draw_resource_bar(
+    start_time,
+    finish_time,
+    time_series,
+    space_between_minutes,
+    minute_scale,
+    color,
+    left,
+    resource,
+    max_bar_width
+):
+    """Draw the resource bar in the resource monitoring gantt chart.
+
+    Parameters
+    ----------
+    start_time : datatime.DateTime
+        node start datetime
+
+    finish_time : datatime.DateTime
+        Node finish datetime
+
+    time_series : pandas.Series
+        Node timeseries
+
+    space_between_minutes : int
+        Space between minutes
+
+    minute_scale : int
+        Scaling of space between minutes
+
+    color : string
+        Color hexadecimal code
+
+    left : int
+        Number of pixels to place to bar to the right of
+        the left edge
+
+    resource : 'Memory' or 'Threads'
+        Type of resource
+
+    max_bar_width : int
+        Maximal bar width in pixels
+
+    Returns
+    -------
+    result : string
+        Bar-formatted html string
+
+    """
+    # Memory header
+    result = "<p class='time' style='top:198px;left:%dpx;'>%s</p>" % (left, resource)
+    # Image scaling factors
+    scale = space_between_minutes / minute_scale
+    space_between_minutes = space_between_minutes / scale
+
+    # Iterate through time series
+    ts_items = time_series.items()
+
+    max_ts = time_series.max()
+    print(f'Max time series ({resource}): {max_ts}')
+
+    ts_len = len(time_series)
+    for idx, (ts_start, amount) in enumerate(ts_items):
+        if idx < ts_len - 1:
+            ts_end = time_series.index[idx + 1]
+        else:
+            ts_end = finish_time
+        # Calculate offset from start at top
+        offset = (
+            (ts_start - start_time).total_seconds() / 60.0
+        ) * scale * space_between_minutes + 220
+        # Scale duration
+        duration_mins = (ts_end - ts_start).total_seconds() / 60.0
+        height = duration_mins * scale * space_between_minutes
+        if height < 5:
+            height = 5
+        height -= 2
+
+        # Bar width is proportional to resource amount
+        width = amount * (max_bar_width / max_ts)
+
+        if resource.lower() == "memory":
+            label = "%.3f GB" % amount
+        else:
+            label = "%d threads" % amount
+
+        # Setup dictionary for bar html string insertion
+        bar_dict = {
+            "color": color,
+            "height": height,
+            "width": width,
+            "offset": offset,
+            "left": left,
+            "label": label,
+            "duration": duration_mins,
+            "start": ts_start.strftime("%Y-%m-%d %H:%M:%S"),
+            "finish": ts_end.strftime("%Y-%m-%d %H:%M:%S"),
+        }
+
+        bar_html = (
+            "<div class='bar' style='background-color:%(color)s;"
+            "height:%(height).3fpx;width:%(width).3fpx;"
+            "left:%(left)dpx; top:%(offset).3fpx;'"
+            "title='%(label)s\nduration:%(duration).3f minutes\n"
+            "start:%(start)s\nend:%(finish)s'></div>"
+        )
+        # Add another bar to html line
+        result += bar_html % bar_dict
+
+    # Return bar-formatted html string
+    return result
+
+
+def generate_gantt_chart(
+    logfile,
+    cores,
+    minute_scale=10,
+    space_between_minutes=50,
+    colors=["#7070FF", "#4E4EB2", "#2D2D66", "#9B9BFF"],
+    pipeline_name='Undefined',
+):
+    """
+    Generates a gantt chart in html showing the workflow execution based on a callback log file.
+    This script was intended to be used with the MultiprocPlugin.
+    The following code shows how to set up the workflow in order to generate the log file:
+
+    Parameters
+    ----------
+    logfile : string
+        filepath to the callback log file to plot the gantt chart of
+
+    cores : integer
+        the number of cores given to the workflow via the 'n_procs'
+        plugin arg
+
+    minute_scale : integer (optional); default=10
+        the scale, in minutes, at which to plot line markers for the
+        gantt chart; for example, minute_scale=10 means there are lines
+        drawn at every 10 minute interval from start to finish
+
+    space_between_minutes : integer (optional); default=50
+        scale factor in pixel spacing between minute line markers
+
+    colors : list (optional)
+        a list of colors to choose from when coloring the nodes in the
+        gantt chart
+
+    pipeline_name : string
+        The name of the pipeline to be displayed in the output HTML page
+        (Default: `'Undefined'`)
+
+    Returns
+    -------
+    None
+        the function does not return any value but writes out an html
+        file in the same directory as the callback log path passed in
+
+    Usage
+    -----
+    # import logging
+    # import logging.handlers
+    # from nipype.utils.profiler import log_nodes_cb
+    # log_filename = 'callback.log'
+    # logger = logging.getLogger('callback')
+    # logger.setLevel(logging.DEBUG)
+    # handler = logging.FileHandler(log_filename)
+    # logger.addHandler(handler)
+    # #create workflow
+    # workflow = ...
+    # workflow.run(plugin='MultiProc',
+    #     plugin_args={'n_procs':8, 'memory':12, 'status_callback': log_nodes_cb})
+    # generate_gantt_chart('callback.log', 8)
+
+    """
+    # add the html header
+    html_string = """<!DOCTYPE html>
+    <head>
+        <style>
+            #content{
+                width:99%;
+                height:100%;
+                position:absolute;
+            }
+            .node{
+                background-color:#7070FF;
+                border-radius: 5px;
+                position:absolute;
+                width:20px;
+                white-space:pre-wrap;
+            }
+            .line{
+                position: absolute;
+                color: #C2C2C2;
+                opacity: 0.5;
+                margin: 0px;
+            }
+            .time{
+                position: absolute;
+                font-size: 16px;
+                color: #666666;
+                margin: 0px;
+            }
+            .bar{
+                position: absolute;
+                height: 1px;
+                opacity: 0.7;
+            }
+            .dot{
+                position: absolute;
+                width: 1px;
+                height: 1px;
+                background-color: red;
+            }
+            .label {
+                width:20px;
+                height:20px;
+                opacity: 0.7;
+                display: inline-block;
+            }
+        </style>
+    </head>
+    <body>
+        <div id="content">
+            <div style="display:inline-block;">
+    """
+
+    close_header = """
+    </div>
+    <div style="display:inline-block;margin-left:60px;vertical-align: top;">
+        <p><span><div class="label" style="background-color:#90BBD7;"></div> Estimated Resource</span></p>
+        <p><span><div class="label" style="background-color:#03969D;"></div> Actual Resource</span></p>
+        <p><span><div class="label" style="background-color:#f00;"></div> Failed Node</span></p>
+    </div>
+    """
+
+    # Read in json-log to get list of node dicts
+    nodes_list = log_to_dict(logfile)
+
+    # Create the header of the report with useful information
+    start_node = nodes_list[0]
+    last_node = nodes_list[-1]
+
+    print(f'last_node["finish"]: {last_node["finish"]}')
+    print(f'start_node["start"] :{start_node["start"]}')
+
+    duration = (last_node["finish"] - start_node["start"]).total_seconds()
+
+    # Get events based dictionary of node run stats
+    events = create_event_dict(start_node["start"], nodes_list)
+
+    # Summary strings of workflow at top
+    html_string += "<p>Pipeline: " + pipeline_name + "</p>"
+    html_string += (
+        "<p>Start: " + start_node["start"].strftime("%Y-%m-%d %H:%M:%S") + "</p>"
+    )
+    html_string += (
+        "<p>Finish: " + last_node["finish"].strftime("%Y-%m-%d %H:%M:%S") + "</p>"
+    )
+    html_string += "<p>Duration: " + "{0:.2f}".format(duration / 60) + " minutes</p>"
+    html_string += "<p>Nodes: " + str(len(nodes_list)) + "</p>"
+    html_string += "<p>Cores: " + str(cores) + "</p>"
+    html_string += close_header
+    # Draw nipype nodes Gantt chart and runtimes
+    html_string += draw_lines(
+        start_node["start"], duration, minute_scale, space_between_minutes
+    )
+    html_string += draw_nodes(
+        start_node["start"],
+        nodes_list,
+        cores,
+        minute_scale,
+        space_between_minutes,
+        colors,
+    )
+
+    # Get memory timeseries
+    estimated_mem_ts = calculate_resource_timeseries(events, "estimated_memory_gb")
+    runtime_mem_ts = calculate_resource_timeseries(events, "runtime_memory_gb")
+    # Plot gantt chart
+
+    # Determine offset for 200px width
+    max_bar_width = 200
+    resource_offset = 120 + 30 * cores
+    html_string += draw_resource_bar(
+            start_node["start"],
+            last_node["finish"],
+            estimated_mem_ts,
+            space_between_minutes,
+            minute_scale,
+            "#90BBD7",
+            resource_offset + max_bar_width + 120,
+            "Memory",
+            max_bar_width
+    )
+    html_string += draw_resource_bar(
+            start_node["start"],
+            last_node["finish"],
+            runtime_mem_ts,
+            space_between_minutes,
+            minute_scale,
+            "#03969D",
+            resource_offset + max_bar_width + 120,
+            "Memory",
+            max_bar_width
+    )
+
+    # Get threads timeseries
+    estimated_threads_ts = calculate_resource_timeseries(events, "estimated_threads")
+    runtime_threads_ts = calculate_resource_timeseries(events, "runtime_threads")
+
+    print(f'estimated threads: {estimated_threads_ts.max()}')
+    print(f'runtime threads: {runtime_threads_ts.max()}')
+
+    html_string += draw_resource_bar(
+            start_node["start"],
+            last_node["finish"],
+            estimated_threads_ts,
+            space_between_minutes,
+            minute_scale,
+            "#90BBD7",
+            resource_offset,
+            "Threads",
+            max_bar_width
+    )
+    html_string += draw_resource_bar(
+            start_node["start"],
+            last_node["finish"],
+            runtime_threads_ts,
+            space_between_minutes,
+            minute_scale,
+            "#03969D",
+            resource_offset,
+            "Threads",
+            max_bar_width
+    )
+
+    # finish html
+    html_string += """
+        </div>
+    </body>"""
+
+    # save file
+    with open(logfile + ".html", "w") as html_file:
+        html_file.write(html_string)
\ No newline at end of file
diff --git a/setup.py b/setup.py
index ca7e97dc8..fe085a489 100644
--- a/setup.py
+++ b/setup.py
@@ -19,7 +19,8 @@
             "pymialsrtk.cli",
             "pymialsrtk.interfaces",
             "pymialsrtk.pipelines",
-            "pymialsrtk.pipelines.anatomical"]
+            "pymialsrtk.pipelines.anatomical",
+            "pymialsrtk.utils"]
 
 package_data = {"pymialsrtk":
                 ['data/Network_checkpoints/Network_checkpoints_localization/*',
diff --git a/setup_pypi.py b/setup_pypi.py
index b6be3d8fb..e983522a2 100644
--- a/setup_pypi.py
+++ b/setup_pypi.py
@@ -19,7 +19,8 @@
             "pymialsrtk.cli",
             "pymialsrtk.interfaces",
             "pymialsrtk.pipelines",
-            "pymialsrtk.pipelines.anatomical"]
+            "pymialsrtk.pipelines.anatomical",
+            "pymialsrtk.utils"]
 
 # Extract package requirements from Conda environment.yml
 include_conda_pip_dependencies = False


Test patch:
diff --git a/.circleci/test-01_outputs.txt b/.circleci/test-01_outputs.txt
index 8d4ff2529..25ce97a24 100644
--- a/.circleci/test-01_outputs.txt
+++ b/.circleci/test-01_outputs.txt
@@ -418,8 +418,8 @@ pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage012/sub-01_run-3_id-1_desc-prepro
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage013/sub-01_run-4_id-1_desc-preprocSDI_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage014/sub-01_run-5_id-1_desc-preprocSDI_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage015/sub-01_run-6_id-1_desc-preprocSDI_T2w.nii.gz
-pymialsrtk-2.0.2-dev/sub-01/anat/SRTV_sub-01_6V_rad1_srMask.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SDI_id-1_T2w.nii.gz
+pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w_desc-brain_mask.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w.json
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_run-1_id-1_desc-preprocSR_T2w.nii.gz
diff --git a/.circleci/test-02_outputs.txt b/.circleci/test-02_outputs.txt
index 59b6e3c9a..047931d62 100644
--- a/.circleci/test-02_outputs.txt
+++ b/.circleci/test-02_outputs.txt
@@ -59,6 +59,9 @@ nipype/sub-01/rec-1/srr_pipeline/nlmDenoise/mapflow/_nlmDenoise2/sub-01_run-6_T2
 nipype/sub-01/rec-1/srr_pipeline/nlmDenoise/_node.pklz
 nipype/sub-01/rec-1/srr_pipeline/nlmDenoise/_report/report.rst
 nipype/sub-01/rec-1/srr_pipeline/nlmDenoise/result_nlmDenoise.pklz
+nipype/sub-01/rec-1/srr_pipeline/resource_monitor.json
+nipype/sub-01/rec-1/srr_pipeline/run_stats.log
+nipype/sub-01/rec-1/srr_pipeline/run_stats.log.html
 nipype/sub-01/rec-1/srr_pipeline/srtkCorrectSliceIntensity01/_inputs.pklz
 nipype/sub-01/rec-1/srr_pipeline/srtkCorrectSliceIntensity01/mapflow/_srtkCorrectSliceIntensity010/_inputs.pklz
 nipype/sub-01/rec-1/srr_pipeline/srtkCorrectSliceIntensity01/mapflow/_srtkCorrectSliceIntensity010/_node.pklz
@@ -284,8 +287,8 @@ pymialsrtk-2.0.2-dev/sub-01/anat/_brainExtraction2/sub-01_run-6_desc-brain_mask.
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage010/sub-01_run-1_id-1_desc-preprocSDI_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage011/sub-01_run-3_id-1_desc-preprocSDI_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage012/sub-01_run-6_id-1_desc-preprocSDI_T2w.nii.gz
-pymialsrtk-2.0.2-dev/sub-01/anat/SRTV_sub-01_3V_rad1_srMask.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SDI_id-1_T2w.nii.gz
+pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w_desc-brain_mask.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w.json
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_run-1_id-1_desc-preprocSR_T2w.nii.gz
diff --git a/.circleci/test-03_outputs.txt b/.circleci/test-03_outputs.txt
index 8d4ff2529..25ce97a24 100644
--- a/.circleci/test-03_outputs.txt
+++ b/.circleci/test-03_outputs.txt
@@ -418,8 +418,8 @@ pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage012/sub-01_run-3_id-1_desc-prepro
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage013/sub-01_run-4_id-1_desc-preprocSDI_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage014/sub-01_run-5_id-1_desc-preprocSDI_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage015/sub-01_run-6_id-1_desc-preprocSDI_T2w.nii.gz
-pymialsrtk-2.0.2-dev/sub-01/anat/SRTV_sub-01_6V_rad1_srMask.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SDI_id-1_T2w.nii.gz
+pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w_desc-brain_mask.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w.json
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_run-1_id-1_desc-preprocSR_T2w.nii.gz
diff --git a/.circleci/test-04_outputs.txt b/.circleci/test-04_outputs.txt
index 59b6e3c9a..047931d62 100644
--- a/.circleci/test-04_outputs.txt
+++ b/.circleci/test-04_outputs.txt
@@ -59,6 +59,9 @@ nipype/sub-01/rec-1/srr_pipeline/nlmDenoise/mapflow/_nlmDenoise2/sub-01_run-6_T2
 nipype/sub-01/rec-1/srr_pipeline/nlmDenoise/_node.pklz
 nipype/sub-01/rec-1/srr_pipeline/nlmDenoise/_report/report.rst
 nipype/sub-01/rec-1/srr_pipeline/nlmDenoise/result_nlmDenoise.pklz
+nipype/sub-01/rec-1/srr_pipeline/resource_monitor.json
+nipype/sub-01/rec-1/srr_pipeline/run_stats.log
+nipype/sub-01/rec-1/srr_pipeline/run_stats.log.html
 nipype/sub-01/rec-1/srr_pipeline/srtkCorrectSliceIntensity01/_inputs.pklz
 nipype/sub-01/rec-1/srr_pipeline/srtkCorrectSliceIntensity01/mapflow/_srtkCorrectSliceIntensity010/_inputs.pklz
 nipype/sub-01/rec-1/srr_pipeline/srtkCorrectSliceIntensity01/mapflow/_srtkCorrectSliceIntensity010/_node.pklz
@@ -284,8 +287,8 @@ pymialsrtk-2.0.2-dev/sub-01/anat/_brainExtraction2/sub-01_run-6_desc-brain_mask.
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage010/sub-01_run-1_id-1_desc-preprocSDI_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage011/sub-01_run-3_id-1_desc-preprocSDI_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/_srtkMaskImage012/sub-01_run-6_id-1_desc-preprocSDI_T2w.nii.gz
-pymialsrtk-2.0.2-dev/sub-01/anat/SRTV_sub-01_3V_rad1_srMask.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SDI_id-1_T2w.nii.gz
+pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w_desc-brain_mask.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w.json
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_rec-SR_id-1_T2w.nii.gz
 pymialsrtk-2.0.2-dev/sub-01/anat/sub-01_run-1_id-1_desc-preprocSR_T2w.nii.gz