From 598909e2e384c7f3243b5756381e7f833fd4106c Mon Sep 17 00:00:00 2001
From: Whitney Armstrong <warmstrong@anl.gov>
Date: Mon, 16 Aug 2021 05:53:39 +0000
Subject: [PATCH] Resolve "view14 is storing 2 GB of artifacts"

---
 .gitlab-ci.yml                 |   9 +-
 bin/generate_prim_file         | 156 +++++++++++++++++++++++++++++++++
 bin/make_dawn_views            |  90 +++----------------
 scripts/view11/.DAWN_1.history |  31 +++++++
 scripts/view12/.DAWN_1.history |  31 +++++++
 scripts/view12/generate_eps    |  11 ---
 scripts/view13/generate_eps    |   2 +-
 scripts/view14/.DAWN_1.history |  31 +++++++
 scripts/view14/generate_eps    |  16 ----
 scripts/view15/.DAWN_1.history |  31 +++++++
 scripts/view2/.DAWN_1.history  |   2 +-
 scripts/view5/.DAWN_1.history  |  31 +++++++
 scripts/view6/.DAWN_1.history  |  31 +++++++
 views/generate_prim_files.yml  |  38 ++++++++
 views/view1.yml                |  19 ++--
 views/view11.yml               |  34 +++++--
 views/view12.yml               |   5 +-
 views/view13.yml               |   5 +-
 views/view14.yml               |   5 +-
 views/view15.yml               |   5 +-
 views/view2.yml                |  24 +++--
 views/view20.yml               |  15 +++-
 views/view3.yml                |  17 +++-
 views/view6.yml                |  29 ++++--
 views/view7.yml                |  17 +++-
 25 files changed, 535 insertions(+), 150 deletions(-)
 create mode 100755 bin/generate_prim_file
 create mode 100644 scripts/view11/.DAWN_1.history
 create mode 100644 scripts/view12/.DAWN_1.history
 create mode 100644 scripts/view14/.DAWN_1.history
 create mode 100644 scripts/view15/.DAWN_1.history
 create mode 100644 scripts/view5/.DAWN_1.history
 create mode 100644 scripts/view6/.DAWN_1.history
 create mode 100644 views/generate_prim_files.yml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c11ac339..4571beda 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,7 +33,6 @@ stages:
   - build
   - test
   - docs
-  - test 
   - collect
   - finalize 
   - deploy
@@ -77,22 +76,18 @@ build:simple:
     - mkdir -p build && cd build && cmake ../. -DCMAKE_INSTALL_PREFIX=/usr/local && make -j20 && make install  && cd ..
     - echo "Build successful."
 
+
 .views:
   stage: docs
   before_script:
     - source .local/bin/env.sh
-      #    - sed -i 's?<support inside?<\!--support inside?' compact/ecal_barrel_hybrid.xml 
-      #    - sed -i 's?</support>?</support-->?' compact/ecal_barrel_hybrid.xml
-      #    - sed -i 's?<fiber material?<\!--fiber material?' compact/ecal_barrel_interlayers.xml 
-      #    - sed -i 's?</fiber>?</fiber-->?' compact/ecal_barrel_interlayers.xml
-      #    - echo $DETECTOR_PATH
-      #    - cp compact/ecal_barrel_interlayers.xml ${DETECTOR_PATH}/compact/ecal_barrel_interlayers.xml
     - env
     - pip3 install psutil
   needs:
     - ["common:detector"]
 
 include:
+  - local: 'views/generate_prim_files.yml'
   - local: 'views/view1.yml'
   - local: 'views/view2.yml'
   - local: 'views/view3.yml'
