workflow_sketch.sh 19.4 KB
Newer Older
1
2
3
4
5
6
7
8
9
#!/bin/bash

##############################
# Configurations             #
##############################
# Put aliBuild in the PATH env var
export PATH="/mnt/SSD/schnorr/python/bin:$PATH"
# Directory where runAnalysis.C is placed
export ALIROOT_SCRIPT_DIR=$(pwd)/aliRoot/
10
# Directory where Blender scripts are
11
12
export BLENDER_SCRIPT_DIR=$(pwd)/animate/
# alienv working directory
Breno Rilho Lemos's avatar
Breno Rilho Lemos committed
13
14
export ALIENV_WORK_DIR=/home/breno/alice/sw
export ALIENV_OS_SPEC=ubuntu1804_x86-64
15
export ALIENV_ID=AliPhysics/latest-aliroot5-user
16
# Put Blender 2.79b in the PATH env var
17
18
export PATH="/home/schnorr/install/blender-2.79-linux-glibc219-x86_64/:$PATH"

19
20
21
# Progress log file
export PROGRESS_LOG=$(pwd)/progress.log

22
23
24
25
26
27
28
29
30
31
32
if [[ -f $PROGRESS_LOG ]]; then
  if grep -q "JOB FINISHED" $PROGRESS_LOG; then
    rm $PROGRESS_LOG
  fi
fi

# Define a timestamp function
timestamp() {
  date +"%y-%m-%d %T $1"
}

33
##############################
34
# Command-line options       #
35
##############################
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# See the following link to understand the code below
# https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash

# saner programming env: these switches turn some bugs into errors
set -o errexit -o pipefail -o noclobber -o nounset

# -allow a command to fail with !’s side effect on errexit
# -use return value from ${PIPESTATUS[0]}, because ! hosed $?
! getopt --test > /dev/null
if [[ ${PIPESTATUS[0]} -ne 4 ]]; then
    echo 'I’m sorry, `getopt --test` failed in this environment.'
    exit 1
fi

50
OPTIONS=c:hdau:m:n:t:r:
51
LONGOPTS=cameras:,mosaic,resolution:,fps:,transparency:,duration:,maxparticles:,\
52
minparticles:,numberofevents:,minavgpz:,minavgpt:,help,download,sample,url:,its,\
53
tpc,detailedtpc,trd,emcal,blendersave,picpct:
54
55
56
57
58
59
60
61
62
63
64
65
66
67

# -regarding ! and PIPESTATUS see above
# -temporarily store output to be able to check for errors
# -activate quoting/enhanced mode (e.g. by writing out “--options”)
# -pass arguments only via   -- "$@"   to separate them correctly
! PARSED=$(getopt --options=$OPTIONS --longoptions=$LONGOPTS --name "$0" -- "$@")
if [[ ${PIPESTATUS[0]} -ne 0 ]]; then
    # e.g. return value is 1
    #  then getopt has complained about wrong arguments to stdout
    exit 2
fi
# read getopt’s output this way to handle the quoting right:
eval set -- "$PARSED"

68
69
70
##############################
# Parse Parameters           #
##############################
71
CAMERAS=Overview
72
MOSAIC=false
73
74
DURATION=10
RESOLUTION=100
75
FPS=24
76
TRANSPARENCY=1
77
78
79
MAX_PARTICLES=1000
MIN_PARTICLES=0
N_OF_EVENTS=10
80
MIN_AVG_PZ=0
81
MIN_AVG_PT=0
82
83
HELP=false
DOWNLOAD=false
84
SAMPLE=false
85
URL=
86
87
ITS=1 # 1 means "build this detector", while 0 means "don't"
TPC=1
88
DETAILED_TPC=0
89
90
TRD=1
EMCAL=1
91
BLENDERSAVE=1
92
PICPCT=80
93
94
95
# now enjoy the options in order and nicely split until we see --
while true; do
    case "$1" in
96
97
98
99
100
      -h|--help)
          HELP=true
          shift
          break
          ;;
101
      -d|--download)
102
103
104
          DOWNLOAD=true
          shift
          ;;
105
      -a|--sample)
106
107
108
          SAMPLE=true
          shift
          ;;
109
110
      -u|--url)
          URL="$2"
111
112
            shift 2
            ;;
113
114
115
116
      -m|--maxparticles)
          MAX_PARTICLES="$2"
          shift 2
          ;;
117
118
119
120
121
122
123
124
      --minparticles)
          MIN_PARTICLES="$2"
          shift 2
          ;;
      -n|--numberofevents)
          N_OF_EVENTS="$2"
          shift 2
          ;;
125
126
127
128
      --minavgpz)
          MIN_AVG_PZ="$2"
          shift 2
          ;;
129
130
131
132
      --minavgpt)
          MIN_AVG_PT="$2"
          shift 2
          ;;
133
134
135
136
137
138
139
140
      -t|--duration)
          DURATION="$2"
          shift 2
          ;;
      -r|--resolution)
          RESOLUTION="$2"
          shift 2
          ;;
141
142
143
144
      --fps)
          FPS="$2"
          shift 2
          ;;
145
146
      --transparency)
          TRANSPARENCY="$2"
147
148
          shift 2
          ;;
149
150
      -c|--cameras)
      	  CAMERAS="$2"
151
152
      	  shift 2
      	  ;;
153
154
155
156
      --mosaic)
          MOSAIC=true
          shift
          ;;
157
158
159
160
      --picpct)
      	  PICPCT="$2"
      	  shift 2
      	  ;;
161
      --its)
162
163
164
          ITS=0
          shift
          ;;
165
      --tpc)
166
167
168
          TPC=0
          shift
          ;;
169
170
171
172
      --detailedtpc)
          DETAILED_TPC=1
          shift
          ;;
173
      --trd)
174
175
176
          TRD=0
          shift
          ;;
177
      --emcal)
178
179
180
          EMCAL=0
          shift
          ;;
181
182
183
184
      --blendersave)
          BLENDERSAVE=1
          shift
          ;;
185
186
187
188
189
        --)
            shift
            break
            ;;
        *)
190
            echo "Programming error $*"
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
            exit 3
            ;;
    esac
done

##############################
# Usage                      #
##############################
function usage()
{
    # Using a here doc with standard out.
    cat <<-END
Usage:
------
   -h | --help
     Display this help
   -d | --download
     Download the AliESDs.root file using the provided URL
   -u | --url URL
     Provide the URL to uniquely identify a AliESDs.root dataset.
     This should be in the format provided by http://opendata.cern.ch.
     See example below.
213
   -m | --maxparticles VALUE
214
215
     Get only events for which its number of particles does not
     exceed VALUE.
216
   --minparticles VALUE
217
218
     Get only events for which its number of particles is greater than
     or equal to VALUE.
219
   -n | --numberofevents VALUE
220
     Set number of events to be animated inside chosen ESD file (defaults to 10)
221
222
   --minavgpz VALUE
     Get only events for which its absolute value of average momentum in
223
224
     the z direction is greater than or equal to VALUE, in GeV/c. Useful
     for animating events with 'boosts' of particles to the same side.
225
226
   --minavgpt VALUE
     Get only events for which its average transversal momentum is
227
228
     greater than or equal to VALUE, in GeV/c. Useful for animating
     events with 'boosts' of particles on the xy plane.
229
230
231
   -t | --duration VALUE
     Set the animation duration in seconds.
   -r | --resolution VALUE
232
233
     Set the animation resolution percentage, where
     VALUE must be an integer from 1 to 100.
234
235
   --fps VALUE
     Set number of frames per second in animation.
236
237
238
   --transparency VALUE
     Set detector transparency as a number greater than zero,
     where zero is full transparency and 1 is standard transparency
239
240
   -c | --cameras VALUE
     Which cameras to use for the animation, where VALUE
Lucas Mello Schnorr's avatar
Lucas Mello Schnorr committed
241
     is a comma-separated list (without spaces)
242
     Options: Barrel,Side,Forward,Overview (defaults to Overview)
243
244
245
246
   --mosaic
     Make animations in all four available cameras and combine them into
     a single 2x2 clip containing all perspectives, totalizing five generated
     .mp4 videos.
247
   --picpct VALUE
248
249
     Percentage of animation to take HD picture, saved along with the clip,
     where VALUE must be an integer
250
   -a | --sample
251
     Creates a sample Blender animation of Event 2 from URL
252
253
     http://opendata.cern.ch/record/1102/files/assets/alice/2010/LHC10h/000139\
038/ESD/0001/AliESDs.root
254
   --its
255
     Removes ITS detector from animation
256
257
   --detailedtpc
     Includes more detailed version of TPC in animation
258
   --tpc
259
     Removes TPC detector from animation
260
   --trd
261
     Removes TRD detector from animation
262
   --emcal
263
     Removes EMCal detector from animation
264
265
   --blendersave
     Saves Blender file along with animation clip
266
267
268

Example:
--------
269
270
$0 --url http://opendata.cern.ch/record/1103/files/assets/alice/2010/LHC10h/000\
139173/ESD/0004/AliESDs.root --download
271
272
273

END
}
274