diff --git a/bin/generate_prim_file b/bin/generate_prim_file
new file mode 100755
index 00000000..2274f061
--- /dev/null
+++ b/bin/generate_prim_file
@@ -0,0 +1,156 @@
+#!/usr/local/bin/python
+
+# same as make_dawn_views but stops at generating the prim file.
+# W. Armstrong (ANL), original bash script
+# C. Peng (ANL), translate to python and add flexible run time for simulation
+
+import os
+import signal
+import subprocess
+import argparse
+import atexit
+import time
+from datetime import datetime
+import fcntl
+import psutil
+
+
+def readline_nonblocking(output):
+    fd = output.fileno()
+    fl = fcntl.fcntl(fd, fcntl.F_GETFL)
+    fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
+    try:
+        return output.readline()
+    except:
+        return ''
+
+
+# arguments
+parser = argparse.ArgumentParser()
+
+parser.add_argument('-c', '--compact-file', type=str, dest='compact',
+        default=os.path.join(os.environ.get('DETECTOR_PATH', '.'), 'athena.xml'),
+        help='Top level compact file for detectors')
+
+parser.add_argument('-s', '--skip', type=int,
+        default=0,
+        help='Number of events number to skip in the input')
+
+parser.add_argument('-i', '--input', type=str,
+        default='scripts/input_data/few_events.hepmc',
+        help='Input hepmc file')
+
+parser.add_argument('-o', '--output-dir', type=str, dest='out_dir',
+        default='sim_output',
+        help='output directory')
+
+parser.add_argument('-D', '--detector-only', action='store_true', dest='detector_only',
+        help='only generate the prim files for the detector geometry')
+
+parser.add_argument('-t', '--tag', type=str,dest='file_tag',
+        default='view',
+        help='Output file tag')
+
+parser.add_argument('--timeout', type=int,
+        default=60,
+        help='Timeout in seconds')
+        
+parser.add_argument('passthrough', nargs='*')
+
+args = parser.parse_args()
+
+macro = 'macro/dawn_picture.mac' if args.detector_only else 'macro/dawn_picture2.mac'
+
+# raise error if cannot create a temporary working dir
+# os.makedirs('dawn_view_tmp', exist_ok=False)
+os.makedirs(args.out_dir, exist_ok=True)
+
+# use absolute path so the chdir does not affect them
+args.input = os.path.abspath(args.input)
+args.out_dir = os.path.abspath(args.out_dir)
+args.compact = os.path.abspath(args.compact)
+macro = os.path.abspath(macro)
+
+prim_file = 'g4_0000.prim'
+dawn_env = os.environ.copy()
+dawn_env['DAWN_BATCH'] = 'a'
+# sdir = os.path.dirname(os.path.realpath(__file__))
+
+# Using a python warpper such as npsim introduces some problem in managing the subprocess.
+# The process1 managed by subprocess will generate another process with proc2_pid = proc1_pid + 1, which will not
+# be terminated by terminating or killing the process1.
+# In addition, running Geant4 with vis mode will never exit automatically (it waits for input).
+# Thus the created process 2 will occupy the system resources.
+sim_cmd = ['npsim', '--runType', 'vis',
+        '--compact', args.compact,
+        '--inputFiles', args.input,
+        '--outputFile', 'derp.root',
+        '--numberOfEvents', '1',
+        '--skipNEvents', str(args.skip),
+        '--macroFile', macro]
+
+start = datetime.now()
+elapse = datetime.now() - start
+last_update = datetime.now()
+finished = False
+
+# run simulation
+print(' '.join(sim_cmd))
+p = subprocess.Popen(args=sim_cmd, env=dawn_env,
+                     stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
+__child_pid = p.pid
+while elapse.seconds < args.timeout:
+    line = readline_nonblocking(p.stdout)
+    elapse = datetime.now() - start
+    time_left = args.timeout - elapse.seconds
+    time_str = '[{:02d}:{:02d}]'.format(elapse.seconds // 60, elapse.seconds % 60)
+
+    if time_left < 10:
+        print('{} === TIMEOUT ===: Terminating in {:d} seconds'.format(time_str, time_left))
+
+    if line:
+        decoded_line = line.decode('utf-8').strip()
+        print('{} {}'.format(time_str, decoded_line))
+        # what we are looking for
+        if decoded_line == 'File  {}  is generated.'.format(prim_file):
+            print('{} === FINISHED ===: Got the prim file, terminating.'.format(time_str))
+            finished = True
+            break
+        if decoded_line == 'Idle>':
+            p.stdin.write(b'exit')
+            break
+        # do not sleep
+        continue
+
+    # ended early before file
+    if p.poll() is not None:
+        print(p.poll())
+        break
+
+    time.sleep(1)
+
+p.kill()
+# use to kill the subprocess generated from the python wrapper
+# this is unsafe so maybe more checks required
+for proc in psutil.process_iter():
+    pinfo = proc.as_dict(attrs=['pid', 'name', 'create_time'])
+    if pinfo['pid'] == p.pid + 1 and pinfo['name'] == 'python':
+        print('kill {}, generated from {}'.format(pinfo, p.pid))
+        os.kill(pinfo['pid'], signal.SIGTERM)
+
+line = b'stderr outputs:\n'
+while line:
+    print(line.decode('utf-8'), end='')
+    line = readline_nonblocking(p.stderr)
+
+if finished:
+    print('Simulation finished')
+else:
+    print('Simulation failed')
+    exit(1)
+
+# move the prim files (which can be quite large)
+# to the local pipeline storage path
+os.system('mv g4_0000.prim {}/{}.prim'.format(args.out_dir,args.file_tag))
+
+
diff --git a/bin/make_dawn_views b/bin/make_dawn_views
index 279119e8..671527b5 100755
--- a/bin/make_dawn_views
+++ b/bin/make_dawn_views
@@ -36,8 +36,8 @@ parser.add_argument('-s', '--skip', type=int,
         default=0,
         help='Number of events number to skip in the input')
 
-parser.add_argument('-i', '--input', type=str,
-        default='scripts/input_data/few_events.hepmc',
+parser.add_argument('-i', '--input', type=str, dest='input',
+        default='sim_output',
         help='Input hepmc file')
 
 parser.add_argument('-o', '--output-dir', type=str, dest='out_dir',
@@ -51,7 +51,7 @@ parser.add_argument('-d', '--dawn-dir', type=str, dest='dawn_dir',
         default='scripts/view1',
         help='Directory to dawn script dir (with .DAWN files and a generate_eps script)')
 
-parser.add_argument('-t', '--tag', type=str,
+parser.add_argument('-t', '--tag', type=str,dest='file_tag',
         default='view',
         help='Output file tag')
 
@@ -80,90 +80,20 @@ dawn_env = os.environ.copy()
 dawn_env['DAWN_BATCH'] = 'a'
 # sdir = os.path.dirname(os.path.realpath(__file__))
 
-# Using a python warpper such as npsim introduces some problem in managing the subprocess.
-# The process1 managed by subprocess will generate another process with proc2_pid = proc1_pid + 1, which will not
-# be terminated by terminating or killing the process1.
-# In addition, running Geant4 with vis mode will never exit automatically (it waits for input).
-# Thus the created process 2 will occupy the system resources.
-sim_cmd = ['npsim', '--runType', 'vis',
-        '--compact', args.compact,
-        '--inputFiles', args.input,
-        '--outputFile', 'derp.root',
-        '--numberOfEvents', '1',
-        '--skipNEvents', str(args.skip),
-        '--macroFile', macro]
-
-start = datetime.now()
-elapse = datetime.now() - start
-last_update = datetime.now()
-finished = False
-
-# run simulation
-print(' '.join(sim_cmd))
-p = subprocess.Popen(args=sim_cmd, env=dawn_env,
-                     stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
-__child_pid = p.pid
-while elapse.seconds < args.timeout:
-    line = readline_nonblocking(p.stdout)
-    elapse = datetime.now() - start
-    time_left = args.timeout - elapse.seconds
-    time_str = '[{:02d}:{:02d}]'.format(elapse.seconds // 60, elapse.seconds % 60)
-
-    if time_left < 10:
-        print('{} === TIMEOUT ===: Terminating in {:d} seconds'.format(time_str, time_left))
-
-    if line:
-        decoded_line = line.decode('utf-8').strip()
-        print('{} {}'.format(time_str, decoded_line))
-        # what we are looking for
-        if decoded_line == 'File  {}  is generated.'.format(prim_file):
-            print('{} === FINISHED ===: Got the prim file, terminating.'.format(time_str))
-            finished = True
-            break
-        if decoded_line == 'Idle>':
-            p.stdin.write(b'exit')
-            break
-        # do not sleep
-        continue
-
-    # ended early before file
-    if p.poll() is not None:
-        print(p.poll())
-        break
-
-    time.sleep(1)
-
-p.kill()
-# use to kill the subprocess generated from the python wrapper
-# this is unsafe so maybe more checks required
-for proc in psutil.process_iter():
-    pinfo = proc.as_dict(attrs=['pid', 'name', 'create_time'])
-    if pinfo['pid'] == p.pid + 1 and pinfo['name'] == 'python':
-        print('kill {}, generated from {}'.format(pinfo, p.pid))
-        os.kill(pinfo['pid'], signal.SIGTERM)
-
-line = b'stderr outputs:\n'
-while line:
-    print(line.decode('utf-8'), end='')
-    line = readline_nonblocking(p.stderr)
-
-if finished:
-    print('Simulation finished')
-else:
-    print('Simulation failed')
-    exit(1)
-
 
 # generate DAWN images
-prim_file = os.path.abspath(prim_file)
+out_dir = os.path.abspath(args.out_dir)
+input_file = os.path.abspath(args.input)
+#prim_file = '{}/{}.prim'.format(input_dir,args.file_tag)
+#prim_file = os.path.abspath(prim_file)
 owd = os.getcwd()
 os.chdir(args.dawn_dir)
 subprocess.run(['pwd'])
-subprocess.run(['./generate_eps', '-t', args.tag, '-i', prim_file] + args.passthrough)
+subprocess.run(['./generate_eps', '-t', args.file_tag, '-i', input_file] + args.passthrough)
 subprocess.run(['ls', '-lrth'])
 
 # upload the results
-os.system('cp *.pdf {}'.format(args.out_dir))
-os.system('cp *.png {}'.format(args.out_dir))
+os.system('cp *.pdf {}'.format(out_dir))
+os.system('cp *.png {}'.format(out_dir))
 os.chdir(owd)
 
diff --git a/scripts/view11/.DAWN_1.history b/scripts/view11/.DAWN_1.history
new file mode 100644
index 00000000..20c06d60
--- /dev/null
+++ b/scripts/view11/.DAWN_1.history
@@ -0,0 +1,31 @@
+1.34392e+07
+90
+180
+0
+0
+0
+25000
+2.0
+1
+0.001
+0
+1
+1
+1
+0.5
+0.5
+0.5
+19
+71
+0.001
+0.001
+0.001
+3
+71
+0.001
+0
+0
+1
+evince
+0
+0
diff --git a/scripts/view12/.DAWN_1.history b/scripts/view12/.DAWN_1.history
new file mode 100644
index 00000000..b38cb89f
--- /dev/null
+++ b/scripts/view12/.DAWN_1.history
@@ -0,0 +1,31 @@
+1.34392e+07
+0
+180
+0
+0
+0
+0
+8
+1
+0.001
+0
+1
+1
+1
+0.5
+0.5
+0.5
+19
+71
+0.01
+0.01
+0.01
+3
+70
+0.01
+1
+1
+1
+evince
+0
+0
diff --git a/scripts/view12/generate_eps b/scripts/view12/generate_eps
index 38ebec3c..fd1bcb97 100755
--- a/scripts/view12/generate_eps
+++ b/scripts/view12/generate_eps
@@ -66,17 +66,6 @@ set -- "${POSITIONAL[@]}" # restore positional parameters
 
 echo "view12 produces a series of slightly rotated XY slices a different z locations. Along beamline"
 
-# slice at z = 2m
-# note the offset has to change with sign of the direction to cut in the opposite direction.
-dawncut 0  0  1  2005 ${INPUT_FILE} ${FILE_TAG}b_temp0.prim 
-dawncut 0  0 -1 -2000 ${FILE_TAG}b_temp0.prim  ${FILE_TAG}b.prim
-dawn -d ${FILE_TAG}b.prim 
-ps2pdf ${FILE_TAG}b.eps ${FILE_TAG}b_full.pdf
-gs -o ${FILE_TAG}b.pdf -sDEVICE=pdfwrite \
-  -c "[/CropBox [50 175 550 675] /PAGES pdfmark" \
-  -f ${FILE_TAG}b_full.pdf
-pdftoppm ${FILE_TAG}b.pdf ${FILE_TAG}b -png -singlefile -cropbox
-
 original_file_tag="${FILE_TAG}"
 
 make_slice(){
diff --git a/scripts/view13/generate_eps b/scripts/view13/generate_eps
index be6ce788..27ffee13 100755
--- a/scripts/view13/generate_eps
+++ b/scripts/view13/generate_eps
@@ -9,7 +9,7 @@ function print_the_help {
   exit 
 }
 
-FILE_TAG="view2"
+FILE_TAG="view13"
 INPUT_FILE="g4_0000.prim"
 
 
diff --git a/scripts/view14/.DAWN_1.history b/scripts/view14/.DAWN_1.history
new file mode 100644
index 00000000..40b2c0b3
--- /dev/null
+++ b/scripts/view14/.DAWN_1.history
@@ -0,0 +1,31 @@
+0.0
+72.5
+189.5
+0
+0
+0
+1500
+55
+3
+0.001
+0
+1
+1
+1
+0.5
+0.5
+0.5
+25.5
+71
+0.001
+0.001
+0.001
+1
+70
+0.001
+1
+0
+1
+evince
+0
+0
diff --git a/scripts/view14/generate_eps b/scripts/view14/generate_eps
index dc86760e..0e5286c4 100755
--- a/scripts/view14/generate_eps
+++ b/scripts/view14/generate_eps
@@ -69,22 +69,6 @@ set -- "${POSITIONAL[@]}" # restore positional parameters
 
 # units are mm
 
-echo "view14 produces a series of slightly rotated XY slices a different z locations. Along beamline"
-
-# slice at z = 2m
-# note the offset has to change with sign of the direction to cut in the opposite direction.
-dawncut 0  0  1  10005 ${INPUT_FILE} ${FILE_TAG}b_temp0.prim 
-dawncut 0  0 -1 -1000 ${FILE_TAG}b_temp0.prim  ${FILE_TAG}b.prim
-dawn -d ${FILE_TAG}b.prim 
-ps2pdf ${FILE_TAG}b.eps ${FILE_TAG}b_full.pdf
-gs -o ${FILE_TAG}b.pdf -sDEVICE=pdfwrite \
-  -c "[/CropBox [50 175 550 675] /PAGES pdfmark" \
-  -f ${FILE_TAG}b_full.pdf
-pdftoppm ${FILE_TAG}b.pdf ${FILE_TAG}b -png -singlefile -cropbox
-
-echo "done ..."
-
-
 original_file_tag="${FILE_TAG}"
 
 make_slice(){
diff --git a/scripts/view15/.DAWN_1.history b/scripts/view15/.DAWN_1.history
new file mode 100644
index 00000000..d6c74628
--- /dev/null
+++ b/scripts/view15/.DAWN_1.history
@@ -0,0 +1,31 @@
+0.0
+72.5
+189.5
+0
+0
+0
+1500
+50
+3
+0.001
+0
+1
+1
+1
+0.5
+0.5
+0.5
+25.5
+71
+0.001
+0.001
+0.001
+1
+70
+0.001
+1
+0
+1
+evince
+0
+0
diff --git a/scripts/view2/.DAWN_1.history b/scripts/view2/.DAWN_1.history
index 16311bf7..b38cb89f 100644
--- a/scripts/view2/.DAWN_1.history
+++ b/scripts/view2/.DAWN_1.history
@@ -6,7 +6,7 @@
 0
 0
 8
-3
+1
 0.001
 0
 1
diff --git a/scripts/view5/.DAWN_1.history b/scripts/view5/.DAWN_1.history
new file mode 100644
index 00000000..cb715456
--- /dev/null
+++ b/scripts/view5/.DAWN_1.history
@@ -0,0 +1,31 @@
+1.34392e+07
+0
+0
+1
+0
+0
+491.1
+1.2
+5
+0.001
+0
+1
+1
+1
+0.5
+0.5
+0.5
+19
+71
+0.01
+0.01
+0.01
+3
+70
+0.01
+1
+1
+1
+evince
+0
+0
diff --git a/scripts/view6/.DAWN_1.history b/scripts/view6/.DAWN_1.history
new file mode 100644
index 00000000..9be90fd2
--- /dev/null
+++ b/scripts/view6/.DAWN_1.history
@@ -0,0 +1,31 @@
+1.34392e+07
+0
+180
+0
+0
+0
+0
+8.6
+1
+0.001
+0
+1
+1
+1
+0.5
+0.5
+0.5
+19
+71
+0.01
+0.01
+0.01
+3
+70
+0.01
+1
+1
+1
+evince
+0
+0
diff --git a/views/generate_prim_files.yml b/views/generate_prim_files.yml
new file mode 100644
index 00000000..e511aa23
--- /dev/null
+++ b/views/generate_prim_files.yml
@@ -0,0 +1,38 @@
+view_prim:detector_only:
+  extends: .views
+  stage: test
+  script:
+    - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -D -t detector_view
+    - ls -lrth && ls -lrth ${LOCAL_DATA_PATH}
+
+view_prim:ev001:
+  extends: .views
+  stage: test
+  rules:
+    - if: '$DETECTOR_EVENT_VIEWS == "ON"'
+  script:
+    - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -t view_ev001 -s 1
+
+view_prim:ev002:
+  extends: .views
+  stage: test
+  rules:
+    - if: '$DETECTOR_EVENT_VIEWS == "ON"'
+  script:
+    - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -t view_ev002 -s 2
+
+view_prim:ev003:
+  extends: .views
+  stage: test
+  rules:
+    - if: '$DETECTOR_EVENT_VIEWS == "ON"'
+  script:
+    - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -t view_ev003 -s 3
+
+view_prim:ev004:
+  extends: .views
+  stage: test
+  rules:
+    - if: '$DETECTOR_EVENT_VIEWS == "ON"'
+  script:
+    - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -t view_ev004 -s 4
diff --git a/views/view1.yml b/views/view1.yml
index cbcdedd7..4d85b5c7 100644
--- a/views/view1.yml
+++ b/views/view1.yml
@@ -1,24 +1,33 @@
 dawn_view_01:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view01 -d scripts/view1 -D
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view01 -d scripts/view1 -D
+
 dawn_view_01:ev001:
   extends: .views
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
+  needs:
+    - job: view_prim:ev001
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view01_ev001 -d scripts/view1 -s 1
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev001.prim -t view01_ev001 -d scripts/view1 -s 1
+
 dawn_view_01:ev002:
   extends: .views
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
+  needs:
+    - job: view_prim:ev002
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view01_ev002 -d scripts/view1 -s 2
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev002.prim -t view01_ev002 -d scripts/view1 -s 2
 
 view_01:
   stage: collect
-  rules:
-    - if: '$CI_SERVER_HOST == "eicweb.phy.anl.gov"' 
   needs:
     - job: dawn_view_01:detector
       optional: false
diff --git a/views/view11.yml b/views/view11.yml
index ca6905ba..146eef97 100644
--- a/views/view11.yml
+++ b/views/view11.yml
@@ -1,37 +1,59 @@
 dawn_view_11:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view11 -d scripts/view11 -D
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view11 -d scripts/view11 -D
+
 dawn_view_11:ev000:
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   extends: .views
+  needs:
+    - job: view_prim:ev001
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view11 -d scripts/view11
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev001.prim  -t view11 -d scripts/view11
+
 dawn_view_11:ev001:
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   extends: .views
+  needs:
+    - job: view_prim:ev001
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view11 -d scripts/view11 -s 1
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev002.prim  -t view11 -d scripts/view11 -s 1
+
 dawn_view_11:ev002:
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   extends: .views
+  needs:
+    - job: view_prim:ev002
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view11 -d scripts/view11 -s 2
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev003.prim  -t view11 -d scripts/view11 -s 2
 dawn_view_11:ev003:
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   extends: .views
+  needs:
+    - job: view_prim:ev003
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view11 -d scripts/view11 -s 3
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH} -t view11 -d scripts/view11 -s 3
+
 dawn_view_11:ev004:
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   extends: .views
+  needs:
+    - job: view_prim:ev004
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view11 -d scripts/view11 -s 4
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH} -t view11 -d scripts/view11 -s 4
 
 view_11:
   stage: collect
diff --git a/views/view12.yml b/views/view12.yml
index b3da026a..8b3969c1 100644
--- a/views/view12.yml
+++ b/views/view12.yml
@@ -1,7 +1,10 @@
 dawn_view_12:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view12 -d scripts/view12 -D -- ${SLICE}
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view12 -d scripts/view12 -D -- ${SLICE}
     - ls -lrth *
     - ls -lrth images/*
   parallel:
diff --git a/views/view13.yml b/views/view13.yml
index 9360140c..658c63b4 100644
--- a/views/view13.yml
+++ b/views/view13.yml
@@ -1,7 +1,10 @@
 dawn_view_13:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view13 -d scripts/view13 -D
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view13 -d scripts/view13 -D
 
 view_13:
   stage: collect
diff --git a/views/view14.yml b/views/view14.yml
index 77b1651d..8aae5f66 100644
--- a/views/view14.yml
+++ b/views/view14.yml
@@ -1,7 +1,10 @@
 dawn_view_14:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view14 -d scripts/view14 -D -- ${SLICE}
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view14 -d scripts/view14 -D -- ${SLICE}
     - ls -lrth *
     - ls -lrth images/*
   parallel:
diff --git a/views/view15.yml b/views/view15.yml
index 9d24e940..e1c86125 100644
--- a/views/view15.yml
+++ b/views/view15.yml
@@ -1,7 +1,10 @@
 dawn_view_15:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view15 -d scripts/view15 -D -- ${SLICE}
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view15 -d scripts/view15 -D -- ${SLICE}
     - ls -lrth *
     - ls -lrth images/*
   parallel:
diff --git a/views/view2.yml b/views/view2.yml
index fafb8adc..f758f7de 100644
--- a/views/view2.yml
+++ b/views/view2.yml
@@ -1,25 +1,40 @@
 dawn_view_02:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view02 -d scripts/view2 -D
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view02 -d scripts/view2 -D
+
 dawn_view_02:ev001:
   extends: .views
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
+  needs:
+    - job: view_prim:ev001
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view02_ev001 -d scripts/view2 -s 1
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev001.prim -t view02_ev001 -d scripts/view2 -s 1
+
 dawn_view_02:ev002:
   extends: .views
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
+  needs:
+    - job: view_prim:ev002
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view02_ev002 -d scripts/view2 -s 2
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev002.prim  -t view02_ev002 -d scripts/view2 -s 2
+
 dawn_view_02:ev003:
   extends: .views
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
+  needs:
+    - job: view_prim:ev003
+      optional: true
   script:
-    - ./bin/make_dawn_views -t view02_ev003 -d scripts/view2 -s 3
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev003.prim  -t view02_ev003 -d scripts/view2 -s 3
 
 view_02:
   stage: collect
@@ -32,7 +47,6 @@ view_02:
       optional: true
     - job: dawn_view_02:ev003
       optional: true
-    #- ["dawn_view_02:detector", "dawn_view_02:ev001", "dawn_view_02:ev002", "dawn_view_02:ev003"]
   script:
     - ls -lrth *
     - ls -lrth images/*
diff --git a/views/view20.yml b/views/view20.yml
index 75cdb440..be4107e9 100644
--- a/views/view20.yml
+++ b/views/view20.yml
@@ -1,22 +1,31 @@
 dawn_view_20:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
     - cp "compact/subsystem_views/calorimeters.xml" "${DETECTOR_PATH}/."
-    - ./bin/make_dawn_views -c ${DETECTOR_PATH}/calorimeters.xml -t calorimeters_view20 -d scripts/view20 -D
+    - ./bin/make_dawn_views -c ${DETECTOR_PATH}/calorimeters.xml -i ${LOCAL_DATA_PATH}/detector_view.prim -t calorimeters_view20 -d scripts/view20 -D
 
 dawn_view_20:ev001:
   extends: .views
+  needs:
+    - job: view_prim:ev001
+      optional: true
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   script:
-    - ./bin/make_dawn_views -t view20_ev001 -d scripts/view20 -s 1
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev001.prim -t view20_ev001 -d scripts/view20 -s 1
 
 dawn_view_20:ev002:
   extends: .views
+  needs:
+    - job: view_prim:ev002
+      optional: true
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   script:
-    - ./bin/make_dawn_views -t view20_ev002 -d scripts/view20 -s 2
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev002.prim  -t view20_ev002 -d scripts/view20 -s 2
 
 view_20:
   stage: collect
diff --git a/views/view3.yml b/views/view3.yml
index ea4dd114..6e73b851 100644
--- a/views/view3.yml
+++ b/views/view3.yml
@@ -1,17 +1,28 @@
 dawn_view_03:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view02 -d scripts/view3 -D
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view03 -d scripts/view3 -D
+
 #dawn_view_03:ev001:
 #  extends: .views
+#  needs:
+#    - job: view_prim:ev001
+#      optional: true
 #  script:
-#    - ./bin/make_dawn_views -t view02_ev001 -d scripts/view3 -s 1
+#    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev001.prim -t view03_ev001 -d scripts/view3 -s 1
+
 dawn_view_03:ev002:
   extends: .views
+  needs:
+    - job: view_prim:ev002
+      optional: true
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   script:
-    - ./bin/make_dawn_views -t view02_ev002 -d scripts/view3 -s 2
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev002.prim  -t view03_ev002 -d scripts/view3 -s 2
 
 view_03:
   stage: collect
diff --git a/views/view6.yml b/views/view6.yml
index 8d16aa35..8d000939 100644
--- a/views/view6.yml
+++ b/views/view6.yml
@@ -1,31 +1,50 @@
 dawn_view_06:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view06 -d scripts/view6 -D
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view06 -d scripts/view6 -D
+
 dawn_view_06:ev001:
   extends: .views
+  needs:
+    - job: view_prim:ev001
+      optional: true
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   script:
-    - ./bin/make_dawn_views -t view06_ev001 -d scripts/view6 -s 1
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev001.prim -t view06_ev001 -d scripts/view6 -s 1
+
 dawn_view_06:ev002:
   extends: .views
+  needs:
+    - job: view_prim:ev002
+      optional: true
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   script:
-    - ./bin/make_dawn_views -t view06_ev002 -d scripts/view6 -s 2
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev002.prim  -t view06_ev002 -d scripts/view6 -s 2
+
 dawn_view_06:ev003:
   extends: .views
+  needs:
+    - job: view_prim:ev003
+      optional: true
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   script:
-    - ./bin/make_dawn_views -t view06_ev003 -d scripts/view6 -s 3
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev003.prim  -t view06_ev003 -d scripts/view6 -s 3
+
 dawn_view_06:ev004:
   extends: .views
+  needs:
+    - job: view_prim:ev004
+      optional: true
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   script:
-    - ./bin/make_dawn_views -t view06_ev004 -d scripts/view6 -s 4
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH} -t view06_ev004 -d scripts/view6 -s 4
 
 view_06:
   stage: collect
diff --git a/views/view7.yml b/views/view7.yml
index 740ef72d..55aec2f3 100644
--- a/views/view7.yml
+++ b/views/view7.yml
@@ -1,19 +1,30 @@
 dawn_view_07:detector:
   extends: .views
+  needs:
+    - job: view_prim:detector_only
+      optional: false
   script:
-    - ./bin/make_dawn_views -t view07 -d scripts/view7 -D
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view07 -d scripts/view7 -D
+
 dawn_view_07:ev002:
   extends: .views
+  needs:
+    - job: view_prim:ev002
+      optional: true
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   script:
-    - ./bin/make_dawn_views -t view07_ev002 -d scripts/view7 -s 2
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev001.prim -t view07_ev002 -d scripts/view7 -s 2
+
 dawn_view_07:ev003:
   extends: .views
+  needs:
+    - job: view_prim:ev003
+      optional: true
   rules:
     - if: '$DETECTOR_EVENT_VIEWS == "ON"'
   script:
-    - ./bin/make_dawn_views -t view07_ev003 -d scripts/view7 -s 3
+    - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev002.prim  -t view07_ev003 -d scripts/view7 -s 3
 
 view_07:
   stage: collect
-- 
GitLab