Lucas Mello Schnorr's avatar
Lucas Mello Schnorr committed
275
# Fix CAMERA to be accepted by the for loop
276
277
if [[ $CAMERAS != "" ]]; then
    CAMERAS=$(echo $CAMERAS | sed -e 's#,#Camera #g' -e 's#$#Camera#')
Lucas Mello Schnorr's avatar
Lucas Mello Schnorr committed
278
279
fi

280
if [[ $MOSAIC == "true" ]]; then
281
    CAMERAS=$(echo "OverviewCamera BarrelCamera SideCamera ForwardCamera")
282
283
fi

284
285
286
287
288
289
290
if [[ $HELP = "true" ]]; then
    usage
    exit
else
    echo "-------- Parsed parameters --------"
    echo "URL: $URL"
    echo "Download: $DOWNLOAD"
291
    echo "Sample: $SAMPLE"
292
    echo "Transparency Parameter: $TRANSPARENCY"
293
294
    echo "Duration: $DURATION"
    echo "Resolution: $RESOLUTION"
295
    echo "FPS: $FPS"
296
    echo "Max particles: ${MAX_PARTICLES}"
297
298
    echo "Min particles: ${MIN_PARTICLES}"
    echo "Number of events: ${N_OF_EVENTS}"
299
    echo "Min Average Z Momentum: ${MIN_AVG_PZ}"
300
    echo "Min Average Transversal Momentum: ${MIN_AVG_PT}"
301
    echo "Cameras: $CAMERAS"
302
    echo "Mosaic: $MOSAIC"
303
    echo "Picture Percentage: ${PICPCT}%"
304
    echo "-----------------------------------"
305
306
307
308
    echo "------------ Detectors ------------"
    if [[ $ITS = 1 ]]; then
      echo "Building ITS"
    fi
309
310
311
312
313
314
    if [[ $DETAILED_TPC = 1 ]]; then
      echo "Building detailed TPC"
    else
      if [[ $TPC = 1 ]]; then
        echo "Building TPC"
      fi
315
316
317
318
319
320
321
322
323
324
325
326
    fi
    if [[ $TRD = 1 ]]; then
      echo "Building TRD"
    fi
    if [[ $EMCAL = 1 ]]; then
      echo "Building EMCAL"
    fi
    if [[ $TPC = 0 && $TPC = 0 && $TRD = 0 && $EMCAL = 0 ]]; then
      echo "Not building any detectors"
    fi
    echo "-----------------------------------"

327
328
fi

329
330
331
332
333
# Get number of frames
FPS_DUR="$FPS $DURATION"
FPS_DUR=$(echo $FPS_DUR | awk '{print $1*$2}')


334
335
336
337
338
339
340
# handle non-option arguments
if [[ $# -ne 0 ]]; then
    echo "$0: non-option arguments ($#, $*) are ignored."
    echo "Remove them manually as indicated between parenthesis."
    exit
fi

341

342
343
344
345
##############################
# Download Dataset           #
##############################
if [ "$DOWNLOAD" = "true" ]; then
346
    if [ -z $URL ]; then
347
        echo "Error. Must pass the dataset URL in order to download ESD file."
348
349
350
        usage
        exit
    fi
351

352
    if ! grep -q "ESD DOWNLOAD DONE" $PROGRESS_LOG; then
353
354
      echo "Downloading data."
      wget $URL
355
      timestamp "ESD DOWNLOAD DONE" >> $PROGRESS_LOG
356
    fi
357

358
359
360
361
362
363
364
365
366
367
368
369
    ######################################
    # Established Unique ID based on URL #
    ######################################
    UNIQUEID=$(echo $URL | sed \
                         -e "s#http://opendata.cern.ch/##" \
                         -e "s#/AliESDs.root##" \
                         -e "s#files/assets/##" \
                         -e "s#/#_#g")

    echo "The unique ID is $UNIQUEID."

fi
370

371
##############################
372
# Sample synthetic animation#
373
##############################
374
if [ "$SAMPLE" = "true" ]; then
375
    ##############################
376
    # Phase 1: Blender animate   #
377
    ##############################
378
379
380
    BLENDER_OUTPUT=$(pwd)/sample
    mkdir --verbose -p ${BLENDER_OUTPUT}

381
    pushd ${BLENDER_SCRIPT_DIR}
382
383
384
385
    echo "Preparing sample animation in Blender"

    blender -noaudio --background -P animate_particles.py -- -radius=0.05 \
    -duration=${DURATION} -cameras="${CAMERAS}" -datafile="d-esd-detail.dat" -simulated_t=0.03\
386
387
    -fps=${FPS} -resolution=${RESOLUTION} -transparency=${TRANSPARENCY} \
    -stamp_note="opendata.cern.ch_record_1102_alice_2010_LHC10h_000139038_ESD_0001_2" -its=${ITS}\
388
    -tpc=${TPC} -trd=${TRD} -emcal=${EMCAL} -detailed_tpc=${DETAILED_TPC} \
389
390
    -blendersave=${BLENDERSAVE} -picpct=${PICPCT} -tpc_blender_path=${BLENDER_SCRIPT_DIR} \
    -output_path="${BLENDER_OUTPUT}"
391

392
393
394
    popd
    echo "Done."

395
396
397
##############################
# Animation from file        #
##############################
398
elif [ "$SAMPLE" = "false" ]; then
399

400
  if ! grep -q "DATA ANALYSIS FINISHED" $PROGRESS_LOG; then
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429

    # Verify if AliESDs.root is here
    ALIESD_ROOT_FILE=$(pwd)/AliESDs.root
    if ! [[ -f "$ALIESD_ROOT_FILE" ]]
    then
        echo "AliESDs.root not found."
        exit
    fi

    ############################
    # Phase 1: aliroot extract #
    ############################
    eval $(alienv -w ${ALIENV_WORK_DIR} -a ${ALIENV_OS_SPEC} load ${ALIENV_ID})
    pushd ${ALIROOT_SCRIPT_DIR}
    # Remove existing symbolic link
    rm -f --verbose AliESDs.root
    # Create a symbolic link to the actual AliESDs.root
    ln --verbose -s ${ALIESD_ROOT_FILE} AliESDs.root
    # Run the extraction tool
    aliroot runAnalysis.C

    if [ "$DOWNLOAD" = "false" ]; then

      UNIQUEID=$(more uniqueid.txt)
      echo "The unique ID is $UNIQUEID."

    fi

    popd
430
    timestamp "${UNIQUEID} - DATA ANALYSIS FINISHED" >> $PROGRESS_LOG
431
432
433
434
435
436
437
438
439
440

  else
    if [ "$DOWNLOAD" = "false" ]; then

      pushd ${ALIROOT_SCRIPT_DIR}
      UNIQUEID=$(more uniqueid.txt)
      echo "The unique ID is $UNIQUEID."
      popd

    fi
441
442
  fi

443
  if ! grep -q "${UNIQUEID} - ANIMATION DIRECTORY CREATED" $PROGRESS_LOG ; then
444
445
446
447

    # Create directory where animations will be saved
    BLENDER_OUTPUT=$(pwd)/$UNIQUEID
    mkdir --verbose -p ${BLENDER_OUTPUT}
448

449
    timestamp "${UNIQUEID} - ANIMATION DIRECTORY CREATED" >> $PROGRESS_LOG
450
451
  else
    BLENDER_OUTPUT=$(pwd)/$UNIQUEID
452
453
454
455
  fi

  pushd ${ALIROOT_SCRIPT_DIR} # push back to aliroot directory

456
  if ! grep -q "${UNIQUEID} - DATA ANALYSIS FILES MOVED to animation directory" $PROGRESS_LOG; then
457
458
459
    #################################################
    # Phase 1: iteration for every event identifier #
    #################################################
460

461
462
    # Get all extracted files
    EXTRACTED_FILES=$(ls -1 esd_detail-event_*.dat | sort --version-sort)
463

464
    for FILE_WITH_DATA in $EXTRACTED_FILES; do
465

466
467
468
469
470
        if ! [[ -s $FILE_WITH_DATA ]]; then
            echo "File $FILE_WITH_DATA has zero size. Ignore and continue."
  	        rm $FILE_WITH_DATA
            continue
        fi
471

472
473
        mv ${ALIROOT_SCRIPT_DIR}/$FILE_WITH_DATA \
         ${BLENDER_SCRIPT_DIR}
474

475
    done
476

477
    timestamp "${UNIQUEID} - DATA ANALYSIS FILES MOVED to animation directory" >> $PROGRESS_LOG
478

479
  fi
480

481
482
  popd
  pushd ${BLENDER_SCRIPT_DIR}
483

484
  if ! grep -q "${UNIQUEID} - CREATED EVENT COUNTER FILE" $PROGRESS_LOG; then
485

486
487
488
    # Event counter for animating no more events than the informed amount
    EVENT_COUNTER=0
    echo "$EVENT_COUNTER" > event_counter.txt
489
    timestamp "${UNIQUEID} - CREATED EVENT COUNTER FILE" >> $PROGRESS_LOG
490
491
492

  fi

493
  if ! grep -q "${UNIQUEID} - DATA FILES RENAMED according to UNIQUEID" $PROGRESS_LOG; then
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508

    EXTRACTED_FILES=$(ls -1 esd_detail-event_*.dat | sort --version-sort)

    for FILE_WITH_DATA in $EXTRACTED_FILES; do

        EVENT_ID=$(echo $FILE_WITH_DATA | \
                   sed -e "s#esd_detail-event_##" \
                     -e "s#\.dat##")
        EVENT_UNIQUE_ID=${UNIQUEID}_${EVENT_ID}

        LOCAL_FILE_WITH_DATA=${EVENT_UNIQUE_ID}.dat

        mv $FILE_WITH_DATA $LOCAL_FILE_WITH_DATA

    done
509

510
    timestamp "${UNIQUEID} - DATA FILES RENAMED according to UNIQUEID" >> $PROGRESS_LOG
511

512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
  fi

  EXTRACTED_FILES=$(ls -1 ${UNIQUEID}_*.dat | sort --version-sort)

  for LOCAL_FILE_WITH_DATA in $EXTRACTED_FILES; do

    pushd ${BLENDER_SCRIPT_DIR}

    EVENT_ID=$(echo $LOCAL_FILE_WITH_DATA | \
               sed -e "s#${UNIQUEID}_##" \
                 -e "s#\.dat##")
    EVENT_UNIQUE_ID=${UNIQUEID}_${EVENT_ID}

    ##############################
    # Phase 2: blender animate   #
    ##############################

    NUMBER_OF_PARTICLES=$(wc -l $LOCAL_FILE_WITH_DATA | \
                      awk '{ print $1 }')

    AVERAGE_PZ=$(awk 'BEGIN {pzsum=0;n=0} {pzsum+=$8;n++} END {print sqrt(pzsum*pzsum/n/n)}'\
    ${LOCAL_FILE_WITH_DATA})

    AVERAGE_PT=$(awk 'BEGIN {ptsum=0;n=0} {ptsum+=$9;n++} END {print ptsum/n}' \
    ${LOCAL_FILE_WITH_DATA})

    echo "File $LOCAL_FILE_WITH_DATA has $NUMBER_OF_PARTICLES particles."
    echo "Average Z momentum: $AVERAGE_PZ"
    echo "Average transversal momentum $AVERAGE_PT"

    EVENT_COUNTER=$(more event_counter.txt)

    if (( $(echo "$AVERAGE_PT >= $MIN_AVG_PT" |bc -l) )); then
      if (( $(echo "$AVERAGE_PZ >= $MIN_AVG_PZ" |bc -l) )); then
        if [[ $NUMBER_OF_PARTICLES -le $MAX_PARTICLES && $NUMBER_OF_PARTICLES \
-ge $MIN_PARTICLES && $EVENT_COUNTER -lt $N_OF_EVENTS ]]; then

549
          if ! grep -q "${UNIQUEID} - Event ${EVENT_ID} - SCENE READY." $PROGRESS_LOG; then
550
551

            echo "Processing ${EVENT_UNIQUE_ID} ($NUMBER_OF_PARTICLES tracks) in Blender"
552
553
554
555
556
557
558
559

            echo "Processing ${EVENT_UNIQUE_ID} in Blender"

            blender -noaudio --background -P animate_particles.py -- -radius=0.05 \
            -duration=${DURATION} -cameras="${CAMERAS}" -datafile="${LOCAL_FILE_WITH_DATA}"\
             -n_event=${EVENT_ID} -simulated_t=0.03 -fps=${FPS} -resolution=${RESOLUTION}\
             -transparency=${TRANSPARENCY} -stamp_note="${EVENT_UNIQUE_ID}" -its=${ITS}\
             -tpc=${TPC} -trd=${TRD} -emcal=${EMCAL} -detailed_tpc=${DETAILED_TPC} \
560
561
            -blendersave=${BLENDERSAVE} -picpct=${PICPCT} -tpc_blender_path=${BLENDER_SCRIPT_DIR}\
            -output_path="${BLENDER_OUTPUT}"
562
            timestamp "${UNIQUEID} - Event ${EVENT_ID} - SCENE READY." >> $PROGRESS_LOG
563

564
          fi
565

566

567
          for type in $CAMERAS; do
568

569
            if ! grep -q "${UNIQUEID} - Event ${EVENT_ID} - ${type} FINISHED" $PROGRESS_LOG; then
570
571
572
              blender -noaudio --background -P render.py -- -cam ${type} -datafile\
               "${LOCAL_FILE_WITH_DATA}" -n_event ${EVENT_ID} -pic_pct ${PICPCT} -output_path "${BLENDER_OUTPUT}"

573
              timestamp "${UNIQUEID} - Event ${EVENT_ID} - ${type} FINISHED" >> $PROGRESS_LOG
574
575
576
577
578
579
            fi

          done

          if [ "$MOSAIC" = "true" ]; then

580
            if ! grep -q "${UNIQUEID} - Event ${EVENT_ID} - MOSAIC FINISHED" $PROGRESS_LOG; then
581
              pushd ${BLENDER_OUTPUT}
582

583
584
585
586
587
              # Delete existing incomplete .mp4 file
              if [[ -f ${EVENT_UNIQUE_ID}_Mosaic.mp4 ]]; then
                rm ${EVENT_UNIQUE_ID}_Mosaic.mp4
              fi

588
              # Setting input names for clips in order to make mosaic clip
589
590
591
592
              INPUT_ONE=$(ls *$EVENT_UNIQUE_ID*${FPS_DUR}.mp4 | awk 'NR==1')
              INPUT_TWO=$(ls *$EVENT_UNIQUE_ID*${FPS_DUR}.mp4 | awk 'NR==2')
              INPUT_THREE=$(ls *$EVENT_UNIQUE_ID*${FPS_DUR}.mp4 | awk 'NR==3')
              INPUT_FOUR=$(ls *$EVENT_UNIQUE_ID*${FPS_DUR}.mp4 | awk 'NR==4')
593

594
595
596
              ffmpeg -i ${INPUT_FOUR} -i ${INPUT_TWO} -i ${INPUT_THREE} -i ${INPUT_ONE} -filter_complex\
               "[0:v][1:v]hstack=inputs=2[top];[2:v][3:v]hstack=inputs=2[bottom];[top][bottom]vstack=inputs=2[v]"\
               -map "[v]" ${EVENT_UNIQUE_ID}_Mosaic.mp4
597

598
              timestamp "${UNIQUEID} - Event ${EVENT_ID} - MOSAIC FINISHED" >> $PROGRESS_LOG
599

600
              popd
601
602
            fi

603
          fi
604

605
          if ! grep -q "${UNIQUEID} - Event ${EVENT_ID} - TEXT DATA MOVED to final location" $PROGRESS_LOG; then
606
607
            # Move processed file to final location
            mv $LOCAL_FILE_WITH_DATA ${BLENDER_OUTPUT}/$LOCAL_FILE_WITH_DATA
608
            timestamp "${UNIQUEID} - Event ${EVENT_ID} - TEXT DATA MOVED to final location" >> $PROGRESS_LOG
609
          fi
610

611
          echo "EVENT ${EVENT_UNIQUE_ID} DONE with FILE $LOCAL_FILE_WITH_DATA."
612

613
614
615
616
          # Increment event counter
          EVENT_COUNTER=$EVENT_COUNTER+1
          rm event_counter.txt
          echo "$EVENT_COUNTER" > event_counter.txt
617

618
        else
619

620
621
622
623
624
625
          if [[ $NUMBER_OF_PARTICLES -lt $MIN_PARTICLES ]]; then
            echo "Too little particles (minimum accepted is $MIN_PARTICLES). Continue."
          elif [[ $NUMBER_OF_PARTICLES -gt $MAX_PARTICLES ]]; then
            echo "Too many particles (maximum accepted is $MAX_PARTICLES). Continue."
          elif [[ $EVENT_COUNTER -ge $N_OF_EVENTS ]]; then
            echo "Numbers of events set to be animated has already been reached. Continue."
626
          fi
627

628
629
          # Remove non-processed files
          rm $LOCAL_FILE_WITH_DATA
630

631
632
        fi
      else
633
        echo "Average Z Momentum too low (minimum accepted is $MIN_AVG_PZ). Continue."
634
635
636

        # Remove non-processed files
        rm $LOCAL_FILE_WITH_DATA
637
      fi
638
639
640
641
642
643
644
645
646
    else
      echo "Average Transversal Momentum too low (minimum accepted is $MIN_AVG_PT). Continue."

      # Remove non-processed files
      rm $LOCAL_FILE_WITH_DATA
    fi

    popd

Lucas Mello Schnorr's avatar
Lucas Mello Schnorr committed
647
  done
648

649
650
651
652
  # Remove event counter file
  pushd ${BLENDER_SCRIPT_DIR}
  rm event_counter.txt
  popd
653

654
fi
655
timestamp "JOB FINISHED" >> $PROGRESS_LOG