From 1b97ab396f566cbf873314497aca73ef763b23dc Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 22 Aug 2021 09:06:48 +0200 Subject: [PATCH 001/236] Copy full system test DPL workflow from O2 --- production/full-system-test/dpl-workflow.sh | 215 ++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100755 production/full-system-test/dpl-workflow.sh diff --git a/production/full-system-test/dpl-workflow.sh b/production/full-system-test/dpl-workflow.sh new file mode 100755 index 0000000..01e31ae --- /dev/null +++ b/production/full-system-test/dpl-workflow.sh @@ -0,0 +1,215 @@ +#!/bin/bash + +# In order to use o2sim_grp.root, o2sim_geometry.root or matbud.root from arbitrary directory one can provide to the workflow +# --configKeyValues "NameConf.mDirGRP=;NameConf.mDirGeom=;NameConf.mDirMatLUT=;" +# All workflows currently running in the FST parce the configKeyValues option, so the NameConf.mDirXXX keys can be added via global env.var. + +# Get this script's directory : use zsh first (e.g. on Mac) and fallback +# on `readlink -f` if zsh is not there +command -v zsh > /dev/null 2>&1 && MYDIR=$(dirname $(zsh -c 'echo ${0:A}' "$0")) +test -z ${MYDIR+x} && MYDIR="$(dirname $(readlink -f $0))" + +source $MYDIR/setenv.sh + +if [ "0$O2_ROOT" == "0" ]; then + eval "`alienv shell-helper`" + alienv --no-refresh load O2/latest +fi + +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +if [ $EXTINPUT == 1 ] || [ $NUMAGPUIDS == 1 ]; then + ARGS_ALL+=" --no-cleanup" +fi +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +if [ $NUMAGPUIDS != 0 ]; then + ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" +fi +if [ $GPUTYPE != "CPU" ]; then + ARGS_ALL+=" --shm-mlock-segment-on-creation 1" +fi + +# Set some individual workflow arguments depending on configuration +CTF_DETECTORS=ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH +CTF_DIR= +CTF_DICT_DIR= +GPU_INPUT=zsraw +GPU_OUTPUT=tracks,clusters +GPU_CONFIG= +GPU_CONFIG_KEY= +TOF_INPUT=raw +TOF_OUTPUT=clusters +ITS_CONFIG= +ITS_CONFIG_KEY= +TRD_CONFIG= +TRD_TRANSFORMER_CONFIG= +if [ $SYNCMODE == 1 ]; then + ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" + GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" + TRD_CONFIG+=" --track-sources ITS-TPC --filter-trigrec --configKeyValues 'GPU_proc.ompThreads=1;'" + TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" +else + TRD_CONFIG+=" --track-sources TPC,ITS-TPC" +fi +if [ $CTFINPUT == 1 ]; then + ITS_CONFIG+=" --tracking-mode async" +else + ITS_CONFIG+=" --entropy-encoding" + TOF_OUTPUT+=",ctf" + GPU_OUTPUT+=",compressed-clusters-ctf" +fi + +if [ $GPUTYPE == "HIP" ]; then + if [ $NUMAID == 0 ] || [ $NUMAGPUIDS == 0 ]; then + export TIMESLICEOFFSET=0 + else + export TIMESLICEOFFSET=$NGPUS + fi + GPU_CONFIG_KEY+="GPU_proc.deviceNum=0;GPU_global.mutexMemReg=true;" + GPU_CONFIG+=" --environment \"ROCR_VISIBLE_DEVICES={timeslice${TIMESLICEOFFSET}}\"" + export HSA_NO_SCRATCH_RECLAIM=1 + #export HSA_TOOLS_LIB=/opt/rocm/lib/librocm-debug-agent.so.2 +else + GPU_CONFIG_KEY+="GPU_proc.deviceNum=-2;" +fi + +if [ $GPUTYPE != "CPU" ]; then + GPU_CONFIG_KEY+="GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;" + if [ $HOSTMEMSIZE == "0" ]; then + HOSTMEMSIZE=$(( 1 << 30 )) + fi +fi +if [ $HOSTMEMSIZE != "0" ]; then + GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" +fi + +if [ $EPNPIPELINES != 0 ]; then + N_TPCENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_TPCITS=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_ITSDEC=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_EMC=$(($(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_TRDENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_TRDTRK=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) +else + N_TPCENT=1 + N_TPCITS=1 + N_ITSDEC=1 + N_EMC=1 + N_TRDENT=1 + N_TRDTRK=1 +fi + +# Input workflow +if [ $CTFINPUT == 1 ]; then + GPU_INPUT=compressed-clusters-ctf + TOF_INPUT=digits + CTFName=`ls -t o2_ctf_*.root | head -n1` + CTF_DICT= + if [ ! -z $CTF_DICT_DIR ] ; then CTF_DICT=" --ctf-dict ${CTF_DICT_DIR}/ctf_dictionary.root"; fi + WORKFLOW="o2-ctf-reader-workflow --ctf-input ${CTFName} ${CTF_DICT} --onlyDet $CTF_DETECTORS $ARGS_ALL | " +elif [ $EXTINPUT == 1 ]; then + WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"FLP:FLP/DISTSUBTIMEFRAME/0;B:TPC/RAWDATA;C:ITS/RAWDATA;D:TOF/RAWDATA;D:MFT/RAWDATA;E:FT0/RAWDATA;F:MID/RAWDATA;G:EMC/RAWDATA;H:PHS/RAWDATA;I:CPV/RAWDATA;J:ZDC/RAWDATA;K:HMP/RAWDATA;L:FDD/RAWDATA;M:TRD/RAWDATA;N:FV0/RAWDATA;O:MCH/RAWDATA\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " +else + WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf rawAll.cfg | " +fi + +#Decoder workflows +if [ $CTFINPUT == 0 ]; then + WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --pipeline its-stf-decoder:$N_ITSDEC | " + WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --runmft true | " + WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --disable-root-output | " + WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --disable-root-output | " + WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL | " + WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL | " + WORKFLOW+="o2-tof-compressor $ARGS_ALL | " + WORKFLOW+="o2-fdd-flp-dpl-workflow --disable-root-output $ARGS_ALL | " + WORKFLOW+="o2-trd-datareader $ARGS_ALL | " +fi + +# Common workflows +WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ITS_CONFIG_KEY\" | " +WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL/--severity $SEVERITY/--severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$NGPUS $GPU_CONFIG --configKeyValues \"GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " +WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC --pipeline itstpc-track-matcher:$N_TPCITS | " +WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC | " +WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC | " +WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " +WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " + +# Workflows disabled in sync mode +if [ $SYNCMODE == 0 ]; then + WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" | " + WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --disable-root-output $DISABLE_MC | " + WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC | " + WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --clusters-from-upstream $DISABLE_MC --disable-root-output | " + WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 | " + WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --disable-root-input --disable-root-output | " + WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --disable-root-input --disable-root-output | " + WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC | " +fi + +# Workflows disabled in async mode +if [ $CTFINPUT == 0 ]; then + WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" | " + + WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --input-type raw --output-type cells --disable-root-input --disable-root-output $DISABLE_MC | " + WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --input-type raw --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC | " + WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " + WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --disable-root-output | " + WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL | " + + WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --runmft true | " + WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL | " + WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --pipeline trd-entropy-encoder:$N_TRDENT | " + WORKFLOW+="o2-tpc-reco-workflow --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT $ARGS_ALL | " + + WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --disable-root-output --disable-root-input | " + + # Output workflow + if [ ! -z $CTF_DIR ] ; then mkdir -p $CTF_DIR; fi + if [ $CREATECTFDICT == 1 ] ; then + _DICT_="ctf_dictionary.root" + if [ ! -z $CTF_DICT_DIR ] ; then + mkdir -p $CTF_DICT_DIR; + _DICT_="$CTF_DICT_DIR/$_DICT_" + fi + if [ -e $_DICT_ ] ; then rm -f $_DICT_; fi + fi + CTF_OUTPUT_TYPE="none" + if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi + if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi + if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi + CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --output-type $CTF_OUTPUT_TYPE --onlyDet $CTF_DETECTORS" + if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $NTIMEFRAMES"; fi + if [ ! -z $CTF_DICT_DIR ]; then CMD_CTF+=" --ctf-dict-dir $CTF_DICT_DIR"; fi + if [ ! -z $CTF_DIR ]; then CMD_CTF+=" --ctf-output-dir $CTF_DIR"; fi + WORKFLOW+="$CMD_CTF | " +fi + +if [ "0$RUN_EVENT_DISPLAY" == "01" ]; then + WORKFLOW+="o2-eve-display $ARGS_ALL --display-tracks TPC --display-clusters TPC $DISABLE_MC | " +fi + +# DPL run binary +WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --run" + +if [ "0$PRINT_WORKFLOW_ONLY" == "01" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + eval $WORKFLOW +fi From 9f571376a698c3e7e056e5ebce1f5875fcb66f13 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 22 Aug 2021 09:08:01 +0200 Subject: [PATCH 002/236] Copy setenv scrpt from O2 to common folder and link to full system test workflow --- common/setenv.sh | 47 +++++++++++++++++++++++++++ production/full-system-test/setenv.sh | 1 + 2 files changed, 48 insertions(+) create mode 100755 common/setenv.sh create mode 120000 production/full-system-test/setenv.sh diff --git a/common/setenv.sh b/common/setenv.sh new file mode 100755 index 0000000..985f1d0 --- /dev/null +++ b/common/setenv.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# Make sure we can open sufficiently many files / allocate enough memory +ulimit -n 4096 && ulimit -m unlimited && ulimit -v unlimited && [ -z "$GPUTYPE" ] || [ "$GPUTYPE" == "CPU" ] || ulimit -l unlimited +if [ $? != 0 ]; then + echo Error setting ulimits + exit 1 +fi + +if [ -z "$NTIMEFRAMES" ]; then export NTIMEFRAMES=1; fi # Number of time frames to process +if [ -z "$TFDELAY" ]; then export TFDELAY=100; fi # Delay in seconds between publishing time frames +if [ -z "$NGPUS" ]; then export NGPUS=1; fi # Number of GPUs to use, data distributed round-robin +if [ -z "$GPUTYPE" ]; then export GPUTYPE=CPU; fi # GPU Tracking backend to use, can be CPU / CUDA / HIP / OCL / OCL2 +if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 128 << 30 )); fi # Size of shared memory for messages +if [ -z "$DDSHMSIZE" ]; then export DDSHMSIZE=$(( 32 << 10 )); fi # Size of shared memory for DD Input +if [ -z "$GPUMEMSIZE" ]; then export GPUMEMSIZE=$(( 13 << 30 )); fi # Size of allocated GPU memory (if GPUTYPE != CPU) +if [ -z "$HOSTMEMSIZE" ]; then export HOSTMEMSIZE=0; fi # Size of allocated host memory for GPU reconstruction (0 = default) +if [ -z "$CREATECTFDICT" ]; then export CREATECTFDICT=0; fi # Create CTF dictionary +if [ -z "$SAVECTF" ]; then export SAVECTF=0; fi # Save the CTF to a ROOT file +if [ -z "$SYNCMODE" ]; then export SYNCMODE=0; fi # Run only reconstruction steps of the synchronous reconstruction +if [ -z "$NUMAID" ]; then export NUMAID=0; fi # SHM segment id to use for shipping data as well as set of GPUs to use (use 0 / 1 for 2 NUMA domains) +if [ -z "$NUMAGPUIDS" ]; then export NUMAGPUIDS=0; fi # NUMAID-aware GPU id selection +if [ -z "$EXTINPUT" ]; then export EXTINPUT=0; fi # Receive input from raw FMQ channel instead of running o2-raw-file-reader +if [ -z "$CTFINPUT" ]; then export CTFINPUT=0; fi # Read input from CTF (incompatible to EXTINPUT=1) +if [ -z "$NHBPERTF" ]; then export NHBPERTF=128; fi # Time frame length (in HBF) +if [ -z "$GLOBALDPLOPT" ]; then export GLOBALDPLOPT=; fi # Global DPL workflow options appended at the end +if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=0; fi # Set default EPN pipeline multiplicities +if [ -z "$SEVERITY" ]; then export SEVERITY="info"; fi # Log verbosity +if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # Throw exception when running out of SHM +if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable FairMQ Rate Logging +if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw channel name used to communicate with DataDistribution + +SEVERITY_TPC="info" # overrides severity for the tpc workflow +DISABLE_MC="--disable-mc" + +if [ $EXTINPUT == 1 ] && [ $CTFINPUT == 1 ]; then + echo EXTINPUT and CTFINPUT are incompatible + exit 1 +fi +if [ $SAVECTF == 1 ] && [ $CTFINPUT == 1 ]; then + echo SAVECTF and CTFINPUT are incompatible + exit 1 +fi +if [ $SYNCMODE == 1 ] && [ $CTFINPUT == 1 ]; then + echo SYNCMODE and CTFINPUT are incompatible + exit 1 +fi diff --git a/production/full-system-test/setenv.sh b/production/full-system-test/setenv.sh new file mode 120000 index 0000000..e5f7f7e --- /dev/null +++ b/production/full-system-test/setenv.sh @@ -0,0 +1 @@ +../../common/setenv.sh \ No newline at end of file From ee37129493867113e39afccca25f5129ad522235 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 22 Aug 2021 09:22:28 +0200 Subject: [PATCH 003/236] Add WORKFLOWMODE option --- common/setenv.sh | 5 +++++ production/full-system-test/dpl-workflow.sh | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 985f1d0..c12c417 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -29,6 +29,7 @@ if [ -z "$SEVERITY" ]; then export SEVERITY="info"; fi # Log ver if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # Throw exception when running out of SHM if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable FairMQ Rate Logging if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw channel name used to communicate with DataDistribution +if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflow mode, must be run, print, od dds SEVERITY_TPC="info" # overrides severity for the tpc workflow DISABLE_MC="--disable-mc" @@ -45,3 +46,7 @@ if [ $SYNCMODE == 1 ] && [ $CTFINPUT == 1 ]; then echo SYNCMODE and CTFINPUT are incompatible exit 1 fi +if [ $WORKFLOWMODE != "run" ] && [ $WORKFLOWMODE != "print" ] && [ $WORKFLOWMODE != "dds" ]; then + echo Invalid workflow mode + exit 1 +fi diff --git a/production/full-system-test/dpl-workflow.sh b/production/full-system-test/dpl-workflow.sh index 01e31ae..6aadd13 100755 --- a/production/full-system-test/dpl-workflow.sh +++ b/production/full-system-test/dpl-workflow.sh @@ -204,12 +204,13 @@ if [ "0$RUN_EVENT_DISPLAY" == "01" ]; then fi # DPL run binary -WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --run" +WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" -if [ "0$PRINT_WORKFLOW_ONLY" == "01" ]; then +if [ $WORKFLOWMODE == "print" ]; then echo Workflow command: echo $WORKFLOW | sed "s/| */|\n/g" else # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" eval $WORKFLOW fi From 10df203baa2814252bd21094a946260785581470 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 22 Aug 2021 10:53:39 +0200 Subject: [PATCH 004/236] Reduce default memory sizes to be more laptop-compatible, large sizes should be set explicitly anyway --- common/setenv.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index c12c417..e989cbd 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -11,9 +11,9 @@ if [ -z "$NTIMEFRAMES" ]; then export NTIMEFRAMES=1; fi # Number if [ -z "$TFDELAY" ]; then export TFDELAY=100; fi # Delay in seconds between publishing time frames if [ -z "$NGPUS" ]; then export NGPUS=1; fi # Number of GPUs to use, data distributed round-robin if [ -z "$GPUTYPE" ]; then export GPUTYPE=CPU; fi # GPU Tracking backend to use, can be CPU / CUDA / HIP / OCL / OCL2 -if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 128 << 30 )); fi # Size of shared memory for messages -if [ -z "$DDSHMSIZE" ]; then export DDSHMSIZE=$(( 32 << 10 )); fi # Size of shared memory for DD Input -if [ -z "$GPUMEMSIZE" ]; then export GPUMEMSIZE=$(( 13 << 30 )); fi # Size of allocated GPU memory (if GPUTYPE != CPU) +if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 8 << 30 )); fi # Size of shared memory for messages +if [ -z "$DDSHMSIZE" ]; then export DDSHMSIZE=$(( 8 << 10 )); fi # Size of shared memory for DD Input +if [ -z "$GPUMEMSIZE" ]; then export GPUMEMSIZE=$(( 24 << 30 )); fi # Size of allocated GPU memory (if GPUTYPE != CPU) if [ -z "$HOSTMEMSIZE" ]; then export HOSTMEMSIZE=0; fi # Size of allocated host memory for GPU reconstruction (0 = default) if [ -z "$CREATECTFDICT" ]; then export CREATECTFDICT=0; fi # Create CTF dictionary if [ -z "$SAVECTF" ]; then export SAVECTF=0; fi # Save the CTF to a ROOT file From 0378fd9c2dd472d55129604b1f11c3e6dd96783c Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 22 Aug 2021 10:54:14 +0200 Subject: [PATCH 005/236] Add FILEWORKDIR option to set standard folder for all files (input and output) --- common/setenv.sh | 1 + production/full-system-test/dpl-workflow.sh | 127 ++++++++++---------- 2 files changed, 63 insertions(+), 65 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index e989cbd..0eec1d5 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -30,6 +30,7 @@ if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # Throw e if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable FairMQ Rate Logging if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw channel name used to communicate with DataDistribution if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflow mode, must be run, print, od dds +if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. SEVERITY_TPC="info" # overrides severity for the tpc workflow DISABLE_MC="--disable-mc" diff --git a/production/full-system-test/dpl-workflow.sh b/production/full-system-test/dpl-workflow.sh index 6aadd13..26fc789 100755 --- a/production/full-system-test/dpl-workflow.sh +++ b/production/full-system-test/dpl-workflow.sh @@ -33,11 +33,12 @@ fi if [ $GPUTYPE != "CPU" ]; then ARGS_ALL+=" --shm-mlock-segment-on-creation 1" fi +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;" # Set some individual workflow arguments depending on configuration CTF_DETECTORS=ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH -CTF_DIR= -CTF_DICT_DIR= +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi +if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi GPU_INPUT=zsraw GPU_OUTPUT=tracks,clusters GPU_CONFIG= @@ -47,11 +48,13 @@ TOF_OUTPUT=clusters ITS_CONFIG= ITS_CONFIG_KEY= TRD_CONFIG= +TRD_CONFIG_KEY= TRD_TRANSFORMER_CONFIG= if [ $SYNCMODE == 1 ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" - TRD_CONFIG+=" --track-sources ITS-TPC --filter-trigrec --configKeyValues 'GPU_proc.ompThreads=1;'" + TRD_CONFIG+=" --track-sources ITS-TPC --filter-trigrec" + TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" else TRD_CONFIG+=" --track-sources TPC,ITS-TPC" @@ -108,99 +111,93 @@ fi if [ $CTFINPUT == 1 ]; then GPU_INPUT=compressed-clusters-ctf TOF_INPUT=digits - CTFName=`ls -t o2_ctf_*.root | head -n1` - CTF_DICT= - if [ ! -z $CTF_DICT_DIR ] ; then CTF_DICT=" --ctf-dict ${CTF_DICT_DIR}/ctf_dictionary.root"; fi - WORKFLOW="o2-ctf-reader-workflow --ctf-input ${CTFName} ${CTF_DICT} --onlyDet $CTF_DETECTORS $ARGS_ALL | " + CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root | head -n1` + WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ctf-input ${CTFName} --ctf-dict ${CTF_DICT_DIR}/ctf_dictionary.root --onlyDet $CTF_DETECTORS | " elif [ $EXTINPUT == 1 ]; then WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"FLP:FLP/DISTSUBTIMEFRAME/0;B:TPC/RAWDATA;C:ITS/RAWDATA;D:TOF/RAWDATA;D:MFT/RAWDATA;E:FT0/RAWDATA;F:MID/RAWDATA;G:EMC/RAWDATA;H:PHS/RAWDATA;I:CPV/RAWDATA;J:ZDC/RAWDATA;K:HMP/RAWDATA;L:FDD/RAWDATA;M:TRD/RAWDATA;N:FV0/RAWDATA;O:MCH/RAWDATA\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " else - WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf rawAll.cfg | " + WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg | " fi #Decoder workflows if [ $CTFINPUT == 0 ]; then - WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --pipeline its-stf-decoder:$N_ITSDEC | " - WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --runmft true | " - WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --disable-root-output | " - WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --disable-root-output | " - WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL | " - WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL | " - WORKFLOW+="o2-tof-compressor $ARGS_ALL | " - WORKFLOW+="o2-fdd-flp-dpl-workflow --disable-root-output $ARGS_ALL | " + WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/ITSdictionary.bin --pipeline its-stf-decoder:$N_ITSDEC | " + WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/MFTdictionary.bin --runmft true | " + WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-fdd-flp-dpl-workflow --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $ARGS_ALL | " WORKFLOW+="o2-trd-datareader $ARGS_ALL | " fi # Common workflows -WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ITS_CONFIG_KEY\" | " -WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL/--severity $SEVERITY/--severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$NGPUS $GPU_CONFIG --configKeyValues \"GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " -WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC --pipeline itstpc-track-matcher:$N_TPCITS | " -WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC | " -WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC | " -WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " -WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " +WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" | " +WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL/--severity $SEVERITY/--severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$NGPUS $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " +WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline itstpc-track-matcher:$N_TPCITS | " +WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " +WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC | " +WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " +WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " # Workflows disabled in sync mode if [ $SYNCMODE == 0 ]; then - WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" | " - WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --disable-root-output $DISABLE_MC | " - WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC | " - WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --clusters-from-upstream $DISABLE_MC --disable-root-output | " - WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 | " - WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --disable-root-input --disable-root-output | " - WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --disable-root-input --disable-root-output | " - WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC | " + WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" | " + WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC | " + WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " + WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output | " + WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 | " + WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output | " + WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output | " + WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " fi # Workflows disabled in async mode if [ $CTFINPUT == 0 ]; then - WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" | " - - WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --input-type raw --output-type cells --disable-root-input --disable-root-output $DISABLE_MC | " - WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --input-type raw --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC | " - WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " - WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --disable-root-output | " - WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL | " - - WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --runmft true | " - WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL | " - WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --pipeline trd-entropy-encoder:$N_TRDENT | " - WORKFLOW+="o2-tpc-reco-workflow --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT $ARGS_ALL | " - - WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --disable-root-output --disable-root-input | " + WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" | " + + WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output $DISABLE_MC | " + WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC | " + WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " + WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + + WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true | " + WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " + WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " + + WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input | " # Output workflow - if [ ! -z $CTF_DIR ] ; then mkdir -p $CTF_DIR; fi + if [ $SAVECTF == 1 ]; then + mkdir -p $CTF_DIR + fi if [ $CREATECTFDICT == 1 ] ; then - _DICT_="ctf_dictionary.root" - if [ ! -z $CTF_DICT_DIR ] ; then - mkdir -p $CTF_DICT_DIR; - _DICT_="$CTF_DICT_DIR/$_DICT_" - fi - if [ -e $_DICT_ ] ; then rm -f $_DICT_; fi + mkdir -p $CTF_DICT_DIR; + rm -f $CTF_DICT_DIR/ctf_dictionary.root fi CTF_OUTPUT_TYPE="none" if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi - CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --output-type $CTF_OUTPUT_TYPE --onlyDet $CTF_DETECTORS" + CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir $CTF_DIR --ctf-dict-dir $CTF_DICT_DIR --output-type $CTF_OUTPUT_TYPE --onlyDet $CTF_DETECTORS" if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $NTIMEFRAMES"; fi - if [ ! -z $CTF_DICT_DIR ]; then CMD_CTF+=" --ctf-dict-dir $CTF_DICT_DIR"; fi - if [ ! -z $CTF_DIR ]; then CMD_CTF+=" --ctf-output-dir $CTF_DIR"; fi WORKFLOW+="$CMD_CTF | " fi if [ "0$RUN_EVENT_DISPLAY" == "01" ]; then - WORKFLOW+="o2-eve-display $ARGS_ALL --display-tracks TPC --display-clusters TPC $DISABLE_MC | " + WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --display-tracks TPC --display-clusters TPC $DISABLE_MC | " fi # DPL run binary From 95f1ef92e13b91337fc29d2eaf1c31a9b1fc19fb Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 23 Aug 2021 13:52:03 +0200 Subject: [PATCH 006/236] Add first version of parser script --- tools/parse | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 tools/parse diff --git a/tools/parse b/tools/parse new file mode 100755 index 0000000..394e31e --- /dev/null +++ b/tools/parse @@ -0,0 +1,82 @@ +#!/usr/bin/env python +import os +import sys +import shlex +import tempfile + +if len(sys.argv) != 4: + print("Incorrect number of arguments provided, syntax is parse [description library file] [topology name] [output file name]") + exit(1) + +if not "FILEWORKDIR" in os.environ: + print("$FILEWORKDIR env variable missing") + exit(1) + +print("Using topology", sys.argv[2], "of library", sys.argv[1]) + +os.environ['WORKFLOWMODE'] = 'dds' +if 'GLOBALDPLOPT' in os.environ: + os.environ['GLOBALDPLOPT'] += " -b" +else: + os.environ['GLOBALDPLOPT'] = "-b" + +f = open(sys.argv[1], "r") +for line in f: + line = line.strip() + if len(line) == 0: + continue + if line[0] == '#': + continue + args = shlex.split(line) + if len(args) <= 1: + print("Toplogy must have at least name and O2 version") + raise + if len(args[0]) == 0: + print("Empty topology name forbitten") + raise + if not args[0].endswith(':'): + print("Topology name ", args[0], "not followed by ':'") + raise + if args[0] == sys.argv[2] + ":": + reconodes = 0 + reconodesmin = 0 + recoworkflows = [] + calibworkflows = [] + print("Found topology", sys.argv[2], "-", args) + with tempfile.TemporaryDirectory(prefix="o2_workflow") as tmpdir: + for i in range(2, len(args)): + filename = tmpdir + "/wf" + str(i) + ".dds" + if args[i].startswith("reco"): + wf = args[i].split(",", 4) + recoworkflows.append(filename) + elif args[i].startswith("calib"): + wf = args[i].split(",", 3) + wf[3] = wf[2] + wf[2] = wf[1] + calibworkflows.append(filename) + else: + print("Invalid workflow type", args[i]) + raise + print("Adding", wf[0], "workflow (", wf[2], "-", wf[1], "nodes):", wf[3]) + reconodes = max(reconodes, int(wf[1])) + reconodesmin = max(reconodesmin, int(wf[2])) + command = wf[3] + " | grep -v \"^\[\" > " + filename + print("Running DPL command", command) + if os.system(command) != 0: + print("Error running command", command) + raise + odccommand = "odc-epn-topo" + if len(recoworkflows): + odccommand += " --dd " + os.environ['DDWORKFLOW'] + " --reco " + " ".join(recoworkflows) + odccommand += " --n " + str(reconodes) + if len(calibworkflows): + odccommand += " --calib " + " ".join(calibworkflows) + odccommand += " -o " + sys.argv[3] + if os.system(odccommand) != 0: + print("\nError running odc: ", odccommand) + raise + print("Done") + exit(0) + +print("Could not find workflow", sys.argv[2]) +exit(1) From 906fde1a4d62a4693079aeac5b1d15dc96083036 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 23 Aug 2021 13:52:30 +0200 Subject: [PATCH 007/236] Add first example description file for full system test --- production/full-system-test.desc | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 production/full-system-test.desc diff --git a/production/full-system-test.desc b/production/full-system-test.desc new file mode 100644 index 0000000..ba6555d --- /dev/null +++ b/production/full-system-test.desc @@ -0,0 +1,3 @@ +#Full system test workflows +full-system-test-async: nightly-20210819 reco,128,126,"CTFINPUT=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" +full-system-test-sync: nightly-20210819 reco,128,126,"SYNCMODE=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" From 7f500bb1b1af06eb9061de6dee5586ca7eccb9c6 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 23 Aug 2021 15:04:17 +0200 Subject: [PATCH 008/236] Use full-system-test dpl-workflow.sh from O2 --- production/full-system-test/dpl-workflow.sh | 211 +------------------- 1 file changed, 3 insertions(+), 208 deletions(-) diff --git a/production/full-system-test/dpl-workflow.sh b/production/full-system-test/dpl-workflow.sh index 26fc789..27f659e 100755 --- a/production/full-system-test/dpl-workflow.sh +++ b/production/full-system-test/dpl-workflow.sh @@ -1,213 +1,8 @@ #!/bin/bash -# In order to use o2sim_grp.root, o2sim_geometry.root or matbud.root from arbitrary directory one can provide to the workflow -# --configKeyValues "NameConf.mDirGRP=;NameConf.mDirGeom=;NameConf.mDirMatLUT=;" -# All workflows currently running in the FST parce the configKeyValues option, so the NameConf.mDirXXX keys can be added via global env.var. - -# Get this script's directory : use zsh first (e.g. on Mac) and fallback -# on `readlink -f` if zsh is not there -command -v zsh > /dev/null 2>&1 && MYDIR=$(dirname $(zsh -c 'echo ${0:A}' "$0")) -test -z ${MYDIR+x} && MYDIR="$(dirname $(readlink -f $0))" - -source $MYDIR/setenv.sh - if [ "0$O2_ROOT" == "0" ]; then - eval "`alienv shell-helper`" - alienv --no-refresh load O2/latest -fi - -# Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -if [ $EXTINPUT == 1 ] || [ $NUMAGPUIDS == 1 ]; then - ARGS_ALL+=" --no-cleanup" -fi -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -if [ $NUMAGPUIDS != 0 ]; then - ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" -fi -if [ $GPUTYPE != "CPU" ]; then - ARGS_ALL+=" --shm-mlock-segment-on-creation 1" -fi -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;" - -# Set some individual workflow arguments depending on configuration -CTF_DETECTORS=ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi -if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi -GPU_INPUT=zsraw -GPU_OUTPUT=tracks,clusters -GPU_CONFIG= -GPU_CONFIG_KEY= -TOF_INPUT=raw -TOF_OUTPUT=clusters -ITS_CONFIG= -ITS_CONFIG_KEY= -TRD_CONFIG= -TRD_CONFIG_KEY= -TRD_TRANSFORMER_CONFIG= -if [ $SYNCMODE == 1 ]; then - ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" - GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" - TRD_CONFIG+=" --track-sources ITS-TPC --filter-trigrec" - TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" - TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" -else - TRD_CONFIG+=" --track-sources TPC,ITS-TPC" -fi -if [ $CTFINPUT == 1 ]; then - ITS_CONFIG+=" --tracking-mode async" -else - ITS_CONFIG+=" --entropy-encoding" - TOF_OUTPUT+=",ctf" - GPU_OUTPUT+=",compressed-clusters-ctf" -fi - -if [ $GPUTYPE == "HIP" ]; then - if [ $NUMAID == 0 ] || [ $NUMAGPUIDS == 0 ]; then - export TIMESLICEOFFSET=0 - else - export TIMESLICEOFFSET=$NGPUS - fi - GPU_CONFIG_KEY+="GPU_proc.deviceNum=0;GPU_global.mutexMemReg=true;" - GPU_CONFIG+=" --environment \"ROCR_VISIBLE_DEVICES={timeslice${TIMESLICEOFFSET}}\"" - export HSA_NO_SCRATCH_RECLAIM=1 - #export HSA_TOOLS_LIB=/opt/rocm/lib/librocm-debug-agent.so.2 -else - GPU_CONFIG_KEY+="GPU_proc.deviceNum=-2;" -fi - -if [ $GPUTYPE != "CPU" ]; then - GPU_CONFIG_KEY+="GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;" - if [ $HOSTMEMSIZE == "0" ]; then - HOSTMEMSIZE=$(( 1 << 30 )) - fi -fi -if [ $HOSTMEMSIZE != "0" ]; then - GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" -fi - -if [ $EPNPIPELINES != 0 ]; then - N_TPCENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_TPCITS=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_ITSDEC=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_EMC=$(($(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_TRDENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_TRDTRK=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) -else - N_TPCENT=1 - N_TPCITS=1 - N_ITSDEC=1 - N_EMC=1 - N_TRDENT=1 - N_TRDTRK=1 -fi - -# Input workflow -if [ $CTFINPUT == 1 ]; then - GPU_INPUT=compressed-clusters-ctf - TOF_INPUT=digits - CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root | head -n1` - WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ctf-input ${CTFName} --ctf-dict ${CTF_DICT_DIR}/ctf_dictionary.root --onlyDet $CTF_DETECTORS | " -elif [ $EXTINPUT == 1 ]; then - WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"FLP:FLP/DISTSUBTIMEFRAME/0;B:TPC/RAWDATA;C:ITS/RAWDATA;D:TOF/RAWDATA;D:MFT/RAWDATA;E:FT0/RAWDATA;F:MID/RAWDATA;G:EMC/RAWDATA;H:PHS/RAWDATA;I:CPV/RAWDATA;J:ZDC/RAWDATA;K:HMP/RAWDATA;L:FDD/RAWDATA;M:TRD/RAWDATA;N:FV0/RAWDATA;O:MCH/RAWDATA\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " -else - WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg | " -fi - -#Decoder workflows -if [ $CTFINPUT == 0 ]; then - WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/ITSdictionary.bin --pipeline its-stf-decoder:$N_ITSDEC | " - WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/MFTdictionary.bin --runmft true | " - WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-fdd-flp-dpl-workflow --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $ARGS_ALL | " - WORKFLOW+="o2-trd-datareader $ARGS_ALL | " -fi - -# Common workflows -WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" | " -WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL/--severity $SEVERITY/--severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$NGPUS $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " -WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline itstpc-track-matcher:$N_TPCITS | " -WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " -WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC | " -WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " -WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " - -# Workflows disabled in sync mode -if [ $SYNCMODE == 0 ]; then - WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" | " - WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC | " - WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " - WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output | " - WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 | " - WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output | " - WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output | " - WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " -fi - -# Workflows disabled in async mode -if [ $CTFINPUT == 0 ]; then - WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" | " - - WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output $DISABLE_MC | " - WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC | " - WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " - WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - - WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true | " - WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " - WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " - - WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input | " - - # Output workflow - if [ $SAVECTF == 1 ]; then - mkdir -p $CTF_DIR - fi - if [ $CREATECTFDICT == 1 ] ; then - mkdir -p $CTF_DICT_DIR; - rm -f $CTF_DICT_DIR/ctf_dictionary.root - fi - CTF_OUTPUT_TYPE="none" - if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi - if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi - if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi - CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir $CTF_DIR --ctf-dict-dir $CTF_DICT_DIR --output-type $CTF_OUTPUT_TYPE --onlyDet $CTF_DETECTORS" - if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $NTIMEFRAMES"; fi - WORKFLOW+="$CMD_CTF | " + echo O2 environment not loaded + exit 1 fi -if [ "0$RUN_EVENT_DISPLAY" == "01" ]; then - WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --display-tracks TPC --display-clusters TPC $DISABLE_MC | " -fi - -# DPL run binary -WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi +source $O2_ROOT/prodtests/full-system-test/dpl-workflow.sh From 2fbd720ad45bef1d287229c5fa320943e7fe90ac Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 27 Aug 2021 16:58:18 +0200 Subject: [PATCH 009/236] Add EPNMODE variable, and load specified O2 version automatically on EPN --- common/setenv.sh | 1 + production/full-system-test.desc | 4 ++-- tools/parse | 10 ++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 0eec1d5..a469dfe 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -31,6 +31,7 @@ if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw channel name used to communicate with DataDistribution if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflow mode, must be run, print, od dds if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. +if [ -z "$EPNMODE" ]; then export EPNMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... SEVERITY_TPC="info" # overrides severity for the tpc workflow DISABLE_MC="--disable-mc" diff --git a/production/full-system-test.desc b/production/full-system-test.desc index ba6555d..bf3428f 100644 --- a/production/full-system-test.desc +++ b/production/full-system-test.desc @@ -1,3 +1,3 @@ #Full system test workflows -full-system-test-async: nightly-20210819 reco,128,126,"CTFINPUT=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" -full-system-test-sync: nightly-20210819 reco,128,126,"SYNCMODE=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" +full-system-test-async: O2PDPSuite/latest reco,128,126,"CTFINPUT=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" +full-system-test-sync: O2PDPSuite/latest reco,128,126,"SYNCMODE=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" diff --git a/tools/parse b/tools/parse index 394e31e..5ea62fc 100755 --- a/tools/parse +++ b/tools/parse @@ -3,6 +3,9 @@ import os import sys import shlex import tempfile +if 'EPNMODE' in os.environ and int(os.environ['EPNMODE']): + sys.path.insert(0, '/usr/share/Modules/init') + import python as mod if len(sys.argv) != 4: print("Incorrect number of arguments provided, syntax is parse [description library file] [topology name] [output file name]") @@ -43,6 +46,13 @@ for line in f: recoworkflows = [] calibworkflows = [] print("Found topology", sys.argv[2], "-", args) + if 'EPNMODE' in os.environ and int(os.environ['EPNMODE']): + for i in args[1].split(): + print("Loading module", i) + mod.module('load', i) + if not 'O2_ROOT' in os.environ: + print("O2 not loaded") + raise with tempfile.TemporaryDirectory(prefix="o2_workflow") as tmpdir: for i in range(2, len(args)): filename = tmpdir + "/wf" + str(i) + ".dds" From 6486a08a1cc97aa5920391bb2cf1e737f9873ebd Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 27 Aug 2021 17:00:08 +0200 Subject: [PATCH 010/236] Add dd-data DataDistribution workflow for testing --- tools/datadistribution_workflows/dd-data.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tools/datadistribution_workflows/dd-data.xml diff --git a/tools/datadistribution_workflows/dd-data.xml b/tools/datadistribution_workflows/dd-data.xml new file mode 100644 index 0000000..eba9c80 --- /dev/null +++ b/tools/datadistribution_workflows/dd-data.xml @@ -0,0 +1,14 @@ + + + + /home/epn/odc/tfbuilder.sh data + + TfBuilderRequirement + + +
+ + TfBuilderTask + +
+
From e9109781d76a678dd61e4c91eb890a212a8dd56f Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 27 Aug 2021 22:09:54 +0200 Subject: [PATCH 011/236] Update documentation --- README.md | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 09202d7..984280f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,61 @@ -Repository of DPL workflow scripts to be run in production. +THis repository contains the PDP workflows to run on the EPN (in the future also on the FLP) and the parse script which parses the description files and creates the DDS XML files +**Terminology** +- A **workflow** refers to a single DPL workflow binary, or multiple workflows binaries merged with the `|` syntax, or a shell script starting such a workflow. +- A **full topology** refers to the final XML file that is passed to DDS to start up a processing chain for one single partition on the EPN. +- A **partial topology** is the XML file created by DPL with the `--dds` option. + +**Folder structure**: +- **common** contains common scripts that can be used by all workflows, most importantly common environment variable scripts. +- **production** contains the production workflows for global runs, which are maintained by PDP experts. +- **tools** contains the **parser** script and auxiliary tools. +- **testing** contains scripts for tests / standalone runs maintained by detectors or privately. + +**Topology descriptions and description library files**: +Another abstraction layer above the *workflows* are **topology descriptions**. The *parser* tool can generate the *full topology* XML file from such a *description*, using the `–dds` option of DPL and the `odc-topo-epn` tool. *Topology descriptions* are stored in **description library files** in the `O2DataProcessing` repository. A *description library file* can contain multiple *topology descriptions* each identified by a **topology name** + +**Remarks**: +- The repository does not store *full topologies*, but they are created on the fly. Users can cache the resulting full topology XML files. +- The defaults (particularly also those set in the common environment files in the `common` folder) are tuned for running on a laptop / desktop. +- Workflows support 3 run modes selected via the `WORKFLOWMODE` env variable: + - **run** (default): run the workflow + - **print**: print the final workflow command to the console + - **dds**: create a partial topology. + +**Configuring / selecting workflow in AliECS**: +There are 3 ways foreseenm to configure the *full topology* in AliECS: (currently only the manual XML option exists) +- **hash of workflow repository**: In this mode, the following settings are configured in AliECS, and they uniquely identify a *full topology*. The *parser* will then create the final DDS XML file with the *full topology*: + - A **commit hash** identifying a state of the `O2DataProcessing` repository (this can also be a tag, and in the case of production workflows it is required to be a tag). + - The path of a **description library file** (relative path inside the `O2DataProcessing` repository). + - The **workflow name** inside the *description library file*. + - A **detector list**: comma-separated list of detectors participating in the run, defaulting to `ALL` for all detectors. + - **workflow parameters**: text field passed to workflow as environment variable for additional options. +- **repository directory**: This is almost identical to the case above, but instead of the commit hash, there is the **repository path** specified, pointing to a checked out repository on the shared home folder in the EPN farm. The procedure is the same as before, the parser will create the full topology XML file from the specified workflow in the repository. +- **manual XML file**: In this mode the `O2DataProcessing` repository is not used at all, but the absolute path of a *full topology* XML file in the EPN's shared home folder is specified. Such an XML file must be prepared manually by the same means as the *parser* would usually do (see paragraph on manual XML file below). + +**Topology descriptions**: +A *topology description* consists of +- A list of modules to load, both for generating the DDS XML file with DPL's `--dds` option and when running the workflow. It can either be a single module, or a space-separated list of modules in double-quotes. In particular, this setting identifies the O2 version. We provide the `O2PDPSuite` package, which has the same versions as O2 itself, and which contain also corresponding versions `DataDistribution` and `QualityControl`, thus it is usually sufficient to just load `O2PDPSuite/[version]`. +- A list of workflows, in the form of commands to run to create XML files by the `–dds` option. The command is executed with the `O2DataProcessing` path as working directory. The env options used to configure the workflow are prepended in normal shell syntax. + - Each workflow is amended with the following parameters (the parameters stand in front of the workflow command, and are separated by commas without spaces, the workflow command must be in double-quotes): + - Zone where to run the workflow (calib / reco) + - For reco: + - Number of nodes to run this workflow on + - If a processor in the workflow needs to identify on which node it is running on, it can use the `$DDS_COLLECTION_INDEX` emvironment variable. + - Minimum number of nodes required forthe workflow (in case of node failure) + - In case the there are multiple workflows in the topology description, the largest number of nodes, and the largest minimum number of nodes are used. + - For calib: + - Number of physical cores to be reserved on the node to run the workflow. + - Name of the calibration (used to set DDS properties which are used to make the reconstruction workflows connect to specific calibration workflows) + - ODC/DDS allocates as many nodes as necessary to have sufficient CPU cores for the calibration workflows. The different calibration workflows may or may not run on the same node. + +An example for the topology library file looks like: +topologies.txt +``` +demo-full-topology: O2/nightly-20210801 reco,128,126,"SHMSIZE=320000000000 full-system-test/dpl-workflow.sh" calib,5,"SHMSIZE=2000000000 calibration/some-calib.sh" calib,20,"SHMSIZE=2000000000 calibration/other-calib.sh"; +other-topology: O2/v1.0.0 reco,2,1,"tpc-test/tpc-standalone-test-1.sh" +``` +AliECS-config: +``` +commit=xxxx file=topologies.txt topology=demo-full-topology detectors="TPC,ITS" parameters="" +``` From 44c7c7daa75b2e4a6697881295b9e31bcfc26889 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 28 Aug 2021 09:38:38 +0200 Subject: [PATCH 012/236] Add list of active detectors (global, qc, calib) and workflow parameters to setenv script --- common/setenv.sh | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/common/setenv.sh b/common/setenv.sh index a469dfe..ff1c113 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -32,6 +32,11 @@ if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw cha if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflow mode, must be run, print, od dds if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. if [ -z "$EPNMODE" ]; then export EPNMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... +# Detectors used in the workflow / enabled parameters +if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ $WORKFLOW_DETECTORS == "ALL" ]; then export WORKFLOW_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH"; fi +if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ $WORKFLOW_DETECTORS_QC == "ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi +if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ $WORKFLOW_DETECTORS_CALIB == "ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi +if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi SEVERITY_TPC="info" # overrides severity for the tpc workflow DISABLE_MC="--disable-mc" @@ -52,3 +57,59 @@ if [ $WORKFLOWMODE != "run" ] && [ $WORKFLOWMODE != "print" ] && [ $WORKFLOWMODE echo Invalid workflow mode exit 1 fi + +has_detector() +{ + [[ $WORKFLOW_DETECTORS =~ (^|,)"$1"(,|$) ]] +} + +has_detectors() +{ + while true; do + if [ "0$1" == "0" ]; then return 0; fi + if ! has_detector $1; then return 1; fi + shift + done +} + +has_detector_qc() +{ + has_detector $1 && [[ $WORKFLOW_DETECTORS_QC =~ (^|,)"$1"(,|$) ]] +} + +has_detectors_qc() +{ + while true; do + if [ "0$1" == "0" ]; then return 0; fi + if ! has_detector_qc $1; then return 1; fi + shift + done +} + +has_detector_calib() +{ + has_detector $1 && [[ $WORKFLOW_DETECTORS_CALIB =~ (^|,)"$1"(,|$) ]] +} + +has_detectors_calib() +{ + while true; do + if [ "0$1" == "0" ]; then return 0; fi + if ! has_detector_calib $1; then return 1; fi + shift + done +} + +workflow_has_parameter() +{ + [[ $WORKFLOW_PARAMETERS =~ (^|,)"$1"(,|$) ]] +} + +workflow_has_parameters() +{ + while true; do + if [ "0$1" == "0" ]; then return 0; fi + if ! workflow_has_parameter $1; then return 1; fi + shift + done +} From d850bc824793affaf1110b79418d8308f0ae3a8d Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 28 Aug 2021 10:09:52 +0200 Subject: [PATCH 013/236] Add README.md file for setenv.sh --- common/README.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 common/README.md diff --git a/common/README.md b/common/README.md new file mode 100644 index 0000000..deb808e --- /dev/null +++ b/common/README.md @@ -0,0 +1,48 @@ +The `setenv-sh` script sets the following environment options +* `NTIMEFRAMES`: Number of time frames to process. +* `TFDELAY`: Delay in seconds between publishing time frames (1 / rate). +* `NGPUS`: Number of GPUs to use, data distributed round-robin. +* `GPUTYPE`: GPU Tracking backend to use, can be CPU / CUDA / HIP / OCL / OCL2. +* `SHMSIZE`: Size of the global shared memory segment. +* `DDSHMSIZE`: Size of shared memory unmanaged region for DataDistribution Input. +* `GPUMEMSIZE`: Size of allocated GPU memory (if GPUTYPE != CPU) +* `HOSTMEMSIZE`: Size of allocated host memory for GPU reconstruction (0 = default). + * For `GPUTYPE = CPU`: TPC Tracking scratch memory size. (Default 0 -> dynamic allocation.) + * Otherwise : Size of page-locked host memory for GPU processing. (Defauls 0 -> 1 GB.) +* `CREATECTFDICT`: Create CTF dictionary. +* `SAVECTF`: Save the CTF to a root file. + * 0: Read `ctf_dictionary.root` as input. + * 1: Create `ctf_dictionary.root`. Note that this was already done automatically if the raw data was simulated with `full_system_test.sh`. +* `SYNCMODE`: Run only reconstruction steps of the synchronous reconstruction. + * Note that there is no `ASYNCMODE` but instead the `CTFINPUT` option already enforces asynchronous processing. +* `NUMAGPUIDS`: NUMAID-aware GPU id selection. Needed for the full EPN configuration with 8 GPUs, 2 NUMA domains, 4 GPUs per domain. + In this configuration, 2 instances of `dpl-workflow.sh` must run in parallel. + To be used in combination with `NUMAID` to select the id per workflow. + `start_tmux.sh` will set up these variables automatically. +* `NUMAID`: SHM segment id to use for shipping data as well as set of GPUs to use (use `0` / `1` for 2 NUMA domains, 0 = GPUS `0` to `NGPUS - 1`, 1 = GPUS `NGPUS` to `2 * NGPUS - 1`) +* 0: Runs all reconstruction steps, of sync and of async reconstruction, using raw data input. +* 1: Runs only the steps of synchronous reconstruction, using raw data input. +* `EXTINPUT`: Receive input from raw FMQ channel instead of running o2-raw-file-reader. + * 0: `dpl-workflow.sh` can run as standalone benchmark, and will read the input itself. + * 1: To be used in combination with either `datadistribution.sh` or `raw-reader.sh` or with another DataDistribution instance. +* `CTFINPUT`: Read input from CTF ROOT file. This option is incompatible to EXTINPUT=1. The CTF ROOT file can be stored via SAVECTF=1. +* `NHBPERTF`: Time frame length (in HBF) +* `GLOBALDPLOPT`: Global DPL workflow options appended to o2-dpl-run. +* `EPNPIPELINES`: Set default EPN pipeline multiplicities. + Normally the workflow will start 1 dpl device per processor. + For some of the CPU parts, this is insufficient to keep step with the GPU processing rate, e.g. one ITS-TPC matcher on the CPU is slower than the TPC tracking on multiple GPUs. + This option adds some multiplicies for CPU processes using DPL's pipeline feature. + The settings were tuned for EPN processing with 4 GPUs (i.e. the default multiplicities are per NUMA domain). + The multiplicities are scaled with the `NGPUS` setting, i.e. with 1 GPU only 1/4th are applied. + You can pass an option different to 1, and than it will be applied as factor on top of the multiplicities. + It is auto-selected by `start-tmux.sh`. +* `SEVERITY`: Log verbosity (e.g. info or error) +* `SHMTHROW`: Throw exception when running out of SHM memory. + It is suggested to leave this enabled (default) on tests on the laptop to get an actual error when it runs out of memory. + This is disabled in `start_tmux.sh`, to avoid breaking the processing while there is a chance that another process might free memory and we can continue. +* `NORATELOG`: Disable FairMQ Rate Logging. +* `INRAWCHANNAME`: FairMQ channel name used by the raw proxy, must match the name used by DataDistribution. +* `WORKFLOWMODE`: run (run the workflow (default)), print (print the command to stdout), dds (create partial DDS topology) +* `FILEWORKDIR`: directory for all input / output files. E.g. grp / geometry / dictionaries etc. are read from here, and dictionaries / ctf / etc. are written to there. + Some files have more fine grained control via other environment variables (e.g. to store the CTF to somewhere else). Such variables are initialized to `$FILEWORKDIR` by default but can be overridden. +* `EPNMODE`: Specify that this is a workflow running on the EPN, e.g. logging goes to InfoLogger, DPL metrics to to the AliECS monitoring, etc. \ No newline at end of file From c0279cd7309460ddc2ebeafe2f4889c56a6334e4 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 28 Aug 2021 10:41:55 +0200 Subject: [PATCH 014/236] Add option to override number of nodes for reconstruction --- tools/parse | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/parse b/tools/parse index 5ea62fc..280ac6c 100755 --- a/tools/parse +++ b/tools/parse @@ -75,6 +75,8 @@ for line in f: if os.system(command) != 0: print("Error running command", command) raise + if 'RECO_NUM_NODES_OVERRIDE' in os.environ and os.environ['RECO_NUM_NODES_OVERRIDE'] != "" and int(os.environ['RECO_NUM_NODES_OVERRIDE']) > 0: + reconodes = int(os.environ['RECO_NUM_NODES_OVERRIDE']) odccommand = "odc-epn-topo" if len(recoworkflows): odccommand += " --dd " + os.environ['DDWORKFLOW'] + " --reco " + " ".join(recoworkflows) From 1f44ccd220c811955fabf08ef45a5bb274a13f2a Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 28 Aug 2021 10:55:18 +0200 Subject: [PATCH 015/236] Add synchronous reconstruction workflow --- production/production.desc | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 production/production.desc diff --git a/production/production.desc b/production/production.desc new file mode 100644 index 0000000..2545807 --- /dev/null +++ b/production/production.desc @@ -0,0 +1,2 @@ +synchronous-workflow: O2PDPSuite reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" +synchronous-workflow-1numa: O2PDPSuite reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" From 4849c2e81c5d15d9ea01105d42041925909ce4bc Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 28 Aug 2021 23:02:56 +0200 Subject: [PATCH 016/236] Improve documentation --- README.md | 58 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 984280f..4f88606 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,20 @@ THis repository contains the PDP workflows to run on the EPN (in the future also on the FLP) and the parse script which parses the description files and creates the DDS XML files -**Terminology** +# Terminology: - A **workflow** refers to a single DPL workflow binary, or multiple workflows binaries merged with the `|` syntax, or a shell script starting such a workflow. - A **full topology** refers to the final XML file that is passed to DDS to start up a processing chain for one single partition on the EPN. - A **partial topology** is the XML file created by DPL with the `--dds` option. -**Folder structure**: +# Folder structure: - **common** contains common scripts that can be used by all workflows, most importantly common environment variable scripts. - **production** contains the production workflows for global runs, which are maintained by PDP experts. - **tools** contains the **parser** script and auxiliary tools. - **testing** contains scripts for tests / standalone runs maintained by detectors or privately. -**Topology descriptions and description library files**: +# Topology descriptions and description library files: Another abstraction layer above the *workflows* are **topology descriptions**. The *parser* tool can generate the *full topology* XML file from such a *description*, using the `–dds` option of DPL and the `odc-topo-epn` tool. *Topology descriptions* are stored in **description library files** in the `O2DataProcessing` repository. A *description library file* can contain multiple *topology descriptions* each identified by a **topology name** -**Remarks**: +# Remarks: - The repository does not store *full topologies*, but they are created on the fly. Users can cache the resulting full topology XML files. - The defaults (particularly also those set in the common environment files in the `common` folder) are tuned for running on a laptop / desktop. - Workflows support 3 run modes selected via the `WORKFLOWMODE` env variable: @@ -22,18 +22,19 @@ Another abstraction layer above the *workflows* are **topology descriptions**. T - **print**: print the final workflow command to the console - **dds**: create a partial topology. -**Configuring / selecting workflow in AliECS**: +# Configuring / selecting workflow in AliECS: There are 3 ways foreseenm to configure the *full topology* in AliECS: (currently only the manual XML option exists) - **hash of workflow repository**: In this mode, the following settings are configured in AliECS, and they uniquely identify a *full topology*. The *parser* will then create the final DDS XML file with the *full topology*: - A **commit hash** identifying a state of the `O2DataProcessing` repository (this can also be a tag, and in the case of production workflows it is required to be a tag). - The path of a **description library file** (relative path inside the `O2DataProcessing` repository). - The **workflow name** inside the *description library file*. - - A **detector list**: comma-separated list of detectors participating in the run, defaulting to `ALL` for all detectors. + - **detector list**: Three comma-separated lists of detectors participating in the run (global list, list for qc, list for calibration), defaulting to `ALL` for all detectors. - **workflow parameters**: text field passed to workflow as environment variable for additional options. + - **number of nodes override**: Overrides the setting for the number of nodes required in the workflow (meant so quickly increase / decrease the EPN partition size). - **repository directory**: This is almost identical to the case above, but instead of the commit hash, there is the **repository path** specified, pointing to a checked out repository on the shared home folder in the EPN farm. The procedure is the same as before, the parser will create the full topology XML file from the specified workflow in the repository. - **manual XML file**: In this mode the `O2DataProcessing` repository is not used at all, but the absolute path of a *full topology* XML file in the EPN's shared home folder is specified. Such an XML file must be prepared manually by the same means as the *parser* would usually do (see paragraph on manual XML file below). -**Topology descriptions**: +# Topology descriptions: A *topology description* consists of - A list of modules to load, both for generating the DDS XML file with DPL's `--dds` option and when running the workflow. It can either be a single module, or a space-separated list of modules in double-quotes. In particular, this setting identifies the O2 version. We provide the `O2PDPSuite` package, which has the same versions as O2 itself, and which contain also corresponding versions `DataDistribution` and `QualityControl`, thus it is usually sufficient to just load `O2PDPSuite/[version]`. - A list of workflows, in the form of commands to run to create XML files by the `–dds` option. The command is executed with the `O2DataProcessing` path as working directory. The env options used to configure the workflow are prepended in normal shell syntax. @@ -50,12 +51,49 @@ A *topology description* consists of - ODC/DDS allocates as many nodes as necessary to have sufficient CPU cores for the calibration workflows. The different calibration workflows may or may not run on the same node. An example for the topology library file looks like: -topologies.txt +- topologies.desc ``` demo-full-topology: O2/nightly-20210801 reco,128,126,"SHMSIZE=320000000000 full-system-test/dpl-workflow.sh" calib,5,"SHMSIZE=2000000000 calibration/some-calib.sh" calib,20,"SHMSIZE=2000000000 calibration/other-calib.sh"; other-topology: O2/v1.0.0 reco,2,1,"tpc-test/tpc-standalone-test-1.sh" ``` -AliECS-config: +- AliECS-config: ``` -commit=xxxx file=topologies.txt topology=demo-full-topology detectors="TPC,ITS" parameters="" +commit=xxxx file=topologies.desc topology=demo-full-topology detectors="TPC,ITS" detectors_qc="TPC" detectors_calib="ALL" parameters="EVENT_DISPLAY" ``` + +# The parser script: +The **parser** is a simple python script that parses a *topology description* and generates the DDS XML file with the *full topology*. To do so, it runs all the DPL workflows with the `--dds` option and then uses the `odc-topo-epn` tool to merge the *partial topology* into the final *full topology*. +The *parser* is steered by some command line options and by some environment variables (note that the env variables get also passed through to the workflows). +- The *parser* needs a DataDistribution topology file. An example file is shipped with the parse in the `tools/datadistribution_workflows` folder. +- *Parser* command line options: + - The parser is supposed to be executed from the root folder of the `O2DataProcessing` repository. + - The syntax is: +``` +[ENV_VARIABLES] ./tools/parse [DESCRIPTION_LIBRARY_FILE] [TOPOLOGY_NAME] [OUTPUT_NAME] +``` + - In the above example, this could be: +``` +DDWORKFLOW=tools/datadistribution_workflows/dd-data.xml WORKFLOW_DETECTORS=TPC,ITS WORKFLOW_DETECTORS_QC=TPC WORKFLOW_DETECTORS_CALIB=ALL ./tools/parse topologies.desc demo-full-topology /tmp/output.xml +``` +- The following environment variables steer the *Parser*: + - `$FILEWORKDIR`: This variable must be set and is used by the workflows to specify where all required files (grp, geometry, dictionaries, etc) are located. + - `$EPNMODE`: If set the parser assumes it is running on the EPN. If so it will automatically load the modules specified in the topology description. This variable is further used by the workflows themselves, e.g. to activate the InfoLogger and the Metrics monitoring. + - `$DDWORKFLOW`: Path to the XML file with the partial workflow for *DataDistribution*. + - `$INRAWCHANNAME`: Propagated to the workflow, defines the raw FMQ channel name used for the communication with DataDistribution. + - `$RECO_NUM_NODES_OVERRIDE`: Overrides the number of nodes used for reconstruction (empty or 0 to disable) +- When run on the EPN farm, the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. + +# Creating a full topology DDS XML file manually: +- Check out the `O2DataProcessing` repository, adjust the workflows and topology description to your need. +- Open a shell and go to the root folder of `O2DataProcessing`. +- Make sure the `odc-topo-epn` is in your path (e.g. `module load ODC` / `alienv enter ODC/latest`). +- Set the required environment variables, e.g. +``` +FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_workflows/dd-data.xml INRAWCHANNAME=tf-builder-pipe-0 WORKFLOW_DETECTORS=TPC,ITS,TRD,TOF,FT0 +``` +- If you are not on the EPN farm and have NOT set `EPNMODE=1`: Load the required modules for O2 / QC (`alienv load O2/latest QualityControl/latest`) +- Run the parser, e.g.: +``` +./tools/parse production/production.desc synchronous-workflow /tmp/dds-topology.xml +``` +- Now you can use `/tmp/dds-topology.xml` to start the workflow via DDS. From f2d1e764d174a9b296c7aec9dd0cc8e69f4f3f45 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 28 Aug 2021 23:15:27 +0200 Subject: [PATCH 017/236] Prepend module load commands to exe for required O2/QC/... modules --- tools/parse | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/parse b/tools/parse index 280ac6c..3e20a55 100755 --- a/tools/parse +++ b/tools/parse @@ -83,6 +83,8 @@ for line in f: odccommand += " --n " + str(reconodes) if len(calibworkflows): odccommand += " --calib " + " ".join(calibworkflows) + if args[1] != "": + odccommand += " --prependexe \"module load " + args[1] + "; \"" odccommand += " -o " + sys.argv[3] if os.system(odccommand) != 0: print("\nError running odc: ", odccommand) From 5eb38b3c9dd72a450420a8d3e5b24c3a7b2b8936 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 30 Aug 2021 23:21:52 +0200 Subject: [PATCH 018/236] Some fixes --- common/setenv.sh | 6 +++--- production/production.desc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index ff1c113..ab7a120 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -33,9 +33,9 @@ if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflo if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. if [ -z "$EPNMODE" ]; then export EPNMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... # Detectors used in the workflow / enabled parameters -if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ $WORKFLOW_DETECTORS == "ALL" ]; then export WORKFLOW_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH"; fi -if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ $WORKFLOW_DETECTORS_QC == "ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi -if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ $WORKFLOW_DETECTORS_CALIB == "ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi +if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH"; fi +if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi +if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ "0$WORKFLOW_DETECTORS_CALIB" == "0ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi SEVERITY_TPC="info" # overrides severity for the tpc workflow diff --git a/production/production.desc b/production/production.desc index 2545807..c211e54 100644 --- a/production/production.desc +++ b/production/production.desc @@ -1,2 +1,2 @@ -synchronous-workflow: O2PDPSuite reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" +synchronous-workflow: O2PDPSuite reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" synchronous-workflow-1numa: O2PDPSuite reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" From e4145b50b0d4d0c9373456b1fec6aefe34eedf5b Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 30 Aug 2021 23:24:07 +0200 Subject: [PATCH 019/236] Add scripts to steer parser from EPN Control --- tools/epn/gen_topo.sh | 27 ++++++++++++++++++++++ tools/epn/gen_topo_o2dataprocessing.sh | 31 ++++++++++++++++++++++++++ tools/epn/run.sh | 5 +++++ 3 files changed, 63 insertions(+) create mode 100755 tools/epn/gen_topo.sh create mode 100755 tools/epn/gen_topo_o2dataprocessing.sh create mode 100755 tools/epn/run.sh diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh new file mode 100755 index 0000000..3684d60 --- /dev/null +++ b/tools/epn/gen_topo.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# Settings coming from AliECS via env variables +if [ -z $GEN_TOPO_HASH ]; then echo \$GEN_TOPO_HASH missing; exit 1; fi # Flag whether source is a hash or a folder +if [ -z $GEN_TOPO_SOURCE ]; then echo \$GEN_TOPO_SOURCE missing; exit 1; fi # O2DataProcessing repository source, either a commit hash or a path +if [ -z $GEN_TOPO_LIBRARY_FILE ]; then echo \$GEN_TOPO_LIBRARY_FILE missing; exit 1; fi # Topology description library file in O2DataProcessing repository +if [ -z $GEN_TOPO_WORKFLOW_NAME ]; then echo \$GEN_TOPO_WORKFLOW_NAME missing; exit 1; fi # Workflow name in library file +if [ -z ${WORKFLOW_DETECTORS+x} ]; then echo \$WORKFLOW_DETECTORS missing; exit 1; fi # Comma-separated list of detectors to run processing for +if [ -z ${WORKFLOW_DETECTORS_QC+x} ]; then echo \$WORKFLOW_DETECTORS_QC missing; exit 1; fi # Comma-separated list of detectors to run QC for +if [ -z ${WORKFLOW_DETECTORS_CALIB+x} ]; then echo \$WORKFLOW_DETECTORS_CALIB missing; exit 1; fi # Comma-separated list of detectors to run calibration for +if [ -z ${WORKFLOW_PARAMETERS+x} ]; then echo \$WORKFLOW_PARAMETERS missing; exit 1; fi # Additional parameters for workflow +if [ -z ${RECO_NUM_NODES_OVERRIDE+x} ]; then echo \$RECO_NUM_NODES_OVERRIDE missing; exit 1; fi # Override number of nodes + +# Settings for some EPN paths / names / etc. +export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc files +export DDWORKFLOW=/home/epn/odc/dd-data.xml # DataDistribution workflow XML file to use for incooperating in final topology +export INRAWCHANNAME=tf-builder-pipe-0 # Pipe name to get data from TfBuilder +export CTF_DIR=/tmp/datadist/ctf # Output directory for CTFs +export GEN_TOPO_XML_OUTPUT=/tmp/gen_topo.xml # Name of output XML file for full DDS topology +export GEN_TOPO_WORKDIR=/home/epn/gen_topo/dir0 # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir + +# Load required module and run gen_topo_o2dataprocessing (PDP part of this script) +module load ODC O2DataProcessing || (echo Error loading ODC / O2DataProcessing && exit 1) +$O2DATAPROCESSING_ROOT/tools/epn/gen_topo_o2dataprocessing.sh +if [ $? != 0 ]; then + echo topology generation failed + exit 1 +fi diff --git a/tools/epn/gen_topo_o2dataprocessing.sh b/tools/epn/gen_topo_o2dataprocessing.sh new file mode 100755 index 0000000..e8c1cbf --- /dev/null +++ b/tools/epn/gen_topo_o2dataprocessing.sh @@ -0,0 +1,31 @@ +#!/bin/bash +mkdir -p $GEN_TOPO_WORKDIR/cache +cd $GEN_TOPO_WORKDIR || (echo Cannot enter work dir && exit 1) +if [ ! -d O2DataProcessing ]; then git clone https://github.com/AliceO2Group/O2DataProcessing.git || (echo O2DataProcessing checkout failed && exit 1); fi +if [ $GEN_TOPO_HASH == 1 ]; then + CACHE_HASH=`echo $GEN_TOPO_SOURCE $GEN_TOPO_LIBRARY_FILE $GEN_TOPO_WORKFLOW_NAME $WORKFLOW_DETECTORS $WORKFLOW_DETECTORS_QC $WORKFLOW_DETECTORS_CALIB $WORKFLOW_PARAMETERS $RECO_NUM_NODES_OVERRIDE $DDWORKFLOW $INRAWCHANNAME $FILEWORKDIR $CTF_DIR | md5sum | awk '{print $1}'` + if [ -f cache/$CACHE_HASH ]; then + echo Reusing cached XML topology + touch cache/$CACHE_HASH + cp cache/$CACHE_HASH $GEN_TOPO_XML_OUTPUT + exit 0 + fi + cd O2DataProcessing + git checkout $GEN_TOPO_SOURCE &> /dev/null + if [ $? != 0 ]; then + git fetch origin || (echo Repository update failed && exit 1) + git checkout $GEN_TOPO_SOURCE &> /dev/null || (echo commit does not exist && exit 1) + fi +else + cd $GEN_TOPO_SOURCE || (echo Directory missing && exit 1) +fi +export EPNMODE=1 +export O2DATAPROCESSING_ROOT=`pwd` +./tools/parse "$GEN_TOPO_LIBRARY_FILE" $GEN_TOPO_WORKFLOW_NAME $GEN_TOPO_XML_OUTPUT || (echo Error during workflow description parsing && exit 1) +if [ $GEN_TOPO_HASH == 1 ]; then + cd $GEN_TOPO_WORKDIR + if [ `ls cache/ | wc -l` -ge 100 ]; then + ls -t cache/* | tail -n +100 | xargs rm + fi + cp $GEN_TOPO_XML_OUTPUT cache/$CACHE_HASH +fi diff --git a/tools/epn/run.sh b/tools/epn/run.sh new file mode 100755 index 0000000..4655792 --- /dev/null +++ b/tools/epn/run.sh @@ -0,0 +1,5 @@ +#!/bin/bash +COMMAND="GEN_TOPO_HASH=1 GEN_TOPO_SOURCE=v0.4 GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" +#COMMAND="GEN_TOPO_HASH=0 GEN_TOPO_SOURCE=/home/epn/gen_topo/dir0/O2DataProcessing GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" +echo Running $COMMAND +eval $COMMAND From 74377889ce876b39bf8c8ad7a08dcd422395e846 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 31 Aug 2021 21:15:12 +0200 Subject: [PATCH 020/236] Add CODEOWNERS file with some first users --- CODEOWNERS | 17 +++++++++++++++++ testing/detectors/CPV/workflows.desc | 0 testing/detectors/EMC/workflows.desc | 0 testing/detectors/FDD/workflows.desc | 0 testing/detectors/FT0/workflows.desc | 0 testing/detectors/FV0/workflows.desc | 0 testing/detectors/HMP/workflows.desc | 0 testing/detectors/ITS/workflows.desc | 0 testing/detectors/MCH/workflows.desc | 0 testing/detectors/MFT/workflows.desc | 0 testing/detectors/MID/workflows.desc | 0 testing/detectors/PHS/workflows.desc | 0 testing/detectors/TOF/workflows.desc | 0 testing/detectors/TPC/workflows.desc | 0 testing/detectors/TRD/workflows.desc | 0 testing/detectors/ZDC/workflows.desc | 0 16 files changed, 17 insertions(+) create mode 100644 CODEOWNERS create mode 100644 testing/detectors/CPV/workflows.desc create mode 100644 testing/detectors/EMC/workflows.desc create mode 100644 testing/detectors/FDD/workflows.desc create mode 100644 testing/detectors/FT0/workflows.desc create mode 100644 testing/detectors/FV0/workflows.desc create mode 100644 testing/detectors/HMP/workflows.desc create mode 100644 testing/detectors/ITS/workflows.desc create mode 100644 testing/detectors/MCH/workflows.desc create mode 100644 testing/detectors/MFT/workflows.desc create mode 100644 testing/detectors/MID/workflows.desc create mode 100644 testing/detectors/PHS/workflows.desc create mode 100644 testing/detectors/TOF/workflows.desc create mode 100644 testing/detectors/TPC/workflows.desc create mode 100644 testing/detectors/TRD/workflows.desc create mode 100644 testing/detectors/ZDC/workflows.desc diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..3dab6e9 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,17 @@ +/production @davidrohr @martenole @shahor02 @chiarazampolli + +/testing/detectors/CPV +/testing/detectors/EMC +/testing/detectors/FDD +/testing/detectors/FT0 +/testing/detectors/FV0 +/testing/detectors/HMP +/testing/detectors/ITS +/testing/detectors/MCH @aphecethce +/testing/detectors/MFT +/testing/detectors/MID @aphecethce +/testing/detectors/PHS +/testing/detectors/TOF @noferini @chiarazampolli +/testing/detectors/TPC @wiechula +/testing/detectors/TRD @martenole +/testing/detectors/ZDC diff --git a/testing/detectors/CPV/workflows.desc b/testing/detectors/CPV/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/EMC/workflows.desc b/testing/detectors/EMC/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/FDD/workflows.desc b/testing/detectors/FDD/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/FT0/workflows.desc b/testing/detectors/FT0/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/FV0/workflows.desc b/testing/detectors/FV0/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/HMP/workflows.desc b/testing/detectors/HMP/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/ITS/workflows.desc b/testing/detectors/ITS/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/MCH/workflows.desc b/testing/detectors/MCH/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/MFT/workflows.desc b/testing/detectors/MFT/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/MID/workflows.desc b/testing/detectors/MID/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/PHS/workflows.desc b/testing/detectors/PHS/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/TOF/workflows.desc b/testing/detectors/TOF/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/TPC/workflows.desc b/testing/detectors/TPC/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/TRD/workflows.desc b/testing/detectors/TRD/workflows.desc new file mode 100644 index 0000000..e69de29 diff --git a/testing/detectors/ZDC/workflows.desc b/testing/detectors/ZDC/workflows.desc new file mode 100644 index 0000000..e69de29 From 3ad1f4c4b6a8204ad6d5c13df4bdfaeeb09b5dcb Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 31 Aug 2021 21:18:00 +0200 Subject: [PATCH 021/236] Add datadistribution workflows for all modes --- tools/datadistribution_workflows/dd-discard.xml | 14 ++++++++++++++ tools/datadistribution_workflows/dd-disk.xml | 14 ++++++++++++++ .../dd-processing-disk.xml | 14 ++++++++++++++ .../{dd-data.xml => dd-processing.xml} | 0 4 files changed, 42 insertions(+) create mode 100644 tools/datadistribution_workflows/dd-discard.xml create mode 100644 tools/datadistribution_workflows/dd-disk.xml create mode 100644 tools/datadistribution_workflows/dd-processing-disk.xml rename tools/datadistribution_workflows/{dd-data.xml => dd-processing.xml} (100%) diff --git a/tools/datadistribution_workflows/dd-discard.xml b/tools/datadistribution_workflows/dd-discard.xml new file mode 100644 index 0000000..2ceb5db --- /dev/null +++ b/tools/datadistribution_workflows/dd-discard.xml @@ -0,0 +1,14 @@ + + + + /home/epn/odc/tfbuilder.sh standalone + + TfBuilderRequirement + + +
+ + TfBuilderTask + +
+
diff --git a/tools/datadistribution_workflows/dd-disk.xml b/tools/datadistribution_workflows/dd-disk.xml new file mode 100644 index 0000000..86383a7 --- /dev/null +++ b/tools/datadistribution_workflows/dd-disk.xml @@ -0,0 +1,14 @@ + + + + /home/epn/odc/tfbuilder.sh disk + + TfBuilderRequirement + + +
+ + TfBuilderTask + +
+
diff --git a/tools/datadistribution_workflows/dd-processing-disk.xml b/tools/datadistribution_workflows/dd-processing-disk.xml new file mode 100644 index 0000000..3a9a093 --- /dev/null +++ b/tools/datadistribution_workflows/dd-processing-disk.xml @@ -0,0 +1,14 @@ + + + + /home/epn/odc/tfbuilder.sh disk_data + + TfBuilderRequirement + + +
+ + TfBuilderTask + +
+
diff --git a/tools/datadistribution_workflows/dd-data.xml b/tools/datadistribution_workflows/dd-processing.xml similarity index 100% rename from tools/datadistribution_workflows/dd-data.xml rename to tools/datadistribution_workflows/dd-processing.xml From a69b0f24859f6402fca9d710928e31509c54a2a5 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 31 Aug 2021 21:44:37 +0200 Subject: [PATCH 022/236] Add DDMODE and GEN_TOPO_PARTITION settings --- tools/epn/gen_topo.sh | 5 +++-- tools/epn/gen_topo_o2dataprocessing.sh | 2 +- tools/epn/run.sh | 4 ++-- tools/parse | 15 ++++++++++++++- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh index 3684d60..68cb054 100755 --- a/tools/epn/gen_topo.sh +++ b/tools/epn/gen_topo.sh @@ -1,5 +1,6 @@ #!/bin/bash # Settings coming from AliECS via env variables +if [ -z $GEN_TOPO_PARTITION ]; then echo \$GEN_TOPO_PARTITION missing; exit 1; fi # Partition if [ -z $GEN_TOPO_HASH ]; then echo \$GEN_TOPO_HASH missing; exit 1; fi # Flag whether source is a hash or a folder if [ -z $GEN_TOPO_SOURCE ]; then echo \$GEN_TOPO_SOURCE missing; exit 1; fi # O2DataProcessing repository source, either a commit hash or a path if [ -z $GEN_TOPO_LIBRARY_FILE ]; then echo \$GEN_TOPO_LIBRARY_FILE missing; exit 1; fi # Topology description library file in O2DataProcessing repository @@ -9,14 +10,14 @@ if [ -z ${WORKFLOW_DETECTORS_QC+x} ]; then echo \$WORKFLOW_DETECTORS_QC missing; if [ -z ${WORKFLOW_DETECTORS_CALIB+x} ]; then echo \$WORKFLOW_DETECTORS_CALIB missing; exit 1; fi # Comma-separated list of detectors to run calibration for if [ -z ${WORKFLOW_PARAMETERS+x} ]; then echo \$WORKFLOW_PARAMETERS missing; exit 1; fi # Additional parameters for workflow if [ -z ${RECO_NUM_NODES_OVERRIDE+x} ]; then echo \$RECO_NUM_NODES_OVERRIDE missing; exit 1; fi # Override number of nodes +if [ -z $DDMODE ] && [ -z $DDWORKFLOW ]; then echo Either \$DDMODE or \$DDWORKFLOW must be set; exit 1; fi #Select data distribution workflow # Settings for some EPN paths / names / etc. export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc files -export DDWORKFLOW=/home/epn/odc/dd-data.xml # DataDistribution workflow XML file to use for incooperating in final topology export INRAWCHANNAME=tf-builder-pipe-0 # Pipe name to get data from TfBuilder export CTF_DIR=/tmp/datadist/ctf # Output directory for CTFs export GEN_TOPO_XML_OUTPUT=/tmp/gen_topo.xml # Name of output XML file for full DDS topology -export GEN_TOPO_WORKDIR=/home/epn/gen_topo/dir0 # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir +export GEN_TOPO_WORKDIR=/home/epn/gen_topo/$GEN_TOPO_PARTITION # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir # Load required module and run gen_topo_o2dataprocessing (PDP part of this script) module load ODC O2DataProcessing || (echo Error loading ODC / O2DataProcessing && exit 1) diff --git a/tools/epn/gen_topo_o2dataprocessing.sh b/tools/epn/gen_topo_o2dataprocessing.sh index e8c1cbf..f156dad 100755 --- a/tools/epn/gen_topo_o2dataprocessing.sh +++ b/tools/epn/gen_topo_o2dataprocessing.sh @@ -3,7 +3,7 @@ mkdir -p $GEN_TOPO_WORKDIR/cache cd $GEN_TOPO_WORKDIR || (echo Cannot enter work dir && exit 1) if [ ! -d O2DataProcessing ]; then git clone https://github.com/AliceO2Group/O2DataProcessing.git || (echo O2DataProcessing checkout failed && exit 1); fi if [ $GEN_TOPO_HASH == 1 ]; then - CACHE_HASH=`echo $GEN_TOPO_SOURCE $GEN_TOPO_LIBRARY_FILE $GEN_TOPO_WORKFLOW_NAME $WORKFLOW_DETECTORS $WORKFLOW_DETECTORS_QC $WORKFLOW_DETECTORS_CALIB $WORKFLOW_PARAMETERS $RECO_NUM_NODES_OVERRIDE $DDWORKFLOW $INRAWCHANNAME $FILEWORKDIR $CTF_DIR | md5sum | awk '{print $1}'` + CACHE_HASH=`echo $GEN_TOPO_PARTITION $GEN_TOPO_SOURCE $GEN_TOPO_LIBRARY_FILE $GEN_TOPO_WORKFLOW_NAME $WORKFLOW_DETECTORS $WORKFLOW_DETECTORS_QC $WORKFLOW_DETECTORS_CALIB $WORKFLOW_PARAMETERS $RECO_NUM_NODES_OVERRIDE $DDMODE $DDWORKFLOW $INRAWCHANNAME $FILEWORKDIR $CTF_DIR | md5sum | awk '{print $1}'` if [ -f cache/$CACHE_HASH ]; then echo Reusing cached XML topology touch cache/$CACHE_HASH diff --git a/tools/epn/run.sh b/tools/epn/run.sh index 4655792..41d900d 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -1,5 +1,5 @@ #!/bin/bash -COMMAND="GEN_TOPO_HASH=1 GEN_TOPO_SOURCE=v0.4 GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" -#COMMAND="GEN_TOPO_HASH=0 GEN_TOPO_SOURCE=/home/epn/gen_topo/dir0/O2DataProcessing GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" +COMMAND="GEN_TOPO_PARTITION=test GEN_TOPO_HASH=1 GEN_TOPO_SOURCE=v0.4 GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" +#COMMAND="GEN_TOPO_PARTITION=test GEN_TOPO_HASH=0 GEN_TOPO_SOURCE=/home/epn/gen_topo/dir0/O2DataProcessing GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" echo Running $COMMAND eval $COMMAND diff --git a/tools/parse b/tools/parse index 3e20a55..f6e4e58 100755 --- a/tools/parse +++ b/tools/parse @@ -12,9 +12,19 @@ if len(sys.argv) != 4: exit(1) if not "FILEWORKDIR" in os.environ: - print("$FILEWORKDIR env variable missing") + print("\$FILEWORKDIR env variable missing") exit(1) +if not "DDWORKFLOW" in os.environ and not "DDMODE" in os.environ: + print("Need either \$DDWORKFLOW or \$DDMODE env variable") + exit(1) + +NO_PROCESSING_MODE=0 +if not "DDWORKFLOW" in os.environ: + os.environ['DDWORKFLOW'] = "tools/datadistribution_workflows/dd-" + os.environ['DDMODE'] + ".xml" + if os.environ['DDMODE'] == 'discard' or os.environ['DDMODE'] == 'disk': + NO_PROCESSING_MODE=1 + print("Using topology", sys.argv[2], "of library", sys.argv[1]) os.environ['WORKFLOWMODE'] = 'dds' @@ -54,6 +64,9 @@ for line in f: print("O2 not loaded") raise with tempfile.TemporaryDirectory(prefix="o2_workflow") as tmpdir: + if NO_PROCESSING_MODE and len(args) > 2: + print("Cannot use DPL workflow together with DD mode", os.environ['DDMODE']) + raise for i in range(2, len(args)): filename = tmpdir + "/wf" + str(i) + ".dds" if args[i].startswith("reco"): From 38966a5c1be70135f08327ae87accd3342f33631 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 31 Aug 2021 22:14:44 +0200 Subject: [PATCH 023/236] Write final xml to stdout in script wrapper for ODC topology_script --- tools/epn/gen_topo.sh | 5 ++--- tools/epn/gen_topo_o2dataprocessing.sh | 20 +++++++++++--------- tools/epn/run.sh | 6 +++--- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh index 68cb054..19427e1 100755 --- a/tools/epn/gen_topo.sh +++ b/tools/epn/gen_topo.sh @@ -16,13 +16,12 @@ if [ -z $DDMODE ] && [ -z $DDWORKFLOW ]; then echo Either \$DDMODE or \$DDWORKFL export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc files export INRAWCHANNAME=tf-builder-pipe-0 # Pipe name to get data from TfBuilder export CTF_DIR=/tmp/datadist/ctf # Output directory for CTFs -export GEN_TOPO_XML_OUTPUT=/tmp/gen_topo.xml # Name of output XML file for full DDS topology export GEN_TOPO_WORKDIR=/home/epn/gen_topo/$GEN_TOPO_PARTITION # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir # Load required module and run gen_topo_o2dataprocessing (PDP part of this script) -module load ODC O2DataProcessing || (echo Error loading ODC / O2DataProcessing && exit 1) +module load ODC O2DataProcessing 1>&2 || { echo Error loading ODC / O2DataProcessing 1>&2; exit 1; } $O2DATAPROCESSING_ROOT/tools/epn/gen_topo_o2dataprocessing.sh if [ $? != 0 ]; then - echo topology generation failed + echo topology generation failed 1>&2 exit 1 fi diff --git a/tools/epn/gen_topo_o2dataprocessing.sh b/tools/epn/gen_topo_o2dataprocessing.sh index f156dad..6e0100c 100755 --- a/tools/epn/gen_topo_o2dataprocessing.sh +++ b/tools/epn/gen_topo_o2dataprocessing.sh @@ -1,31 +1,33 @@ #!/bin/bash mkdir -p $GEN_TOPO_WORKDIR/cache -cd $GEN_TOPO_WORKDIR || (echo Cannot enter work dir && exit 1) -if [ ! -d O2DataProcessing ]; then git clone https://github.com/AliceO2Group/O2DataProcessing.git || (echo O2DataProcessing checkout failed && exit 1); fi +cd $GEN_TOPO_WORKDIR || { echo Cannot enter work dir 1>&2; exit 1; } +if [ ! -d O2DataProcessing ]; then git clone https://github.com/AliceO2Group/O2DataProcessing.git 1>&2 || { echo O2DataProcessing checkout failed 1>&2; exit 1; }; fi if [ $GEN_TOPO_HASH == 1 ]; then CACHE_HASH=`echo $GEN_TOPO_PARTITION $GEN_TOPO_SOURCE $GEN_TOPO_LIBRARY_FILE $GEN_TOPO_WORKFLOW_NAME $WORKFLOW_DETECTORS $WORKFLOW_DETECTORS_QC $WORKFLOW_DETECTORS_CALIB $WORKFLOW_PARAMETERS $RECO_NUM_NODES_OVERRIDE $DDMODE $DDWORKFLOW $INRAWCHANNAME $FILEWORKDIR $CTF_DIR | md5sum | awk '{print $1}'` if [ -f cache/$CACHE_HASH ]; then - echo Reusing cached XML topology + echo Reusing cached XML topology 1>&2 touch cache/$CACHE_HASH - cp cache/$CACHE_HASH $GEN_TOPO_XML_OUTPUT + cat cache/$CACHE_HASH exit 0 fi cd O2DataProcessing git checkout $GEN_TOPO_SOURCE &> /dev/null if [ $? != 0 ]; then - git fetch origin || (echo Repository update failed && exit 1) - git checkout $GEN_TOPO_SOURCE &> /dev/null || (echo commit does not exist && exit 1) + git fetch origin 1>&2 || { echo Repository update failed 1>&2; exit 1; } + git checkout $GEN_TOPO_SOURCE &> /dev/null || { echo commit does not exist 1>&2; exit 1; } fi else - cd $GEN_TOPO_SOURCE || (echo Directory missing && exit 1) + cd $GEN_TOPO_SOURCE || { echo Directory missing 1>&2; exit 1; } fi export EPNMODE=1 export O2DATAPROCESSING_ROOT=`pwd` -./tools/parse "$GEN_TOPO_LIBRARY_FILE" $GEN_TOPO_WORKFLOW_NAME $GEN_TOPO_XML_OUTPUT || (echo Error during workflow description parsing && exit 1) +./tools/parse "$GEN_TOPO_LIBRARY_FILE" $GEN_TOPO_WORKFLOW_NAME $GEN_TOPO_WORKDIR/output.xml 1>&2 || { echo Error during workflow description parsing 1>&2; exit 1; } if [ $GEN_TOPO_HASH == 1 ]; then cd $GEN_TOPO_WORKDIR if [ `ls cache/ | wc -l` -ge 100 ]; then ls -t cache/* | tail -n +100 | xargs rm fi - cp $GEN_TOPO_XML_OUTPUT cache/$CACHE_HASH + cp $GEN_TOPO_WORKDIR/output.xml cache/$CACHE_HASH fi +cat $GEN_TOPO_WORKDIR/output.xml +rm $GEN_TOPO_WORKDIR/output.xml diff --git a/tools/epn/run.sh b/tools/epn/run.sh index 41d900d..809aa34 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -1,5 +1,5 @@ #!/bin/bash -COMMAND="GEN_TOPO_PARTITION=test GEN_TOPO_HASH=1 GEN_TOPO_SOURCE=v0.4 GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" -#COMMAND="GEN_TOPO_PARTITION=test GEN_TOPO_HASH=0 GEN_TOPO_SOURCE=/home/epn/gen_topo/dir0/O2DataProcessing GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" -echo Running $COMMAND +COMMAND="GEN_TOPO_PARTITION=test DDMODE=processing GEN_TOPO_HASH=1 GEN_TOPO_SOURCE=v0.4 GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" +#COMMAND="GEN_TOPO_PARTITION=test DDMODE=processing GEN_TOPO_HASH=0 GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" +echo Running $COMMAND 1>&2 eval $COMMAND From bfc591861d156cb97038a0ae3bf918b954d7887c Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 31 Aug 2021 23:08:11 +0200 Subject: [PATCH 024/236] Add workflow for no processing --- production/no-processing.desc | 2 ++ tools/parse | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 production/no-processing.desc diff --git a/production/no-processing.desc b/production/no-processing.desc new file mode 100644 index 0000000..188f3c5 --- /dev/null +++ b/production/no-processing.desc @@ -0,0 +1,2 @@ +# Empty workflow for no processing at all +no-processing: "" diff --git a/tools/parse b/tools/parse index f6e4e58..3803d30 100755 --- a/tools/parse +++ b/tools/parse @@ -60,7 +60,7 @@ for line in f: for i in args[1].split(): print("Loading module", i) mod.module('load', i) - if not 'O2_ROOT' in os.environ: + if len(args) > 2 and not 'O2_ROOT' in os.environ: print("O2 not loaded") raise with tempfile.TemporaryDirectory(prefix="o2_workflow") as tmpdir: @@ -91,8 +91,10 @@ for line in f: if 'RECO_NUM_NODES_OVERRIDE' in os.environ and os.environ['RECO_NUM_NODES_OVERRIDE'] != "" and int(os.environ['RECO_NUM_NODES_OVERRIDE']) > 0: reconodes = int(os.environ['RECO_NUM_NODES_OVERRIDE']) odccommand = "odc-epn-topo" + if reconodes: + odccommand += " --dd " + os.environ['DDWORKFLOW'] if len(recoworkflows): - odccommand += " --dd " + os.environ['DDWORKFLOW'] + " --reco " + " ".join(recoworkflows) + odccommand += " --reco " + " ".join(recoworkflows) odccommand += " --n " + str(reconodes) if len(calibworkflows): odccommand += " --calib " + " ".join(calibworkflows) From aab2394eddc4948e70ce37857823a4a8c07f25dc Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 31 Aug 2021 23:42:49 +0200 Subject: [PATCH 025/236] Improve error handling --- tools/parse | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/parse b/tools/parse index 3803d30..c6a050e 100755 --- a/tools/parse +++ b/tools/parse @@ -83,10 +83,12 @@ for line in f: print("Adding", wf[0], "workflow (", wf[2], "-", wf[1], "nodes):", wf[3]) reconodes = max(reconodes, int(wf[1])) reconodesmin = max(reconodesmin, int(wf[2])) - command = wf[3] + " | grep -v \"^\[\" > " + filename + command = wf[3] + " | grep -v \"^\[INFO\" > " + filename + " && [ `grep \"^\[\" " + filename + " | wc -l` == 0 ]" print("Running DPL command", command) if os.system(command) != 0: print("Error running command", command) + ftmp = open(filename, 'r') + print(ftmp.read()) raise if 'RECO_NUM_NODES_OVERRIDE' in os.environ and os.environ['RECO_NUM_NODES_OVERRIDE'] != "" and int(os.environ['RECO_NUM_NODES_OVERRIDE']) > 0: reconodes = int(os.environ['RECO_NUM_NODES_OVERRIDE']) From 09a826cd24593c75f4b107bfeb607771841e54af Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 1 Sep 2021 00:21:12 +0200 Subject: [PATCH 026/236] Raise an error when trying to cache XML of non-versioned workflow --- tools/epn/gen_topo_o2dataprocessing.sh | 6 +++++- tools/epn/run.sh | 2 +- tools/parse | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/epn/gen_topo_o2dataprocessing.sh b/tools/epn/gen_topo_o2dataprocessing.sh index 6e0100c..b34df33 100755 --- a/tools/epn/gen_topo_o2dataprocessing.sh +++ b/tools/epn/gen_topo_o2dataprocessing.sh @@ -3,6 +3,7 @@ mkdir -p $GEN_TOPO_WORKDIR/cache cd $GEN_TOPO_WORKDIR || { echo Cannot enter work dir 1>&2; exit 1; } if [ ! -d O2DataProcessing ]; then git clone https://github.com/AliceO2Group/O2DataProcessing.git 1>&2 || { echo O2DataProcessing checkout failed 1>&2; exit 1; }; fi if [ $GEN_TOPO_HASH == 1 ]; then + export GEN_TOPO_CACHEABLE=1 CACHE_HASH=`echo $GEN_TOPO_PARTITION $GEN_TOPO_SOURCE $GEN_TOPO_LIBRARY_FILE $GEN_TOPO_WORKFLOW_NAME $WORKFLOW_DETECTORS $WORKFLOW_DETECTORS_QC $WORKFLOW_DETECTORS_CALIB $WORKFLOW_PARAMETERS $RECO_NUM_NODES_OVERRIDE $DDMODE $DDWORKFLOW $INRAWCHANNAME $FILEWORKDIR $CTF_DIR | md5sum | awk '{print $1}'` if [ -f cache/$CACHE_HASH ]; then echo Reusing cached XML topology 1>&2 @@ -16,13 +17,16 @@ if [ $GEN_TOPO_HASH == 1 ]; then git fetch origin 1>&2 || { echo Repository update failed 1>&2; exit 1; } git checkout $GEN_TOPO_SOURCE &> /dev/null || { echo commit does not exist 1>&2; exit 1; } fi + if ! git describe --exact-match --tags HEAD; then + unset GEN_TOPO_CACHEABLE + fi else cd $GEN_TOPO_SOURCE || { echo Directory missing 1>&2; exit 1; } fi export EPNMODE=1 export O2DATAPROCESSING_ROOT=`pwd` ./tools/parse "$GEN_TOPO_LIBRARY_FILE" $GEN_TOPO_WORKFLOW_NAME $GEN_TOPO_WORKDIR/output.xml 1>&2 || { echo Error during workflow description parsing 1>&2; exit 1; } -if [ $GEN_TOPO_HASH == 1 ]; then +if [ "0$GEN_TOPO_CACHEABLE" == "01" ]; then cd $GEN_TOPO_WORKDIR if [ `ls cache/ | wc -l` -ge 100 ]; then ls -t cache/* | tail -n +100 | xargs rm diff --git a/tools/epn/run.sh b/tools/epn/run.sh index 809aa34..a86a6fd 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -1,5 +1,5 @@ #!/bin/bash -COMMAND="GEN_TOPO_PARTITION=test DDMODE=processing GEN_TOPO_HASH=1 GEN_TOPO_SOURCE=v0.4 GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" +COMMAND="GEN_TOPO_PARTITION=test DDMODE=processing GEN_TOPO_HASH=1 GEN_TOPO_SOURCE=v0.5 GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" #COMMAND="GEN_TOPO_PARTITION=test DDMODE=processing GEN_TOPO_HASH=0 GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" echo Running $COMMAND 1>&2 eval $COMMAND diff --git a/tools/parse b/tools/parse index c6a050e..54b778d 100755 --- a/tools/parse +++ b/tools/parse @@ -58,6 +58,10 @@ for line in f: print("Found topology", sys.argv[2], "-", args) if 'EPNMODE' in os.environ and int(os.environ['EPNMODE']): for i in args[1].split(): + if "GEN_TOPO_CACHEABLE" in os.environ and os.environ['GEN_TOPO_CACHEABLE'] == "1": + if i.find("/") == -1 or i.find("/latest") != -1: + print("Must not use non-versioned module", i, "in cacheable workflow (i.e. with repository hash)") + raise print("Loading module", i) mod.module('load', i) if len(args) > 2 and not 'O2_ROOT' in os.environ: From a825bb528a78e3763c904dd814534245d9e42661 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 1 Sep 2021 15:54:30 +0200 Subject: [PATCH 027/236] Temporarily add local copy of FST dpl workflow --- .../full-system-test/dpl-workflow_local.sh | 252 ++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100755 production/full-system-test/dpl-workflow_local.sh diff --git a/production/full-system-test/dpl-workflow_local.sh b/production/full-system-test/dpl-workflow_local.sh new file mode 100755 index 0000000..74964fd --- /dev/null +++ b/production/full-system-test/dpl-workflow_local.sh @@ -0,0 +1,252 @@ +#!/bin/bash + +# In order to use o2sim_grp.root, o2sim_geometry.root or matbud.root from arbitrary directory one can provide to the workflow +# --configKeyValues "NameConf.mDirGRP=;NameConf.mDirGeom=;NameConf.mDirMatLUT=;" +# All workflows currently running in the FST parce the configKeyValues option, so the NameConf.mDirXXX keys can be added via global env.var. + +# Get this script's directory : use zsh first (e.g. on Mac) and fallback +# on `readlink -f` if zsh is not there +command -v zsh > /dev/null 2>&1 && MYDIR=$(dirname $(zsh -c 'echo ${0:A}' "$0")) +test -z ${MYDIR+x} && MYDIR="$(dirname $(readlink -f $0))" + +source $MYDIR/setenv.sh + +if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi + +if [ "0$O2_ROOT" == "0" ]; then + eval "`alienv shell-helper`" + alienv --no-refresh load O2/latest +fi + +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +if [ $EPNMODE == 1 ]; then + ARGS_ALL+=" --infologger-severity $SEVERITY" + #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +else + ARGS_ALL+=" --monitoring-backend no-op://" +fi +if [ $EXTINPUT == 1 ] || [ $NUMAGPUIDS == 1 ]; then + ARGS_ALL+=" --no-cleanup" +fi +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +if [ $NUMAGPUIDS != 0 ]; then + ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" +fi +if [ $GPUTYPE != "CPU" ] || [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then + ARGS_ALL+=" --shm-mlock-segment-on-creation 1" +fi +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" + +# Set some individual workflow arguments depending on configuration +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi +if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi +GPU_INPUT=zsraw +GPU_OUTPUT=tracks,clusters +GPU_CONFIG= +GPU_CONFIG_KEY= +TOF_INPUT=raw +TOF_OUTPUT=clusters +ITS_CONFIG= +ITS_CONFIG_KEY= +TRD_CONFIG= +TRD_CONFIG_KEY= +TRD_TRANSFORMER_CONFIG= +EVE_CONFIG= +if [ $SYNCMODE == 1 ]; then + ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" + GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" + TRD_CONFIG+=" --track-sources ITS-TPC --filter-trigrec" + TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" + TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" +else + TRD_CONFIG+=" --track-sources TPC,ITS-TPC" +fi +if [ $CTFINPUT == 1 ]; then + ITS_CONFIG+=" --tracking-mode async" +else + ITS_CONFIG+=" --entropy-encoding" + TOF_OUTPUT+=",ctf" + GPU_OUTPUT+=",compressed-clusters-ctf" +fi +if [ $EPNMODE == 1 ]; then + EVE_CONFIG+=" --eve-dds-collection-index 0" +fi + +if [ $GPUTYPE == "HIP" ]; then + if [ $NUMAID == 0 ] || [ $NUMAGPUIDS == 0 ]; then + export TIMESLICEOFFSET=0 + else + export TIMESLICEOFFSET=$NGPUS + fi + GPU_CONFIG_KEY+="GPU_proc.deviceNum=0;GPU_global.mutexMemReg=true;" + GPU_CONFIG+=" --environment \"ROCR_VISIBLE_DEVICES={timeslice${TIMESLICEOFFSET}}\"" + export HSA_NO_SCRATCH_RECLAIM=1 + #export HSA_TOOLS_LIB=/opt/rocm/lib/librocm-debug-agent.so.2 +else + GPU_CONFIG_KEY+="GPU_proc.deviceNum=-2;" +fi + +if [ ! -z $GPU_NUM_MEM_REG_CALLBACKS ]; then + GPU_CONFIG+=" --expected-region-callbacks $GPU_NUM_MEM_REG_CALLBACKS" +fi + +if [ $GPUTYPE != "CPU" ]; then + GPU_CONFIG_KEY+="GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;" + if [ $HOSTMEMSIZE == "0" ]; then + HOSTMEMSIZE=$(( 1 << 30 )) + fi +fi +if [ $HOSTMEMSIZE != "0" ]; then + GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" +fi + +N_TPCENT=1 +N_TPCITS=1 +N_ITSDEC=1 +N_EMC=1 +N_TRDENT=1 +N_TRDTRK=1 +N_TPCENTDEC=1 +N_MFTTRK=1 +N_ITSTRK=1 +N_MCHTRK=1 +N_TOFMATCH=1 +if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then + if [ $SYNCMODE == "1" ]; then echo "Must not use OPTIMIZED_PARALLEL_ASYNC with GPU or SYNCMODE"; exit 1; fi + if [ $NUMAGPUIDS == 1 ]; then N_NUMAFACTOR=1; else N_NUMAFACTOR=2; fi + GPU_CONFIG_KEY+="GPU_proc.ompThreads=6;" + TRD_CONFIG_KEY+="GPU_proc.ompThreads=2;" + if [ $GPUTYPE == "CPU" ]; then + N_TPCENTDEC=$(expr 2 \* $N_NUMAFACTOR) + N_MFTTRK=$(expr 3 \* $N_NUMAFACTOR) + N_ITSTRK=$(expr 3 \* $N_NUMAFACTOR) + N_TPCITS=$(expr 2 \* $N_NUMAFACTOR) + N_MCHTRK=$(expr 1 \* $N_NUMAFACTOR) + N_TOFMATCH=$(expr 9 \* $N_NUMAFACTOR) + NGPUS=$(expr 6 \* $N_NUMAFACTOR) + else + N_TPCENTDEC=$((3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) + N_MFTTRK=$((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) + N_ITSTRK=$((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) + N_TPCITS=$((4 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 4 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) + N_MCHTRK=$((2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) + N_TOFMATCH=$((20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) + fi +elif [ $EPNPIPELINES != 0 ]; then + N_TPCENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_TPCITS=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_ITSDEC=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_EMC=$(($(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_TRDENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + N_TRDTRK=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) +fi + +# Input workflow +if [ $CTFINPUT == 1 ]; then + GPU_INPUT=compressed-clusters-ctf + TOF_INPUT=digits + CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root | head -n1` + WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $NTIMEFRAMES --ctf-input ${CTFName} --ctf-dict ${CTF_DICT_DIR}/ctf_dictionary.root --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " +elif [ $EXTINPUT == 1 ]; then + WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"FLP:FLP/DISTSUBTIMEFRAME/0;B:TPC/RAWDATA;C:ITS/RAWDATA;D:TOF/RAWDATA;D:MFT/RAWDATA;E:FT0/RAWDATA;F:MID/RAWDATA;G:EMC/RAWDATA;H:PHS/RAWDATA;I:CPV/RAWDATA;J:ZDC/RAWDATA;K:HMP/RAWDATA;L:FDD/RAWDATA;M:TRD/RAWDATA;N:FV0/RAWDATA;O:MCH/RAWDATA\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " +else + WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg | " +fi + +#Decoder workflows +if [ $CTFINPUT == 0 ]; then + has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/ITSdictionary.bin --pipeline its-stf-decoder:$N_ITSDEC | " + has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/MFTdictionary.bin --runmft true | " + has_detector FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector TOF && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $ARGS_ALL | " + has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL | " + has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " +fi + +# Common workflows +has_detector ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " +has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL/-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$NGPUS $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " +has_detectors ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " +has_detector FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " +has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC | " +has_detector TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " +has_detectors TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " + +# Workflows disabled in sync mode +if [ $SYNCMODE == 0 ]; then + has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " + has_detector MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC | " + has_detector MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK | " + has_detector MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " + has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 | " + has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output | " + has_detector FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output | " + has_detector ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " +fi + +# Workflows disabled in async mode +if [ $CTFINPUT == 0 ]; then + if [ $SYNCMODE == 1 ]; then # Otherwise already present in async setup + has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" | " + fi + has_detector PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output $DISABLE_MC | " + has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC | " + has_detector EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " + + has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true | " + has_detector FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " + has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " + + has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input | " + + # Output workflow + if [ $SAVECTF == 1 ]; then + mkdir -p $CTF_DIR + fi + if [ $CREATECTFDICT == 1 ] ; then + mkdir -p $CTF_DICT_DIR; + rm -f $CTF_DICT_DIR/ctf_dictionary.root + fi + CTF_OUTPUT_TYPE="none" + if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi + if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi + if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi + CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir $CTF_DIR --ctf-dict-dir $CTF_DICT_DIR --output-type $CTF_OUTPUT_TYPE --onlyDet $WORKFLOW_DETECTORS" + if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $NTIMEFRAMES"; fi + WORKFLOW+="$CMD_CTF | " +fi + +workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --display-tracks TPC --display-clusters TPC $EVE_CONFIG $DISABLE_MC | " + +# DPL run binary +WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi From 481341fb10a560b36ba8be058f000bd9ef6d0742 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 1 Sep 2021 15:56:08 +0200 Subject: [PATCH 028/236] Add TPC workflow --- testing/detectors/TPC/tpc-workflow.sh | 75 +++++++++++++++++++++++++++ testing/detectors/TPC/workflows.desc | 2 + 2 files changed, 77 insertions(+) create mode 100644 testing/detectors/TPC/tpc-workflow.sh diff --git a/testing/detectors/TPC/tpc-workflow.sh b/testing/detectors/TPC/tpc-workflow.sh new file mode 100644 index 0000000..483e555 --- /dev/null +++ b/testing/detectors/TPC/tpc-workflow.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=warning +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +if [ $EPNMODE == 1 ]; then + ARGS_ALL+=" --infologger-severity $SEVERITY" + #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +else + ARGS_ALL+=" --monitoring-backend no-op://" +fi +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +if [ $NUMAGPUIDS != 0 ]; then + ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" +fi +if [ $GPUTYPE != "CPU" ]; then + ARGS_ALL+=" --shm-mlock-segment-on-creation 1" +fi +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" + +if [ $GPUTYPE == "HIP" ]; then + if [ $NUMAID == 0 ] || [ $NUMAGPUIDS == 0 ]; then + export TIMESLICEOFFSET=0 + else + export TIMESLICEOFFSET=$NGPUS + fi + GPU_CONFIG_KEY+="GPU_proc.deviceNum=0;GPU_global.mutexMemReg=true;" + GPU_CONFIG+=" --environment \"ROCR_VISIBLE_DEVICES={timeslice${TIMESLICEOFFSET}}\"" + export HSA_NO_SCRATCH_RECLAIM=1 + #export HSA_TOOLS_LIB=/opt/rocm/lib/librocm-debug-agent.so.2 +else + GPU_CONFIG_KEY+="GPU_proc.deviceNum=-2;" +fi + +if [ $GPUTYPE != "CPU" ]; then + GPU_CONFIG_KEY+="GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;" + if [ $HOSTMEMSIZE == "0" ]; then + HOSTMEMSIZE=$(( 1 << 30 )) + fi +fi +if [ $HOSTMEMSIZE != "0" ]; then + GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" +fi + +PROXY_INSPEC="A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" +CALIB_INSPEC="A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ + | o2-tpc-raw-to-digits-workflow $ARGS_ALL \ + --input-spec "$CALIB_INSPEC" \ + --remove-duplicates \ + --pipeline tpc-raw-to-digits-0:6 \ + --configKeyValues "$ARGS_ALL_CONFIG;TPCDigitDump.LastTimeBin=1000;" \ + | o2-tpc-reco-workflow $ARGS_ALL \ + --input-type digitizer \ + --output-type clusters,tracks,encoded-clusters disable-writer \ + --disable-mc \ + --pipeline tpc-tracker:4 \ + $GPU_CONFIG \ + --configKeyValues "$ARGS_ALL_CONFIG;$GPU_CONFIG_KEY;align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;" \ + | o2-eve-display $ARGS_ALL --display-tracks TPC --display-clusters TPC --disable-mc --jsons-folder /home/ed/jsons --eve-dds-collection-index 0 --configKeyValues "$ARGS_ALL_CONFIG" \ + | o2-ctf-writer-workflow $ARGS_ALL --configKeyValues "$ARGS_ALL_CONFIG" --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf --onlyDet TPC \ + | o2-dpl-run $ARGS_ALL --dds + +#HOST=localhost +#| o2-qc $ARGS_ALL --config json:///home/epn/odc/files/tpcQCTasks_multinode_ALL.json --local --host $HOST \ + diff --git a/testing/detectors/TPC/workflows.desc b/testing/detectors/TPC/workflows.desc index e69de29..00437b6 100644 --- a/testing/detectors/TPC/workflows.desc +++ b/testing/detectors/TPC/workflows.desc @@ -0,0 +1,2 @@ +ctf-and-display: "DataDistribution QualityControl" reco,128,128,"SHMSIZE=128000000000 testing/detectors/TPC/tpc-workflow.sh" +ctf-and-display-gpu: "DataDistribution QualityControl" reco,128,128,"GPUTYPE=HIP SHMSIZE=128000000000 testing/detectors/TPC/tpc-workflow.sh" From 2d5abdeda714e37cfd6887b7600d2de8aa5f30de Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 1 Sep 2021 15:56:35 +0200 Subject: [PATCH 029/236] Make GPU-usage and CTF-writing of sync production workflow a WORKFLOW_PARAMETER --- .../full-system-test/dpl-workflow_local.sh | 16 +++++++++++++--- production/production.desc | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) mode change 100755 => 100644 production/full-system-test/dpl-workflow_local.sh diff --git a/production/full-system-test/dpl-workflow_local.sh b/production/full-system-test/dpl-workflow_local.sh old mode 100755 new mode 100644 index 74964fd..c26a7f8 --- a/production/full-system-test/dpl-workflow_local.sh +++ b/production/full-system-test/dpl-workflow_local.sh @@ -13,6 +13,9 @@ source $MYDIR/setenv.sh if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi +workflow_has_parameter CTF && export SAVECTF=1 +workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } + if [ "0$O2_ROOT" == "0" ]; then eval "`alienv shell-helper`" alienv --no-refresh load O2/latest @@ -106,6 +109,7 @@ if [ $HOSTMEMSIZE != "0" ]; then GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" fi +N_TPCTRK=1 N_TPCENT=1 N_TPCITS=1 N_ITSDEC=1 @@ -129,7 +133,7 @@ if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then N_TPCITS=$(expr 2 \* $N_NUMAFACTOR) N_MCHTRK=$(expr 1 \* $N_NUMAFACTOR) N_TOFMATCH=$(expr 9 \* $N_NUMAFACTOR) - NGPUS=$(expr 6 \* $N_NUMAFACTOR) + N_TPCTRK=$(expr 6 \* $N_NUMAFACTOR) else N_TPCENTDEC=$((3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) N_MFTTRK=$((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) @@ -137,6 +141,7 @@ if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then N_TPCITS=$((4 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 4 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) N_MCHTRK=$((2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) N_TOFMATCH=$((20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) + N_TPCTRK=$NGPUS fi elif [ $EPNPIPELINES != 0 ]; then N_TPCENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) @@ -145,6 +150,11 @@ elif [ $EPNPIPELINES != 0 ]; then N_EMC=$(($(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) N_TRDENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) N_TRDTRK=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + if [ $GPUTYPE == "CPU" ]; then + N_TPCTRK=8 + else + N_TPCTRK=$NGPUS + fi fi # Input workflow @@ -167,7 +177,7 @@ if [ $CTFINPUT == 0 ]; then has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector TOF && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector TOF && [ $EPNMODE == 1 ] && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $ARGS_ALL | " has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL | " has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " @@ -176,7 +186,7 @@ fi # Common workflows has_detector ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " -has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL/-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$NGPUS $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " +has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL/-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " has_detectors ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " has_detector FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC | " diff --git a/production/production.desc b/production/production.desc index c211e54..8300513 100644 --- a/production/production.desc +++ b/production/production.desc @@ -1,2 +1,2 @@ -synchronous-workflow: O2PDPSuite reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" -synchronous-workflow-1numa: O2PDPSuite reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 GPUTYPE=HIP NGPUS=4 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow.sh" +synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" +synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" From aec8fb3ffdb08f2193c499088947daeec136ba49 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 1 Sep 2021 16:08:12 +0200 Subject: [PATCH 030/236] Add example workflow --- testing/examples/example-workflow.sh | 20 ++++++++++++++++++++ testing/examples/workflows.desc | 1 + 2 files changed, 21 insertions(+) create mode 100755 testing/examples/example-workflow.sh create mode 100644 testing/examples/workflows.desc diff --git a/testing/examples/example-workflow.sh b/testing/examples/example-workflow.sh new file mode 100755 index 0000000..39e41f2 --- /dev/null +++ b/testing/examples/example-workflow.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=warning +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" + +PROXY_INSPEC="A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ + | o2-tpc-raw-to-digits-workflow $ARGS_ALL \ + --input-spec "$PROXY_INSPEC" \ + --remove-duplicates \ + --configKeyValues "$ARGS_ALL_CONFIG;TPCDigitDump.LastTimeBin=1000;" \ + | o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/examples/workflows.desc b/testing/examples/workflows.desc new file mode 100644 index 0000000..12a5b54 --- /dev/null +++ b/testing/examples/workflows.desc @@ -0,0 +1 @@ +example-workflow: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=128000000000 testing/examples/example-workflow.sh" From 2ac7364cffd41aa3a152af845e46f67bb74f71b8 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 1 Sep 2021 16:13:17 +0200 Subject: [PATCH 031/236] Update example script to start workflow to topology conversion --- tools/epn/run.sh | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/tools/epn/run.sh b/tools/epn/run.sh index a86a6fd..5d1a870 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -1,5 +1,23 @@ #!/bin/bash -COMMAND="GEN_TOPO_PARTITION=test DDMODE=processing GEN_TOPO_HASH=1 GEN_TOPO_SOURCE=v0.5 GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" -#COMMAND="GEN_TOPO_PARTITION=test DDMODE=processing GEN_TOPO_HASH=0 GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing GEN_TOPO_LIBRARY_FILE=production/production.desc GEN_TOPO_WORKFLOW_NAME=synchronous-workflow WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_QC= WORKFLOW_DETECTORS_CALIB= WORKFLOW_PARAMETERS=EVENT_DISPLAY RECO_NUM_NODES_OVERRIDE= ./gen_topo.sh" -echo Running $COMMAND 1>&2 -eval $COMMAND + +export GEN_TOPO_PARTITION=TPC # ECS Partition +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/drohr/alice/O2DataProcessing # Path to O2DataProcessing repository + +export GEN_TOPO_LIBRARY_FILE=testing/detectors/TPC/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=ctf-and-display # Name of workflow in topology description library +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=59 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=256 # Number of HBF per TF + +/home/epn/pdp/gen_topo.sh > $HOME/gen_topo_output.xml From 923e7b5bd7f0a2d2f7bc8f4395d290c83f6cfca7 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 1 Sep 2021 20:31:35 +0200 Subject: [PATCH 032/236] Update documentation --- README.md | 171 +++++++++++++++++- .../full-system-test/dpl-workflow_local.sh | 0 testing/private/README.md | 1 + tools/epn/run.sh | 4 +- 4 files changed, 166 insertions(+), 10 deletions(-) mode change 100644 => 100755 production/full-system-test/dpl-workflow_local.sh create mode 100644 testing/private/README.md diff --git a/README.md b/README.md index 4f88606..02f026d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -THis repository contains the PDP workflows to run on the EPN (in the future also on the FLP) and the parse script which parses the description files and creates the DDS XML files +This repository contains the PDP workflows to run on the EPN (in the future also on the FLP) and the parse script which parses the description files and creates the DDS XML files. For only a quick introduction and an example how to create a workflow on the EPN click [here](#Quick-guide-to-create-and-deploy-detector-workflow) # Terminology: - A **workflow** refers to a single DPL workflow binary, or multiple workflows binaries merged with the `|` syntax, or a shell script starting such a workflow. @@ -17,12 +17,15 @@ Another abstraction layer above the *workflows* are **topology descriptions**. T # Remarks: - The repository does not store *full topologies*, but they are created on the fly. Users can cache the resulting full topology XML files. - The defaults (particularly also those set in the common environment files in the `common` folder) are tuned for running on a laptop / desktop. -- Workflows support 3 run modes selected via the `WORKFLOWMODE` env variable: + +# Workflow requirements: +- Workflows shall support 3 run modes selected via the `WORKFLOWMODE` env variable, the **dds** mode is mandatory: - **run** (default): run the workflow - **print**: print the final workflow command to the console - **dds**: create a partial topology. +- If applicable, workflows shall use the settings from the `common/setenv.sh` script instead of implementing their own options. Mandatory env variables to respect are `SHMSIZE`, `GPUTYPE` (if the workflow supports GPUs),... (to be continued). -# Configuring / selecting workflow in AliECS: +# Configuring and selecting workflow in AliECS: There are 3 ways foreseenm to configure the *full topology* in AliECS: (currently only the manual XML option exists) - **hash of workflow repository**: In this mode, the following settings are configured in AliECS, and they uniquely identify a *full topology*. The *parser* will then create the final DDS XML file with the *full topology*: - A **commit hash** identifying a state of the `O2DataProcessing` repository (this can also be a tag, and in the case of production workflows it is required to be a tag). @@ -53,12 +56,12 @@ A *topology description* consists of An example for the topology library file looks like: - topologies.desc ``` -demo-full-topology: O2/nightly-20210801 reco,128,126,"SHMSIZE=320000000000 full-system-test/dpl-workflow.sh" calib,5,"SHMSIZE=2000000000 calibration/some-calib.sh" calib,20,"SHMSIZE=2000000000 calibration/other-calib.sh"; -other-topology: O2/v1.0.0 reco,2,1,"tpc-test/tpc-standalone-test-1.sh" +demo-full-topology: O2PDPSuite/nightly-20210801 reco,128,126,"SHMSIZE=320000000000 full-system-test/dpl-workflow.sh" calib,5,"SHMSIZE=2000000000 calibration/some-calib.sh" calib,20,"SHMSIZE=2000000000 calibration/other-calib.sh"; +other-topology: O2PDPSuite/v1.0.0 reco,2,1,"tpc-test/tpc-standalone-test-1.sh" ``` - AliECS-config: ``` -commit=xxxx file=topologies.desc topology=demo-full-topology detectors="TPC,ITS" detectors_qc="TPC" detectors_calib="ALL" parameters="EVENT_DISPLAY" +commit=xxxx|path=xxxx file=topologies.desc topology=demo-full-topology parameters="EVENT_DISPLAY" detectors="TPC,ITS" detectors_qc="TPC" [...] ``` # The parser script: @@ -78,10 +81,11 @@ DDWORKFLOW=tools/datadistribution_workflows/dd-data.xml WORKFLOW_DETECTORS=TPC,I - The following environment variables steer the *Parser*: - `$FILEWORKDIR`: This variable must be set and is used by the workflows to specify where all required files (grp, geometry, dictionaries, etc) are located. - `$EPNMODE`: If set the parser assumes it is running on the EPN. If so it will automatically load the modules specified in the topology description. This variable is further used by the workflows themselves, e.g. to activate the InfoLogger and the Metrics monitoring. - - `$DDWORKFLOW`: Path to the XML file with the partial workflow for *DataDistribution*. - `$INRAWCHANNAME`: Propagated to the workflow, defines the raw FMQ channel name used for the communication with DataDistribution. - `$RECO_NUM_NODES_OVERRIDE`: Overrides the number of nodes used for reconstruction (empty or 0 to disable) -- When run on the EPN farm, the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. + - `$DDMODE`: How to operate DataDistribution: **discard** (build TF and discard them), **disk** (build TF and store to disk), **processing** (build TF and run DPL workflow on TF data), **processing-disk** (both store TF to disk and run processing). + - `$DDWORKFLOW` (*alternative*): Explicit path to the XML file with the partial workflow for *DataDistribution*. +- When run on the EPN farm (indicated by the `EPNMODE` variable), the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. # Creating a full topology DDS XML file manually: - Check out the `O2DataProcessing` repository, adjust the workflows and topology description to your need. @@ -97,3 +101,154 @@ FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_work ./tools/parse production/production.desc synchronous-workflow /tmp/dds-topology.xml ``` - Now you can use `/tmp/dds-topology.xml` to start the workflow via DDS. + +# Quick guide to create and deploy detector workflow: +** Note: this is the current state of the EPN, not all configuration features (see [here](#Configuring-and-selecting-workflow-in-AliECS)) are available in AliECS yet, thus this guide shows only how to create the XML file for DDS. That XML file must then still be entered in the AliECS GUI as topology. This will be simplified in the future!** +- **Temporarily** only `epn245` has the correct O2 installed, so please connect from the EPN head node to epn245 `ssh epn245`. +- Check out the [O2DataProcessing](https://github.com/AliceO2Group/O2DataProcessing) repository to your home folder on the EPN (`$HOME` in the following). +- Copy the content of `O2DataProcessing/testing/examples` (description library file `workflows.desc` and workflow script `example-workflow.sh`) to another place INSIDE the repository, usually under `testing/detectors/[DETECTOR]` or `testing/private/[USERNAME]`. +- Edit the workflow script to your needs, adjust / rename the workflow in the description library file. + - See [here](#Topology-descriptions) for the syntax of the lbirary file (in case it is not obvious), the workflow script is just a bash script that starts a DPL workflow, which must have the `--dds` parameter in order to create a partial DDS topology. + - Please note that the modules to load must be exactly `"DataDistribution QualityControl"`. Later it will be possible to use `O2PDPSuite` and specify the version, but for now that must not be used as it would create a module collision! +- Create an empty folder in your `$HOME` on the EPN, in the following `$HOME/test`. +- Copy the topology generation template from `O2DataProcessing/tools/epn/run.sh` to your folder. + - N.B.: this template script contains all the options that will be provided via AliECS automatically as environment variables. Eventually this file will not be needed any more, but the XML file will be automatically created from the AliECS GUI. +- Edit your copy of the `run.sh` file. The following parameters are relevant for you: + - Leave the `GEN_TOPO_HASH` setting to 0 and use the respective section of the file, the outcommented part with `GEN_TOPO_HASH=1` will become relevant once AliECS is updated. + - Place the path to your copy of `O2DataProcessing` in `GEN_TOPO_SOURCE` and put your newly created description library file and the workflow in there as `GEN_TOPO_LIBRARY_FILE` and `GEN_TOPO_WORKFLOW_NAME`. + - If you want to specify the number of reconstruction nodes to use here, you can use `RECO_NUM_NODES_OVERRIDE`, otherwise the default from your description library file will be used (leave it empty or `=0`). + - The `WORKFLOW_DETECTORS` and `WORKFLOW_PARAMETERS` options are optional, your workflow does not need to use them. They are mostly for more complex workflows, so you can ignore them for now`. + - Leave `DDMODE=processing` in order to run a workflow. + - `GEN_TOPO_PARTITION` and `NHBPERTF` will be set by AliECS later automatically, no need to change them. + - Change the output filename to a file somewhere in your `$HOME`, this will be the file you have to enter in AliECS as topology. +- Run `run.sh` + +When adapting your workflow, please try to follow the style of the existing workflows. The [testing/examples/example-workflow.sh](testing/examples/example-workflow.sh) should be a simple start, for a more complex example you can have a look at [testing/detectors/TPC/tpc-workflow.sh](testing/detectors/TPC/tpc-workflow.sh), and as a fulll complex example of a global workflow please look at [production/full-system-test/dpl-workflow_local.sh](production/full-system-test/dpl-workflow_local.sh) + +For reference, the `run.sh` script internally uses the `parser` to create the XML file, it essentially sets some environment variables and then calls the *parser* with all options set. So in principle, you can also use the *parser* directly to create the workflow as described [here](Creating-a-full-topology-DDS-XML-file-manually). + +For comparison, see my console output below: +``` +[drohr@head ~]$ ssh epn245 +Activate the web console with: systemctl enable --now cockpit.socket + +Last login: Wed Sep 1 19:11:47 2021 from 10.162.32.2 +[drohr@epn245 ~]$ git clone https://github.com/AliceO2Group/O2DataProcessing +Cloning into 'O2DataProcessing'... +remote: Enumerating objects: 182, done. +remote: Counting objects: 100% (182/182), done. +remote: Compressing objects: 100% (112/112), done. +remote: Total 182 (delta 64), reused 135 (delta 48), pack-reused 0 +Receiving objects: 100% (182/182), 36.42 KiB | 5.20 MiB/s, done. +Resolving deltas: 100% (64/64), done. +[drohr@epn245 ~]$ cd O2DataProcessing/testing/ +[drohr@epn245 testing]$ mkdir -p private/drohr +[drohr@epn245 testing]$ cp examples/ +example-workflow.sh workflows.desc +[drohr@epn245 testing]$ cp examples/* private/drohr/ +[drohr@epn245 testing]$ vi private/drohr/workflows.desc +[drohr@epn245 testing]$ mv private/drohr/example-workflow.sh private/drohr/my-workflow.sh +[drohr@epn245 testing]$ vi private/drohr/my-workflow.sh +[drohr@epn245 testing]$ cat private/drohr/workflows.desc +drohr-workflow: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh" +[drohr@epn245 testing]$ mkdir ~/test +[drohr@epn245 testing]$ cd ~/test +[drohr@epn245 test]$ cp ~/O2DataProcessing/tools/epn/run.sh . +[drohr@epn245 test]$ vi run.sh +[drohr@epn245 test]$ cat run.sh +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/drohr/O2DataProcessing # Path to O2DataProcessing repository + +export GEN_TOPO_LIBRARY_FILE=testing/private/drohr/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=drohr-workflow # Name of workflow in topology description library +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=256 # Number of HBF per TF + +/home/epn/pdp/gen_topo.sh > $HOME/gen_topo_output.xml +[drohr@epn245 test]$ ./run.sh +Loading ODC/0.36-1 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-3 fmt/7.1.0-10 FairLogger/v1.9.1-7 zlib/v1.2.8-8 OpenSSL/v1.0.2o-9 libpng/v1.6.34-9 sqlite/v3.15.0-2 libffi/v3.2.1-2 FreeType/v2.10.1-8 Python/v3.6.10-12 Python-modules/1.0-16 boost/v1.75.0-13 ZeroMQ/v4.3.3-6 ofi/v1.7.1-8 asio/v1.19.1-2 asiofi/v0.5.1-2 DDS/3.5.16-5 FairMQ/v1.4.40-4 + protobuf/v3.14.0-9 c-ares/v1.17.1-5 re2/2019-09-01-11 grpc/v1.34.0-alice2-1 +Using topology drohr-workflow of library testing/private/drohr/workflows.desc +Found topology drohr-workflow - ['drohr-workflow:', 'DataDistribution QualityControl', 'reco,10,10,SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh'] +Loading module DataDistribution +Loading DataDistribution/v1.0.6-2 + Loading requirement: libInfoLogger/v2.1.1-5 Ppconsul/v0.2.2-5 utf8proc/v2.6.1-3 lzma/v5.2.3-6 Clang/v12.0.1-2 lz4/v1.9.3-9 arrow/v5.0.0-alice1-4 GSL/v1.16-8 libxml2/v2.9.3-8 ROOT/v6-24-02-12 FairRoot/v18.4.2-7 Vc/1.4.1-11 Monitoring/v3.8.7-4 Configuration/v2.6.2-4 Common-O2/v1.6.0-13 ms_gsl/3.1.0-5 GLFW/3.3.2-10 libuv/v1.40.0-10 + DebugGUI/v0.5.6-6 libjalienO2/0.1.3-5 FFTW3/v3.3.9-6 O2/nightly-20210831-0930-1 +Loading module QualityControl +Loading QualityControl/v1.27.0-1 + Loading requirement: Control-OCCPlugin/v0.26.3-1 VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-40 +Adding reco workflow ( 10 - 10 nodes): SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh +Running DPL command SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh | grep -v "^\[INFO" > /tmp/o2_workflowmfld0a0n/wf2.dds && [ `grep "^\[" /tmp/o2_workflowmfld0a0n/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/drohr/gen_topo/test/output.xml" +DDS topology "topology" successfully opened from file "/home/drohr/gen_topo/test/output.xml" +Done +[drohr@epn245 test]$ cat $HOME/gen_topo_output.xml + +[...] + +``` + +For reference, here is the creation of the XML for the full synchronous processing workflow: +``` +[drohr@epn245 test]$ cat run.sh +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/drohr/O2DataProcessing # Path to O2DataProcessing repository + +export GEN_TOPO_LIBRARY_FILE=production/production.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=synchronous-workflow # Name of workflow in topology description library +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=EVENT_DISPLAY,CTF,GPU # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=256 # Number of HBF per TF + +/home/epn/pdp/gen_topo.sh > $HOME/gen_topo_output.xml +[drohr@epn245 test]$ ./run.sh +Loading ODC/0.36-1 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-3 fmt/7.1.0-10 FairLogger/v1.9.1-7 zlib/v1.2.8-8 OpenSSL/v1.0.2o-9 libpng/v1.6.34-9 sqlite/v3.15.0-2 libffi/v3.2.1-2 FreeType/v2.10.1-8 Python/v3.6.10-12 Python-modules/1.0-16 boost/v1.75.0-13 ZeroMQ/v4.3.3-6 ofi/v1.7.1-8 asio/v1.19.1-2 asiofi/v0.5.1-2 DDS/3.5.16-5 FairMQ/v1.4.40-4 + protobuf/v3.14.0-9 c-ares/v1.17.1-5 re2/2019-09-01-11 grpc/v1.34.0-alice2-1 +Using topology synchronous-workflow of library production/production.desc +Found topology synchronous-workflow - ['synchronous-workflow:', 'DataDistribution QualityControl', 'reco,128,128,EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh', 'reco,128,128,EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh'] +Loading module DataDistribution +Loading DataDistribution/v1.0.6-2 + Loading requirement: libInfoLogger/v2.1.1-5 Ppconsul/v0.2.2-5 utf8proc/v2.6.1-3 lzma/v5.2.3-6 Clang/v12.0.1-2 lz4/v1.9.3-9 arrow/v5.0.0-alice1-4 GSL/v1.16-8 libxml2/v2.9.3-8 ROOT/v6-24-02-12 FairRoot/v18.4.2-7 Vc/1.4.1-11 Monitoring/v3.8.7-4 Configuration/v2.6.2-4 Common-O2/v1.6.0-13 ms_gsl/3.1.0-5 GLFW/3.3.2-10 libuv/v1.40.0-10 + DebugGUI/v0.5.6-6 libjalienO2/0.1.3-5 FFTW3/v3.3.9-6 O2/nightly-20210831-0930-1 +Loading module QualityControl +Loading QualityControl/v1.27.0-1 + Loading requirement: Control-OCCPlugin/v0.26.3-1 VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-40 +Adding reco workflow ( 128 - 128 nodes): EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh +Running DPL command EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh | grep -v "^\[INFO" > /tmp/o2_workflowkxkzei9w/wf2.dds && [ `grep "^\[" /tmp/o2_workflowkxkzei9w/wf2.dds | wc -l` == 0 ] +Adding reco workflow ( 128 - 128 nodes): EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh +Running DPL command EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh | grep -v "^\[INFO" > /tmp/o2_workflowkxkzei9w/wf3.dds && [ `grep "^\[" /tmp/o2_workflowkxkzei9w/wf3.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/drohr/gen_topo/test/output.xml" +DDS topology "topology" successfully opened from file "/home/drohr/gen_topo/test/output.xml" +Done +``` diff --git a/production/full-system-test/dpl-workflow_local.sh b/production/full-system-test/dpl-workflow_local.sh old mode 100644 new mode 100755 diff --git a/testing/private/README.md b/testing/private/README.md new file mode 100644 index 0000000..2cb0e2d --- /dev/null +++ b/testing/private/README.md @@ -0,0 +1 @@ +This folder is for private workflows of users diff --git a/tools/epn/run.sh b/tools/epn/run.sh index 5d1a870..f5a5393 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -1,6 +1,6 @@ #!/bin/bash -export GEN_TOPO_PARTITION=TPC # ECS Partition +export GEN_TOPO_PARTITION=test # ECS Partition export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard # Use these settings to fetch the Workflow Repository using a hash / tag @@ -17,7 +17,7 @@ export WORKFLOW_DETECTORS=ALL # Optional export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=59 # Override the number of EPN compute nodes to use (default is specified in description library file) +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) export NHBPERTF=256 # Number of HBF per TF /home/epn/pdp/gen_topo.sh > $HOME/gen_topo_output.xml From feec9abf045e2e2c5d6ae28f0a0b3527d18a05b1 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 2 Sep 2021 22:13:14 +0200 Subject: [PATCH 033/236] Update documentation --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 02f026d..48bcb57 100644 --- a/README.md +++ b/README.md @@ -120,11 +120,14 @@ FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_work - The `WORKFLOW_DETECTORS` and `WORKFLOW_PARAMETERS` options are optional, your workflow does not need to use them. They are mostly for more complex workflows, so you can ignore them for now`. - Leave `DDMODE=processing` in order to run a workflow. - `GEN_TOPO_PARTITION` and `NHBPERTF` will be set by AliECS later automatically, no need to change them. - - Change the output filename to a file somewhere in your `$HOME`, this will be the file you have to enter in AliECS as topology. + - Change the output filename to a file somewhere in your `$HOME`, the default is `$HOME`/gen_topo_output.xml. This will be the file you have to enter in AliECS as topology. - Run `run.sh` +- Put the output file (default is `$HOME/gen_topo_output.xml`) as EPN DDS topology in the AliECS GUI. When adapting your workflow, please try to follow the style of the existing workflows. The [testing/examples/example-workflow.sh](testing/examples/example-workflow.sh) should be a simple start, for a more complex example you can have a look at [testing/detectors/TPC/tpc-workflow.sh](testing/detectors/TPC/tpc-workflow.sh), and as a fulll complex example of a global workflow please look at [production/full-system-test/dpl-workflow_local.sh](production/full-system-test/dpl-workflow_local.sh) +**Please note that currently when creating a workflow that contains QC, ERROR messages will be written to the console. The workflow creation scripts sees these error messages and then fails. These failures can be ignored using the `GEN_TOPO_IGNORE_ERROR=1` env variable, which is thus temporarily mandatory for all workflows containing QC.** + For reference, the `run.sh` script internally uses the `parser` to create the XML file, it essentially sets some environment variables and then calls the *parser* with all options set. So in principle, you can also use the *parser* directly to create the workflow as described [here](Creating-a-full-topology-DDS-XML-file-manually). For comparison, see my console output below: @@ -143,7 +146,7 @@ Receiving objects: 100% (182/182), 36.42 KiB | 5.20 MiB/s, done. Resolving deltas: 100% (64/64), done. [drohr@epn245 ~]$ cd O2DataProcessing/testing/ [drohr@epn245 testing]$ mkdir -p private/drohr -[drohr@epn245 testing]$ cp examples/ +[drohr@epn245 testing]$ ls examples/ example-workflow.sh workflows.desc [drohr@epn245 testing]$ cp examples/* private/drohr/ [drohr@epn245 testing]$ vi private/drohr/workflows.desc From 6210e952be0392099d1ffb207f4d8c1a260b639d Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 2 Sep 2021 22:17:13 +0200 Subject: [PATCH 034/236] Add INFOLOGGER_SEVERITY option --- common/README.md | 3 ++- common/setenv.sh | 1 + production/full-system-test/dpl-workflow_local.sh | 5 +++-- production/production.desc | 4 ++-- testing/detectors/TPC/tpc-workflow.sh | 4 ++-- testing/detectors/TPC/workflows.desc | 4 ++-- 6 files changed, 12 insertions(+), 9 deletions(-) mode change 100644 => 100755 testing/detectors/TPC/tpc-workflow.sh diff --git a/common/README.md b/common/README.md index deb808e..35cee7e 100644 --- a/common/README.md +++ b/common/README.md @@ -36,7 +36,8 @@ The `setenv-sh` script sets the following environment options The multiplicities are scaled with the `NGPUS` setting, i.e. with 1 GPU only 1/4th are applied. You can pass an option different to 1, and than it will be applied as factor on top of the multiplicities. It is auto-selected by `start-tmux.sh`. -* `SEVERITY`: Log verbosity (e.g. info or error) +* `SEVERITY`: Log verbosity (e.g. info or error, default: info) +* `INFOLOGGER_SEVERITY`: Min severity for messages sent to Infologger. (default: `$SEVERITY`) * `SHMTHROW`: Throw exception when running out of SHM memory. It is suggested to leave this enabled (default) on tests on the laptop to get an actual error when it runs out of memory. This is disabled in `start_tmux.sh`, to avoid breaking the processing while there is a chance that another process might free memory and we can continue. diff --git a/common/setenv.sh b/common/setenv.sh index ab7a120..302f877 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -37,6 +37,7 @@ if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; the if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ "0$WORKFLOW_DETECTORS_CALIB" == "0ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi +if [ -z "$INFOLOGGER_SEVERITY" ]; then export INFOLOGGER_SEVERITY=$SEVERITY; fi SEVERITY_TPC="info" # overrides severity for the tpc workflow DISABLE_MC="--disable-mc" diff --git a/production/full-system-test/dpl-workflow_local.sh b/production/full-system-test/dpl-workflow_local.sh index c26a7f8..d1ea038 100755 --- a/production/full-system-test/dpl-workflow_local.sh +++ b/production/full-system-test/dpl-workflow_local.sh @@ -24,8 +24,9 @@ fi # Set general arguments ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" if [ $EPNMODE == 1 ]; then - ARGS_ALL+=" --infologger-severity $SEVERITY" + ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" + ARGS_ALL+=" --monitoring-backend no-op://" else ARGS_ALL+=" --monitoring-backend no-op://" fi @@ -186,7 +187,7 @@ fi # Common workflows has_detector ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " -has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL/-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " +has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " has_detectors ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " has_detector FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC | " diff --git a/production/production.desc b/production/production.desc index 8300513..17d663e 100644 --- a/production/production.desc +++ b/production/production.desc @@ -1,2 +1,2 @@ -synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" -synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" +synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" +synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" diff --git a/testing/detectors/TPC/tpc-workflow.sh b/testing/detectors/TPC/tpc-workflow.sh old mode 100644 new mode 100755 index 483e555..a421693 --- a/testing/detectors/TPC/tpc-workflow.sh +++ b/testing/detectors/TPC/tpc-workflow.sh @@ -2,11 +2,11 @@ source common/setenv.sh -SEVERITY=warning ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" if [ $EPNMODE == 1 ]; then - ARGS_ALL+=" --infologger-severity $SEVERITY" + ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" + ARGS_ALL+=" --monitoring-backend no-op://" else ARGS_ALL+=" --monitoring-backend no-op://" fi diff --git a/testing/detectors/TPC/workflows.desc b/testing/detectors/TPC/workflows.desc index 00437b6..9b4ab72 100644 --- a/testing/detectors/TPC/workflows.desc +++ b/testing/detectors/TPC/workflows.desc @@ -1,2 +1,2 @@ -ctf-and-display: "DataDistribution QualityControl" reco,128,128,"SHMSIZE=128000000000 testing/detectors/TPC/tpc-workflow.sh" -ctf-and-display-gpu: "DataDistribution QualityControl" reco,128,128,"GPUTYPE=HIP SHMSIZE=128000000000 testing/detectors/TPC/tpc-workflow.sh" +ctf-and-display: "DataDistribution QualityControl" reco,128,128,"SHMSIZE=128000000000 INFOLOGGER_SEVERITY=warning testing/detectors/TPC/tpc-workflow.sh" +ctf-and-display-gpu: "DataDistribution QualityControl" reco,128,128,"GPUTYPE=HIP SHMSIZE=128000000000 INFOLOGGER_SEVERITY=warning testing/detectors/TPC/tpc-workflow.sh" From 63e219abaa1a6a17c93ce7bd031fcb94b1fc8c88 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 2 Sep 2021 22:18:50 +0200 Subject: [PATCH 035/236] Don't use all threads for TPC tracking on EPN --- production/full-system-test/dpl-workflow_local.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/production/full-system-test/dpl-workflow_local.sh b/production/full-system-test/dpl-workflow_local.sh index d1ea038..bd45ede 100755 --- a/production/full-system-test/dpl-workflow_local.sh +++ b/production/full-system-test/dpl-workflow_local.sh @@ -153,6 +153,7 @@ elif [ $EPNPIPELINES != 0 ]; then N_TRDTRK=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) if [ $GPUTYPE == "CPU" ]; then N_TPCTRK=8 + GPU_CONFIG_KEY+="GPU_proc.ompThreads=4;" else N_TPCTRK=$NGPUS fi From 944da2fb4ba0d9df9870dee34759b509e96e1956 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 2 Sep 2021 22:19:34 +0200 Subject: [PATCH 036/236] For the time being add TPC linkZS decoding to global workflow on EPN --- production/full-system-test/dpl-workflow_local.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/production/full-system-test/dpl-workflow_local.sh b/production/full-system-test/dpl-workflow_local.sh index bd45ede..3e50962 100755 --- a/production/full-system-test/dpl-workflow_local.sh +++ b/production/full-system-test/dpl-workflow_local.sh @@ -171,6 +171,12 @@ else WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg | " fi +if [ $EPNMODE == 1 ]; then + GPU_INPUT=zsonthefly + WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline tpc-raw-to-digits-0:6 | " + WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:6 | " +fi + #Decoder workflows if [ $CTFINPUT == 0 ]; then has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/ITSdictionary.bin --pipeline its-stf-decoder:$N_ITSDEC | " From 503a94f7896862767fbb4f8fb167e05a763cd4d2 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 2 Sep 2021 22:20:05 +0200 Subject: [PATCH 037/236] Add global QC workflow (currently TPC only) --- production/full-system-test/dpl-workflow_local.sh | 2 ++ production/full-system-test/qc-workflow.sh | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 production/full-system-test/qc-workflow.sh diff --git a/production/full-system-test/dpl-workflow_local.sh b/production/full-system-test/dpl-workflow_local.sh index 3e50962..66d5220 100755 --- a/production/full-system-test/dpl-workflow_local.sh +++ b/production/full-system-test/dpl-workflow_local.sh @@ -257,6 +257,8 @@ fi workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --display-tracks TPC --display-clusters TPC $EVE_CONFIG $DISABLE_MC | " +workflow_has_parameter QC && source $MYDIR/qc-workflow.sh + # DPL run binary WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" diff --git a/production/full-system-test/qc-workflow.sh b/production/full-system-test/qc-workflow.sh new file mode 100644 index 0000000..37d9988 --- /dev/null +++ b/production/full-system-test/qc-workflow.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +MYDIR="$(dirname $(readlink -f $0))" + +has_detector TPC && WORKFLOW+="o2-qc $ARGS_ALL --config json:///home/epn/odc/files/tpcQCTasks_multinode_ALL.json --local --host localhost | " From 752f243d60849e543d2df9830e2e016582b60b0e Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 2 Sep 2021 22:20:25 +0200 Subject: [PATCH 038/236] Add $GEN_TOPO_IGNORE_ERROR option --- tools/parse | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/parse b/tools/parse index 54b778d..d776853 100755 --- a/tools/parse +++ b/tools/parse @@ -87,7 +87,11 @@ for line in f: print("Adding", wf[0], "workflow (", wf[2], "-", wf[1], "nodes):", wf[3]) reconodes = max(reconodes, int(wf[1])) reconodesmin = max(reconodesmin, int(wf[2])) - command = wf[3] + " | grep -v \"^\[INFO\" > " + filename + " && [ `grep \"^\[\" " + filename + " | wc -l` == 0 ]" + if 'GEN_TOPO_IGNORE_ERROR' in os.environ and int(os.environ['GEN_TOPO_IGNORE_ERROR']): + command_log_filter = "\"^\[\"" + else: + command_log_filter = "\"^\[INFO\"" + command = wf[3] + " | grep -v " + command_log_filter + " > " + filename + " && [ `grep \"^\[\" " + filename + " | wc -l` == 0 ]" print("Running DPL command", command) if os.system(command) != 0: print("Error running command", command) From 9d3eecef0a03bb92af4244b4f8578756e444856f Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 3 Sep 2021 09:13:49 +0200 Subject: [PATCH 039/236] Fix typos in documentation --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 48bcb57..85890f9 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ commit=xxxx|path=xxxx file=topologies.desc topology=demo-full-topology parameter # The parser script: The **parser** is a simple python script that parses a *topology description* and generates the DDS XML file with the *full topology*. To do so, it runs all the DPL workflows with the `--dds` option and then uses the `odc-topo-epn` tool to merge the *partial topology* into the final *full topology*. The *parser* is steered by some command line options and by some environment variables (note that the env variables get also passed through to the workflows). -- The *parser* needs a DataDistribution topology file. An example file is shipped with the parse in the `tools/datadistribution_workflows` folder. +- The *parser* needs a DataDistribution topology file. Example files are shipped with the parser in the `tools/datadistribution_workflows` folder for: just discarding the TF, store the TF to disk, forward the TF to DPL processing (what we need for a DPL workflow), and forward to processing while storing to disk in parallel. - *Parser* command line options: - The parser is supposed to be executed from the root folder of the `O2DataProcessing` repository. - The syntax is: @@ -76,7 +76,7 @@ The *parser* is steered by some command line options and by some environment var ``` - In the above example, this could be: ``` -DDWORKFLOW=tools/datadistribution_workflows/dd-data.xml WORKFLOW_DETECTORS=TPC,ITS WORKFLOW_DETECTORS_QC=TPC WORKFLOW_DETECTORS_CALIB=ALL ./tools/parse topologies.desc demo-full-topology /tmp/output.xml +DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml WORKFLOW_DETECTORS=TPC,ITS WORKFLOW_DETECTORS_QC=TPC WORKFLOW_DETECTORS_CALIB=ALL ./tools/parse topologies.desc demo-full-topology /tmp/output.xml ``` - The following environment variables steer the *Parser*: - `$FILEWORKDIR`: This variable must be set and is used by the workflows to specify where all required files (grp, geometry, dictionaries, etc) are located. @@ -84,8 +84,9 @@ DDWORKFLOW=tools/datadistribution_workflows/dd-data.xml WORKFLOW_DETECTORS=TPC,I - `$INRAWCHANNAME`: Propagated to the workflow, defines the raw FMQ channel name used for the communication with DataDistribution. - `$RECO_NUM_NODES_OVERRIDE`: Overrides the number of nodes used for reconstruction (empty or 0 to disable) - `$DDMODE`: How to operate DataDistribution: **discard** (build TF and discard them), **disk** (build TF and store to disk), **processing** (build TF and run DPL workflow on TF data), **processing-disk** (both store TF to disk and run processing). - - `$DDWORKFLOW` (*alternative*): Explicit path to the XML file with the partial workflow for *DataDistribution*. -- When run on the EPN farm (indicated by the `EPNMODE` variable), the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. + - `$DDWORKFLOW`: (*alternative*): Explicit path to the XML file with the partial workflow for *DataDistribution*. + - `$GEN_TOPO_IGNORE_ERROR`: Ignore ERROR messages during workflow creation. +- When run on the EPN farm (indicated by the `$EPNMODE=1` variable), the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. # Creating a full topology DDS XML file manually: - Check out the `O2DataProcessing` repository, adjust the workflows and topology description to your need. @@ -93,7 +94,7 @@ DDWORKFLOW=tools/datadistribution_workflows/dd-data.xml WORKFLOW_DETECTORS=TPC,I - Make sure the `odc-topo-epn` is in your path (e.g. `module load ODC` / `alienv enter ODC/latest`). - Set the required environment variables, e.g. ``` -FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_workflows/dd-data.xml INRAWCHANNAME=tf-builder-pipe-0 WORKFLOW_DETECTORS=TPC,ITS,TRD,TOF,FT0 +FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml INRAWCHANNAME=tf-builder-pipe-0 WORKFLOW_DETECTORS=TPC,ITS,TRD,TOF,FT0 ``` - If you are not on the EPN farm and have NOT set `EPNMODE=1`: Load the required modules for O2 / QC (`alienv load O2/latest QualityControl/latest`) - Run the parser, e.g.: From bfb5ab11781507767bef08e37abcb0ecbb4a6467 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 3 Sep 2021 16:42:06 +0200 Subject: [PATCH 040/236] Fix some typos in workflows --- production/full-system-test/dpl-workflow_local.sh | 10 +++++----- testing/examples/example-workflow.sh | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/production/full-system-test/dpl-workflow_local.sh b/production/full-system-test/dpl-workflow_local.sh index 66d5220..ba49b68 100755 --- a/production/full-system-test/dpl-workflow_local.sh +++ b/production/full-system-test/dpl-workflow_local.sh @@ -181,12 +181,12 @@ fi if [ $CTFINPUT == 0 ]; then has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/ITSdictionary.bin --pipeline its-stf-decoder:$N_ITSDEC | " has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/MFTdictionary.bin --runmft true | " - has_detector FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector FT0 && [ $EPNMODE == 0 ] && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + has_detector FV0 && [ $EPNMODE == 0 ] && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + has_detector MID && [ $EPNMODE == 0 ] && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector TOF && [ $EPNMODE == 1 ] && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $ARGS_ALL | " + has_detector TOF && [ $EPNMODE == 0 ] && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector FDD && [ $EPNMODE == 0 ] && WORKFLOW+="o2-fdd-flp-dpl-workflow --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $ARGS_ALL | " has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL | " has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " diff --git a/testing/examples/example-workflow.sh b/testing/examples/example-workflow.sh index 39e41f2..f42c33e 100755 --- a/testing/examples/example-workflow.sh +++ b/testing/examples/example-workflow.sh @@ -3,8 +3,8 @@ source common/setenv.sh SEVERITY=warning -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" From 9b57c10142d20f5a7490acb7fa4c110e04eb25dd Mon Sep 17 00:00:00 2001 From: Francesca Ercolessi Date: Fri, 3 Sep 2021 16:18:49 +0200 Subject: [PATCH 041/236] tof cosmics workflow added --- testing/detectors/TOF/qc-full.json | 142 +++++++++++++++++++++++ testing/detectors/TOF/tof-epn-cosmics.sh | 32 +++++ testing/detectors/TOF/workflows.desc | 1 + 3 files changed, 175 insertions(+) create mode 100644 testing/detectors/TOF/qc-full.json create mode 100755 testing/detectors/TOF/tof-epn-cosmics.sh diff --git a/testing/detectors/TOF/qc-full.json b/testing/detectors/TOF/qc-full.json new file mode 100644 index 0000000..75c2da1 --- /dev/null +++ b/testing/detectors/TOF/qc-full.json @@ -0,0 +1,142 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8083" + } + }, + "tasks": { + "TaskRaw": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskRaw", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "raw-local" + }, + "location": "local", + "localMachines": [ + "alio2-cr1-flp178-ib", + "alio2-cr1-flp179-ib" + ], + "remoteMachine": "localhost", + "remotePort": "30132", + "mergingMode": "delta" + }, + "TaskDigits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskDigits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "digi-local" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "alio2-cr1-qc03.cern.ch", + "remotePort": "47708", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "CheckDiagnostics": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckDiagnostics", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "RDHCounterCrate0" + ] + } + ] + }, + "CheckCompressedData": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckCompressedData", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "checkParameters": { + "DiagnosticThresholdPerSlot": "10" + }, + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "hDiagnostic" + ] + } + ] + }, + "CheckRawMultiplicity": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", + "moduleName": "QcTOF", + "policy": "OnAny", + "detectorName": "TOF", + "dataSource": [ + { + "type": "Task", + "name": "TaskDigits", + "MOs": [ + "TOFRawsMulti" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + { + "id": "digi-local", + "active": "true", + "machines": [ + "epn" + ], + "port": "30333", + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/detectors/TOF/tof-epn-cosmics.sh b/testing/detectors/TOF/tof-epn-cosmics.sh new file mode 100755 index 0000000..84f33fc --- /dev/null +++ b/testing/detectors/TOF/tof-epn-cosmics.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +calibration_node="epn003-ib:30453" + +SEVERITY=warning +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +CTFOUT="/home/fnoferin/public/out/" +MYDIR="$(dirname $(readlink -f $0))" +OUT_CHANNEL="name=downstream,method=connect,address=tcp://${calibration_node},type=push,transport=zeromq" +PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;calclus:TOF/INFOCALCLUS;cosmics:TOF/INFOCOSMICS;trkcos:TOF/INFOTRACKCOS;trksiz:TOF/INFOTRACKSIZE" + + +o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ +--readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ +| o2-tof-reco-workflow --input-type raw --output-type clusters,ctf \ +${ARGS_ALL} ${CTF_DICT} --configKeyValues "$ARGS_ALL_CONFIG;" \ +--disable-root-output --calib-cluster --cluster-time-window 5000 --cosmics \ +--pipeline "tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS},tof-entropy-encoder:${NTHREADS}" \ +| o2-ctf-writer-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet TOF --output-dir $CTFOUT \ +| o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn \ +| o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file \ No newline at end of file diff --git a/testing/detectors/TOF/workflows.desc b/testing/detectors/TOF/workflows.desc index e69de29..ed9fe7d 100644 --- a/testing/detectors/TOF/workflows.desc +++ b/testing/detectors/TOF/workflows.desc @@ -0,0 +1 @@ +tof-cosmics: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics.sh" From 7118017af17f2f91623006261248e2ed2adf526b Mon Sep 17 00:00:00 2001 From: noferini Date: Wed, 8 Sep 2021 11:41:04 +0200 Subject: [PATCH 042/236] add other TOF topologies --- testing/detectors/TOF/tof-epn-cosmics-dig.sh | 30 ++++++++++++++++++ .../detectors/TOF/tof-epn-cosmics-digNoQC.sh | 29 +++++++++++++++++ testing/detectors/TOF/tof-epn-cosmicsNoQC.sh | 31 +++++++++++++++++++ testing/detectors/TOF/workflows.desc | 3 ++ 4 files changed, 93 insertions(+) create mode 100644 testing/detectors/TOF/tof-epn-cosmics-dig.sh create mode 100644 testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh create mode 100644 testing/detectors/TOF/tof-epn-cosmicsNoQC.sh diff --git a/testing/detectors/TOF/tof-epn-cosmics-dig.sh b/testing/detectors/TOF/tof-epn-cosmics-dig.sh new file mode 100644 index 0000000..8f8614b --- /dev/null +++ b/testing/detectors/TOF/tof-epn-cosmics-dig.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +calibration_node="epn003-ib:30453" + +SEVERITY=warning +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +CTFOUT="/home/fnoferin/public/out/" +MYDIR="$(dirname $(readlink -f $0))" +OUT_CHANNEL="name=downstream,method=connect,address=tcp://${calibration_node},type=push,transport=zeromq" +PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;dig:TOF/DIGITS;head:TOF/DIGITHEADER;row:TOF/READOUTWINDOW;patt:TOF/PATTERNS" + + +o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ +--readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ +| o2-tof-reco-workflow --input-type raw --output-type digits --disable-root-output \ +${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" \ +--pipeline "tof-compressed-decoder:${NTHREADS}" \ +| o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn \ +| o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh b/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh new file mode 100644 index 0000000..52c895b --- /dev/null +++ b/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +calibration_node="epn003-ib:30453" + +SEVERITY=warning +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +CTFOUT="/home/fnoferin/public/out/" +MYDIR="$(dirname $(readlink -f $0))" +OUT_CHANNEL="name=downstream,method=connect,address=tcp://${calibration_node},type=push,transport=zeromq" +PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;dig:TOF/DIGITS;head:TOF/DIGITHEADER;row:TOF/READOUTWINDOW;patt:TOF/PATTERNS" + + +o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ +--readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ +| o2-tof-reco-workflow --input-type raw --output-type digits --disable-root-output \ +${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" \ +--pipeline "tof-compressed-decoder:${NTHREADS}" \ +| o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh b/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh new file mode 100644 index 0000000..2ab872d --- /dev/null +++ b/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +calibration_node="epn003-ib:30453" + +SEVERITY=warning +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +CTFOUT="/home/fnoferin/public/out/" +MYDIR="$(dirname $(readlink -f $0))" +OUT_CHANNEL="name=downstream,method=connect,address=tcp://${calibration_node},type=push,transport=zeromq" +PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;calclus:TOF/INFOCALCLUS;cosmics:TOF/INFOCOSMICS;trkcos:TOF/INFOTRACKCOS;trksiz:TOF/INFOTRACKSIZE" + + +o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ +--readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ +| o2-tof-reco-workflow --input-type raw --output-type clusters,ctf \ +${ARGS_ALL} ${CTF_DICT} --configKeyValues "$ARGS_ALL_CONFIG;" \ +--disable-root-output --calib-cluster --cluster-time-window 5000 --cosmics \ +--pipeline "tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS},tof-entropy-encoder:${NTHREADS}" \ +| o2-ctf-writer-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet TOF --output-dir $CTFOUT \ +| o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/workflows.desc b/testing/detectors/TOF/workflows.desc index ed9fe7d..724b1f4 100644 --- a/testing/detectors/TOF/workflows.desc +++ b/testing/detectors/TOF/workflows.desc @@ -1 +1,4 @@ tof-cosmics: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics.sh" +tof-cos-dig: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-dig.sh" +tof-cosmicsNoQC: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmicsNoQC.sh" +tof-cos-digNoQC: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh" From 36c38a43b81d3b52a6eadf3fe5ed81cc78f55449 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 10 Sep 2021 10:17:01 +0200 Subject: [PATCH 043/236] Improve debug output and make clear that the output.xml is only a temporary file --- tools/epn/gen_topo_o2dataprocessing.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/epn/gen_topo_o2dataprocessing.sh b/tools/epn/gen_topo_o2dataprocessing.sh index b34df33..6ef9486 100755 --- a/tools/epn/gen_topo_o2dataprocessing.sh +++ b/tools/epn/gen_topo_o2dataprocessing.sh @@ -25,6 +25,7 @@ else fi export EPNMODE=1 export O2DATAPROCESSING_ROOT=`pwd` +echo Running topology generation to temporary file $GEN_TOPO_WORKDIR/output.xml 1>&2 ./tools/parse "$GEN_TOPO_LIBRARY_FILE" $GEN_TOPO_WORKFLOW_NAME $GEN_TOPO_WORKDIR/output.xml 1>&2 || { echo Error during workflow description parsing 1>&2; exit 1; } if [ "0$GEN_TOPO_CACHEABLE" == "01" ]; then cd $GEN_TOPO_WORKDIR @@ -34,4 +35,5 @@ if [ "0$GEN_TOPO_CACHEABLE" == "01" ]; then cp $GEN_TOPO_WORKDIR/output.xml cache/$CACHE_HASH fi cat $GEN_TOPO_WORKDIR/output.xml +echo Removing temporary output file $GEN_TOPO_WORKDIR/output.xml 1>&2 rm $GEN_TOPO_WORKDIR/output.xml From 9767438c5218e3c1c51957891d408ed00007b613 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 10 Sep 2021 10:17:25 +0200 Subject: [PATCH 044/236] Bugfix: max_split is max number of delimiters not max number of parts --- tools/parse | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/parse b/tools/parse index d776853..de96a4a 100755 --- a/tools/parse +++ b/tools/parse @@ -74,10 +74,10 @@ for line in f: for i in range(2, len(args)): filename = tmpdir + "/wf" + str(i) + ".dds" if args[i].startswith("reco"): - wf = args[i].split(",", 4) + wf = args[i].split(",", 3) recoworkflows.append(filename) elif args[i].startswith("calib"): - wf = args[i].split(",", 3) + wf = args[i].split(",", 2) wf[3] = wf[2] wf[2] = wf[1] calibworkflows.append(filename) From db8f126741aa9096f2d8a73c4256df306478fb55 Mon Sep 17 00:00:00 2001 From: shahoian Date: Fri, 10 Sep 2021 14:27:41 +0200 Subject: [PATCH 045/236] ITS/MFT/TPC test workflows --- .../shahoian/its-mft-tpc_reco_ctf_qc-uni.sh | 106 +++++++ testing/private/shahoian/qc/qc_ITS_MFT.json | 203 +++++++++++++ .../private/shahoian/qc/qc_tpc_its_mft.json | 286 ++++++++++++++++++ testing/private/shahoian/qc/qc_tpc_mft.json | 191 ++++++++++++ testing/private/shahoian/workflows.desc | 23 ++ 5 files changed, 809 insertions(+) create mode 100755 testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh create mode 100644 testing/private/shahoian/qc/qc_ITS_MFT.json create mode 100644 testing/private/shahoian/qc/qc_tpc_its_mft.json create mode 100644 testing/private/shahoian/qc/qc_tpc_mft.json create mode 100644 testing/private/shahoian/workflows.desc diff --git a/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh b/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh new file mode 100755 index 0000000..88af325 --- /dev/null +++ b/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +# accounts for externally set WORKFLOW_DETECTORS, SHMSIZE, SAVECTF, CTF_DIR, QCJSON, WORKFLOWMODE + +# HACK +###WORKFLOW_DETECTORS=`echo $WORKFLOW_DETECTORS | tr _ ,` + +source /home/shahoian/alice/O2DataProcessing/common/setenv.sh + +# EPN script. Including CTF creation and QC. +export GPUTYPE=HIP +export GPUMEMSIZE=$(( 24 << 30 )) +export HOSTMEMSIZE=$(( 5 << 30 )) + +SEVERITY=INFO +INFOLOGGER_SEVERITY=WARNING + +# global args +ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE" + +# raw input proxy channel +PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1" +# raw input data filtered by the proxy +PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +# add detectors +has_detector ITS && PROXY_INSPEC+=";I:ITS/RAWDATA" +has_detector MFT && PROXY_INSPEC+=";M:MFT/RAWDATA" +has_detector TPC && PROXY_INSPEC+=";T:TPC/RAWDATA" + +TPC_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION;T:TPC/RAWDATA" +TPC_OUTPUT="clusters,tracks,disable-writer" +if [ $SAVECTF == 1 ]; then + TPC_OUTPUT+=",encoded-clusters" +fi + +# directory for external files +#FILEWORKDIR="/home/epn/odc/files" + +# Clusterization dictionaries path +ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" +MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" + +MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" + +# CTF compression dictionary +CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" +# min file size for CTF (accumulate CTFs until it is reached) +CTF_MINSIZE="2000000" +# output directory for CTF files +#CTF_DIR="/tmp/eosbuffer" + +# key/values config string +CONFKEYVAL="NameConf.mDirGRP=${FILEWORKDIR};NameConf.mDirGeom=${FILEWORKDIR}" + +# number of decoding pipelines and threads per pipeline +NITSDECPIPELINES=6 +NITSDECTHREADS=2 +NMFTDECPIPELINES=6 +NMFTDECTHREADS=2 + +# number of reconstruction pipelines and threads per pipeline +NITSRECPIPELINES=2 +NMFTRECPIPELINES=2 + +# number of compression pipelines +NITSENCODERPIPELINES=1 +NMFTENCODERPIPELINES=1 + +# uncomment this to disable intermediate reconstruction output +#DISABLE_RECO_OUTPUT=" --disable-root-output " + +HOST=localhost + +WORKFLOW="o2-dpl-raw-proxy -b ${ARGS_ALL} --dataspec \"${PROXY_INSPEC}\" --channel-config \"${PROXY_CHANNEL}\" | " +has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:${NITSDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${ITSCLUSDICT}\" | " +has_detector ITS && WORKFLOW+="o2-its-reco-workflow -b ${ARGS_ALL} ${DISABLE_RECO_OUTPUT} --trackerCA --tracking-mode sync --disable-mc --clusters-from-upstream --pipeline its-tracker:${NITSRECPIPELINES} --its-dictionary-path \"${ITSCLUSDICT}\" --configKeyValues \"${CONFKEYVAL}\" | " +# +has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:${NMFTDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${MFTCLUSDICT}\" --runmft --noise-file \"${MFT_NOISE}\" | " +# +has_detector TPC && WORKFLOW+="o2-tpc-raw-to-digits-workflow -b ${ARGS_ALL} --input-spec \"${TPC_INSPEC}\" --configKeyValues \"TPCDigitDump.LastTimeBin=1000\" --pipeline tpc-raw-to-digits-0:6 | " +has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow -b ${ARGS_ALL} --input-type digitizer --output-type $TPC_OUTPUT --disable-mc --pipeline tpc-tracker:4 --environment ROCR_VISIBLE_DEVICES={timeslice0} --configKeyValues \"align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;GPU_proc.deviceNum=0;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;GPU_proc.memoryScalingFactor=3;${CONFKEYVAL}\" | " +# +if [ $SAVECTF == 1 ]; then + has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline its-entropy-encoder:${NITSENCODERPIPELINES} | " + has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline mft-entropy-encoder:${NMFTENCODERPIPELINES} --runmft | " + WORKFLOW+="o2-ctf-writer-workflow -b ${ARGS_ALL} --configKeyValues \"${CONFKEYVAL}\" --no-grp --onlyDet $WORKFLOW_DETECTORS --ctf-dict \"${CTF_DICT}\" --output-dir \"$CTF_DIR\" --min-file-size ${CTF_MINSIZE} | " +fi + +if [ -n "$QCJSON" ]; then + WORKFLOW+="o2-qc -b ${ARGS_ALL} --config json://$QCJSON --local --host $HOST | " +fi + +WORKFLOW+=" o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi + + + diff --git a/testing/private/shahoian/qc/qc_ITS_MFT.json b/testing/private/shahoian/qc/qc_ITS_MFT.json new file mode 100644 index 0000000..34df6f7 --- /dev/null +++ b/testing/private/shahoian/qc/qc_ITS_MFT.json @@ -0,0 +1,203 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-flp187:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, +"tasks": { + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "remote", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "remote" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1441" + } + ], + "blocking": "false" + } + ] +} + +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "remote" + } + }, + "checks": { + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [{ + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": ["mMFTClusterSensorIndex"] + }], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "mft-clusters", + "active": "true", + "machines": [], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc_tpc_its_mft.json b/testing/private/shahoian/qc/qc_tpc_its_mft.json new file mode 100644 index 0000000..fa43196 --- /dev/null +++ b/testing/private/shahoian/qc/qc_tpc_its_mft.json @@ -0,0 +1,286 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": {}, + "location": "remote" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "remote" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn160-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn160-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "remote", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "remote" + }, + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "remote" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + }, + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": [ + "mMFTClusterSensorIndex" + ] + } + ], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "mft-clusters", + "active": "true", + "machines": [], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc_tpc_mft.json b/testing/private/shahoian/qc/qc_tpc_mft.json new file mode 100644 index 0000000..46d4b16 --- /dev/null +++ b/testing/private/shahoian/qc/qc_tpc_mft.json @@ -0,0 +1,191 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": {}, + "location": "remote" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "remote" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn160-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn160-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "remote" + } + }, + "checks": { + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": [ + "mMFTClusterSensorIndex" + ] + } + ], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "mft-clusters", + "active": "true", + "machines": [], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/workflows.desc b/testing/private/shahoian/workflows.desc new file mode 100644 index 0000000..ad579fe --- /dev/null +++ b/testing/private/shahoian/workflows.desc @@ -0,0 +1,23 @@ +tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +tpc-ctf2eos-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-ctf-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-ctf-qcITS-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-ctf-qcMFT-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" + +its-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" + +its-locrec-ctf-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-locrec-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" + +tpc-ctf-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +tpc-ctf2eos-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-ctf-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-ctf-qcITS-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-ctf-qcMFT-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" + From fa0f9a9791de4e3a3eafc8d1e9679ce60efbf90b Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 15 Sep 2021 12:32:34 +0200 Subject: [PATCH 046/236] update of created w-flows --- .../shahoian/its-mft-tpc_reco_ctf_qc-uni.sh | 3 +- ...pcMNAll-itsEPNv2-mftClus-tofglobalrun.json | 444 ++++++++++++++++++ .../qc/qc-tpcMNAll-itsEPNv2-mftClus.json | 332 +++++++++++++ ...pcMNAll-itsEPNv2-mftClus_tofglobalrun.json | 443 +++++++++++++++++ .../qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json | 391 +++++++++++++++ .../shahoian/qc/qc-tpcMNAll-itsEPNv2.json | 279 +++++++++++ .../shahoian/qc/qc-tpcMNAll-mftClus.json | 227 +++++++++ testing/private/shahoian/qc/qc_its_tpc.json | 251 ++++++++++ .../private/shahoian/qc/qc_its_tpcNoClus.json | 232 +++++++++ .../private/shahoian/qc/qc_its_tpcNoDigi.json | 232 +++++++++ testing/private/shahoian/reco_ctf_qc-uni.sh | 113 +++++ testing/private/shahoian/run_ext.sh | 35 ++ testing/private/shahoian/workflows.desc | 78 ++- 13 files changed, 3037 insertions(+), 23 deletions(-) create mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json create mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json create mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus_tofglobalrun.json create mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json create mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json create mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json create mode 100644 testing/private/shahoian/qc/qc_its_tpc.json create mode 100644 testing/private/shahoian/qc/qc_its_tpcNoClus.json create mode 100644 testing/private/shahoian/qc/qc_its_tpcNoDigi.json create mode 100755 testing/private/shahoian/reco_ctf_qc-uni.sh create mode 100755 testing/private/shahoian/run_ext.sh diff --git a/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh b/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh index 88af325..b24d194 100755 --- a/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh +++ b/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh @@ -16,7 +16,8 @@ SEVERITY=INFO INFOLOGGER_SEVERITY=WARNING # global args -ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE" +ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +#ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE " # raw input proxy channel PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1" diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json new file mode 100644 index 0000000..6adc093 --- /dev/null +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json @@ -0,0 +1,444 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": { + "NRawDigitsNBins": "100", + "NRawDigitsXMin": "0", + "NRawDigitsXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "TimeBinNBins": "600", + "TimeBinXMin": "0", + "TimeBinXMax": "600" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", + "NClustersXMin": "0", + "NClustersXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "QtotNBins": "600", + "QtotXMin": "0", + "QtotXMax": "600", + "SigmaPadNBins": "200", + "SigmaPadXMin": "0", + "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", + "SigmaTimeXMin": "0", + "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", + "TimeBinXMin": "0", + "TimeBinXMax": "100000" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + }, + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32640", + "localControl": "odc" + }, + "TaskRaw": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskRaw", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "raw-local" + }, + "location": "local", + "localMachines": [ + "alio2-cr1-flp178-ib", + "alio2-cr1-flp179-ib" + ], + "remoteMachine": "localhost", + "remotePort": "30132", + "mergingMode": "delta" + }, + "TaskDigits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskDigits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "digi-local" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "47708", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + }, + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": [ + "mMFTClusterSensorIndex" + ] + } + ], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + }, + "CheckDiagnostics": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckDiagnostics", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "RDHCounterCrate0" + ] + } + ] + }, + "CheckCompressedData": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckCompressedData", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "checkParameters": { + "DiagnosticThresholdPerSlot": "10" + }, + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "hDiagnostic" + ] + } + ] + }, + "CheckRawMultiplicity": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", + "moduleName": "QcTOF", + "policy": "OnAny", + "detectorName": "TOF", + "dataSource": [ + { + "type": "Task", + "name": "TaskDigits", + "MOs": [ + "TOFRawsMulti" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.005", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "mft-clusters", + "active": "true", + "machines": [], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "digi-local", + "active": "true", + "machines": [ + "epn", + "localhost" + ], + "port": "30333", + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json new file mode 100644 index 0000000..d0658f8 --- /dev/null +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json @@ -0,0 +1,332 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": { + "NRawDigitsNBins": "100", + "NRawDigitsXMin": "0", + "NRawDigitsXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "TimeBinNBins": "600", + "TimeBinXMin": "0", + "TimeBinXMax": "600" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", + "NClustersXMin": "0", + "NClustersXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "QtotNBins": "600", + "QtotXMin": "0", + "QtotXMax": "600", + "SigmaPadNBins": "200", + "SigmaPadXMin": "0", + "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", + "SigmaTimeXMin": "0", + "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", + "TimeBinXMin": "0", + "TimeBinXMax": "100000" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + }, + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32640", + "localControl": "odc" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + }, + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": [ + "mMFTClusterSensorIndex" + ] + } + ], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.005", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "mft-clusters", + "active": "true", + "machines": [], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus_tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus_tofglobalrun.json new file mode 100644 index 0000000..6ee585b --- /dev/null +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus_tofglobalrun.json @@ -0,0 +1,443 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": { + "NRawDigitsNBins": "100", + "NRawDigitsXMin": "0", + "NRawDigitsXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "TimeBinNBins": "600", + "TimeBinXMin": "0", + "TimeBinXMax": "600" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", + "NClustersXMin": "0", + "NClustersXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "QtotNBins": "600", + "QtotXMin": "0", + "QtotXMax": "600", + "SigmaPadNBins": "200", + "SigmaPadXMin": "0", + "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", + "SigmaTimeXMin": "0", + "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", + "TimeBinXMin": "0", + "TimeBinXMax": "100000" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + }, + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32640", + "localControl": "odc" + }, + "TaskRaw": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskRaw", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "raw-local" + }, + "location": "local", + "localMachines": [ + "alio2-cr1-flp178-ib", + "alio2-cr1-flp179-ib" + ], + "remoteMachine": "localhost", + "remotePort": "30132", + "mergingMode": "delta" + }, + "TaskDigits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskDigits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "digi-local" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "47708", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + }, + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": [ + "mMFTClusterSensorIndex" + ] + } + ], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + }, + "CheckDiagnostics": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckDiagnostics", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "RDHCounterCrate0" + ] + } + ] + }, + "CheckCompressedData": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckCompressedData", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "checkParameters": { + "DiagnosticThresholdPerSlot": "10" + }, + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "hDiagnostic" + ] + } + ] + }, + "CheckRawMultiplicity": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", + "moduleName": "QcTOF", + "policy": "OnAny", + "detectorName": "TOF", + "dataSource": [ + { + "type": "Task", + "name": "TaskDigits", + "MOs": [ + "TOFRawsMulti" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.005", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "mft-clusters", + "active": "true", + "machines": [], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "digi-local", + "active": "true", + "machines": [ + "epn" + ], + "port": "30333", + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json new file mode 100644 index 0000000..403def5 --- /dev/null +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json @@ -0,0 +1,391 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": { + "NRawDigitsNBins": "100", + "NRawDigitsXMin": "0", + "NRawDigitsXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "TimeBinNBins": "600", + "TimeBinXMin": "0", + "TimeBinXMax": "600" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", + "NClustersXMin": "0", + "NClustersXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "QtotNBins": "600", + "QtotXMin": "0", + "QtotXMax": "600", + "SigmaPadNBins": "200", + "SigmaPadXMin": "0", + "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", + "SigmaTimeXMin": "0", + "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", + "TimeBinXMin": "0", + "TimeBinXMax": "100000" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + }, + "TaskRaw": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskRaw", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "raw-local" + }, + "location": "local", + "localMachines": [ + "alio2-cr1-flp178-ib", + "alio2-cr1-flp179-ib" + ], + "remoteMachine": "localhost", + "remotePort": "30132", + "mergingMode": "delta" + }, + "TaskDigits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskDigits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "digi-local" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "47708", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + }, + "CheckDiagnostics": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckDiagnostics", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "RDHCounterCrate0" + ] + } + ] + }, + "CheckCompressedData": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckCompressedData", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "checkParameters": { + "DiagnosticThresholdPerSlot": "10" + }, + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "hDiagnostic" + ] + } + ] + }, + "CheckRawMultiplicity": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", + "moduleName": "QcTOF", + "policy": "OnAny", + "detectorName": "TOF", + "dataSource": [ + { + "type": "Task", + "name": "TaskDigits", + "MOs": [ + "TOFRawsMulti" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.005", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "digi-local", + "active": "true", + "machines": [ + "epn", + "localhost" + ], + "port": "30333", + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json new file mode 100644 index 0000000..9b96b8d --- /dev/null +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json @@ -0,0 +1,279 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": { + "NRawDigitsNBins": "100", + "NRawDigitsXMin": "0", + "NRawDigitsXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "TimeBinNBins": "600", + "TimeBinXMin": "0", + "TimeBinXMax": "600" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", + "NClustersXMin": "0", + "NClustersXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "QtotNBins": "600", + "QtotXMin": "0", + "QtotXMax": "600", + "SigmaPadNBins": "200", + "SigmaPadXMin": "0", + "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", + "SigmaTimeXMin": "0", + "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", + "TimeBinXMin": "0", + "TimeBinXMax": "100000" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.005", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json new file mode 100644 index 0000000..5bcd8cd --- /dev/null +++ b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json @@ -0,0 +1,227 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": { + "NRawDigitsNBins": "100", + "NRawDigitsXMin": "0", + "NRawDigitsXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "TimeBinNBins": "600", + "TimeBinXMin": "0", + "TimeBinXMax": "600" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", + "NClustersXMin": "0", + "NClustersXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "QtotNBins": "600", + "QtotXMin": "0", + "QtotXMax": "600", + "SigmaPadNBins": "200", + "SigmaPadXMin": "0", + "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", + "SigmaTimeXMin": "0", + "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", + "TimeBinXMin": "0", + "TimeBinXMax": "100000" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32640", + "localControl": "odc" + } + }, + "checks": { + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": [ + "mMFTClusterSensorIndex" + ] + } + ], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.005", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "mft-clusters", + "active": "true", + "machines": [], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc_its_tpc.json b/testing/private/shahoian/qc/qc_its_tpc.json new file mode 100644 index 0000000..003c3f2 --- /dev/null +++ b/testing/private/shahoian/qc/qc_its_tpc.json @@ -0,0 +1,251 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": {}, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.005", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc_its_tpcNoClus.json b/testing/private/shahoian/qc/qc_its_tpcNoClus.json new file mode 100644 index 0000000..890cf45 --- /dev/null +++ b/testing/private/shahoian/qc/qc_its_tpcNoClus.json @@ -0,0 +1,232 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "false", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": {}, + "location": "remote" + }, + "Clusters_EPN": { + "active": "false", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "remoteMachine": "epn102-ib", + "location": "remote" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "false", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc_its_tpcNoDigi.json b/testing/private/shahoian/qc/qc_its_tpcNoDigi.json new file mode 100644 index 0000000..151a200 --- /dev/null +++ b/testing/private/shahoian/qc/qc_its_tpcNoDigi.json @@ -0,0 +1,232 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits_EPN": { + "active": "false", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": {}, + "location": "remote" + }, + "Clusters_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "remoteMachine": "epn102-ib", + "location": "remote" + }, + "PID_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks_EPN": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/reco_ctf_qc-uni.sh b/testing/private/shahoian/reco_ctf_qc-uni.sh new file mode 100755 index 0000000..93c81d0 --- /dev/null +++ b/testing/private/shahoian/reco_ctf_qc-uni.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +# accounts for externally set WORKFLOW_DETECTORS, SHMSIZE, SAVECTF, CTF_DIR, QCJSON, WORKFLOWMODE + +# HACK +###WORKFLOW_DETECTORS=`echo $WORKFLOW_DETECTORS | tr _ ,` + +source /home/shahoian/alice/O2DataProcessing/common/setenv.sh + +# EPN script. Including CTF creation and QC. +export GPUTYPE=HIP +export GPUMEMSIZE=$(( 24 << 30 )) +export HOSTMEMSIZE=$(( 5 << 30 )) + +SEVERITY=INFO +INFOLOGGER_SEVERITY=WARNING + +# global args +ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +#ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE " + +# raw input proxy channel +PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1" +# raw input data filtered by the proxy +PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +# add detectors +has_detector ITS && PROXY_INSPEC+=";I:ITS/RAWDATA" +has_detector MFT && PROXY_INSPEC+=";M:MFT/RAWDATA" +has_detector TPC && PROXY_INSPEC+=";T:TPC/RAWDATA" +has_detector TOF && PROXY_INSPEC+=";X:TOF/CRAWDATA" + +TPC_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION;T:TPC/RAWDATA" +TPC_OUTPUT="clusters,tracks,disable-writer" +if [ $SAVECTF == 1 ]; then + TPC_OUTPUT+=",encoded-clusters" +fi + +# directory for external files +#FILEWORKDIR="/home/epn/odc/files" + +# Clusterization dictionaries path +ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" +MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" + +MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" + +# CTF compression dictionary +CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" +# min file size for CTF (accumulate CTFs until it is reached) +CTF_MINSIZE="2000000" +# output directory for CTF files +#CTF_DIR="/tmp/eosbuffer" + +# key/values config string +CONFKEYVAL="NameConf.mDirGRP=${FILEWORKDIR};NameConf.mDirGeom=${FILEWORKDIR}" + +# number of decoding pipelines and threads per pipeline +NITSDECPIPELINES=6 +NITSDECTHREADS=2 +NMFTDECPIPELINES=6 +NMFTDECTHREADS=2 + +# number of reconstruction pipelines and threads per pipeline +NITSRECPIPELINES=2 +NMFTRECPIPELINES=2 +NTOFRECPIPELINES=1 + +# number of compression pipelines +NITSENCODERPIPELINES=1 +NMFTENCODERPIPELINES=1 +NTOFENCODERPIPELINES=1 + +# uncomment this to disable intermediate reconstruction output +#DISABLE_RECO_OUTPUT=" --disable-root-output " + +HOST=localhost + +WORKFLOW="o2-dpl-raw-proxy -b ${ARGS_ALL} --dataspec \"${PROXY_INSPEC}\" --channel-config \"${PROXY_CHANNEL}\" | " +has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:${NITSDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${ITSCLUSDICT}\" | " +has_detector ITS && WORKFLOW+="o2-its-reco-workflow -b ${ARGS_ALL} ${DISABLE_RECO_OUTPUT} --trackerCA --tracking-mode sync --disable-mc --clusters-from-upstream --pipeline its-tracker:${NITSRECPIPELINES} --its-dictionary-path \"${ITSCLUSDICT}\" --configKeyValues \"${CONFKEYVAL}\" | " +# +has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:${NMFTDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${MFTCLUSDICT}\" --runmft --noise-file \"${MFT_NOISE}\" | " +# +has_detector TPC && WORKFLOW+="o2-tpc-raw-to-digits-workflow -b ${ARGS_ALL} --input-spec \"${TPC_INSPEC}\" --configKeyValues \"TPCDigitDump.LastTimeBin=1000\" --pipeline tpc-raw-to-digits-0:6 | " +has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow -b ${ARGS_ALL} --input-type digitizer --output-type $TPC_OUTPUT --disable-mc --pipeline tpc-tracker:4 --environment ROCR_VISIBLE_DEVICES={timeslice0} --configKeyValues \"align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;GPU_proc.deviceNum=0;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;GPU_proc.memoryScalingFactor=3;${CONFKEYVAL}\" | " +# +has_detector TOF && WORKFLOW+="o2-tof-reco-workflow -b ${ARGS_ALL} --input-type raw --output-type clusters --pipeline TOFClusterer:${NTOFRECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" | " + +if [ $SAVECTF == 1 ]; then + has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline its-entropy-encoder:${NITSENCODERPIPELINES} | " + has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline mft-entropy-encoder:${NMFTENCODERPIPELINES} --runmft | " + has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline tof-entropy-encoder:${NTOFENCODERPIPELINES} | " + WORKFLOW+="o2-ctf-writer-workflow -b ${ARGS_ALL} --configKeyValues \"${CONFKEYVAL}\" --no-grp --onlyDet $WORKFLOW_DETECTORS --ctf-dict \"${CTF_DICT}\" --output-dir \"$CTF_DIR\" --min-file-size ${CTF_MINSIZE} | " +fi + +if [ -n "$QCJSON" ]; then + WORKFLOW+="o2-qc -b ${ARGS_ALL} --config json://$QCJSON --local --host $HOST | " +fi + +WORKFLOW+=" o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi + + + diff --git a/testing/private/shahoian/run_ext.sh b/testing/private/shahoian/run_ext.sh new file mode 100755 index 0000000..9a7f219 --- /dev/null +++ b/testing/private/shahoian/run_ext.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository + +export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows.desc # Topology description library file to load +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=256 # Number of HBF per TF + +export GEN_TOPO_IGNORE_ERROR=1 + +##--------------- +jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json +jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json /home/epn/odc/files/qc-mft-cluster.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json +jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/odc/files/qc-mft-cluster.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json +jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json /home/epn/odc/files/qc-mft-cluster.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json +jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json + +for wf in "$@" +do + export GEN_TOPO_WORKFLOW_NAME=$wf + /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/test/${GEN_TOPO_WORKFLOW_NAME}.xml +done diff --git a/testing/private/shahoian/workflows.desc b/testing/private/shahoian/workflows.desc index ad579fe..292e1e5 100644 --- a/testing/private/shahoian/workflows.desc +++ b/testing/private/shahoian/workflows.desc @@ -1,23 +1,57 @@ -tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -tpc-ctf2eos-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-ctf-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-ctf-qcITS-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-ctf-qcMFT-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" - -its-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" - -its-locrec-ctf-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-locrec-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" - -tpc-ctf-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -tpc-ctf2eos-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-ctf-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-ctf-qcITS-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-ctf-qcMFT-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh" +tpc-ctf-qcTPC-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-ctf2eos-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qcITS-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qcMFT-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-locrec-ctf-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-locrec-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +tpc-ctf-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-ctf2eos-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qcITS-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qcMFT-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +# +tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-tpc-ctf-qcITS_TPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoDigi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcITS_TPC-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpc.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcITS_TPCnoClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +# + +tpc-ctf-qcTPCMNAll-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcTPCMNAll-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCMNAll-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +ist-mft-tpc-ctf-qcTPCMNAll-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-tpc-ctf-qcTPCMNAll-itsEPNv2-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCMNAll-mftClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPCMNAll-itsEPNv2-mftClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-tofglobalrun-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-tofglobalrun-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + From 661b4ba390ccc8f4dc8ea5a90f1216ebd3d5d396 Mon Sep 17 00:00:00 2001 From: noferini Date: Wed, 15 Sep 2021 13:10:37 +0200 Subject: [PATCH 047/236] tune one parameters for TOF calibration --- testing/detectors/TOF/tof-epn-cosmics.sh | 4 ++-- testing/detectors/TOF/tof-epn-cosmicsNoQC.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/testing/detectors/TOF/tof-epn-cosmics.sh b/testing/detectors/TOF/tof-epn-cosmics.sh index 84f33fc..d39a021 100755 --- a/testing/detectors/TOF/tof-epn-cosmics.sh +++ b/testing/detectors/TOF/tof-epn-cosmics.sh @@ -24,9 +24,9 @@ o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ | o2-tof-reco-workflow --input-type raw --output-type clusters,ctf \ ${ARGS_ALL} ${CTF_DICT} --configKeyValues "$ARGS_ALL_CONFIG;" \ ---disable-root-output --calib-cluster --cluster-time-window 5000 --cosmics \ +--disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics \ --pipeline "tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS},tof-entropy-encoder:${NTHREADS}" \ | o2-ctf-writer-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet TOF --output-dir $CTFOUT \ | o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn \ | o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file \ No newline at end of file +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh b/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh index 2ab872d..0170429 100644 --- a/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh +++ b/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh @@ -24,7 +24,7 @@ o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ | o2-tof-reco-workflow --input-type raw --output-type clusters,ctf \ ${ARGS_ALL} ${CTF_DICT} --configKeyValues "$ARGS_ALL_CONFIG;" \ ---disable-root-output --calib-cluster --cluster-time-window 5000 --cosmics \ +--disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics \ --pipeline "tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS},tof-entropy-encoder:${NTHREADS}" \ | o2-ctf-writer-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet TOF --output-dir $CTFOUT \ | o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ From 4b22e336f2aba7d94a0ed00286bac8621d9caabc Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 15 Sep 2021 17:40:20 +0200 Subject: [PATCH 048/236] production workflow should not be called full system test, just link to there --- .../dpl-workflow_local.sh => dpl-workflow.sh} | 0 production/production.desc | 4 ++-- production/setenv.sh | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) rename production/{full-system-test/dpl-workflow_local.sh => dpl-workflow.sh} (100%) create mode 120000 production/setenv.sh diff --git a/production/full-system-test/dpl-workflow_local.sh b/production/dpl-workflow.sh similarity index 100% rename from production/full-system-test/dpl-workflow_local.sh rename to production/dpl-workflow.sh diff --git a/production/production.desc b/production/production.desc index 17d663e..4011a3a 100644 --- a/production/production.desc +++ b/production/production.desc @@ -1,2 +1,2 @@ -synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" -synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/full-system-test/dpl-workflow_local.sh" +synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/dpl-workflow.sh" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/dpl-workflow.sh" +synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/dpl-workflow.sh" diff --git a/production/setenv.sh b/production/setenv.sh new file mode 120000 index 0000000..a3f9dc9 --- /dev/null +++ b/production/setenv.sh @@ -0,0 +1 @@ +full-system-test/setenv.sh \ No newline at end of file From 18f438bb7800c167061d4e45e969cfc8da68ec46 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 15 Sep 2021 19:13:22 +0200 Subject: [PATCH 049/236] Adopt some options from Ruben's script + cosmetics --- production/dpl-workflow.sh | 74 ++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index ba49b68..d76f9be 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -1,26 +1,31 @@ #!/bin/bash -# In order to use o2sim_grp.root, o2sim_geometry.root or matbud.root from arbitrary directory one can provide to the workflow -# --configKeyValues "NameConf.mDirGRP=;NameConf.mDirGeom=;NameConf.mDirMatLUT=;" -# All workflows currently running in the FST parce the configKeyValues option, so the NameConf.mDirXXX keys can be added via global env.var. - -# Get this script's directory : use zsh first (e.g. on Mac) and fallback -# on `readlink -f` if zsh is not there +# --------------------------------------------------------------------------------------------------------------------- +# Get this script's directory and load common settings (use zsh first (e.g. on Mac) and fallback on `readlink -f` if zsh is not there) command -v zsh > /dev/null 2>&1 && MYDIR=$(dirname $(zsh -c 'echo ${0:A}' "$0")) test -z ${MYDIR+x} && MYDIR="$(dirname $(readlink -f $0))" - source $MYDIR/setenv.sh +# --------------------------------------------------------------------------------------------------------------------- +#Some additional settings used in this workflow if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi +if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi workflow_has_parameter CTF && export SAVECTF=1 workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } +ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" +MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" +MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" +CTF_MINSIZE="2000000" + if [ "0$O2_ROOT" == "0" ]; then eval "`alienv shell-helper`" alienv --no-refresh load O2/latest fi +# --------------------------------------------------------------------------------------------------------------------- # Set general arguments ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" if [ $EPNMODE == 1 ]; then @@ -47,9 +52,8 @@ if [ $GPUTYPE != "CPU" ] || [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then fi ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +# --------------------------------------------------------------------------------------------------------------------- # Set some individual workflow arguments depending on configuration -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi -if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi GPU_INPUT=zsraw GPU_OUTPUT=tracks,clusters GPU_CONFIG= @@ -62,6 +66,8 @@ TRD_CONFIG= TRD_CONFIG_KEY= TRD_TRANSFORMER_CONFIG= EVE_CONFIG= +MFTDEC_CONFIG= + if [ $SYNCMODE == 1 ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" @@ -71,6 +77,7 @@ if [ $SYNCMODE == 1 ]; then else TRD_CONFIG+=" --track-sources TPC,ITS-TPC" fi + if [ $CTFINPUT == 1 ]; then ITS_CONFIG+=" --tracking-mode async" else @@ -78,8 +85,10 @@ else TOF_OUTPUT+=",ctf" GPU_OUTPUT+=",compressed-clusters-ctf" fi + if [ $EPNMODE == 1 ]; then EVE_CONFIG+=" --eve-dds-collection-index 0" + MFTDEC_CONFIG+=" --noise-file \"${MFT_NOISE}\"" fi if [ $GPUTYPE == "HIP" ]; then @@ -106,10 +115,13 @@ if [ $GPUTYPE != "CPU" ]; then HOSTMEMSIZE=$(( 1 << 30 )) fi fi + if [ $HOSTMEMSIZE != "0" ]; then GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" fi +# --------------------------------------------------------------------------------------------------------------------- +# Process multiplicities N_TPCTRK=1 N_TPCENT=1 N_TPCITS=1 @@ -131,7 +143,7 @@ if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then N_TPCENTDEC=$(expr 2 \* $N_NUMAFACTOR) N_MFTTRK=$(expr 3 \* $N_NUMAFACTOR) N_ITSTRK=$(expr 3 \* $N_NUMAFACTOR) - N_TPCITS=$(expr 2 \* $N_NUMAFACTOR) + N_TPCITS=$(expr 2 \* $N_NUMAFACTOR)CTF_DICT_DIR N_MCHTRK=$(expr 1 \* $N_NUMAFACTOR) N_TOFMATCH=$(expr 9 \* $N_NUMAFACTOR) N_TPCTRK=$(expr 6 \* $N_NUMAFACTOR) @@ -159,6 +171,7 @@ elif [ $EPNPIPELINES != 0 ]; then fi fi +# --------------------------------------------------------------------------------------------------------------------- # Input workflow if [ $CTFINPUT == 1 ]; then GPU_INPUT=compressed-clusters-ctf @@ -171,16 +184,16 @@ else WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg | " fi -if [ $EPNMODE == 1 ]; then - GPU_INPUT=zsonthefly - WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline tpc-raw-to-digits-0:6 | " - WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:6 | " -fi - -#Decoder workflows +# --------------------------------------------------------------------------------------------------------------------- +# Raw decoder workflows if [ $CTFINPUT == 0 ]; then - has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/ITSdictionary.bin --pipeline its-stf-decoder:$N_ITSDEC | " - has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file $FILEWORKDIR/MFTdictionary.bin --runmft true | " + if has_detector TPC && [ $EPNMODE == 1 ]; then + GPU_INPUT=zsonthefly + WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline tpc-raw-to-digits-0:6 | " + WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:6 | " + fi + has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${ITSCLUSDICT}\" --pipeline its-stf-decoder:$N_ITSDEC | " + has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" ${MFTDEC_CONFIG} --runmft true | " has_detector FT0 && [ $EPNMODE == 0 ] && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " has_detector FV0 && [ $EPNMODE == 0 ] && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " has_detector MID && [ $EPNMODE == 0 ] && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " @@ -192,7 +205,8 @@ if [ $CTFINPUT == 0 ]; then has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " fi -# Common workflows +# --------------------------------------------------------------------------------------------------------------------- +# Common reconstruction workflows has_detector ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " has_detectors ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " @@ -201,6 +215,7 @@ has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues has_detector TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " has_detectors TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " +# --------------------------------------------------------------------------------------------------------------------- # Workflows disabled in sync mode if [ $SYNCMODE == 0 ]; then has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " @@ -213,8 +228,10 @@ if [ $SYNCMODE == 0 ]; then has_detector ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " fi +# --------------------------------------------------------------------------------------------------------------------- # Workflows disabled in async mode if [ $CTFINPUT == 0 ]; then + # Reconstruction workflows if [ $SYNCMODE == 1 ]; then # Otherwise already present in async setup has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" | " fi @@ -222,6 +239,7 @@ if [ $CTFINPUT == 0 ]; then has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC | " has_detector EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " + # Entropy encoder workflows has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true | " has_detector FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " @@ -236,9 +254,10 @@ if [ $CTFINPUT == 0 ]; then has_detector TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " - has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input | " + # Calibration workflows + has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input | " - # Output workflow + # CTF / dictionary writer workflow if [ $SAVECTF == 1 ]; then mkdir -p $CTF_DIR fi @@ -250,18 +269,25 @@ if [ $CTFINPUT == 0 ]; then if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi - CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir $CTF_DIR --ctf-dict-dir $CTF_DICT_DIR --output-type $CTF_OUTPUT_TYPE --onlyDet $WORKFLOW_DETECTORS" + CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --onlyDet $WORKFLOW_DETECTORS" if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $NTIMEFRAMES"; fi WORKFLOW+="$CMD_CTF | " fi +# --------------------------------------------------------------------------------------------------------------------- +# Event display workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --display-tracks TPC --display-clusters TPC $EVE_CONFIG $DISABLE_MC | " +# --------------------------------------------------------------------------------------------------------------------- +# Quality Control workflow_has_parameter QC && source $MYDIR/qc-workflow.sh +# --------------------------------------------------------------------------------------------------------------------- # DPL run binary WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" +# --------------------------------------------------------------------------------------------------------------------- +# Run / create / print workflow if [ $WORKFLOWMODE == "print" ]; then echo Workflow command: echo $WORKFLOW | sed "s/| */|\n/g" @@ -270,3 +296,5 @@ else WORKFLOW+=" --$WORKFLOWMODE" eval $WORKFLOW fi + +# --------------------------------------------------------------------------------------------------------------------- From 4e9f7508bdf723f52533b37217aa7b2044c9f809 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 15 Sep 2021 19:14:37 +0200 Subject: [PATCH 050/236] FIT / MID will not yet run their decoders on the FLP since not yet tested --- production/dpl-workflow.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index d76f9be..d9cbffa 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -194,12 +194,12 @@ if [ $CTFINPUT == 0 ]; then fi has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${ITSCLUSDICT}\" --pipeline its-stf-decoder:$N_ITSDEC | " has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" ${MFTDEC_CONFIG} --runmft true | " - has_detector FT0 && [ $EPNMODE == 0 ] && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - has_detector FV0 && [ $EPNMODE == 0 ] && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - has_detector MID && [ $EPNMODE == 0 ] && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " + has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector TOF && [ $EPNMODE == 0 ] && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector FDD && [ $EPNMODE == 0 ] && WORKFLOW+="o2-fdd-flp-dpl-workflow --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $ARGS_ALL | " + has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $ARGS_ALL | " has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL | " has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " From 47326081dc739c84b2b249c4d47fc253655e7363 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 15 Sep 2021 19:24:01 +0200 Subject: [PATCH 051/236] Create raw proxy spec on the fly --- production/dpl-workflow.sh | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index d9cbffa..898c402 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -179,7 +179,20 @@ if [ $CTFINPUT == 1 ]; then CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root | head -n1` WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $NTIMEFRAMES --ctf-input ${CTFName} --ctf-dict ${CTF_DICT_DIR}/ctf_dictionary.root --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " elif [ $EXTINPUT == 1 ]; then - WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"FLP:FLP/DISTSUBTIMEFRAME/0;B:TPC/RAWDATA;C:ITS/RAWDATA;D:TOF/RAWDATA;D:MFT/RAWDATA;E:FT0/RAWDATA;F:MID/RAWDATA;G:EMC/RAWDATA;H:PHS/RAWDATA;I:CPV/RAWDATA;J:ZDC/RAWDATA;K:HMP/RAWDATA;L:FDD/RAWDATA;M:TRD/RAWDATA;N:FV0/RAWDATA;O:MCH/RAWDATA\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " + PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0" + PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + PROXY_IN_N=0 + for i in `echo "$WORKFLOW_DETECTORS" | sed "s/,/ /g"`; do + if [ $EPNMODE == 1 ] && [ $i == "TOF" ]; then + PROXY_INTYPE=CRAWDATA + else + PROXY_INTYPE=RAWDATA + fi + PROXY_INNAME="RAWIN$PROXY_IN_N" + let PROXY_IN_N=$PROXY_IN_N+1 + PROXY_INSPEC+=";$PROXY_INNAME:$i/$PROXY_INTYPE" + done + WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"$PROXY_INSPEC\" --channel-config \"$PROXY_CHANNEL\" | " else WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg | " fi From 887bc0ab8a3e586d75fc2999ec0626c73ecbc493 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 15 Sep 2021 22:31:51 +0200 Subject: [PATCH 052/236] ITS and TOF entropy encoding used from extra binary instead of part of workflow --- production/dpl-workflow.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 898c402..a0f260e 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -59,7 +59,6 @@ GPU_OUTPUT=tracks,clusters GPU_CONFIG= GPU_CONFIG_KEY= TOF_INPUT=raw -TOF_OUTPUT=clusters ITS_CONFIG= ITS_CONFIG_KEY= TRD_CONFIG= @@ -81,8 +80,7 @@ fi if [ $CTFINPUT == 1 ]; then ITS_CONFIG+=" --tracking-mode async" else - ITS_CONFIG+=" --entropy-encoding" - TOF_OUTPUT+=",ctf" + ITS_CONFIG+=" --tracking-mode sync" GPU_OUTPUT+=",compressed-clusters-ctf" fi @@ -224,7 +222,7 @@ has_detector ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISAB has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " has_detectors ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " has_detector FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " -has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC | " +has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC | " has_detector TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " has_detectors TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " @@ -264,6 +262,8 @@ if [ $CTFINPUT == 0 ]; then has_detector ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " From 7ab5e6570a13879bbff10228cc38bf26f83044a2 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 15 Sep 2021 23:51:52 +0200 Subject: [PATCH 053/236] Add CPU and Memory to DPL metrics --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index a0f260e..2e94659 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -30,7 +30,7 @@ fi ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" if [ $EPNMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" - #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" + #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" ARGS_ALL+=" --monitoring-backend no-op://" else ARGS_ALL+=" --monitoring-backend no-op://" From c5252d7e6bae497c8322987168293bc5de311d5a Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 16 Sep 2021 00:16:13 +0200 Subject: [PATCH 054/236] Add multiplicities to all processes, scale some with number of nodes in the partition, add global scaling factors --- README.md | 7 +- common/setenv.sh | 7 +- production/dpl-workflow.sh | 138 +++++++++++++++++++++++-------------- tools/parse | 12 +++- 4 files changed, 105 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 85890f9..50aad07 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml WORKFLOW_DETECTORS - `$DDWORKFLOW`: (*alternative*): Explicit path to the XML file with the partial workflow for *DataDistribution*. - `$GEN_TOPO_IGNORE_ERROR`: Ignore ERROR messages during workflow creation. - When run on the EPN farm (indicated by the `$EPNMODE=1` variable), the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. +- The parser exports the env variable `$RECO_NUM_NODES_WORKFLOW` that contains on how many nodes the workflow will be running when running the workflow script. This can be used to tune the process multiplicities. # Creating a full topology DDS XML file manually: - Check out the `O2DataProcessing` repository, adjust the workflows and topology description to your need. @@ -183,7 +184,7 @@ export RECO_NUM_NODES_OVERRIDE=0 # Override export NHBPERTF=256 # Number of HBF per TF /home/epn/pdp/gen_topo.sh > $HOME/gen_topo_output.xml -[drohr@epn245 test]$ ./run.sh +[drohr@epn245 test]$ ./run.sh Loading ODC/0.36-1 Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-3 fmt/7.1.0-10 FairLogger/v1.9.1-7 zlib/v1.2.8-8 OpenSSL/v1.0.2o-9 libpng/v1.6.34-9 sqlite/v3.15.0-2 libffi/v3.2.1-2 FreeType/v2.10.1-8 Python/v3.6.10-12 Python-modules/1.0-16 boost/v1.75.0-13 ZeroMQ/v4.3.3-6 ofi/v1.7.1-8 asio/v1.19.1-2 asiofi/v0.5.1-2 DDS/3.5.16-5 FairMQ/v1.4.40-4 protobuf/v3.14.0-9 c-ares/v1.17.1-5 re2/2019-09-01-11 grpc/v1.34.0-alice2-1 @@ -210,7 +211,7 @@ Done For reference, here is the creation of the XML for the full synchronous processing workflow: ``` -[drohr@epn245 test]$ cat run.sh +[drohr@epn245 test]$ cat run.sh #!/bin/bash export GEN_TOPO_PARTITION=test # ECS Partition @@ -234,7 +235,7 @@ export RECO_NUM_NODES_OVERRIDE=0 # Override export NHBPERTF=256 # Number of HBF per TF /home/epn/pdp/gen_topo.sh > $HOME/gen_topo_output.xml -[drohr@epn245 test]$ ./run.sh +[drohr@epn245 test]$ ./run.sh Loading ODC/0.36-1 Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-3 fmt/7.1.0-10 FairLogger/v1.9.1-7 zlib/v1.2.8-8 OpenSSL/v1.0.2o-9 libpng/v1.6.34-9 sqlite/v3.15.0-2 libffi/v3.2.1-2 FreeType/v2.10.1-8 Python/v3.6.10-12 Python-modules/1.0-16 boost/v1.75.0-13 ZeroMQ/v4.3.3-6 ofi/v1.7.1-8 asio/v1.19.1-2 asiofi/v0.5.1-2 DDS/3.5.16-5 FairMQ/v1.4.40-4 protobuf/v3.14.0-9 c-ares/v1.17.1-5 re2/2019-09-01-11 grpc/v1.34.0-alice2-1 diff --git a/common/setenv.sh b/common/setenv.sh index 302f877..20f2a6c 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -37,7 +37,12 @@ if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; the if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ "0$WORKFLOW_DETECTORS_CALIB" == "0ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi -if [ -z "$INFOLOGGER_SEVERITY" ]; then export INFOLOGGER_SEVERITY=$SEVERITY; fi +# Some more options for running on the EPN +if [ -z "$INFOLOGGER_SEVERITY" ]; then export INFOLOGGER_SEVERITY="warning"; fi +if [ -z "$MULTIPLICITY_FACTOR_RAWDECODERS" ]; then export MULTIPLICITY_FACTOR_RAWDECODERS=1; fi +if [ -z "$MULTIPLICITY_FACTOR_CTFENCODERS" ]; then export MULTIPLICITY_FACTOR_CTFENCODERS=1; fi +if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then export MULTIPLICITY_FACTOR_REST=1; fi + SEVERITY_TPC="info" # overrides severity for the tpc workflow DISABLE_MC="--disable-mc" diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 2e94659..42ff630 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -8,9 +8,10 @@ source $MYDIR/setenv.sh # --------------------------------------------------------------------------------------------------------------------- #Some additional settings used in this workflow -if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi -if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi +if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries +if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers workflow_has_parameter CTF && export SAVECTF=1 workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } @@ -19,6 +20,9 @@ ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" CTF_MINSIZE="2000000" +NITSDECTHREADS=2 +NMFTDECTHREADS=2 + if [ "0$O2_ROOT" == "0" ]; then eval "`alienv shell-helper`" @@ -123,7 +127,9 @@ fi N_TPCTRK=1 N_TPCENT=1 N_TPCITS=1 -N_ITSDEC=1 +N_ITSRAWDEC=1 +N_MFTRAWDEC=1 +N_TPCRAWDEC=$NGPUS N_EMC=1 N_TRDENT=1 N_TRDTRK=1 @@ -132,19 +138,23 @@ N_MFTTRK=1 N_ITSTRK=1 N_MCHTRK=1 N_TOFMATCH=1 +N_F_REST=$MULTIPLICITY_FACTOR_REST +N_F_RAW=$MULTIPLICITY_FACTOR_RAWDECODERS +N_F_CTF=$MULTIPLICITY_FACTOR_CTFENCODERS if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then - if [ $SYNCMODE == "1" ]; then echo "Must not use OPTIMIZED_PARALLEL_ASYNC with GPU or SYNCMODE"; exit 1; fi + # Tuned multiplicities for async Pb-Pb processing + if [ $SYNCMODE == "1" ]; then echo "Must not use OPTIMIZED_PARALLEL_ASYNC with GPU or SYNCMODE" 1>&2; exit 1; fi if [ $NUMAGPUIDS == 1 ]; then N_NUMAFACTOR=1; else N_NUMAFACTOR=2; fi GPU_CONFIG_KEY+="GPU_proc.ompThreads=6;" TRD_CONFIG_KEY+="GPU_proc.ompThreads=2;" if [ $GPUTYPE == "CPU" ]; then - N_TPCENTDEC=$(expr 2 \* $N_NUMAFACTOR) - N_MFTTRK=$(expr 3 \* $N_NUMAFACTOR) - N_ITSTRK=$(expr 3 \* $N_NUMAFACTOR) - N_TPCITS=$(expr 2 \* $N_NUMAFACTOR)CTF_DICT_DIR - N_MCHTRK=$(expr 1 \* $N_NUMAFACTOR) - N_TOFMATCH=$(expr 9 \* $N_NUMAFACTOR) - N_TPCTRK=$(expr 6 \* $N_NUMAFACTOR) + N_TPCENTDEC=$((2 * $N_NUMAFACTOR)) + N_MFTTRK=$((3 * $N_NUMAFACTOR)) + N_ITSTRK=$((3 * $N_NUMAFACTOR)) + N_TPCITS=$((2 * $N_NUMAFACTOR)) + N_MCHTRK=$((1 * $N_NUMAFACTOR)) + N_TOFMATCH=$((9 * $N_NUMAFACTOR)) + N_TPCTRK=$((6 * $N_NUMAFACTOR)) else N_TPCENTDEC=$((3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) N_MFTTRK=$((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) @@ -155,12 +165,13 @@ if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then N_TPCTRK=$NGPUS fi elif [ $EPNPIPELINES != 0 ]; then - N_TPCENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_TPCITS=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_ITSDEC=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_EMC=$(($(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 7 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_TRDENT=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) - N_TRDTRK=$(($(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) > 0 ? $(expr 3 \* $EPNPIPELINES \* $NGPUS / 4) : 1)) + # Tuned multiplicities for sync Pb-Pb processing + N_TPCENT=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) + N_TPCITS=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) + N_ITSRAWDEC=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) + N_EMC=$((7 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 7 * $EPNPIPELINES * $NGPUS / 4 : 1)) + N_TRDENT=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) + N_TRDTRK=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) if [ $GPUTYPE == "CPU" ]; then N_TPCTRK=8 GPU_CONFIG_KEY+="GPU_proc.ompThreads=4;" @@ -168,6 +179,27 @@ elif [ $EPNPIPELINES != 0 ]; then N_TPCTRK=$NGPUS fi fi +# Scale some multiplicities with the number of nodes +RECO_NUM_NODES_WORKFLOW_CMP=$(($RECO_NUM_NODES_WORKFLOW > 15 ? $RECO_NUM_NODES_WORKFLOW : 15)) # Limit the scaling factor +N_ITSRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSRAWDEC ? 6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSRAWDEC)) +N_MFTRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTRAWDEC ? 6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTRAWDEC)) +N_ITSTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSTRK)) +N_MFTTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTTRK)) +# Apply external multiplicity factors +N_TPCTRK=$((N_TPCTRK * $N_F_REST)) +N_TPCITS=$((N_TPCITS * $N_F_REST)) +N_EMC=$((N_EMC * $N_F_REST)) +N_TRDTRK=$((N_TRDTRK * $N_F_REST)) +N_TPCENTDEC=$((N_TPCENTDEC * $N_F_REST)) +N_MFTTRK=$((N_MFTTRK * $N_F_REST)) +N_ITSTRK=$((N_ITSTRK * $N_F_REST)) +N_MCHTRK=$((N_MCHTRK * $N_F_REST)) +N_TOFMATCH=$((N_TOFMATCH * $N_F_REST)) +N_TPCENT=$((N_TPCENT * $N_F_CTF)) +N_TRDENT=$((N_TRDENT * $N_F_CTF)) +N_ITSRAWDEC=$((N_ITSRAWDEC * $N_F_RAW)) +N_MFTRAWDEC=$((N_MFTRAWDEC * $N_F_RAW)) +N_TPCRAWDEC=$((N_TPCRAWDEC * $N_F_RAW)) # --------------------------------------------------------------------------------------------------------------------- # Input workflow @@ -200,20 +232,20 @@ fi if [ $CTFINPUT == 0 ]; then if has_detector TPC && [ $EPNMODE == 1 ]; then GPU_INPUT=zsonthefly - WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline tpc-raw-to-digits-0:6 | " - WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:6 | " + WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline tpc-raw-to-digits-0:$N_TPCRAWDEC | " + WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:$N_TPCRAWDEC | " fi - has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${ITSCLUSDICT}\" --pipeline its-stf-decoder:$N_ITSDEC | " - has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" ${MFTDEC_CONFIG} --runmft true | " - has_detector FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${ITSCLUSDICT}\" --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:$N_ITSRAWDEC | " + has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" --nthreads ${NMFTDECTHREADS} --pipeline its-stf-decoder:$N_MFTRAWDEC ${MFTDEC_CONFIG} --runmft true | " + has_detector FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline ft0-datareader-dpl:$N_F_RAW | " + has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fv0-datareader-dpl:$N_F_RAW | " + has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline MIDRawDecoder:$N_F_RAW,MIDDecodedDataAggregator:$N_F_RAW | " + has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline DataDecoder:$N_F_RAW | " has_detector TOF && [ $EPNMODE == 0 ] && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $ARGS_ALL | " - has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL | " - has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output | " - has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fdd-datareader-dpl:$N_F_RAW | " + has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL --pipeline trd-datareader:$N_F_RAW | " + has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline zdc-datareader-dpl:$N_F_RAW | " + has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline HMP-RawStreamDecoder:$N_F_RAW | " fi # --------------------------------------------------------------------------------------------------------------------- @@ -221,8 +253,8 @@ fi has_detector ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " has_detectors ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " -has_detector FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " -has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC | " +has_detector FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline ft0-reconstructor:$N_F_REST | " +has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC --pipeline tof-compressed-decoder:$N_F_RAW,TOFClusterer:$N_F_REST | " has_detector TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " has_detectors TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " @@ -230,11 +262,11 @@ has_detectors TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --confi # Workflows disabled in sync mode if [ $SYNCMODE == 0 ]; then has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " - has_detector MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC | " - has_detector MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK | " + has_detector MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline MIDClusterizer:$N_F_REST,MIDTracker:$N_F_REST | " + has_detector MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK,mch-cluster-finder:$N_F_REST,mch-cluster-transformer:$N_F_REST | " has_detector MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " - has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 | " - has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output | " + has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " + has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " has_detector FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output | " has_detector ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " fi @@ -244,31 +276,31 @@ fi if [ $CTFINPUT == 0 ]; then # Reconstruction workflows if [ $SYNCMODE == 1 ]; then # Otherwise already present in async setup - has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" | " + has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " fi - has_detector PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output $DISABLE_MC | " - has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC | " + has_detector PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output --pipeline PHOSRawToCellConverterSpec:$N_F_REST $DISABLE_MC | " + has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output --pipeline CPVRawToDigitConverterSpec:$N_F_REST,CPVClusterizerSpec:$N_F_REST $DISABLE_MC | " has_detector EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " # Entropy encoder workflows - has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true | " - has_detector FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF| " + has_detector FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline ft0-entropy-encoder:$N_F_CTF| " + has_detector FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fv0-entropy-encoder:$N_F_CTF| " + has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mid-entropy-encoder:$N_F_CTF| " + has_detector MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-entropy-encoder:$N_F_CTF| " + has_detector PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline phos-entropy-encoder:$N_F_CTF| " + has_detector CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline cpv-entropy-encoder:$N_F_CTF| " + has_detector EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline emcal-entropy-encoder:$N_F_CTF| " + has_detector ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline zdc-entropy-encoder:$N_F_CTF| " + has_detector FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fdd-entropy-encoder:$N_F_CTF| " + has_detector HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline hmpid-entropy-encoder:$N_F_CTF| " + has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline tof-entropy-encoder:$N_F_CTF| " + has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF| " has_detector TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " # Calibration workflows - has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input | " + has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " # CTF / dictionary writer workflow if [ $SAVECTF == 1 ]; then diff --git a/tools/parse b/tools/parse index de96a4a..2a3d63d 100755 --- a/tools/parse +++ b/tools/parse @@ -33,6 +33,12 @@ if 'GLOBALDPLOPT' in os.environ: else: os.environ['GLOBALDPLOPT'] = "-b" +if 'RECO_NUM_NODES_OVERRIDE' in os.environ and os.environ['RECO_NUM_NODES_OVERRIDE'] != "" and int(os.environ['RECO_NUM_NODES_OVERRIDE']) > 0: + reco_num_nodes_override = int(os.environ['RECO_NUM_NODES_OVERRIDE']) + os.environ['RECO_NUM_NODES_WORKFLOW'] = str(reco_num_nodes_override) +else: + reco_num_nodes_override = 0 + f = open(sys.argv[1], "r") for line in f: line = line.strip() @@ -93,13 +99,15 @@ for line in f: command_log_filter = "\"^\[INFO\"" command = wf[3] + " | grep -v " + command_log_filter + " > " + filename + " && [ `grep \"^\[\" " + filename + " | wc -l` == 0 ]" print("Running DPL command", command) + if reco_num_nodes_override == 0: + os.environ['RECO_NUM_NODES_WORKFLOW'] = wf[1] if os.system(command) != 0: print("Error running command", command) ftmp = open(filename, 'r') print(ftmp.read()) raise - if 'RECO_NUM_NODES_OVERRIDE' in os.environ and os.environ['RECO_NUM_NODES_OVERRIDE'] != "" and int(os.environ['RECO_NUM_NODES_OVERRIDE']) > 0: - reconodes = int(os.environ['RECO_NUM_NODES_OVERRIDE']) + if reco_num_nodes_override > 0: + reconodes = reco_num_nodes_override odccommand = "odc-epn-topo" if reconodes: odccommand += " --dd " + os.environ['DDWORKFLOW'] From e1c50968c08ca3be060b17851f009d43b97840a5 Mon Sep 17 00:00:00 2001 From: shahoian Date: Sat, 18 Sep 2021 13:38:07 +0200 Subject: [PATCH 055/236] updates --- .../shahoian/qc/qc-itsEPNv2-mftClus.json | 192 ++++++++++ .../shahoian/qc/qc-itsEPNv2-tofglobalrun.json | 251 +++++++++++++ ...pcMNAll-itsEPNv2-mftClus-tofglobalrun.json | 16 +- .../qc/qc-tpcMNAll-itsEPNv2-mftClus.json | 16 +- .../qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json | 16 +- .../shahoian/qc/qc-tpcMNAll-itsEPNv2.json | 16 +- .../qc/qc-tpcMNAll-mftClus-tofglobalrun.json | 339 ++++++++++++++++++ .../shahoian/qc/qc-tpcMNAll-mftClus.json | 16 +- .../shahoian/qc/qc-tpcMNAll-tofglobalrun.json | 286 +++++++++++++++ testing/private/shahoian/reco_ctf_qc-uni.sh | 29 +- testing/private/shahoian/run_ext.sh | 3 + testing/private/shahoian/workflows.desc | 50 ++- 12 files changed, 1171 insertions(+), 59 deletions(-) create mode 100644 testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json create mode 100644 testing/private/shahoian/qc/qc-itsEPNv2-tofglobalrun.json create mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json create mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json diff --git a/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json b/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json new file mode 100644 index 0000000..9495a89 --- /dev/null +++ b/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json @@ -0,0 +1,192 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-flp187:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + }, + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32640", + "localControl": "odc" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + }, + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": [ + "mMFTClusterSensorIndex" + ] + } + ], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "mft-clusters", + "active": "true", + "machines": [], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc-itsEPNv2-tofglobalrun.json b/testing/private/shahoian/qc/qc-itsEPNv2-tofglobalrun.json new file mode 100644 index 0000000..d9a9862 --- /dev/null +++ b/testing/private/shahoian/qc/qc-itsEPNv2-tofglobalrun.json @@ -0,0 +1,251 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-flp187:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32630", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32631" + }, + "TaskRaw": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskRaw", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "raw-local" + }, + "location": "local", + "localMachines": [ + "alio2-cr1-flp178-ib", + "alio2-cr1-flp179-ib" + ], + "remoteMachine": "localhost", + "remotePort": "30132", + "mergingMode": "delta" + }, + "TaskDigits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskDigits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "digi-local" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "47708", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + }, + "CheckDiagnostics": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckDiagnostics", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "RDHCounterCrate0" + ] + } + ] + }, + "CheckCompressedData": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckCompressedData", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "checkParameters": { + "DiagnosticThresholdPerSlot": "10" + }, + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "hDiagnostic" + ] + } + ] + }, + "CheckRawMultiplicity": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", + "moduleName": "QcTOF", + "policy": "OnAny", + "detectorName": "TOF", + "dataSource": [ + { + "type": "Task", + "name": "TaskDigits", + "MOs": [ + "TOFRawsMulti" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "digi-local", + "active": "true", + "machines": [ + "epn", + "localhost" + ], + "port": "30333", + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json index 6adc093..74070fa 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json @@ -3,7 +3,7 @@ "config": { "database": { "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", + "host": "qcdb.cern.ch:8083", "username": "not_applicable", "password": "not_applicable", "name": "not_applicable" @@ -16,20 +16,20 @@ "url": "infologger:///debug?qc" }, "consul": { - "url": "http://consul.cern.ch:8500" + "url": "http://consul-test.cern.ch:8500" }, "conditionDB": { "url": "ccdb-test.cern.ch:8080" } }, "tasks": { - "RawDigits_EPN": { + "RawDigits": { "active": "true", "className": "o2::quality_control_modules::tpc::RawDigits", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -49,13 +49,13 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "Clusters_EPN": { + "Clusters": { "active": "true", "className": "o2::quality_control_modules::tpc::Clusters", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -85,7 +85,7 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "PID_EPN": { + "PID": { "active": "true", "className": "o2::quality_control_modules::tpc::PID", "moduleName": "QcTPC", @@ -106,7 +106,7 @@ "remotePort": "32625", "mergingMode": "delta" }, - "Tracks_EPN": { + "Tracks": { "active": "true", "className": "o2::quality_control_modules::tpc::Tracks", "moduleName": "QcTPC", diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json index d0658f8..65300d4 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json @@ -3,7 +3,7 @@ "config": { "database": { "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", + "host": "qcdb.cern.ch:8083", "username": "not_applicable", "password": "not_applicable", "name": "not_applicable" @@ -16,20 +16,20 @@ "url": "infologger:///debug?qc" }, "consul": { - "url": "http://consul.cern.ch:8500" + "url": "http://consul-test.cern.ch:8500" }, "conditionDB": { "url": "ccdb-test.cern.ch:8080" } }, "tasks": { - "RawDigits_EPN": { + "RawDigits": { "active": "true", "className": "o2::quality_control_modules::tpc::RawDigits", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -49,13 +49,13 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "Clusters_EPN": { + "Clusters": { "active": "true", "className": "o2::quality_control_modules::tpc::Clusters", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -85,7 +85,7 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "PID_EPN": { + "PID": { "active": "true", "className": "o2::quality_control_modules::tpc::PID", "moduleName": "QcTPC", @@ -106,7 +106,7 @@ "remotePort": "32625", "mergingMode": "delta" }, - "Tracks_EPN": { + "Tracks": { "active": "true", "className": "o2::quality_control_modules::tpc::Tracks", "moduleName": "QcTPC", diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json index 403def5..fc4de32 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json @@ -3,7 +3,7 @@ "config": { "database": { "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", + "host": "qcdb.cern.ch:8083", "username": "not_applicable", "password": "not_applicable", "name": "not_applicable" @@ -16,20 +16,20 @@ "url": "infologger:///debug?qc" }, "consul": { - "url": "http://consul.cern.ch:8500" + "url": "http://consul-test.cern.ch:8500" }, "conditionDB": { "url": "ccdb-test.cern.ch:8080" } }, "tasks": { - "RawDigits_EPN": { + "RawDigits": { "active": "true", "className": "o2::quality_control_modules::tpc::RawDigits", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -49,13 +49,13 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "Clusters_EPN": { + "Clusters": { "active": "true", "className": "o2::quality_control_modules::tpc::Clusters", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -85,7 +85,7 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "PID_EPN": { + "PID": { "active": "true", "className": "o2::quality_control_modules::tpc::PID", "moduleName": "QcTPC", @@ -106,7 +106,7 @@ "remotePort": "32625", "mergingMode": "delta" }, - "Tracks_EPN": { + "Tracks": { "active": "true", "className": "o2::quality_control_modules::tpc::Tracks", "moduleName": "QcTPC", diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json index 9b96b8d..bcdcbbf 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json @@ -3,7 +3,7 @@ "config": { "database": { "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", + "host": "qcdb.cern.ch:8083", "username": "not_applicable", "password": "not_applicable", "name": "not_applicable" @@ -16,20 +16,20 @@ "url": "infologger:///debug?qc" }, "consul": { - "url": "http://consul.cern.ch:8500" + "url": "http://consul-test.cern.ch:8500" }, "conditionDB": { "url": "ccdb-test.cern.ch:8080" } }, "tasks": { - "RawDigits_EPN": { + "RawDigits": { "active": "true", "className": "o2::quality_control_modules::tpc::RawDigits", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -49,13 +49,13 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "Clusters_EPN": { + "Clusters": { "active": "true", "className": "o2::quality_control_modules::tpc::Clusters", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -85,7 +85,7 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "PID_EPN": { + "PID": { "active": "true", "className": "o2::quality_control_modules::tpc::PID", "moduleName": "QcTPC", @@ -106,7 +106,7 @@ "remotePort": "32625", "mergingMode": "delta" }, - "Tracks_EPN": { + "Tracks": { "active": "true", "className": "o2::quality_control_modules::tpc::Tracks", "moduleName": "QcTPC", diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json new file mode 100644 index 0000000..8a985a4 --- /dev/null +++ b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json @@ -0,0 +1,339 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "1", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": { + "NRawDigitsNBins": "100", + "NRawDigitsXMin": "0", + "NRawDigitsXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "TimeBinNBins": "600", + "TimeBinXMin": "0", + "TimeBinXMax": "600" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "Clusters": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "1", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", + "NClustersXMin": "0", + "NClustersXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "QtotNBins": "600", + "QtotXMin": "0", + "QtotXMax": "600", + "SigmaPadNBins": "200", + "SigmaPadXMin": "0", + "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", + "SigmaTimeXMin": "0", + "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", + "TimeBinXMin": "0", + "TimeBinXMax": "100000" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "taskParameters": { + "myOwnKey": "myOwnValue" + }, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32640", + "localControl": "odc" + }, + "TaskRaw": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskRaw", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "raw-local" + }, + "location": "local", + "localMachines": [ + "alio2-cr1-flp178-ib", + "alio2-cr1-flp179-ib" + ], + "remoteMachine": "localhost", + "remotePort": "30132", + "mergingMode": "delta" + }, + "TaskDigits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskDigits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "digi-local" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "47708", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": [ + "mMFTClusterSensorIndex" + ] + } + ], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + }, + "CheckDiagnostics": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckDiagnostics", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "RDHCounterCrate0" + ] + } + ] + }, + "CheckCompressedData": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckCompressedData", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "checkParameters": { + "DiagnosticThresholdPerSlot": "10" + }, + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "hDiagnostic" + ] + } + ] + }, + "CheckRawMultiplicity": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", + "moduleName": "QcTOF", + "policy": "OnAny", + "detectorName": "TOF", + "dataSource": [ + { + "type": "Task", + "name": "TaskDigits", + "MOs": [ + "TOFRawsMulti" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.005", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "mft-clusters", + "active": "true", + "machines": [], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + }, + { + "id": "digi-local", + "active": "true", + "machines": [ + "epn", + "localhost" + ], + "port": "30333", + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json index 5bcd8cd..d33ad90 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json @@ -3,7 +3,7 @@ "config": { "database": { "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", + "host": "qcdb.cern.ch:8083", "username": "not_applicable", "password": "not_applicable", "name": "not_applicable" @@ -16,20 +16,20 @@ "url": "infologger:///debug?qc" }, "consul": { - "url": "http://consul.cern.ch:8500" + "url": "http://consul-test.cern.ch:8500" }, "conditionDB": { "url": "ccdb-test.cern.ch:8080" } }, "tasks": { - "RawDigits_EPN": { + "RawDigits": { "active": "true", "className": "o2::quality_control_modules::tpc::RawDigits", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -49,13 +49,13 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "Clusters_EPN": { + "Clusters": { "active": "true", "className": "o2::quality_control_modules::tpc::Clusters", "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "30", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "dataSamplingPolicy", @@ -85,7 +85,7 @@ "location": "remote", "remoteMachine": "epn102-ib" }, - "PID_EPN": { + "PID": { "active": "true", "className": "o2::quality_control_modules::tpc::PID", "moduleName": "QcTPC", @@ -106,7 +106,7 @@ "remotePort": "32625", "mergingMode": "delta" }, - "Tracks_EPN": { + "Tracks": { "active": "true", "className": "o2::quality_control_modules::tpc::Tracks", "moduleName": "QcTPC", diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json new file mode 100644 index 0000000..313ede1 --- /dev/null +++ b/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json @@ -0,0 +1,286 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "1", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": { + "NRawDigitsNBins": "100", + "NRawDigitsXMin": "0", + "NRawDigitsXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "TimeBinNBins": "600", + "TimeBinXMin": "0", + "TimeBinXMax": "600" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "Clusters": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "1", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", + "NClustersXMin": "0", + "NClustersXMax": "100", + "QmaxNBins": "200", + "QmaxXMin": "0", + "QmaxXMax": "200", + "QtotNBins": "600", + "QtotXMin": "0", + "QtotXMax": "600", + "SigmaPadNBins": "200", + "SigmaPadXMin": "0", + "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", + "SigmaTimeXMin": "0", + "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", + "TimeBinXMin": "0", + "TimeBinXMax": "100000" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "30", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + }, + "TaskRaw": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskRaw", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "raw-local" + }, + "location": "local", + "localMachines": [ + "alio2-cr1-flp178-ib", + "alio2-cr1-flp179-ib" + ], + "remoteMachine": "localhost", + "remotePort": "30132", + "mergingMode": "delta" + }, + "TaskDigits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskDigits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "digi-local" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "47708", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "CheckDiagnostics": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckDiagnostics", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "RDHCounterCrate0" + ] + } + ] + }, + "CheckCompressedData": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckCompressedData", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "checkParameters": { + "DiagnosticThresholdPerSlot": "10" + }, + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "hDiagnostic" + ] + } + ] + }, + "CheckRawMultiplicity": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", + "moduleName": "QcTOF", + "policy": "OnAny", + "detectorName": "TOF", + "dataSource": [ + { + "type": "Task", + "name": "TaskDigits", + "MOs": [ + "TOFRawsMulti" + ] + } + ] + } + }, + "externalTasks": null, + "postprocessing": null + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.005", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "digi-local", + "active": "true", + "machines": [ + "epn", + "localhost" + ], + "port": "30333", + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/testing/private/shahoian/reco_ctf_qc-uni.sh b/testing/private/shahoian/reco_ctf_qc-uni.sh index 93c81d0..52d09cf 100755 --- a/testing/private/shahoian/reco_ctf_qc-uni.sh +++ b/testing/private/shahoian/reco_ctf_qc-uni.sh @@ -16,8 +16,8 @@ SEVERITY=INFO INFOLOGGER_SEVERITY=WARNING # global args -ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -#ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE " +#ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE " # raw input proxy channel PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1" @@ -29,11 +29,21 @@ has_detector ITS && PROXY_INSPEC+=";I:ITS/RAWDATA" has_detector MFT && PROXY_INSPEC+=";M:MFT/RAWDATA" has_detector TPC && PROXY_INSPEC+=";T:TPC/RAWDATA" has_detector TOF && PROXY_INSPEC+=";X:TOF/CRAWDATA" +has_detector MID && PROXY_INSPEC+=";A:MID/RAWDATA" + +# CTF compression dictionary +CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" +# min file size for CTF (accumulate CTFs until it is reached) +CTF_MINSIZE="2000000" +# output directory for CTF files +#CTF_DIR="/tmp/eosbuffer" TPC_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION;T:TPC/RAWDATA" TPC_OUTPUT="clusters,tracks,disable-writer" +TPC_EXTRAOPT="" if [ $SAVECTF == 1 ]; then TPC_OUTPUT+=",encoded-clusters" + TPC_EXTRAOPT+=" --ctf-dict $CTF_DICT " fi # directory for external files @@ -45,13 +55,6 @@ MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" -# CTF compression dictionary -CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" -# min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="2000000" -# output directory for CTF files -#CTF_DIR="/tmp/eosbuffer" - # key/values config string CONFKEYVAL="NameConf.mDirGRP=${FILEWORKDIR};NameConf.mDirGeom=${FILEWORKDIR}" @@ -61,6 +64,8 @@ NITSDECTHREADS=2 NMFTDECPIPELINES=6 NMFTDECTHREADS=2 +NMIDDECPIPELINES=1 + # number of reconstruction pipelines and threads per pipeline NITSRECPIPELINES=2 NMFTRECPIPELINES=2 @@ -70,6 +75,7 @@ NTOFRECPIPELINES=1 NITSENCODERPIPELINES=1 NMFTENCODERPIPELINES=1 NTOFENCODERPIPELINES=1 +NMIDENCODERPIPELINES=1 # uncomment this to disable intermediate reconstruction output #DISABLE_RECO_OUTPUT=" --disable-root-output " @@ -83,14 +89,17 @@ has_detector ITS && WORKFLOW+="o2-its-reco-workflow -b ${ARGS_ALL} ${DISABLE_REC has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:${NMFTDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${MFTCLUSDICT}\" --runmft --noise-file \"${MFT_NOISE}\" | " # has_detector TPC && WORKFLOW+="o2-tpc-raw-to-digits-workflow -b ${ARGS_ALL} --input-spec \"${TPC_INSPEC}\" --configKeyValues \"TPCDigitDump.LastTimeBin=1000\" --pipeline tpc-raw-to-digits-0:6 | " -has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow -b ${ARGS_ALL} --input-type digitizer --output-type $TPC_OUTPUT --disable-mc --pipeline tpc-tracker:4 --environment ROCR_VISIBLE_DEVICES={timeslice0} --configKeyValues \"align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;GPU_proc.deviceNum=0;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;GPU_proc.memoryScalingFactor=3;${CONFKEYVAL}\" | " +has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow -b ${ARGS_ALL} --input-type digitizer --output-type $TPC_OUTPUT \"${TPC_EXTRAOPT}\" --disable-mc --pipeline tpc-tracker:4 --environment ROCR_VISIBLE_DEVICES={timeslice0} --configKeyValues \"align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;GPU_proc.deviceNum=0;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;GPU_proc.memoryScalingFactor=3;${CONFKEYVAL}\" | " # has_detector TOF && WORKFLOW+="o2-tof-reco-workflow -b ${ARGS_ALL} --input-type raw --output-type clusters --pipeline TOFClusterer:${NTOFRECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" | " +# +has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow -b $ARGS_ALL --pipeline --MIDRawDecoder:${NMIDDECPIPELINES} --feeId-config-file \"$FILEWORKDIR/mid-feeId_mapper.txt\" --configKeyValues \"${CONFKEYVAL}\" | " if [ $SAVECTF == 1 ]; then has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline its-entropy-encoder:${NITSENCODERPIPELINES} | " has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline mft-entropy-encoder:${NMFTENCODERPIPELINES} --runmft | " has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline tof-entropy-encoder:${NTOFENCODERPIPELINES} | " + has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline mid-entropy-encoder:${NMIDENCODERPIPELINES} | " WORKFLOW+="o2-ctf-writer-workflow -b ${ARGS_ALL} --configKeyValues \"${CONFKEYVAL}\" --no-grp --onlyDet $WORKFLOW_DETECTORS --ctf-dict \"${CTF_DICT}\" --output-dir \"$CTF_DIR\" --min-file-size ${CTF_MINSIZE} | " fi diff --git a/testing/private/shahoian/run_ext.sh b/testing/private/shahoian/run_ext.sh index 9a7f219..df6513a 100755 --- a/testing/private/shahoian/run_ext.sh +++ b/testing/private/shahoian/run_ext.sh @@ -27,6 +27,9 @@ jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($ jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/odc/files/qc-mft-cluster.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json /home/epn/odc/files/qc-mft-cluster.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json +#jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/jliu/itsEPNv2.json /home/epn/odc/files/qc-mft-cluster.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json +jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json +jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/odc/files/qc-mft-cluster.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json for wf in "$@" do diff --git a/testing/private/shahoian/workflows.desc b/testing/private/shahoian/workflows.desc index 292e1e5..ec7e817 100644 --- a/testing/private/shahoian/workflows.desc +++ b/testing/private/shahoian/workflows.desc @@ -23,17 +23,17 @@ its-mft-tpc-ctf-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETEC its-mft-tpc-ctf-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" # -tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-mft-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#mft-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-mft-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#mft-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcITS_TPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoDigi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-tpc-ctf-qcITS_TPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoDigi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" its-tpc-ctf-qcITS_TPC-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpc.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" its-tpc-ctf-qcITS_TPCnoClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" @@ -54,4 +54,36 @@ its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-59mon: "DataDistribution QualityControl" rec its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-tofglobalrun-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-tofglobalrun-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-tof-ctf-qcTPCMNAll-mftClus-tofglobalrun-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +# + + +tpc-ctf-qcTPCMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcTPCMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +ist-mft-tpc-ctf-qcTPCMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-tpc-ctf-qcTPCMNAll-itsEPNv2-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCMNAll-mftClus-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPCMNAll-itsEPNv2-mftClus-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +tpc-tof-ctf-qctpcMNAll-tofglobalrun-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-tof-ctf-qctpcMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC,TOF SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-tofglobalrun-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-tofglobalrun-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + + +its-mft-ctf-qc-itsEPNv2-mftClus-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qc-itsEPNv2-mftClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qc-itsEPNv2-mftClus-20: "DataDistribution QualityControl" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qc-itsEPNv2-mftClus-20mon: "DataDistribution QualityControl" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-mft-mid-ctf-qc-itsEPNv2-mftClus-20: "DataDistribution QualityControl" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT,MID SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +mid-20: "DataDistribution QualityControl" reco,20,17,"WORKFLOW_DETECTORS=MID SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" From 1670b475b8a4432c51ed37a493a9c90d46dfebf8 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 18 Sep 2021 19:06:11 +0200 Subject: [PATCH 056/236] Provide path of CTF dictionary to entropy encoders --- production/dpl-workflow.sh | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 42ff630..f05a51f 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -9,7 +9,7 @@ source $MYDIR/setenv.sh # --------------------------------------------------------------------------------------------------------------------- #Some additional settings used in this workflow if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers @@ -22,6 +22,7 @@ MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" CTF_MINSIZE="2000000" NITSDECTHREADS=2 NMFTDECTHREADS=2 +CTF_DICT=${CTF_DICT_DIR}/ctf_dictionary.root if [ "0$O2_ROOT" == "0" ]; then @@ -207,7 +208,7 @@ if [ $CTFINPUT == 1 ]; then GPU_INPUT=compressed-clusters-ctf TOF_INPUT=digits CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root | head -n1` - WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $NTIMEFRAMES --ctf-input ${CTFName} --ctf-dict ${CTF_DICT_DIR}/ctf_dictionary.root --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " + WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $NTIMEFRAMES --ctf-input ${CTFName} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " elif [ $EXTINPUT == 1 ]; then PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0" PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" @@ -283,21 +284,21 @@ if [ $CTFINPUT == 0 ]; then has_detector EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " # Entropy encoder workflows - has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF| " - has_detector FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline ft0-entropy-encoder:$N_F_CTF| " - has_detector FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fv0-entropy-encoder:$N_F_CTF| " - has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mid-entropy-encoder:$N_F_CTF| " - has_detector MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-entropy-encoder:$N_F_CTF| " - has_detector PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline phos-entropy-encoder:$N_F_CTF| " - has_detector CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline cpv-entropy-encoder:$N_F_CTF| " - has_detector EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline emcal-entropy-encoder:$N_F_CTF| " - has_detector ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline zdc-entropy-encoder:$N_F_CTF| " - has_detector FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fdd-entropy-encoder:$N_F_CTF| " - has_detector HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline hmpid-entropy-encoder:$N_F_CTF| " - has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline tof-entropy-encoder:$N_F_CTF| " - has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF| " - has_detector TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " - has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " + has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF| " + has_detector FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline ft0-entropy-encoder:$N_F_CTF| " + has_detector FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fv0-entropy-encoder:$N_F_CTF| " + has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mid-entropy-encoder:$N_F_CTF| " + has_detector MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-entropy-encoder:$N_F_CTF| " + has_detector PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline phos-entropy-encoder:$N_F_CTF| " + has_detector CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline cpv-entropy-encoder:$N_F_CTF| " + has_detector EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline emcal-entropy-encoder:$N_F_CTF| " + has_detector ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline zdc-entropy-encoder:$N_F_CTF| " + has_detector FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fdd-entropy-encoder:$N_F_CTF| " + has_detector HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline hmpid-entropy-encoder:$N_F_CTF| " + has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline tof-entropy-encoder:$N_F_CTF| " + has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF| " + has_detector TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " + has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " # Calibration workflows has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " @@ -308,7 +309,7 @@ if [ $CTFINPUT == 0 ]; then fi if [ $CREATECTFDICT == 1 ] ; then mkdir -p $CTF_DICT_DIR; - rm -f $CTF_DICT_DIR/ctf_dictionary.root + rm -f $CTF_DICT fi CTF_OUTPUT_TYPE="none" if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi From 0539a729e356136f7ba2baf492193d9e0faaa991 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 18 Sep 2021 19:13:07 +0200 Subject: [PATCH 057/236] Set mid-feeId_mapper file in EPNMODE --- production/dpl-workflow.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index f05a51f..5e9b98d 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -19,6 +19,7 @@ workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" +MID_FEEID_MAP="$FILEWORKDIR/mid-feeId_mapper.txt" CTF_MINSIZE="2000000" NITSDECTHREADS=2 NMFTDECTHREADS=2 @@ -71,6 +72,7 @@ TRD_CONFIG_KEY= TRD_TRANSFORMER_CONFIG= EVE_CONFIG= MFTDEC_CONFIG= +MIDDEC_CONFIG= if [ $SYNCMODE == 1 ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" @@ -92,6 +94,7 @@ fi if [ $EPNMODE == 1 ]; then EVE_CONFIG+=" --eve-dds-collection-index 0" MFTDEC_CONFIG+=" --noise-file \"${MFT_NOISE}\"" + MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" fi if [ $GPUTYPE == "HIP" ]; then @@ -240,7 +243,7 @@ if [ $CTFINPUT == 0 ]; then has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" --nthreads ${NMFTDECTHREADS} --pipeline its-stf-decoder:$N_MFTRAWDEC ${MFTDEC_CONFIG} --runmft true | " has_detector FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline ft0-datareader-dpl:$N_F_RAW | " has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fv0-datareader-dpl:$N_F_RAW | " - has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline MIDRawDecoder:$N_F_RAW,MIDDecodedDataAggregator:$N_F_RAW | " + has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline MIDRawDecoder:$N_F_RAW,MIDDecodedDataAggregator:$N_F_RAW | " has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline DataDecoder:$N_F_RAW | " has_detector TOF && [ $EPNMODE == 0 ] && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fdd-datareader-dpl:$N_F_RAW | " From 3637c8b188a021687e128204c72777d60252def9 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 18 Sep 2021 19:19:11 +0200 Subject: [PATCH 058/236] Improve scripts --- production/no-processing.desc | 2 +- tools/epn/gen_topo.sh | 5 ++++- tools/epn/run.sh | 10 +++++++++- tools/parse | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/production/no-processing.desc b/production/no-processing.desc index 188f3c5..a683a8e 100644 --- a/production/no-processing.desc +++ b/production/no-processing.desc @@ -1,2 +1,2 @@ # Empty workflow for no processing at all -no-processing: "" +no-processing: "DataDistribution" diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh index 19427e1..dc54fdc 100755 --- a/tools/epn/gen_topo.sh +++ b/tools/epn/gen_topo.sh @@ -10,7 +10,10 @@ if [ -z ${WORKFLOW_DETECTORS_QC+x} ]; then echo \$WORKFLOW_DETECTORS_QC missing; if [ -z ${WORKFLOW_DETECTORS_CALIB+x} ]; then echo \$WORKFLOW_DETECTORS_CALIB missing; exit 1; fi # Comma-separated list of detectors to run calibration for if [ -z ${WORKFLOW_PARAMETERS+x} ]; then echo \$WORKFLOW_PARAMETERS missing; exit 1; fi # Additional parameters for workflow if [ -z ${RECO_NUM_NODES_OVERRIDE+x} ]; then echo \$RECO_NUM_NODES_OVERRIDE missing; exit 1; fi # Override number of nodes -if [ -z $DDMODE ] && [ -z $DDWORKFLOW ]; then echo Either \$DDMODE or \$DDWORKFLOW must be set; exit 1; fi #Select data distribution workflow +if [ -z $DDMODE ] && [ -z $DDWORKFLOW ]; then echo Either \$DDMODE or \$DDWORKFLOW must be set; exit 1; fi # Select data distribution workflow +if [ -z "$MULTIPLICITY_FACTOR_RAWDECODERS" ]; then echo \$MULTIPLICITY_FACTOR_RAWDECODERS missing; exit 1; fi # Process multiplicity scaling parameter +if [ -z "$MULTIPLICITY_FACTOR_CTFENCODERS" ]; then echo \$MULTIPLICITY_FACTOR_CTFENCODERS missing; exit 1; fi # Process multiplicity scaling parameter +if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then echo \$MULTIPLICITY_FACTOR_REST missing; exit 1; fi # Process multiplicity scaling parameter # Settings for some EPN paths / names / etc. export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc files diff --git a/tools/epn/run.sh b/tools/epn/run.sh index f5a5393..ca528c3 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -19,5 +19,13 @@ export WORKFLOW_DETECTORS_CALIB= # Optional export WORKFLOW_PARAMETERS= # Additional paramters for the workflow export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) export NHBPERTF=256 # Number of HBF per TF +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with -/home/epn/pdp/gen_topo.sh > $HOME/gen_topo_output.xml +export OUTPUT_FILE_NAME=$HOME/gen_topo_output.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi diff --git a/tools/parse b/tools/parse index 2a3d63d..616edfb 100755 --- a/tools/parse +++ b/tools/parse @@ -73,7 +73,7 @@ for line in f: if len(args) > 2 and not 'O2_ROOT' in os.environ: print("O2 not loaded") raise - with tempfile.TemporaryDirectory(prefix="o2_workflow") as tmpdir: + with tempfile.TemporaryDirectory(prefix="o2_workflow_") as tmpdir: if NO_PROCESSING_MODE and len(args) > 2: print("Cannot use DPL workflow together with DD mode", os.environ['DDMODE']) raise From 28897736e9177163fb85273f40d1edf06a2bc1cb Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 18 Sep 2021 20:45:12 +0200 Subject: [PATCH 059/236] Automatic merging of QC workflows --- production/full-system-test/qc-workflow.sh | 5 --- production/qc-workflow.sh | 36 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) delete mode 100644 production/full-system-test/qc-workflow.sh create mode 100644 production/qc-workflow.sh diff --git a/production/full-system-test/qc-workflow.sh b/production/full-system-test/qc-workflow.sh deleted file mode 100644 index 37d9988..0000000 --- a/production/full-system-test/qc-workflow.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -MYDIR="$(dirname $(readlink -f $0))" - -has_detector TPC && WORKFLOW+="o2-qc $ARGS_ALL --config json:///home/epn/odc/files/tpcQCTasks_multinode_ALL.json --local --host localhost | " diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh new file mode 100644 index 0000000..0ee1c57 --- /dev/null +++ b/production/qc-workflow.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +[ -z "$QC_JSON_TPC" ] && QC_JSON_TPC=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json +[ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/epn/jliu/itsEPNv2.json +[ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster.json +[ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json + +if [ -z "$WORKFLOW" ]; then + echo This script must be called from the dpl-workflow.sh and not standalone 1>&2 + exit 1 +fi + +if [ -z "$GEN_TOPO_WORKDIR" ]; then + echo This script must be run via the gen_topo scripts, or a GEN_TOPO_WORKDIR must be provided where merged JSONS are stored 1>&2 + exit 1 +fi + +JSON_FILES= +for i in ITS MFT TPC TOF FT0 MID EMC PHS CPV ZDC FDD HMP FV0 TRD MCH; do + DET_JSON_FILE="QC_JSON_$i" + has_detector $i && JSON_FILES+=" ${!DET_JSON_FILE}" +done + +if [ ! -z "$JSON_FILES" ]; then + mkdir -p $GEN_TOPO_WORKDIR/json_cache + find $GEN_TOPO_WORKDIR/json_cache/ -maxdepth 1 -type f -mtime +3 | xargs rm -f + MERGED_JSON_FILENAME=$GEN_TOPO_WORKDIR/json_cache/`date +%Y%m%d-%H%M%S`-$$-$RANDOM.json + jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' $JSON_FILES > $MERGED_JSON_FILENAME + if [ $? != 0 ]; then + echo Merging QC workflow failed 1>&2 + exit 1 + fi + MERGED_JSON_FILENAME=`realpath $MERGED_JSON_FILENAME` + + WORKFLOW+="o2-qc $ARGS_ALL --config json://$MERGED_JSON_FILENAME --local --host localhost | " +fi From b7f13c1227934d3642ccc27af1f0b32044729300 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 18 Sep 2021 18:51:44 +0200 Subject: [PATCH 060/236] Update README --- README.md | 11 +++++++++-- production/README.md | 27 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 production/README.md diff --git a/README.md b/README.md index 50aad07..833d451 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -This repository contains the PDP workflows to run on the EPN (in the future also on the FLP) and the parse script which parses the description files and creates the DDS XML files. For only a quick introduction and an example how to create a workflow on the EPN click [here](#Quick-guide-to-create-and-deploy-detector-workflow) +This repository contains the PDP workflows to run on the EPN (in the future also on the FLP) and the parse script which parses the description files and creates the DDS XML files. +For only a quick introduction and an example how to create a workflow on the EPN click [here](#Quick-guide-to-create-and-deploy-detector-workflow). +The options for the production workflow are described [here](production/README.md). # Terminology: - A **workflow** refers to a single DPL workflow binary, or multiple workflows binaries merged with the `|` syntax, or a shell script starting such a workflow. @@ -23,7 +25,12 @@ Another abstraction layer above the *workflows* are **topology descriptions**. T - **run** (default): run the workflow - **print**: print the final workflow command to the console - **dds**: create a partial topology. -- If applicable, workflows shall use the settings from the `common/setenv.sh` script instead of implementing their own options. Mandatory env variables to respect are `SHMSIZE`, `GPUTYPE` (if the workflow supports GPUs),... (to be continued). +- If applicable, workflows shall use the settings from the `common/setenv.sh` script instead of implementing their own options. Mandatory env variables to respect are + - `SHMSIZE` + - `SEVERITY` and `INFOLOGGER_SEVERITY` or they must be set to `warning` + - `NORATELOG` or the fmq rate logging must be disabled + - `GPUTYPE` (if the workflow supports GPUs) + - ... (to be continued). # Configuring and selecting workflow in AliECS: There are 3 ways foreseenm to configure the *full topology* in AliECS: (currently only the manual XML option exists) diff --git a/production/README.md b/production/README.md new file mode 100644 index 0000000..54e0d7b --- /dev/null +++ b/production/README.md @@ -0,0 +1,27 @@ +This folder stores the production workflows for global runs, in the description library file `production.desc`. +There are currently 2 workflows: +- `synchronous-workflow`: the default workflow using 8 GPUs and 2 NUMA domains. (Note that this workflow currently does not terminate correctly: https://alice.its.cern.ch/jira/browse/O2-2375) +- `synchronous-workflow-1numa`: workfloy using only 4 GPUs without NUMA pinning. (Fully sufficient for pp) + +If processing is to be disabled, please use the `no-processing` workflow in `no-processing.desc`. + +You can use the following options to change the workflow behavior: +- `DDMODE` (default `processing`) : Must be `processing` (synchronous processing) or `processing-disk` (synchronous processing + storing of raw time frames to disk, not that this is the raw time frame not the CTF!). The `DDMODE` `discard` and `disk` are not compatible with the synchronous processing workflow, you must use the `no-processing.desc` workflow instead!. +- `WORKFLOW_DETECTORS` (default `ALL`) : Comma-separated list of detectors for which the processing is enabled. If these are less detectors than participating in the run, data of the other detectors is ignored. If these are more detectors than participating in the run, the processes for the additional detectors will be started but will not do anything. +- `WORKFLOW_DETECTORS_QC` (default `ALL`) : Comma-separated list of detectors for which to run QC, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the QC is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=QC` is set. +- `WORKFLOW_DETECTORS_CALIB` (default `ALL`) : Comma-separated list of detectors for which to run calibration, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the calibration is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=CALIB` is set. +- `WORKFLOW_PARAMETERS` (default `NONE`) : Comma-separated list, enables additional features of the workflow. Currently the following features are available: + - `GPU` : Performs the TPC processing on the GPU, otherwise everything is processed on the CPU. + - `CTF` : Write the CTF to disk (CTF creation is always enabled, but if this parameter is missing, it is not stored). + - `EVENT_DISPLAY` : Enable JSON export for event display. + - `QC` : Enable QC. + - `CALIB` : Enable calibration (not yet working!) +- `RECO_NUM_NODES_OVERRIDE` (default `0`) : Overrides the number of EPN nodes used for the reconstruction (`0` or empty means default). +- `MULTIPLICITY_FACTOR_RAWDECODERS` (default `1`) : Scales the number of parallel processes used for raw decoding by this factor. +- `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. +- `MULTIPLICITY_FACTOR_REST` (default `1`) : Scales the number of other reconstruction processes by this factor. + +Some remarks for the QC: +The JSON files for the individual detectors are merged into one JSON file, which is cached during the run on the shared EPN home folder. +The default JSON file per detector is defined in `qc-workflow.sh`. +JSONs per detector can be overridden by exporting `QC_JSON_[DETECTOR_NAME]`, e.g. `QC_JSON_TPC`, when creating the workflow. From 68702eb3d4daa549ed967a4cafb125e02b176352 Mon Sep 17 00:00:00 2001 From: shahoian Date: Sun, 19 Sep 2021 14:06:04 +0200 Subject: [PATCH 061/236] update: remove stray qc file, fix passing TPC ctf_dictionary --- ...pcMNAll-itsEPNv2-mftClus_tofglobalrun.json | 443 ------------------ testing/private/shahoian/reco_ctf_qc-uni.sh | 2 +- 2 files changed, 1 insertion(+), 444 deletions(-) delete mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus_tofglobalrun.json diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus_tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus_tofglobalrun.json deleted file mode 100644 index 6ee585b..0000000 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus_tofglobalrun.json +++ /dev/null @@ -1,443 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": { - "NRawDigitsNBins": "100", - "NRawDigitsXMin": "0", - "NRawDigitsXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "TimeBinNBins": "600", - "TimeBinXMin": "0", - "TimeBinXMax": "600" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "Clusters_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue", - "NClustersNBins": "100", - "NClustersXMin": "0", - "NClustersXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "QtotNBins": "600", - "QtotXMin": "0", - "QtotXMax": "600", - "SigmaPadNBins": "200", - "SigmaPadXMin": "0", - "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", - "SigmaTimeXMin": "0", - "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", - "TimeBinXMin": "0", - "TimeBinXMax": "100000" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - }, - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32640", - "localControl": "odc" - }, - "TaskRaw": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskRaw", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "raw-local" - }, - "location": "local", - "localMachines": [ - "alio2-cr1-flp178-ib", - "alio2-cr1-flp179-ib" - ], - "remoteMachine": "localhost", - "remotePort": "30132", - "mergingMode": "delta" - }, - "TaskDigits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskDigits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "digi-local" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "47708", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - }, - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": [ - "mMFTClusterSensorIndex" - ] - } - ], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - }, - "CheckDiagnostics": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckDiagnostics", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "RDHCounterCrate0" - ] - } - ] - }, - "CheckCompressedData": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckCompressedData", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "checkParameters": { - "DiagnosticThresholdPerSlot": "10" - }, - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "hDiagnostic" - ] - } - ] - }, - "CheckRawMultiplicity": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", - "moduleName": "QcTOF", - "policy": "OnAny", - "detectorName": "TOF", - "dataSource": [ - { - "type": "Task", - "name": "TaskDigits", - "MOs": [ - "TOFRawsMulti" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.005", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "mft-clusters", - "active": "true", - "machines": [], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "digi-local", - "active": "true", - "machines": [ - "epn" - ], - "port": "30333", - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/reco_ctf_qc-uni.sh b/testing/private/shahoian/reco_ctf_qc-uni.sh index 52d09cf..8a9e3b6 100755 --- a/testing/private/shahoian/reco_ctf_qc-uni.sh +++ b/testing/private/shahoian/reco_ctf_qc-uni.sh @@ -89,7 +89,7 @@ has_detector ITS && WORKFLOW+="o2-its-reco-workflow -b ${ARGS_ALL} ${DISABLE_REC has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:${NMFTDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${MFTCLUSDICT}\" --runmft --noise-file \"${MFT_NOISE}\" | " # has_detector TPC && WORKFLOW+="o2-tpc-raw-to-digits-workflow -b ${ARGS_ALL} --input-spec \"${TPC_INSPEC}\" --configKeyValues \"TPCDigitDump.LastTimeBin=1000\" --pipeline tpc-raw-to-digits-0:6 | " -has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow -b ${ARGS_ALL} --input-type digitizer --output-type $TPC_OUTPUT \"${TPC_EXTRAOPT}\" --disable-mc --pipeline tpc-tracker:4 --environment ROCR_VISIBLE_DEVICES={timeslice0} --configKeyValues \"align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;GPU_proc.deviceNum=0;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;GPU_proc.memoryScalingFactor=3;${CONFKEYVAL}\" | " +has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow -b ${ARGS_ALL} --input-type digitizer --output-type $TPC_OUTPUT ${TPC_EXTRAOPT} --disable-mc --pipeline tpc-tracker:4 --environment ROCR_VISIBLE_DEVICES={timeslice0} --configKeyValues \"align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;GPU_proc.deviceNum=0;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;GPU_proc.memoryScalingFactor=3;${CONFKEYVAL}\" | " # has_detector TOF && WORKFLOW+="o2-tof-reco-workflow -b ${ARGS_ALL} --input-type raw --output-type clusters --pipeline TOFClusterer:${NTOFRECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" | " # From cd7c913424482584cca5081b4273163d9807ceca Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 19 Sep 2021 14:21:54 +0200 Subject: [PATCH 062/236] Do not clean up merged json files if topology is not created on the fly --- production/qc-workflow.sh | 12 +++++++++--- tools/epn/gen_topo.sh | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 0ee1c57..1fab263 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -16,15 +16,21 @@ if [ -z "$GEN_TOPO_WORKDIR" ]; then fi JSON_FILES= +OUTPUT_SUFFIX= for i in ITS MFT TPC TOF FT0 MID EMC PHS CPV ZDC FDD HMP FV0 TRD MCH; do DET_JSON_FILE="QC_JSON_$i" - has_detector $i && JSON_FILES+=" ${!DET_JSON_FILE}" + if has_detector $i && [ ! -z "${!DET_JSON_FILE}" ]; then + JSON_FILES+=" ${!DET_JSON_FILE}" + OUTPUT_SUFFIX+="-$i" + fi done if [ ! -z "$JSON_FILES" ]; then mkdir -p $GEN_TOPO_WORKDIR/json_cache - find $GEN_TOPO_WORKDIR/json_cache/ -maxdepth 1 -type f -mtime +3 | xargs rm -f - MERGED_JSON_FILENAME=$GEN_TOPO_WORKDIR/json_cache/`date +%Y%m%d-%H%M%S`-$$-$RANDOM.json + if [ "0$GEN_TOPO_ONTHEFLY" == "01" ]; then + find $GEN_TOPO_WORKDIR/json_cache/ -maxdepth 1 -type f -mtime +30 | xargs rm -f + fi + MERGED_JSON_FILENAME=$GEN_TOPO_WORKDIR/json_cache/`date +%Y%m%d-%H%M%S`-$$-$RANDOM-$OUTPUT_SUFFIX.json jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' $JSON_FILES > $MERGED_JSON_FILENAME if [ $? != 0 ]; then echo Merging QC workflow failed 1>&2 diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh index dc54fdc..476eae5 100755 --- a/tools/epn/gen_topo.sh +++ b/tools/epn/gen_topo.sh @@ -19,7 +19,7 @@ if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then echo \$MULTIPLICITY_FACTOR_REST miss export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc files export INRAWCHANNAME=tf-builder-pipe-0 # Pipe name to get data from TfBuilder export CTF_DIR=/tmp/datadist/ctf # Output directory for CTFs -export GEN_TOPO_WORKDIR=/home/epn/gen_topo/$GEN_TOPO_PARTITION # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir +export GEN_TOPO_WORKDIR=/home/epn/gen_topo/${GEN_TOPO_PARTITION}_${GEN_TOPO_ONTHEFLY} # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir # Load required module and run gen_topo_o2dataprocessing (PDP part of this script) module load ODC O2DataProcessing 1>&2 || { echo Error loading ODC / O2DataProcessing 1>&2; exit 1; } From 9589a37579151a5bd3c0814af59aa955a730f52b Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 20 Sep 2021 11:23:28 +0200 Subject: [PATCH 063/236] Add ALL_EXTRA_CONFIG and ARGS_ALL_EXTRA for user-provided extra arguments --- production/README.md | 5 +++++ production/dpl-workflow.sh | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/production/README.md b/production/README.md index 54e0d7b..e582bf5 100644 --- a/production/README.md +++ b/production/README.md @@ -21,6 +21,11 @@ You can use the following options to change the workflow behavior: - `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. - `MULTIPLICITY_FACTOR_REST` (default `1`) : Scales the number of other reconstruction processes by this factor. +For user modification of the workflow, the folloing *EXTRA* environment variables exist: +- `ARGS_ALL_EXTRA` : Extra command line options added to all workflows +- `ALL_EXTRA_CONFIG` : Extra config key values added to all workflows +- `GPU_EXTRA_CONFIG` : Extra options added to the configKeyValues of the GPU workflow + Some remarks for the QC: The JSON files for the individual detectors are merged into one JSON file, which is cached during the run on the shared EPN home folder. The default JSON file per detector is defined in `qc-workflow.sh`. diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 5e9b98d..0301540 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -33,7 +33,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" if [ $EPNMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" @@ -56,7 +56,7 @@ fi if [ $GPUTYPE != "CPU" ] || [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then ARGS_ALL+=" --shm-mlock-segment-on-creation 1" fi -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" # --------------------------------------------------------------------------------------------------------------------- # Set some individual workflow arguments depending on configuration From 10478047814a85d5481370c69599db5a483a0c79 Mon Sep 17 00:00:00 2001 From: noferini Date: Mon, 20 Sep 2021 11:35:47 +0200 Subject: [PATCH 064/236] mv TOF to 128 HBF/TF --- testing/detectors/TOF/tof-epn-cosmics-dig.sh | 2 +- testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh | 2 +- testing/detectors/TOF/tof-epn-cosmics.sh | 9 ++++----- testing/detectors/TOF/tof-epn-cosmicsNoQC.sh | 9 ++++----- testing/detectors/TOF/workflows.desc | 4 ++-- 5 files changed, 12 insertions(+), 14 deletions(-) mode change 100644 => 100755 testing/detectors/TOF/tof-epn-cosmics-dig.sh mode change 100644 => 100755 testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh mode change 100644 => 100755 testing/detectors/TOF/tof-epn-cosmicsNoQC.sh diff --git a/testing/detectors/TOF/tof-epn-cosmics-dig.sh b/testing/detectors/TOF/tof-epn-cosmics-dig.sh old mode 100644 new mode 100755 index 8f8614b..64af0a3 --- a/testing/detectors/TOF/tof-epn-cosmics-dig.sh +++ b/testing/detectors/TOF/tof-epn-cosmics-dig.sh @@ -8,7 +8,7 @@ SEVERITY=warning ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" NTHREADS=2 diff --git a/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh b/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh old mode 100644 new mode 100755 index 52c895b..e52163a --- a/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh +++ b/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh @@ -8,7 +8,7 @@ SEVERITY=warning ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" NTHREADS=2 diff --git a/testing/detectors/TOF/tof-epn-cosmics.sh b/testing/detectors/TOF/tof-epn-cosmics.sh index d39a021..46e3e23 100755 --- a/testing/detectors/TOF/tof-epn-cosmics.sh +++ b/testing/detectors/TOF/tof-epn-cosmics.sh @@ -8,10 +8,10 @@ SEVERITY=warning ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" -NTHREADS=2 +NTHREADS=1 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist CTFOUT="/home/fnoferin/public/out/" @@ -22,11 +22,10 @@ PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;calclus:TOF/INFOCALCLUS;cosmics:TOF/INFOC o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ -| o2-tof-reco-workflow --input-type raw --output-type clusters,ctf \ -${ARGS_ALL} ${CTF_DICT} --configKeyValues "$ARGS_ALL_CONFIG;" \ +| o2-tof-reco-workflow --input-type raw --output-type clusters \ +${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" \ --disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics \ --pipeline "tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS},tof-entropy-encoder:${NTHREADS}" \ -| o2-ctf-writer-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet TOF --output-dir $CTFOUT \ | o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn \ | o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ | o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh b/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh old mode 100644 new mode 100755 index 0170429..1b0c7c4 --- a/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh +++ b/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh @@ -8,10 +8,10 @@ SEVERITY=warning ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" -NTHREADS=2 +NTHREADS=1 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist CTFOUT="/home/fnoferin/public/out/" @@ -22,10 +22,9 @@ PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;calclus:TOF/INFOCALCLUS;cosmics:TOF/INFOC o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ -| o2-tof-reco-workflow --input-type raw --output-type clusters,ctf \ -${ARGS_ALL} ${CTF_DICT} --configKeyValues "$ARGS_ALL_CONFIG;" \ +| o2-tof-reco-workflow --input-type raw --output-type clusters \ +${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" \ --disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics \ --pipeline "tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS},tof-entropy-encoder:${NTHREADS}" \ -| o2-ctf-writer-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet TOF --output-dir $CTFOUT \ | o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ | o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/workflows.desc b/testing/detectors/TOF/workflows.desc index 724b1f4..55d8649 100644 --- a/testing/detectors/TOF/workflows.desc +++ b/testing/detectors/TOF/workflows.desc @@ -1,4 +1,4 @@ -tof-cosmics: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics.sh" +tof-cosmics: "DataDistribution QualityControl" reco,20,20,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics.sh" tof-cos-dig: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-dig.sh" -tof-cosmicsNoQC: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmicsNoQC.sh" +tof-cosmicsNoQC: "DataDistribution QualityControl" reco,20,20,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmicsNoQC.sh" tof-cos-digNoQC: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh" From f875d929ed2140279770dad716f07467f7564c19 Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 20 Sep 2021 12:32:35 +0200 Subject: [PATCH 065/236] Fix typo in MFT decoder pipeline --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 0301540..d534903 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -240,7 +240,7 @@ if [ $CTFINPUT == 0 ]; then WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:$N_TPCRAWDEC | " fi has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${ITSCLUSDICT}\" --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:$N_ITSRAWDEC | " - has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" --nthreads ${NMFTDECTHREADS} --pipeline its-stf-decoder:$N_MFTRAWDEC ${MFTDEC_CONFIG} --runmft true | " + has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:$N_MFTRAWDEC ${MFTDEC_CONFIG} --runmft true | " has_detector FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline ft0-datareader-dpl:$N_F_RAW | " has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fv0-datareader-dpl:$N_F_RAW | " has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline MIDRawDecoder:$N_F_RAW,MIDDecodedDataAggregator:$N_F_RAW | " From 63ea02933d5c29b1af42ff6c98b28d8b2e148afb Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 20 Sep 2021 20:14:17 +0200 Subject: [PATCH 066/236] Fix: qc-workflow muse use has_detector_qc --- production/qc-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 1fab263..808326b 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -19,7 +19,7 @@ JSON_FILES= OUTPUT_SUFFIX= for i in ITS MFT TPC TOF FT0 MID EMC PHS CPV ZDC FDD HMP FV0 TRD MCH; do DET_JSON_FILE="QC_JSON_$i" - if has_detector $i && [ ! -z "${!DET_JSON_FILE}" ]; then + if has_detector_qc $i && [ ! -z "${!DET_JSON_FILE}" ]; then JSON_FILES+=" ${!DET_JSON_FILE}" OUTPUT_SUFFIX+="-$i" fi From b4e3c1eb275de0eec9222542df9ad71f9014d5b2 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 20 Sep 2021 20:41:04 +0200 Subject: [PATCH 067/236] Sync change for FV0 reco addition from O2 --- production/dpl-workflow.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index d534903..2a167c7 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -271,8 +271,9 @@ if [ $SYNCMODE == 0 ]; then has_detector MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " - has_detector FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output | " - has_detector ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " + has_detector FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " + has_detector FDD && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " + has_detector ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " fi # --------------------------------------------------------------------------------------------------------------------- From 67632e3298aedf8a29f45c3e0331c1d13dc02137 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 21 Sep 2021 08:55:28 +0200 Subject: [PATCH 068/236] wf descriptions based on master dpl-workflow.sh --- testing/private/shahoian/run_ext_dpl.sh | 32 +++++++++++++++++++++ testing/private/shahoian/workflows_dpl.desc | 17 +++++++++++ 2 files changed, 49 insertions(+) create mode 100755 testing/private/shahoian/run_ext_dpl.sh create mode 100644 testing/private/shahoian/workflows_dpl.desc diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh new file mode 100755 index 0000000..9615c89 --- /dev/null +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository + +export EXTINPUT=1 +export EPNMODE=1 + +export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF +export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" + +export GEN_TOPO_IGNORE_ERROR=1 + +for wf in "$@" +do + export GEN_TOPO_WORKFLOW_NAME=$wf + /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.xml +done diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc new file mode 100644 index 0000000..fe304c6 --- /dev/null +++ b/testing/private/shahoian/workflows_dpl.desc @@ -0,0 +1,17 @@ + +tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +tof-ctf-qcTOF-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh" +its-ctf-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS production/dpl-workflow.sh" +mft-ctf-qcMFT-30: "DataDistribution QualityControl" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" +its-mft-tpc-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +mft-tpc-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh" +mft-tpc-tof-CTF-QC-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" + + +tpcCPU-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +its-mft-tpcCPU-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +mft-tpcCPU-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh" +mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" +mft-tof-CTF-QC-mft-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh" From 91ba7d65aaeb2fbb8e585eda45bee2d90138b2d9 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 21 Sep 2021 10:25:22 +0200 Subject: [PATCH 069/236] Add some common settings to run_ext_dpl.sh --- testing/private/shahoian/run_ext_dpl.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index 9615c89..f3c472a 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -13,6 +13,9 @@ export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O export EXTINPUT=1 export EPNMODE=1 +export SYNCMODE=1 +export SHMSIZE=128000000000 +export INFOLOGGER_SEVERITY=warning export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) From 64ddde89e726d9ea0badd2aef6047108b3588be9 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 21 Sep 2021 10:40:29 +0200 Subject: [PATCH 070/236] Make default options depend on EPNMODE, add BEAMTYPE option --- common/setenv.sh | 19 ++++++++++++++----- production/production.desc | 4 ++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 20f2a6c..3cb27fb 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -9,9 +9,7 @@ fi if [ -z "$NTIMEFRAMES" ]; then export NTIMEFRAMES=1; fi # Number of time frames to process if [ -z "$TFDELAY" ]; then export TFDELAY=100; fi # Delay in seconds between publishing time frames -if [ -z "$NGPUS" ]; then export NGPUS=1; fi # Number of GPUs to use, data distributed round-robin if [ -z "$GPUTYPE" ]; then export GPUTYPE=CPU; fi # GPU Tracking backend to use, can be CPU / CUDA / HIP / OCL / OCL2 -if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 8 << 30 )); fi # Size of shared memory for messages if [ -z "$DDSHMSIZE" ]; then export DDSHMSIZE=$(( 8 << 10 )); fi # Size of shared memory for DD Input if [ -z "$GPUMEMSIZE" ]; then export GPUMEMSIZE=$(( 24 << 30 )); fi # Size of allocated GPU memory (if GPUTYPE != CPU) if [ -z "$HOSTMEMSIZE" ]; then export HOSTMEMSIZE=0; fi # Size of allocated host memory for GPU reconstruction (0 = default) @@ -20,18 +18,29 @@ if [ -z "$SAVECTF" ]; then export SAVECTF=0; fi # Save th if [ -z "$SYNCMODE" ]; then export SYNCMODE=0; fi # Run only reconstruction steps of the synchronous reconstruction if [ -z "$NUMAID" ]; then export NUMAID=0; fi # SHM segment id to use for shipping data as well as set of GPUs to use (use 0 / 1 for 2 NUMA domains) if [ -z "$NUMAGPUIDS" ]; then export NUMAGPUIDS=0; fi # NUMAID-aware GPU id selection -if [ -z "$EXTINPUT" ]; then export EXTINPUT=0; fi # Receive input from raw FMQ channel instead of running o2-raw-file-reader if [ -z "$CTFINPUT" ]; then export CTFINPUT=0; fi # Read input from CTF (incompatible to EXTINPUT=1) if [ -z "$NHBPERTF" ]; then export NHBPERTF=128; fi # Time frame length (in HBF) if [ -z "$GLOBALDPLOPT" ]; then export GLOBALDPLOPT=; fi # Global DPL workflow options appended at the end -if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=0; fi # Set default EPN pipeline multiplicities if [ -z "$SEVERITY" ]; then export SEVERITY="info"; fi # Log verbosity -if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # Throw exception when running out of SHM if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable FairMQ Rate Logging if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw channel name used to communicate with DataDistribution if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflow mode, must be run, print, od dds if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. if [ -z "$EPNMODE" ]; then export EPNMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... +if [ -z "$BEAMTYPE" ]; then export BEAMTYPE=PbPb; fi # Beam type, must be PbPb, pp, pPb, cosmic, technical +if [ $EPNMODE == 0 ]; then + if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 8 << 30 )); fi # Size of shared memory for messages + if [ -z "$NGPUS" ]; then export NGPUS=1; fi # Number of GPUs to use, data distributed round-robin + if [ -z "$EXTINPUT" ]; then export EXTINPUT=0; fi # Receive input from raw FMQ channel instead of running o2-raw-file-reader + if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=0; fi # Set default EPN pipeline multiplicities + if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # Throw exception when running out of SHM +else # Defaults when running on the EPN + if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 256 << 30 )); fi + if [ -z "$NGPUS" ]; then export NGPUS=4; fi + if [ -z "$EXTINPUT" ]; then export EXTINPUT=1; fi + if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=1; fi + if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # NOTE: SHMTHROW SHOULD BE 0 FOR EPN, BUT IS =1 FOR TESTS DURING COMMISSIONING WHILE WE HAVE NO MEMORY MONITORING +fi # Detectors used in the workflow / enabled parameters if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH"; fi if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi diff --git a/production/production.desc b/production/production.desc index 4011a3a..9ea8e08 100644 --- a/production/production.desc +++ b/production/production.desc @@ -1,2 +1,2 @@ -synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/dpl-workflow.sh" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/dpl-workflow.sh" -synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 INFOLOGGER_SEVERITY=warning production/dpl-workflow.sh" +synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 production/dpl-workflow.sh" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 production/dpl-workflow.sh" +synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"SYNCMODE=1 production/dpl-workflow.sh" From 75b2767ae49dc07f486d471511c8da92ea465830 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 21 Sep 2021 12:53:15 +0200 Subject: [PATCH 071/236] Increase TPC raw decoder multiplicity when EPNPIPELINES is set --- production/dpl-workflow.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 2a167c7..eb2b21d 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -54,7 +54,7 @@ if [ $NUMAGPUIDS != 0 ]; then ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" fi if [ $GPUTYPE != "CPU" ] || [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then - ARGS_ALL+=" --shm-mlock-segment-on-creation 1" + ARGS_ALL+=" --shm-mlock-segment-on-creation 1" fi ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" @@ -176,6 +176,7 @@ elif [ $EPNPIPELINES != 0 ]; then N_EMC=$((7 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 7 * $EPNPIPELINES * $NGPUS / 4 : 1)) N_TRDENT=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) N_TRDTRK=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) + N_TPCRAWDEC=$((6 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 6 * $EPNPIPELINES * $NGPUS / 4 : 1)) if [ $GPUTYPE == "CPU" ]; then N_TPCTRK=8 GPU_CONFIG_KEY+="GPU_proc.ompThreads=4;" From 1bff7fc27435a4043fb2dcd9e1dd3d98b8eb2357 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 21 Sep 2021 20:46:41 +0200 Subject: [PATCH 072/236] Fix my own stupidity, edited the wrong dpl-worklow.sh in O2 repo before... --- production/dpl-workflow.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index eb2b21d..feea4da 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -75,7 +75,9 @@ MFTDEC_CONFIG= MIDDEC_CONFIG= if [ $SYNCMODE == 1 ]; then - ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" + if [ $BEAMTYPE == "PbPb" ] || [ $BEAMTYPE == "pp" ]; then + ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" + fi GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" TRD_CONFIG+=" --track-sources ITS-TPC --filter-trigrec" TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" From 3640824aca21315c39c2ab0bd697a67ddaee8b46 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 21 Sep 2021 20:57:25 +0200 Subject: [PATCH 073/236] Add CTF_ONLY workflow parameter --- production/README.md | 1 + production/dpl-workflow.sh | 31 ++++++++++++++++++++----------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/production/README.md b/production/README.md index e582bf5..990508a 100644 --- a/production/README.md +++ b/production/README.md @@ -16,6 +16,7 @@ You can use the following options to change the workflow behavior: - `EVENT_DISPLAY` : Enable JSON export for event display. - `QC` : Enable QC. - `CALIB` : Enable calibration (not yet working!) + - `CTF_ONLY` : Disables all processing except what is needed for the CTF (currently partially incompatible to `QC` and `CALIB` depending on the detectors). - `RECO_NUM_NODES_OVERRIDE` (default `0`) : Overrides the number of EPN nodes used for the reconstruction (`0` or empty means default). - `MULTIPLICITY_FACTOR_RAWDECODERS` (default `1`) : Scales the number of parallel processes used for raw decoding by this factor. - `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index feea4da..9ef1f9c 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -65,6 +65,7 @@ GPU_OUTPUT=tracks,clusters GPU_CONFIG= GPU_CONFIG_KEY= TOF_INPUT=raw +TOF_OUTPUT=clusters ITS_CONFIG= ITS_CONFIG_KEY= TRD_CONFIG= @@ -128,6 +129,10 @@ if [ $HOSTMEMSIZE != "0" ]; then GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" fi +if workflow_has_parameter CTF_ONLY; then + TOF_OUTPUT=digits +fi + # --------------------------------------------------------------------------------------------------------------------- # Process multiplicities N_TPCTRK=1 @@ -257,13 +262,15 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Common reconstruction workflows -has_detector ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " -has_detectors ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " -has_detector FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline ft0-reconstructor:$N_F_REST | " -has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type clusters --disable-root-input --disable-root-output $DISABLE_MC --pipeline tof-compressed-decoder:$N_F_RAW,TOFClusterer:$N_F_REST | " -has_detector TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " -has_detectors TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " +has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC --pipeline tof-compressed-decoder:$N_F_RAW,TOFClusterer:$N_F_REST | " +if ! workflow_has_parameter CTF_ONLY; then + has_detector ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " + has_detectors ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " + has_detector FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline ft0-reconstructor:$N_F_REST | " + has_detector TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " + has_detectors TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " +fi # --------------------------------------------------------------------------------------------------------------------- # Workflows disabled in sync mode @@ -282,13 +289,15 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Workflows disabled in async mode if [ $CTFINPUT == 0 ]; then - # Reconstruction workflows - if [ $SYNCMODE == 1 ]; then # Otherwise already present in async setup - has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " - fi has_detector PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output --pipeline PHOSRawToCellConverterSpec:$N_F_REST $DISABLE_MC | " has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output --pipeline CPVRawToDigitConverterSpec:$N_F_REST,CPVClusterizerSpec:$N_F_REST $DISABLE_MC | " has_detector EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " + if ! workflow_has_parameter CTF_ONLY; then + # Reconstruction workflows + if [ $SYNCMODE == 1 ]; then # Otherwise already present in async setup + has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " + fi + fi # Entropy encoder workflows has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF| " @@ -308,7 +317,7 @@ if [ $CTFINPUT == 0 ]; then has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " # Calibration workflows - has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " + workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " # CTF / dictionary writer workflow if [ $SAVECTF == 1 ]; then From 97ff2025627dc4edce22be0c617d33695da2df70 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 24 Sep 2021 18:27:58 +0200 Subject: [PATCH 074/236] Enable DPL metrics sending on EPN farm --- production/dpl-workflow.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 9ef1f9c..c8ab376 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -36,8 +36,7 @@ fi ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" if [ $EPNMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" - #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" - ARGS_ALL+=" --monitoring-backend no-op://" + ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" else ARGS_ALL+=" --monitoring-backend no-op://" fi From d26ae2193c828f76e2ad7bcfaa775d2c9a23090e Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 24 Sep 2021 18:31:26 +0200 Subject: [PATCH 075/236] Sync changes from O2 repository --- production/dpl-workflow.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index c8ab376..e826fad 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -137,6 +137,7 @@ fi N_TPCTRK=1 N_TPCENT=1 N_TPCITS=1 +N_MFTMCH=1 N_ITSRAWDEC=1 N_MFTRAWDEC=1 N_TPCRAWDEC=$NGPUS @@ -251,7 +252,7 @@ if [ $CTFINPUT == 0 ]; then has_detector FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline ft0-datareader-dpl:$N_F_RAW | " has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fv0-datareader-dpl:$N_F_RAW | " has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline MIDRawDecoder:$N_F_RAW,MIDDecodedDataAggregator:$N_F_RAW | " - has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline DataDecoder:$N_F_RAW | " + has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-data-decoder:$N_F_RAW | " has_detector TOF && [ $EPNMODE == 0 ] && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fdd-datareader-dpl:$N_F_RAW | " has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL --pipeline trd-datareader:$N_F_RAW | " @@ -278,8 +279,9 @@ if [ $SYNCMODE == 0 ]; then has_detector MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline MIDClusterizer:$N_F_REST,MIDTracker:$N_F_REST | " has_detector MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK,mch-cluster-finder:$N_F_REST,mch-cluster-transformer:$N_F_REST | " has_detector MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " - has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " - has_detectors ITS TPC TRD TOF FT0 MCH && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " + has_detectors MFT MCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline globalfwd-track-matcher:$N_MFTMCH | " + has_detectors ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " + has_detectors ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " has_detector FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector FDD && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " From 830871dd0f07012682e4d72358b99dedc82764ee Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 24 Sep 2021 18:32:30 +0200 Subject: [PATCH 076/236] Apply global multiplicity scaling also for MFT matching --- production/dpl-workflow.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index e826fad..cce98bb 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -137,7 +137,6 @@ fi N_TPCTRK=1 N_TPCENT=1 N_TPCITS=1 -N_MFTMCH=1 N_ITSRAWDEC=1 N_MFTRAWDEC=1 N_TPCRAWDEC=$NGPUS @@ -279,7 +278,7 @@ if [ $SYNCMODE == 0 ]; then has_detector MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline MIDClusterizer:$N_F_REST,MIDTracker:$N_F_REST | " has_detector MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK,mch-cluster-finder:$N_F_REST,mch-cluster-transformer:$N_F_REST | " has_detector MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " - has_detectors MFT MCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline globalfwd-track-matcher:$N_MFTMCH | " + has_detectors MFT MCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline globalfwd-track-matcher:$N_F_REST | " has_detectors ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " has_detectors ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " has_detector FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " From f870c58c1688cf644a18bf3d57f6958ee7e853fc Mon Sep 17 00:00:00 2001 From: shahoian Date: Fri, 24 Sep 2021 23:18:42 +0200 Subject: [PATCH 077/236] Add CTP to list of detectors, processing will be done later --- common/setenv.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/setenv.sh b/common/setenv.sh index 3cb27fb..b922e60 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -42,7 +42,7 @@ else # Defaults when running on the EPN if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # NOTE: SHMTHROW SHOULD BE 0 FOR EPN, BUT IS =1 FOR TESTS DURING COMMISSIONING WHILE WE HAVE NO MEMORY MONITORING fi # Detectors used in the workflow / enabled parameters -if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH"; fi +if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH,CTP"; fi if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ "0$WORKFLOW_DETECTORS_CALIB" == "0ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi From dc7e05d2fe5a4c62b2882876cefc0e159dc265c9 Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 27 Sep 2021 01:13:28 +0200 Subject: [PATCH 078/236] add variable for ED jsons file storage --- common/setenv.sh | 20 ++++++++++++++++++++ production/dpl-workflow.sh | 6 ++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index b922e60..f00f003 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -28,6 +28,7 @@ if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflo if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. if [ -z "$EPNMODE" ]; then export EPNMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... if [ -z "$BEAMTYPE" ]; then export BEAMTYPE=PbPb; fi # Beam type, must be PbPb, pp, pPb, cosmic, technical +if [ -z "$EDJSONS_DIR" ]; then export EDJSONS_DIR="jsons"; fi # output directory for ED json files if [ $EPNMODE == 0 ]; then if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 8 << 30 )); fi # Size of shared memory for messages if [ -z "$NGPUS" ]; then export NGPUS=1; fi # Number of GPUs to use, data distributed round-robin @@ -128,3 +129,22 @@ workflow_has_parameters() shift done } + +add_comma_separated() +{ + if (( $# < 2 )); then + echo "$# parameters received" + echo "Function name: ${FUNCNAME} expects at least 2 parameters:" + echo "it concatenates the string in 1st parameter by the following" + echo "ones, forming comma-separated string. $# parameters received" + exit 1 + fi + + for ((i = 2; i <= $#; i++ )); do + if [ -z $VAR ]; then + VAR+="${!i}" + else + VAR+=",${!i}" + fi + done +} diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index cce98bb..b8bad87 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -70,13 +70,15 @@ ITS_CONFIG_KEY= TRD_CONFIG= TRD_CONFIG_KEY= TRD_TRANSFORMER_CONFIG= -EVE_CONFIG= +EVE_CONFIG=" --jsons-folder $EDJSONS_DIR" MFTDEC_CONFIG= MIDDEC_CONFIG= if [ $SYNCMODE == 1 ]; then - if [ $BEAMTYPE == "PbPb" ] || [ $BEAMTYPE == "pp" ]; then + if [ $BEAMTYPE == "PbPb" ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" + elif [ $BEAMTYPE == "pp" ]; then + ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" fi GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" TRD_CONFIG+=" --track-sources ITS-TPC --filter-trigrec" From 833410e33954dbbf6d44f1fa9c80ded34a2b8430 Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 27 Sep 2021 01:17:51 +0200 Subject: [PATCH 079/236] update of RS private workflows --- testing/private/shahoian/run_ext_dpl.sh | 2 ++ testing/private/shahoian/workflows_dpl.desc | 27 ++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index f3c472a..10b02a4 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -17,6 +17,8 @@ export SYNCMODE=1 export SHMSIZE=128000000000 export INFOLOGGER_SEVERITY=warning +export EDJSONS_DIR="/home/ed/jsons" + export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc index fe304c6..84803ff 100644 --- a/testing/private/shahoian/workflows_dpl.desc +++ b/testing/private/shahoian/workflows_dpl.desc @@ -1,3 +1,4 @@ +#tpc-ctf-qcTPC-59mon: "DataDistribution QualityControl" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" tof-ctf-qcTOF-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh" @@ -9,9 +10,33 @@ its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59: "DataDistribution QualityControl" rec mft-tpc-tof-CTF-QC-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" -tpcCPU-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +#tpcCPU-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" its-mft-tpcCPU-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" mft-tpcCPU-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh" mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" mft-tof-CTF-QC-mft-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh" + + +tpcCPU-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +its-tof-CTF-QC-its-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh" + +its-tpc-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +its-tpc-tof-CTF-QC-its-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh" + +its-tpc-CTF-QC-its-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" + +mch-mid-CTF-5: "DataDistribution QualityControl" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS=MCH,MID production/dpl-workflow.sh" + +#trd-ctf-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=TRD production/dpl-workflow.sh" + + +its-tpc-tof-trd-CTF-QC-its-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" +its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" +tpc-ctf-qcTPC-ED-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" + +its-tpc-tof-trd-CTF-QC-its-tpc-tof-50: "DataDistribution QualityControl" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" +its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50: "DataDistribution QualityControl" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" +tpc-ctf-qcTPC-ED-50: "DataDistribution QualityControl" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" + +tpc-ctf-ED-50: "DataDistribution QualityControl" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" From 8829fdc47ae109a698d533ad13eec600d45979bb Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 27 Sep 2021 21:32:06 +0200 Subject: [PATCH 080/236] Fix to workflow parser --- production/dpl-workflow.sh | 26 +++++++++++++------------- production/production.desc | 4 ++-- tools/parse | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index b8bad87..57172bc 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -302,19 +302,19 @@ if [ $CTFINPUT == 0 ]; then fi # Entropy encoder workflows - has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF| " - has_detector FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline ft0-entropy-encoder:$N_F_CTF| " - has_detector FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fv0-entropy-encoder:$N_F_CTF| " - has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mid-entropy-encoder:$N_F_CTF| " - has_detector MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-entropy-encoder:$N_F_CTF| " - has_detector PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline phos-entropy-encoder:$N_F_CTF| " - has_detector CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline cpv-entropy-encoder:$N_F_CTF| " - has_detector EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline emcal-entropy-encoder:$N_F_CTF| " - has_detector ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline zdc-entropy-encoder:$N_F_CTF| " - has_detector FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fdd-entropy-encoder:$N_F_CTF| " - has_detector HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline hmpid-entropy-encoder:$N_F_CTF| " - has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline tof-entropy-encoder:$N_F_CTF| " - has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF| " + has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF | " + has_detector FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline ft0-entropy-encoder:$N_F_CTF | " + has_detector FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fv0-entropy-encoder:$N_F_CTF | " + has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mid-entropy-encoder:$N_F_CTF | " + has_detector MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-entropy-encoder:$N_F_CTF | " + has_detector PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline phos-entropy-encoder:$N_F_CTF | " + has_detector CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline cpv-entropy-encoder:$N_F_CTF | " + has_detector EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline emcal-entropy-encoder:$N_F_CTF | " + has_detector ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline zdc-entropy-encoder:$N_F_CTF | " + has_detector FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fdd-entropy-encoder:$N_F_CTF | " + has_detector HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline hmpid-entropy-encoder:$N_F_CTF | " + has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline tof-entropy-encoder:$N_F_CTF | " + has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF | " has_detector TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " diff --git a/production/production.desc b/production/production.desc index 9ea8e08..b24bfa1 100644 --- a/production/production.desc +++ b/production/production.desc @@ -1,2 +1,2 @@ -synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 production/dpl-workflow.sh" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 production/dpl-workflow.sh" -synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"SYNCMODE=1 production/dpl-workflow.sh" +synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 production/dpl-workflow.sh" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 production/dpl-workflow.sh" +synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"SYNCMODE=1 production/dpl-workflow.sh" diff --git a/tools/parse b/tools/parse index 616edfb..489131b 100755 --- a/tools/parse +++ b/tools/parse @@ -84,7 +84,7 @@ for line in f: recoworkflows.append(filename) elif args[i].startswith("calib"): wf = args[i].split(",", 2) - wf[3] = wf[2] + wf.append(wf[2]) wf[2] = wf[1] calibworkflows.append(filename) else: From 06f4ab3595b9f0f6be91cab30219a6efed7cb00c Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 28 Sep 2021 14:09:43 +0200 Subject: [PATCH 081/236] Add TRD decoding options in EPN mode --- production/dpl-workflow.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 57172bc..d15505a 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -99,6 +99,8 @@ if [ $EPNMODE == 1 ]; then EVE_CONFIG+=" --eve-dds-collection-index 0" MFTDEC_CONFIG+=" --noise-file \"${MFT_NOISE}\"" MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" + # Options for decoding current TRD real raw data (not needed for data converted from MC) + if [ -z $TRD_DECODER_OPTIONS ]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 --ignore-digithcheader --halfchamberwords 2 --halfchambermajor 33 "; fi fi if [ $GPUTYPE == "HIP" ]; then @@ -256,7 +258,7 @@ if [ $CTFINPUT == 0 ]; then has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-data-decoder:$N_F_RAW | " has_detector TOF && [ $EPNMODE == 0 ] && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fdd-datareader-dpl:$N_F_RAW | " - has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL --pipeline trd-datareader:$N_F_RAW | " + has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline trd-datareader:$N_F_RAW | " has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline zdc-datareader-dpl:$N_F_RAW | " has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline HMP-RawStreamDecoder:$N_F_RAW | " fi From 1baa35dd8a755b27c3cb98513ad4850e35db8b2d Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 30 Sep 2021 11:01:22 +0200 Subject: [PATCH 082/236] Remove note that run.sh must run on epn245 Now all EPN nodes should have recent enough software installed. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 833d451..e325b6c 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_work # Quick guide to create and deploy detector workflow: ** Note: this is the current state of the EPN, not all configuration features (see [here](#Configuring-and-selecting-workflow-in-AliECS)) are available in AliECS yet, thus this guide shows only how to create the XML file for DDS. That XML file must then still be entered in the AliECS GUI as topology. This will be simplified in the future!** -- **Temporarily** only `epn245` has the correct O2 installed, so please connect from the EPN head node to epn245 `ssh epn245`. +- **Note** the topology must be created on an epn, which has the O2 version installed, which is requested by the topology. In principle any node should do since the installed O2 version should be the same on all nodes. - Check out the [O2DataProcessing](https://github.com/AliceO2Group/O2DataProcessing) repository to your home folder on the EPN (`$HOME` in the following). - Copy the content of `O2DataProcessing/testing/examples` (description library file `workflows.desc` and workflow script `example-workflow.sh`) to another place INSIDE the repository, usually under `testing/detectors/[DETECTOR]` or `testing/private/[USERNAME]`. - Edit the workflow script to your needs, adjust / rename the workflow in the description library file. From b3fdcb67548a0f908f506027f0b7c909541fd240 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 1 Oct 2021 13:00:53 +0200 Subject: [PATCH 083/236] Merge changes from O2 repo --- production/dpl-workflow.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index d15505a..110ef22 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -143,6 +143,7 @@ N_TPCENT=1 N_TPCITS=1 N_ITSRAWDEC=1 N_MFTRAWDEC=1 +N_CTPRAWDEC=1 N_TPCRAWDEC=$NGPUS N_EMC=1 N_TRDENT=1 @@ -200,6 +201,7 @@ N_ITSRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSRAWDEC ? 6 * 30 / $ N_MFTRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTRAWDEC ? 6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTRAWDEC)) N_ITSTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSTRK)) N_MFTTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTTRK)) +N_CTPRAWDEC=$((30 / $RECO_NUM_NODES_WORKFLOW_CMP > N_CTPRAWDEC ? 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_CTPRAWDEC)) # Apply external multiplicity factors N_TPCTRK=$((N_TPCTRK * $N_F_REST)) N_TPCITS=$((N_TPCITS * $N_F_REST)) @@ -215,6 +217,7 @@ N_TRDENT=$((N_TRDENT * $N_F_CTF)) N_ITSRAWDEC=$((N_ITSRAWDEC * $N_F_RAW)) N_MFTRAWDEC=$((N_MFTRAWDEC * $N_F_RAW)) N_TPCRAWDEC=$((N_TPCRAWDEC * $N_F_RAW)) +N_CTPRAWDEC=$((N_CTPRAWDEC * $N_F_RAW)) # --------------------------------------------------------------------------------------------------------------------- # Input workflow @@ -261,6 +264,7 @@ if [ $CTFINPUT == 0 ]; then has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline trd-datareader:$N_F_RAW | " has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline zdc-datareader-dpl:$N_F_RAW | " has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline HMP-RawStreamDecoder:$N_F_RAW | " + has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline CTP-RawStreamDecoder:$N_CTPRAWDEC | " fi # --------------------------------------------------------------------------------------------------------------------- @@ -319,6 +323,7 @@ if [ $CTFINPUT == 0 ]; then has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF | " has_detector TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " + has_detector CTP && WORKFLOW+="o2-ctp-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF| " # Calibration workflows workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " From a98d9eef309c52817f9ae9161c100e2d46624bc4 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 1 Oct 2021 13:14:43 +0200 Subject: [PATCH 084/236] fix add_comma_separated function --- common/setenv.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index f00f003..a76bca7 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -141,10 +141,10 @@ add_comma_separated() fi for ((i = 2; i <= $#; i++ )); do - if [ -z $VAR ]; then - VAR+="${!i}" + if [ -z ${!1} ]; then + eval $1+="${!i}" else - VAR+=",${!i}" + eval $1+=",${!i}" fi done } From 3583a65935c06286bf0c3a6bc08af2e48758addd Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 27 Sep 2021 21:32:28 +0200 Subject: [PATCH 085/236] Add ITS noise calibration workflow --- production/calib/its-noise-aggregator.sh | 32 +++++++++++++++++++++++ production/calib/its-noise-processing.sh | 33 ++++++++++++++++++++++++ production/standalone-calibration.desc | 1 + 3 files changed, 66 insertions(+) create mode 100755 production/calib/its-noise-aggregator.sh create mode 100755 production/calib/its-noise-processing.sh create mode 100644 production/standalone-calibration.desc diff --git a/production/calib/its-noise-aggregator.sh b/production/calib/its-noise-aggregator.sh new file mode 100755 index 0000000..7eab024 --- /dev/null +++ b/production/calib/its-noise-aggregator.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +source common/setenv.sh + +# --------------------------------------------------------------------------------------------------------------------- +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" +ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" + +PROXY_INSPEC="A:ITS/COMPCLUSTERS/0;B:ITS/PATTERNS/0;C:ITS/CLUSTERSROF/0;eos:***/INFORMATION" + +WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=its-noise-calib,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " +WORKFLOW+="o2-calibration-its-calib-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --prob-threshold 1e-5 | " +WORKFLOW+="o2-calibration-ccdb-populator-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ccdb-path=\"http://ccdb-test.cern.ch:8080\" | " +WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi diff --git a/production/calib/its-noise-processing.sh b/production/calib/its-noise-processing.sh new file mode 100755 index 0000000..f8a6eaa --- /dev/null +++ b/production/calib/its-noise-processing.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +source common/setenv.sh + +# --------------------------------------------------------------------------------------------------------------------- +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" +ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" + +PROXY_INSPEC="A:ITS/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" +PROXY_OUTSPEC="downstreamA:ITS/COMPCLUSTERS/0;downstreamB:ITS/PATTERNS/0;downstreamC:ITS/CLUSTERSROF/0" + +WORKFLOW="o2-dpl-raw-proxy ${ARGS_ALL} --dataspec \"$PROXY_INSPEC\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " +WORKFLOW+="o2-itsmft-stf-decoder-workflow ${ARGS_ALL} --configKeyValues \"$ARGS_ALL_CONFIG\" --nthreads 4 | " +WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --channel-config \"name=its-noise-calib,method=connect,type=push,transport=zeromq\" | " +WORKFLOW+="o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi diff --git a/production/standalone-calibration.desc b/production/standalone-calibration.desc new file mode 100644 index 0000000..77bbcd7 --- /dev/null +++ b/production/standalone-calibration.desc @@ -0,0 +1 @@ +ITS-noise-calibration: "DataDistribution QualityControl" reco,10,10,"production/calib/its-noise-processing.sh" calib,10,"production/calib/its-noise-aggregator.sh" From 157fc8ca73fe88d00d0bfb8ab7715a09b7fec705 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 1 Oct 2021 13:21:35 +0200 Subject: [PATCH 086/236] Use helper function to simplify checking of detector list for multiple detectors --- common/setenv.sh | 45 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index a76bca7..977e422 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -79,55 +79,50 @@ has_detector() [[ $WORKFLOW_DETECTORS =~ (^|,)"$1"(,|$) ]] } -has_detectors() +has_detector_qc() { - while true; do - if [ "0$1" == "0" ]; then return 0; fi - if ! has_detector $1; then return 1; fi - shift - done + has_detector $1 && [[ $WORKFLOW_DETECTORS_QC =~ (^|,)"$1"(,|$) ]] } -has_detector_qc() +has_detector_calib() { - has_detector $1 && [[ $WORKFLOW_DETECTORS_QC =~ (^|,)"$1"(,|$) ]] + has_detector $1 && [[ $WORKFLOW_DETECTORS_CALIB =~ (^|,)"$1"(,|$) ]] } -has_detectors_qc() +workflow_has_parameter() +{ + [[ $WORKFLOW_PARAMETERS =~ (^|,)"$1"(,|$) ]] +} + +_check_multiple() { + CHECKER=$1 + shift while true; do if [ "0$1" == "0" ]; then return 0; fi - if ! has_detector_qc $1; then return 1; fi + if ! $CHECKER $1; then return 1; fi shift done } -has_detector_calib() +has_detectors() { - has_detector $1 && [[ $WORKFLOW_DETECTORS_CALIB =~ (^|,)"$1"(,|$) ]] + _check_multiple has_detector $@ } -has_detectors_calib() +has_detectors_qc() { - while true; do - if [ "0$1" == "0" ]; then return 0; fi - if ! has_detector_calib $1; then return 1; fi - shift - done + _check_multiple has_detector_qc $@ } -workflow_has_parameter() +has_detectors_calib() { - [[ $WORKFLOW_PARAMETERS =~ (^|,)"$1"(,|$) ]] + _check_multiple has_detector_calib $@ } workflow_has_parameters() { - while true; do - if [ "0$1" == "0" ]; then return 0; fi - if ! workflow_has_parameter $1; then return 1; fi - shift - done + _check_multiple workflow_has_parameter $@ } add_comma_separated() From 32138f6984d454f405ce928c445cf51119a3cdfd Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 1 Oct 2021 13:27:05 +0200 Subject: [PATCH 087/236] Define list of detectors only in one place --- common/setenv.sh | 4 +++- production/qc-workflow.sh | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 977e422..6b4258e 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -7,6 +7,8 @@ if [ $? != 0 ]; then exit 1 fi +LIST_OF_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH,CTP" + if [ -z "$NTIMEFRAMES" ]; then export NTIMEFRAMES=1; fi # Number of time frames to process if [ -z "$TFDELAY" ]; then export TFDELAY=100; fi # Delay in seconds between publishing time frames if [ -z "$GPUTYPE" ]; then export GPUTYPE=CPU; fi # GPU Tracking backend to use, can be CPU / CUDA / HIP / OCL / OCL2 @@ -43,7 +45,7 @@ else # Defaults when running on the EPN if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # NOTE: SHMTHROW SHOULD BE 0 FOR EPN, BUT IS =1 FOR TESTS DURING COMMISSIONING WHILE WE HAVE NO MEMORY MONITORING fi # Detectors used in the workflow / enabled parameters -if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH,CTP"; fi +if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS=$LIST_OF_DETECTORS; fi if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ "0$WORKFLOW_DETECTORS_CALIB" == "0ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 808326b..9ce6ba9 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -17,7 +17,7 @@ fi JSON_FILES= OUTPUT_SUFFIX= -for i in ITS MFT TPC TOF FT0 MID EMC PHS CPV ZDC FDD HMP FV0 TRD MCH; do +for i in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do DET_JSON_FILE="QC_JSON_$i" if has_detector_qc $i && [ ! -z "${!DET_JSON_FILE}" ]; then JSON_FILES+=" ${!DET_JSON_FILE}" @@ -33,7 +33,7 @@ if [ ! -z "$JSON_FILES" ]; then MERGED_JSON_FILENAME=$GEN_TOPO_WORKDIR/json_cache/`date +%Y%m%d-%H%M%S`-$$-$RANDOM-$OUTPUT_SUFFIX.json jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' $JSON_FILES > $MERGED_JSON_FILENAME if [ $? != 0 ]; then - echo Merging QC workflow failed 1>&2 + echo Merging QC workflow with JSON files $JSON_FILES failed 1>&2 exit 1 fi MERGED_JSON_FILENAME=`realpath $MERGED_JSON_FILENAME` From 6cdb5e97dad997ddbffa54c9b43bcd9fc2caebc4 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 1 Oct 2021 14:35:17 +0200 Subject: [PATCH 088/236] Add WORKFLOW_DETECTORS_FLP_PROCESSING option --- common/setenv.sh | 24 +++++++++++++++++++----- production/README.md | 5 ++++- production/dpl-workflow.sh | 12 +++++++++--- tools/epn/run.sh | 2 ++ 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 6b4258e..1fbf4e5 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -8,6 +8,13 @@ if [ $? != 0 ]; then fi LIST_OF_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH,CTP" +# Detectors used in the workflow / enabled parameters +if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS=$LIST_OF_DETECTORS; fi +if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi +if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ "0$WORKFLOW_DETECTORS_CALIB" == "0ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi +if [ -z "${WORKFLOW_DETECTORS_RECO+x}" ] || [ "0$WORKFLOW_DETECTORS_RECO" == "0ALL" ]; then export WORKFLOW_DETECTORS_RECO=$WORKFLOW_DETECTORS; fi +if [ "0$WORKFLOW_DETECTORS_FLP_PROCESSING" == "0ALL" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING=$WORKFLOW_DETECTORS; fi +if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi if [ -z "$NTIMEFRAMES" ]; then export NTIMEFRAMES=1; fi # Number of time frames to process if [ -z "$TFDELAY" ]; then export TFDELAY=100; fi # Delay in seconds between publishing time frames @@ -37,18 +44,15 @@ if [ $EPNMODE == 0 ]; then if [ -z "$EXTINPUT" ]; then export EXTINPUT=0; fi # Receive input from raw FMQ channel instead of running o2-raw-file-reader if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=0; fi # Set default EPN pipeline multiplicities if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # Throw exception when running out of SHM + if [ -z "${WORKFLOW_DETECTORS_FLP_PROCESSING+x}" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING=""; fi # No FLP processing by default when we do not run the sync EPN workflow, e.g. full system test will also run full FLP processing else # Defaults when running on the EPN if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 256 << 30 )); fi if [ -z "$NGPUS" ]; then export NGPUS=4; fi if [ -z "$EXTINPUT" ]; then export EXTINPUT=1; fi if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=1; fi if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # NOTE: SHMTHROW SHOULD BE 0 FOR EPN, BUT IS =1 FOR TESTS DURING COMMISSIONING WHILE WE HAVE NO MEMORY MONITORING + if [ -z "${WORKFLOW_DETECTORS_FLP_PROCESSING+x}" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF"; fi # Current default in sync processing is that FLP processing is only enabled for TOF fi -# Detectors used in the workflow / enabled parameters -if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS=$LIST_OF_DETECTORS; fi -if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi -if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ "0$WORKFLOW_DETECTORS_CALIB" == "0ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi -if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi # Some more options for running on the EPN if [ -z "$INFOLOGGER_SEVERITY" ]; then export INFOLOGGER_SEVERITY="warning"; fi if [ -z "$MULTIPLICITY_FACTOR_RAWDECODERS" ]; then export MULTIPLICITY_FACTOR_RAWDECODERS=1; fi @@ -91,6 +95,16 @@ has_detector_calib() has_detector $1 && [[ $WORKFLOW_DETECTORS_CALIB =~ (^|,)"$1"(,|$) ]] } +has_detector_reco() +{ + has_detector $1 && [[ $WORKFLOW_DETECTORS_RECO =~ (^|,)"$1"(,|$) ]] +} + +has_detector_flp_processing() +{ + has_detector $1 && [[ $WORKFLOW_DETECTORS_FLP_PROCESSING =~ (^|,)"$1"(,|$) ]] +} + workflow_has_parameter() { [[ $WORKFLOW_PARAMETERS =~ (^|,)"$1"(,|$) ]] diff --git a/production/README.md b/production/README.md index 990508a..86ccd1c 100644 --- a/production/README.md +++ b/production/README.md @@ -10,6 +10,7 @@ You can use the following options to change the workflow behavior: - `WORKFLOW_DETECTORS` (default `ALL`) : Comma-separated list of detectors for which the processing is enabled. If these are less detectors than participating in the run, data of the other detectors is ignored. If these are more detectors than participating in the run, the processes for the additional detectors will be started but will not do anything. - `WORKFLOW_DETECTORS_QC` (default `ALL`) : Comma-separated list of detectors for which to run QC, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the QC is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=QC` is set. - `WORKFLOW_DETECTORS_CALIB` (default `ALL`) : Comma-separated list of detectors for which to run calibration, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the calibration is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=CALIB` is set. +- `WORKFLOW_DETECTORS_FLP_PROCESSING` (default `TOF` for sync processing on EPN, `NONE` otherwise) : Signals that these detectors have processing on the FLP enabled. The corresponding steps are thus inactive in the EPN epl-workflow, and the raw-proxy is configured to receive the FLP-processed data instead of the raw data in that case. - `WORKFLOW_PARAMETERS` (default `NONE`) : Comma-separated list, enables additional features of the workflow. Currently the following features are available: - `GPU` : Performs the TPC processing on the GPU, otherwise everything is processed on the CPU. - `CTF` : Write the CTF to disk (CTF creation is always enabled, but if this parameter is missing, it is not stored). @@ -22,7 +23,9 @@ You can use the following options to change the workflow behavior: - `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. - `MULTIPLICITY_FACTOR_REST` (default `1`) : Scales the number of other reconstruction processes by this factor. -For user modification of the workflow, the folloing *EXTRA* environment variables exist: +Most of these settings are configurable in the AliECS GUI. But some of the uncommon settings (`WORKFLOW_DETECTORS_FLP_PROCESSING`) can only be set via the "Additional environment variables field" in the GUI using bash syntax, e.g. `WORKFLOW_DETECTORS_FLP_PROCESSING=TPC`. + +For user modification of the workflow settings, the folloing *EXTRA* environment variables exist: - `ARGS_ALL_EXTRA` : Extra command line options added to all workflows - `ALL_EXTRA_CONFIG` : Extra config key values added to all workflows - `GPU_EXTRA_CONFIG` : Extra options added to the configKeyValues of the GPU workflow diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 110ef22..fc79a95 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -231,8 +231,14 @@ elif [ $EXTINPUT == 1 ]; then PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" PROXY_IN_N=0 for i in `echo "$WORKFLOW_DETECTORS" | sed "s/,/ /g"`; do - if [ $EPNMODE == 1 ] && [ $i == "TOF" ]; then - PROXY_INTYPE=CRAWDATA + if has_detector_flp_processing $i; then + case $i in + TOF) + PROXY_INTYPE=CRAWDATA;; + *) + echo Input type for detector $i with FLP processing not defined 1>&2 + exit 1;; + esac else PROXY_INTYPE=RAWDATA fi @@ -259,7 +265,7 @@ if [ $CTFINPUT == 0 ]; then has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fv0-datareader-dpl:$N_F_RAW | " has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline MIDRawDecoder:$N_F_RAW,MIDDecodedDataAggregator:$N_F_RAW | " has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-data-decoder:$N_F_RAW | " - has_detector TOF && [ $EPNMODE == 0 ] && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " + has_detector TOF && ! has_detector_flp_processing TOF && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fdd-datareader-dpl:$N_F_RAW | " has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline trd-datareader:$N_F_RAW | " has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline zdc-datareader-dpl:$N_F_RAW | " diff --git a/tools/epn/run.sh b/tools/epn/run.sh index ca528c3..2f75a6f 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -16,6 +16,8 @@ export GEN_TOPO_WORKFLOW_NAME=ctf-and-display # Name of w export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_DETECTORS_RECO= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_DETECTORS_FLP_PROCESSING= # Optional parameters for the workflow: Detectors to run calibration for export WORKFLOW_PARAMETERS= # Additional paramters for the workflow export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) export NHBPERTF=256 # Number of HBF per TF From 3cf2e2703634151c55b3392271d737e4feeae91f Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 1 Oct 2021 15:13:45 +0200 Subject: [PATCH 089/236] Add WORKFLOW_DETECTORS_RECO and WORKFLOW_DETECTORS_CTF options --- common/setenv.sh | 21 ++++++++ production/README.md | 3 +- production/dpl-workflow.sh | 98 ++++++++++++++++++-------------------- 3 files changed, 69 insertions(+), 53 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 1fbf4e5..0a81007 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -13,6 +13,7 @@ if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; the if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ "0$WORKFLOW_DETECTORS_CALIB" == "0ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi if [ -z "${WORKFLOW_DETECTORS_RECO+x}" ] || [ "0$WORKFLOW_DETECTORS_RECO" == "0ALL" ]; then export WORKFLOW_DETECTORS_RECO=$WORKFLOW_DETECTORS; fi +if [ -z "${WORKFLOW_DETECTORS_CTF+x}" ] || [ "0$WORKFLOW_DETECTORS_CTF" == "0ALL" ]; then export WORKFLOW_DETECTORS_CTF=$WORKFLOW_DETECTORS; fi if [ "0$WORKFLOW_DETECTORS_FLP_PROCESSING" == "0ALL" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING=$WORKFLOW_DETECTORS; fi if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi @@ -100,6 +101,11 @@ has_detector_reco() has_detector $1 && [[ $WORKFLOW_DETECTORS_RECO =~ (^|,)"$1"(,|$) ]] } +has_detector_ctf() +{ + has_detector $1 && [[ $WORKFLOW_DETECTORS_CTF =~ (^|,)"$1"(,|$) ]] +} + has_detector_flp_processing() { has_detector $1 && [[ $WORKFLOW_DETECTORS_FLP_PROCESSING =~ (^|,)"$1"(,|$) ]] @@ -136,6 +142,21 @@ has_detectors_calib() _check_multiple has_detector_calib $@ } +has_detectors_reco() +{ + _check_multiple has_detector_reco $@ +} + +has_detectors_ctf() +{ + _check_multiple has_detector_ctf $@ +} + +has_detectors_flp_processing() +{ + _check_multiple has_detector_flp_processing $@ +} + workflow_has_parameters() { _check_multiple workflow_has_parameter $@ diff --git a/production/README.md b/production/README.md index 86ccd1c..5fe796e 100644 --- a/production/README.md +++ b/production/README.md @@ -11,13 +11,14 @@ You can use the following options to change the workflow behavior: - `WORKFLOW_DETECTORS_QC` (default `ALL`) : Comma-separated list of detectors for which to run QC, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the QC is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=QC` is set. - `WORKFLOW_DETECTORS_CALIB` (default `ALL`) : Comma-separated list of detectors for which to run calibration, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the calibration is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=CALIB` is set. - `WORKFLOW_DETECTORS_FLP_PROCESSING` (default `TOF` for sync processing on EPN, `NONE` otherwise) : Signals that these detectors have processing on the FLP enabled. The corresponding steps are thus inactive in the EPN epl-workflow, and the raw-proxy is configured to receive the FLP-processed data instead of the raw data in that case. +- `WORKFLOW_DETECTORS_RECO` (default `ALL`) : Comma-sepated list of detectors for which to run reconstruction. +- `WORKFLOW_DETECTORS_CTF` (default `ALL`) : Comma-sepated list of detectors to include in CTF. If a detectors requires the reconstruction to generate its CTF part, the detector must also be present in `WORKFLOW_DETECTORS_RECO`. - `WORKFLOW_PARAMETERS` (default `NONE`) : Comma-separated list, enables additional features of the workflow. Currently the following features are available: - `GPU` : Performs the TPC processing on the GPU, otherwise everything is processed on the CPU. - `CTF` : Write the CTF to disk (CTF creation is always enabled, but if this parameter is missing, it is not stored). - `EVENT_DISPLAY` : Enable JSON export for event display. - `QC` : Enable QC. - `CALIB` : Enable calibration (not yet working!) - - `CTF_ONLY` : Disables all processing except what is needed for the CTF (currently partially incompatible to `QC` and `CALIB` depending on the detectors). - `RECO_NUM_NODES_OVERRIDE` (default `0`) : Overrides the number of EPN nodes used for the reconstruction (`0` or empty means default). - `MULTIPLICITY_FACTOR_RAWDECODERS` (default `1`) : Scales the number of parallel processes used for raw decoding by this factor. - `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index fc79a95..daf1f0a 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -132,7 +132,7 @@ if [ $HOSTMEMSIZE != "0" ]; then GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" fi -if workflow_has_parameter CTF_ONLY; then +if ! has_detector_reco TOF; then TOF_OUTPUT=digits fi @@ -252,7 +252,7 @@ else fi # --------------------------------------------------------------------------------------------------------------------- -# Raw decoder workflows +# Raw decoder workflows - disabled in async mode if [ $CTFINPUT == 0 ]; then if has_detector TPC && [ $EPNMODE == 1 ]; then GPU_INPUT=zsonthefly @@ -271,68 +271,58 @@ if [ $CTFINPUT == 0 ]; then has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline zdc-datareader-dpl:$N_F_RAW | " has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline HMP-RawStreamDecoder:$N_F_RAW | " has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline CTP-RawStreamDecoder:$N_CTPRAWDEC | " + has_detector PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output --pipeline PHOSRawToCellConverterSpec:$N_F_REST $DISABLE_MC | " + has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output --pipeline CPVRawToDigitConverterSpec:$N_F_REST,CPVClusterizerSpec:$N_F_REST $DISABLE_MC | " + has_detector EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " fi # --------------------------------------------------------------------------------------------------------------------- # Common reconstruction workflows -has_detector TPC && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " -has_detector TOF && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC --pipeline tof-compressed-decoder:$N_F_RAW,TOFClusterer:$N_F_REST | " -if ! workflow_has_parameter CTF_ONLY; then - has_detector ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " - has_detectors ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " - has_detector FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline ft0-reconstructor:$N_F_REST | " - has_detector TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " - has_detectors TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " -fi +(has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " +(has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC --pipeline tof-compressed-decoder:$N_F_RAW,TOFClusterer:$N_F_REST | " +has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " +has_detectors_reco ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " +has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline ft0-reconstructor:$N_F_REST | " +has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " +has_detectors_reco TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " # --------------------------------------------------------------------------------------------------------------------- -# Workflows disabled in sync mode +# Reconstruction workflows in async mode if [ $SYNCMODE == 0 ]; then - has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " - has_detector MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline MIDClusterizer:$N_F_REST,MIDTracker:$N_F_REST | " - has_detector MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK,mch-cluster-finder:$N_F_REST,mch-cluster-transformer:$N_F_REST | " - has_detector MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " - has_detectors MFT MCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline globalfwd-track-matcher:$N_F_REST | " - has_detectors ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " - has_detectors ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " - has_detector FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " - has_detector FDD && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " - has_detector ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " + has_detectors_reco TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " + has_detector_reco MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline MIDClusterizer:$N_F_REST,MIDTracker:$N_F_REST | " + has_detector_reco MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK,mch-cluster-finder:$N_F_REST,mch-cluster-transformer:$N_F_REST | " + has_detector_reco MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " + has_detectors_reco MFT MCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline globalfwd-track-matcher:$N_F_REST | " + has_detectors_reco ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " + has_detectors_reco ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " + has_detector_reco FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " + has_detector_reco FDD && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " + has_detector_reco ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " +else # Reconstruction workflows in sync mode + has_detectors_reco TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " fi # --------------------------------------------------------------------------------------------------------------------- -# Workflows disabled in async mode +# Entropy encoding / ctf creation workflows - disabled in async mode if [ $CTFINPUT == 0 ]; then - has_detector PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output --pipeline PHOSRawToCellConverterSpec:$N_F_REST $DISABLE_MC | " - has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output --pipeline CPVRawToDigitConverterSpec:$N_F_REST,CPVClusterizerSpec:$N_F_REST $DISABLE_MC | " - has_detector EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " - if ! workflow_has_parameter CTF_ONLY; then - # Reconstruction workflows - if [ $SYNCMODE == 1 ]; then # Otherwise already present in async setup - has_detectors TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " - fi - fi - # Entropy encoder workflows - has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF | " - has_detector FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline ft0-entropy-encoder:$N_F_CTF | " - has_detector FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fv0-entropy-encoder:$N_F_CTF | " - has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mid-entropy-encoder:$N_F_CTF | " - has_detector MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-entropy-encoder:$N_F_CTF | " - has_detector PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline phos-entropy-encoder:$N_F_CTF | " - has_detector CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline cpv-entropy-encoder:$N_F_CTF | " - has_detector EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline emcal-entropy-encoder:$N_F_CTF | " - has_detector ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline zdc-entropy-encoder:$N_F_CTF | " - has_detector FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fdd-entropy-encoder:$N_F_CTF | " - has_detector HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline hmpid-entropy-encoder:$N_F_CTF | " - has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline tof-entropy-encoder:$N_F_CTF | " - has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF | " - has_detector TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " - has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " - has_detector CTP && WORKFLOW+="o2-ctp-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF| " - - # Calibration workflows - workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " + has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF | " + has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline ft0-entropy-encoder:$N_F_CTF | " + has_detector_ctf FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fv0-entropy-encoder:$N_F_CTF | " + has_detector_ctf MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mid-entropy-encoder:$N_F_CTF | " + has_detector_ctf MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-entropy-encoder:$N_F_CTF | " + has_detector_ctf PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline phos-entropy-encoder:$N_F_CTF | " + has_detector_ctf CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline cpv-entropy-encoder:$N_F_CTF | " + has_detector_ctf EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline emcal-entropy-encoder:$N_F_CTF | " + has_detector_ctf ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline zdc-entropy-encoder:$N_F_CTF | " + has_detector_ctf FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fdd-entropy-encoder:$N_F_CTF | " + has_detector_ctf HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline hmpid-entropy-encoder:$N_F_CTF | " + has_detector_ctf TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline tof-entropy-encoder:$N_F_CTF | " + has_detector_ctf ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF | " + has_detector_ctf TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " + has_detector_ctf TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " + has_detector_ctf CTP && WORKFLOW+="o2-ctp-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF| " # CTF / dictionary writer workflow if [ $SAVECTF == 1 ]; then @@ -351,6 +341,10 @@ if [ $CTFINPUT == 0 ]; then WORKFLOW+="$CMD_CTF | " fi +# --------------------------------------------------------------------------------------------------------------------- +# Calibration workflows +workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " + # --------------------------------------------------------------------------------------------------------------------- # Event display workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --display-tracks TPC --display-clusters TPC $EVE_CONFIG $DISABLE_MC | " From 02525a557217c20e433b4460358e93f533b47736 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 1 Oct 2021 18:34:56 +0200 Subject: [PATCH 090/236] Add WORKFLOW_DETECTORS_MATCHING option --- common/setenv.sh | 5 +++++ production/README.md | 7 ++++--- production/dpl-workflow.sh | 33 +++++++++++++++++++++------------ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 0a81007..e281918 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -111,6 +111,11 @@ has_detector_flp_processing() has_detector $1 && [[ $WORKFLOW_DETECTORS_FLP_PROCESSING =~ (^|,)"$1"(,|$) ]] } +has_detector_matching() +{ + [[ $WORKFLOW_DETECTORS_MATCHING =~ (^|,)"ALL"(,|$) ]] || [[ $WORKFLOW_DETECTORS_MATCHING =~ (^|,)"$1"(,|$) ]] +} + workflow_has_parameter() { [[ $WORKFLOW_PARAMETERS =~ (^|,)"$1"(,|$) ]] diff --git a/production/README.md b/production/README.md index 5fe796e..c625eef 100644 --- a/production/README.md +++ b/production/README.md @@ -11,8 +11,9 @@ You can use the following options to change the workflow behavior: - `WORKFLOW_DETECTORS_QC` (default `ALL`) : Comma-separated list of detectors for which to run QC, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the QC is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=QC` is set. - `WORKFLOW_DETECTORS_CALIB` (default `ALL`) : Comma-separated list of detectors for which to run calibration, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the calibration is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=CALIB` is set. - `WORKFLOW_DETECTORS_FLP_PROCESSING` (default `TOF` for sync processing on EPN, `NONE` otherwise) : Signals that these detectors have processing on the FLP enabled. The corresponding steps are thus inactive in the EPN epl-workflow, and the raw-proxy is configured to receive the FLP-processed data instead of the raw data in that case. -- `WORKFLOW_DETECTORS_RECO` (default `ALL`) : Comma-sepated list of detectors for which to run reconstruction. -- `WORKFLOW_DETECTORS_CTF` (default `ALL`) : Comma-sepated list of detectors to include in CTF. If a detectors requires the reconstruction to generate its CTF part, the detector must also be present in `WORKFLOW_DETECTORS_RECO`. +- `WORKFLOW_DETECTORS_RECO` (default `ALL`) : Comma-separated list of detectors for which to run reconstruction. +- `WORKFLOW_DETECTORS_CTF` (default `ALL`) : Comma-separated list of detectors to include in CTF. +- `WORKFLOW_DETECTORS_MATCHING` (default selected corresponding to default workflow for sync or async mode respectively) : Comma-separated list of matching / vertexing algorithms to run. Use `ALL` to enable all of them. Currently supported options: `ITSTPC`, `TPCTRD`, `ITSTPCTRD`, `TPCTOF`, `ITSTPCTOF`, `MFTMCH`, `PRIMVTX`, `SECVTX`. - `WORKFLOW_PARAMETERS` (default `NONE`) : Comma-separated list, enables additional features of the workflow. Currently the following features are available: - `GPU` : Performs the TPC processing on the GPU, otherwise everything is processed on the CPU. - `CTF` : Write the CTF to disk (CTF creation is always enabled, but if this parameter is missing, it is not stored). @@ -24,7 +25,7 @@ You can use the following options to change the workflow behavior: - `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. - `MULTIPLICITY_FACTOR_REST` (default `1`) : Scales the number of other reconstruction processes by this factor. -Most of these settings are configurable in the AliECS GUI. But some of the uncommon settings (`WORKFLOW_DETECTORS_FLP_PROCESSING`) can only be set via the "Additional environment variables field" in the GUI using bash syntax, e.g. `WORKFLOW_DETECTORS_FLP_PROCESSING=TPC`. +Most of these settings are configurable in the AliECS GUI. But some of the uncommon settings (`WORKFLOW_DETECTORS_FLP_PROCESSING`, `WORKFLOW_DETECTORS_CTF`, `WORKFLOW_DETECTORS_RECO`, `WORKFLOW_DETECTORS_MATCHING`) can only be set via the "Additional environment variables field" in the GUI using bash syntax, e.g. `WORKFLOW_DETECTORS_FLP_PROCESSING=TPC`. For user modification of the workflow settings, the folloing *EXTRA* environment variables exist: - `ARGS_ALL_EXTRA` : Extra command line options added to all workflows diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index daf1f0a..1e94ce8 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -12,6 +12,12 @@ if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enab if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers +if [ $SYNCMODE == 1 ]; then + if [ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]; then export WORKFLOW_DETECTORS_MATCHING="ITSTPC,ITSTPCTRD,ITSTPCTOF"; fi # Select matchings that are enabled in sync mode +else + if [ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]; then export WORKFLOW_DETECTORS_MATCHING="ALL"; fi # All matching / vertexing enabled in async mode +fi + workflow_has_parameter CTF && export SAVECTF=1 workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } @@ -70,6 +76,8 @@ ITS_CONFIG_KEY= TRD_CONFIG= TRD_CONFIG_KEY= TRD_TRANSFORMER_CONFIG= +TRD_SOURCES= +TOF_SOURCES= EVE_CONFIG=" --jsons-folder $EDJSONS_DIR" MFTDEC_CONFIG= MIDDEC_CONFIG= @@ -81,12 +89,14 @@ if [ $SYNCMODE == 1 ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" fi GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" - TRD_CONFIG+=" --track-sources ITS-TPC --filter-trigrec" + TRD_CONFIG+=" --filter-trigrec" TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" -else - TRD_CONFIG+=" --track-sources TPC,ITS-TPC" fi +has_detector_matching TPCTRD && add_comma_separated TRD_SOURCES TPC +has_detector_matching ITSTPCTRD && add_comma_separated TRD_SOURCES ITS-TPC +has_detector_matching TPCTOF && add_comma_separated TOF_SOURCES TPC +has_detector_matching ITSTPCTOF && add_comma_separated TOF_SOURCES ITS-TPC if [ $CTFINPUT == 1 ]; then ITS_CONFIG+=" --tracking-mode async" @@ -281,31 +291,30 @@ fi (has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " (has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC --pipeline tof-compressed-decoder:$N_F_RAW,TOFClusterer:$N_F_REST | " has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " -has_detectors_reco ITS TPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " +has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline ft0-reconstructor:$N_F_REST | " has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " -has_detectors_reco TRD TPC ITS && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG | " +has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES | " +has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources $TOF_SOURCES --pipeline tof-matcher:$N_TOFMATCH | " # --------------------------------------------------------------------------------------------------------------------- # Reconstruction workflows in async mode if [ $SYNCMODE == 0 ]; then - has_detectors_reco TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"TPC,ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " has_detector_reco MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline MIDClusterizer:$N_F_REST,MIDTracker:$N_F_REST | " has_detector_reco MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK,mch-cluster-finder:$N_F_REST,mch-cluster-transformer:$N_F_REST | " has_detector_reco MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " - has_detectors_reco MFT MCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline globalfwd-track-matcher:$N_F_REST | " - has_detectors_reco ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " - has_detectors_reco ITS TPC TRD TOF FT0 MCH MFT && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " has_detector_reco FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector_reco FDD && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector_reco ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " -else # Reconstruction workflows in sync mode - has_detectors_reco TOF TRD TPC ITS && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources \"ITS-TPC\" --pipeline tof-matcher:$N_TOFMATCH | " fi +has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline globalfwd-track-matcher:$N_F_REST | " +has_detectors_reco ITS TPC TRD TOF FT0 MCH MFT && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " +has_detectors_reco ITS TPC TRD TOF FT0 MCH MFT && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " + # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode -if [ $CTFINPUT == 0 ]; then +if [ $CTFINPUT == 0 ] && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then # Entropy encoder workflows has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF | " has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline ft0-entropy-encoder:$N_F_CTF | " From 0187d7e9e37eff46c2ee2780ac870b6caeb6d182 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 2 Oct 2021 19:32:01 +0200 Subject: [PATCH 091/236] Fix Typo --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 1e94ce8..d38874c 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -304,7 +304,7 @@ if [ $SYNCMODE == 0 ]; then has_detector_reco MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK,mch-cluster-finder:$N_F_REST,mch-cluster-transformer:$N_F_REST | " has_detector_reco MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " has_detector_reco FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " - has_detector_reco FDD && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " + has_detector_reco FV0 && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector_reco ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " fi From dc9b26827317c21173a78388f1e6d03e9b94dfda Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 2 Oct 2021 19:32:34 +0200 Subject: [PATCH 092/236] Add FV0 / FT0 QC workflows --- production/qc-workflow.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 9ce6ba9..ca12484 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -4,6 +4,8 @@ [ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/epn/jliu/itsEPNv2.json [ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster.json [ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json +[ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/work/epn/configs/qc/ft0-digits-qc-ds.json +[ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/work/epn/configs/qc/fv0-digits-qc-ds.json if [ -z "$WORKFLOW" ]; then echo This script must be called from the dpl-workflow.sh and not standalone 1>&2 From 0740d64f5cf9447a5939e7a669802ca793cf9bad Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 2 Oct 2021 19:46:25 +0200 Subject: [PATCH 093/236] Add FLP processing handling for FV0/FT0/FDD/EMC/PHS/CPV --- production/dpl-workflow.sh | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index d38874c..ea32fb2 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -78,6 +78,7 @@ TRD_CONFIG_KEY= TRD_TRANSFORMER_CONFIG= TRD_SOURCES= TOF_SOURCES= +CPV_INPUT=raw EVE_CONFIG=" --jsons-folder $EDJSONS_DIR" MFTDEC_CONFIG= MIDDEC_CONFIG= @@ -98,6 +99,8 @@ has_detector_matching ITSTPCTRD && add_comma_separated TRD_SOURCES ITS-TPC has_detector_matching TPCTOF && add_comma_separated TOF_SOURCES TPC has_detector_matching ITSTPCTOF && add_comma_separated TOF_SOURCES ITS-TPC +has_detector_flp_processing CPV && CPV_INPUT=digits + if [ $CTFINPUT == 1 ]; then ITS_CONFIG+=" --tracking-mode async" else @@ -211,7 +214,7 @@ N_ITSRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSRAWDEC ? 6 * 30 / $ N_MFTRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTRAWDEC ? 6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTRAWDEC)) N_ITSTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSTRK)) N_MFTTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTTRK)) -N_CTPRAWDEC=$((30 / $RECO_NUM_NODES_WORKFLOW_CMP > N_CTPRAWDEC ? 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_CTPRAWDEC)) +N_CTPRAWDEC=$((30 / $RECO_NUM_NODES_WORKFLOW_CMP > N_CTPRAWDEC ? 30 / $RECO_NUM_NODhas_detector_flp_processing CPVES_WORKFLOW_CMP : $N_CTPRAWDEC)) # Apply external multiplicity factors N_TPCTRK=$((N_TPCTRK * $N_F_REST)) N_TPCITS=$((N_TPCITS * $N_F_REST)) @@ -244,7 +247,15 @@ elif [ $EXTINPUT == 1 ]; then if has_detector_flp_processing $i; then case $i in TOF) - PROXY_INTYPE=CRAWDATA;; + PROXY_INTYPE="CRAWDATA";; + FT0 | FV0 | FDD) + PROXY_INTYPE="DIGITSBC/0 DIGITSCH/0";; + PHS) + PROXY_INTYPE="CELLS CELLTRIGREC";; + CPV) + PROXY_INTYPE="DIGITS/0 DIGITTRIGREC/0 RAWHWERRORS";; + EMC) + PROXY_INTYPE="CELLS/0 CELLSTRGR/0 DECODERERR";; *) echo Input type for detector $i with FLP processing not defined 1>&2 exit 1;; @@ -252,9 +263,11 @@ elif [ $EXTINPUT == 1 ]; then else PROXY_INTYPE=RAWDATA fi - PROXY_INNAME="RAWIN$PROXY_IN_N" - let PROXY_IN_N=$PROXY_IN_N+1 - PROXY_INSPEC+=";$PROXY_INNAME:$i/$PROXY_INTYPE" + for j in $PROXY_INTYPE; do + PROXY_INNAME="RAWIN$PROXY_IN_N" + let PROXY_IN_N=$PROXY_IN_N+1 + PROXY_INSPEC+=";$PROXY_INNAME:$i/$j" + done done WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"$PROXY_INSPEC\" --channel-config \"$PROXY_CHANNEL\" | " else @@ -267,23 +280,24 @@ if [ $CTFINPUT == 0 ]; then if has_detector TPC && [ $EPNMODE == 1 ]; then GPU_INPUT=zsonthefly WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline tpc-raw-to-digits-0:$N_TPCRAWDEC | " - WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:$N_TPCRAWDEC | " + WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS[ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/work/epn/configs/qc/ft0-digits-qc-ds.json +[ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/work/epn/configs/qc/fv0-digits-qc-ds.json_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:$N_TPCRAWDEC | " fi has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${ITSCLUSDICT}\" --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:$N_ITSRAWDEC | " has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:$N_MFTRAWDEC ${MFTDEC_CONFIG} --runmft true | " - has_detector FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline ft0-datareader-dpl:$N_F_RAW | " - has_detector FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fv0-datareader-dpl:$N_F_RAW | " + has_detector FT0 && ! has_detector_flp_processing FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline ft0-datareader-dpl:$N_F_RAW | " + has_detector FV0 && ! has_detector_flp_processing FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fv0-datareader-dpl:$N_F_RAW | " has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline MIDRawDecoder:$N_F_RAW,MIDDecodedDataAggregator:$N_F_RAW | " has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-data-decoder:$N_F_RAW | " has_detector TOF && ! has_detector_flp_processing TOF && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fdd-datareader-dpl:$N_F_RAW | " + has_detector FDD && ! has_detector_flp_processing FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fdd-datareader-dpl:$N_F_RAW | " has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline trd-datareader:$N_F_RAW | " has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline zdc-datareader-dpl:$N_F_RAW | " has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline HMP-RawStreamDecoder:$N_F_RAW | " has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline CTP-RawStreamDecoder:$N_CTPRAWDEC | " - has_detector PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output --pipeline PHOSRawToCellConverterSpec:$N_F_REST $DISABLE_MC | " - has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type clusters --disable-root-input --disable-root-output --pipeline CPVRawToDigitConverterSpec:$N_F_REST,CPVClusterizerSpec:$N_F_REST $DISABLE_MC | " - has_detector EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " + has_detector PHS && ! has_detector_flp_processing PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output --pipeline PHOSRawToCellConverterSpec:$N_F_REST $DISABLE_MC | " + has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $CPV_INPUT --output-type clusters --disable-root-input --disable-root-output --pipeline CPVRawToDigitConverterSpec:$N_F_REST,CPVClusterizerSpec:$N_F_REST $DISABLE_MC | " + has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " fi # --------------------------------------------------------------------------------------------------------------------- From 694c6b30ece6576dea08083a59df4c9c770f61f2 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 2 Oct 2021 20:18:05 +0200 Subject: [PATCH 094/236] Set vertexing sources automatically depending on enabled detectors / matchings --- production/dpl-workflow.sh | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index ea32fb2..31f1a59 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -76,8 +76,6 @@ ITS_CONFIG_KEY= TRD_CONFIG= TRD_CONFIG_KEY= TRD_TRANSFORMER_CONFIG= -TRD_SOURCES= -TOF_SOURCES= CPV_INPUT=raw EVE_CONFIG=" --jsons-folder $EDJSONS_DIR" MFTDEC_CONFIG= @@ -94,10 +92,6 @@ if [ $SYNCMODE == 1 ]; then TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" fi -has_detector_matching TPCTRD && add_comma_separated TRD_SOURCES TPC -has_detector_matching ITSTPCTRD && add_comma_separated TRD_SOURCES ITS-TPC -has_detector_matching TPCTOF && add_comma_separated TOF_SOURCES TPC -has_detector_matching ITSTPCTOF && add_comma_separated TOF_SOURCES ITS-TPC has_detector_flp_processing CPV && CPV_INPUT=digits @@ -149,6 +143,24 @@ if ! has_detector_reco TOF; then TOF_OUTPUT=digits fi +# --------------------------------------------------------------------------------------------------------------------- +# Assemble matching sources +TRD_SOURCES= +TOF_SOURCES= +VTX_SOURCES=ITS +has_detector_matching ITSTPC && VTX_SOURCES+=",ITS-TPC" +has_detector_matching TPCTRD && (add_comma_separated TRD_SOURCES TPC; VTX_SOURCES+=",TPC-TRD") +has_detector_matching ITSTPCTRD && (add_comma_separated TRD_SOURCES ITS-TPC; VTX_SOURCES+=",ITS-TPC-TRD") +has_detector_matching TPCTOF && (add_comma_separated TOF_SOURCES TPC; VTX_SOURCES+=",TPC-TOF") +has_detector_matching ITSTPCTOF && (add_comma_separated TOF_SOURCES ITS-TPC; VTX_SOURCES+=",ITS-TPC-TOF") +has_detector_matching MFTMCH && VTX_SOURCES+=",MFT-MCH" +for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g" | grep -v "CTP"`; do + has_detector_reco $det && VTX_SOURCES+=",$det" +done +PVERTEX_CONFIG="--vertexing-sources $VTX_SOURCES --vetex-track-matching-sources $VTX_SOURCES" +has_detector_reco FT0 && PVERTEX_CONFIG+=" --validate-with-ft0" +SECVERTEX_CONFIG="--vertexing-sources $VTX_SOURCES" + # --------------------------------------------------------------------------------------------------------------------- # Process multiplicities N_TPCTRK=1 @@ -323,8 +335,8 @@ if [ $SYNCMODE == 0 ]; then fi has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline globalfwd-track-matcher:$N_F_REST | " -has_detectors_reco ITS TPC TRD TOF FT0 MCH MFT && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output --validate-with-ft0 --pipeline primary-vertexing:$N_F_REST | " -has_detectors_reco ITS TPC TRD TOF FT0 MCH MFT && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output --pipeline secondary-vertexing:$N_F_REST | " +has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output $PVERTEX_CONFIG --pipeline primary-vertexing:$N_F_REST | " +has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $SECVERTEX_CONFIG --pipeline secondary-vertexing:$N_F_REST | " # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode From 0dd105da8c04d8bb1c950d6b8fbee107fc8c5323 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 4 Oct 2021 15:25:36 +0200 Subject: [PATCH 095/236] Update EPN scripts --- tools/epn/gen_topo.sh | 4 ++-- tools/epn/gen_topo_o2dataprocessing.sh | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh index 476eae5..667721e 100755 --- a/tools/epn/gen_topo.sh +++ b/tools/epn/gen_topo.sh @@ -18,8 +18,8 @@ if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then echo \$MULTIPLICITY_FACTOR_REST miss # Settings for some EPN paths / names / etc. export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc files export INRAWCHANNAME=tf-builder-pipe-0 # Pipe name to get data from TfBuilder -export CTF_DIR=/tmp/datadist/ctf # Output directory for CTFs -export GEN_TOPO_WORKDIR=/home/epn/gen_topo/${GEN_TOPO_PARTITION}_${GEN_TOPO_ONTHEFLY} # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir +export CTF_DIR=/data/tf/compressed # Output directory for CTFs +export GEN_TOPO_WORKDIR=$HOME/gen_topo/${GEN_TOPO_PARTITION}_${GEN_TOPO_ONTHEFLY} # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir # Load required module and run gen_topo_o2dataprocessing (PDP part of this script) module load ODC O2DataProcessing 1>&2 || { echo Error loading ODC / O2DataProcessing 1>&2; exit 1; } diff --git a/tools/epn/gen_topo_o2dataprocessing.sh b/tools/epn/gen_topo_o2dataprocessing.sh index 6ef9486..4aadb52 100755 --- a/tools/epn/gen_topo_o2dataprocessing.sh +++ b/tools/epn/gen_topo_o2dataprocessing.sh @@ -1,9 +1,11 @@ #!/bin/bash -mkdir -p $GEN_TOPO_WORKDIR/cache +mkdir -p $GEN_TOPO_WORKDIR/cache || { echo Error creating directory 1>&2; exit 1; } cd $GEN_TOPO_WORKDIR || { echo Cannot enter work dir 1>&2; exit 1; } if [ ! -d O2DataProcessing ]; then git clone https://github.com/AliceO2Group/O2DataProcessing.git 1>&2 || { echo O2DataProcessing checkout failed 1>&2; exit 1; }; fi if [ $GEN_TOPO_HASH == 1 ]; then - export GEN_TOPO_CACHEABLE=1 + if [ "0$GEN_TOPO_ONTHEFLY" == "01" ]; then + export GEN_TOPO_CACHEABLE=1 + fi CACHE_HASH=`echo $GEN_TOPO_PARTITION $GEN_TOPO_SOURCE $GEN_TOPO_LIBRARY_FILE $GEN_TOPO_WORKFLOW_NAME $WORKFLOW_DETECTORS $WORKFLOW_DETECTORS_QC $WORKFLOW_DETECTORS_CALIB $WORKFLOW_PARAMETERS $RECO_NUM_NODES_OVERRIDE $DDMODE $DDWORKFLOW $INRAWCHANNAME $FILEWORKDIR $CTF_DIR | md5sum | awk '{print $1}'` if [ -f cache/$CACHE_HASH ]; then echo Reusing cached XML topology 1>&2 From a1ad69d32706824f00ffa87b18325a1acfb1c976 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 4 Oct 2021 15:46:00 +0200 Subject: [PATCH 096/236] Can use WORKFLOWMODE=print for tools/parse / run.sh --- production/dpl-workflow.sh | 2 +- tools/parse | 42 ++++++++++++++++++++++++-------------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 31f1a59..bd4b785 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -395,7 +395,7 @@ WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" # --------------------------------------------------------------------------------------------------------------------- # Run / create / print workflow if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: + echo "#Workflow command:" echo $WORKFLOW | sed "s/| */|\n/g" else # Execute the command we have assembled diff --git a/tools/parse b/tools/parse index 489131b..069d647 100755 --- a/tools/parse +++ b/tools/parse @@ -27,7 +27,12 @@ if not "DDWORKFLOW" in os.environ: print("Using topology", sys.argv[2], "of library", sys.argv[1]) -os.environ['WORKFLOWMODE'] = 'dds' +if 'WORKFLOWMODE' in os.environ: + if not os.environ['WORKFLOWMODE'] in ['dds', 'print']: + print("Invalid WORKFLOWMODE provided") + raise +else: + os.environ['WORKFLOWMODE'] = 'dds' if 'GLOBALDPLOPT' in os.environ: os.environ['GLOBALDPLOPT'] += " -b" else: @@ -108,20 +113,27 @@ for line in f: raise if reco_num_nodes_override > 0: reconodes = reco_num_nodes_override - odccommand = "odc-epn-topo" - if reconodes: - odccommand += " --dd " + os.environ['DDWORKFLOW'] - if len(recoworkflows): - odccommand += " --reco " + " ".join(recoworkflows) - odccommand += " --n " + str(reconodes) - if len(calibworkflows): - odccommand += " --calib " + " ".join(calibworkflows) - if args[1] != "": - odccommand += " --prependexe \"module load " + args[1] + "; \"" - odccommand += " -o " + sys.argv[3] - if os.system(odccommand) != 0: - print("\nError running odc: ", odccommand) - raise + if os.environ['WORKFLOWMODE'] == 'dds': + odccommand = "odc-epn-topo" + if reconodes: + odccommand += " --dd " + os.environ['DDWORKFLOW'] + if len(recoworkflows): + odccommand += " --reco " + " ".join(recoworkflows) + odccommand += " --n " + str(reconodes) + if len(calibworkflows): + odccommand += " --calib " + " ".join(calibworkflows) + if args[1] != "": + odccommand += " --prependexe \"module load " + args[1] + "; \"" + odccommand += " -o " + sys.argv[3] + if os.system(odccommand) != 0: + print("\nError running odc: ", odccommand) + raise + else: + outf = open(sys.argv[3], "w+") + for i in recoworkflows: + outf.write("# RECO workflow\n\n" + open(i, 'r').read() + "\n\n") + for i in calibworkflows: + outf.write("# CALIB workflow\n\n" + open(i, 'r').read() + "\n\n") print("Done") exit(0) From 09b63be4c41439fc07f143d17269751f5cbd12fa Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 4 Oct 2021 15:53:16 +0200 Subject: [PATCH 097/236] Update some defaults --- production/full-system-test.desc | 4 ++-- production/no-processing.desc | 2 +- production/production.desc | 4 ++-- tools/epn/run.sh | 18 +++++++++--------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/production/full-system-test.desc b/production/full-system-test.desc index bf3428f..f1c2165 100644 --- a/production/full-system-test.desc +++ b/production/full-system-test.desc @@ -1,3 +1,3 @@ #Full system test workflows -full-system-test-async: O2PDPSuite/latest reco,128,126,"CTFINPUT=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" -full-system-test-sync: O2PDPSuite/latest reco,128,126,"SYNCMODE=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" +full-system-test-async: O2PDPSuite reco,128,126,"CTFINPUT=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" +full-system-test-sync: O2PDPSuite reco,128,126,"SYNCMODE=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" diff --git a/production/no-processing.desc b/production/no-processing.desc index a683a8e..78382cf 100644 --- a/production/no-processing.desc +++ b/production/no-processing.desc @@ -1,2 +1,2 @@ # Empty workflow for no processing at all -no-processing: "DataDistribution" +no-processing: "O2PDPSuite" diff --git a/production/production.desc b/production/production.desc index b24bfa1..06e7768 100644 --- a/production/production.desc +++ b/production/production.desc @@ -1,2 +1,2 @@ -synchronous-workflow: "DataDistribution QualityControl" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 production/dpl-workflow.sh" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 production/dpl-workflow.sh" -synchronous-workflow-1numa: "DataDistribution QualityControl" reco,128,128,"SYNCMODE=1 production/dpl-workflow.sh" +synchronous-workflow: "O2PDPSuite" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 production/dpl-workflow.sh" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 production/dpl-workflow.sh" +synchronous-workflow-1numa: "O2PDPSuite" reco,128,128,"SYNCMODE=1 production/dpl-workflow.sh" diff --git a/tools/epn/run.sh b/tools/epn/run.sh index 2f75a6f..9ce9cba 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -5,22 +5,22 @@ export DDMODE=processing # DataDistr # Use these settings to fetch the Workflow Repository using a hash / tag #export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch +#export GEN_TOPO_SOURCE=v0.13 # Git hash to fetch # Use these settings to specify a path to the workflow repository in your home dir export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository export GEN_TOPO_SOURCE=/home/drohr/alice/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_LIBRARY_FILE=testing/detectors/TPC/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=ctf-and-display # Name of workflow in topology description library +export GEN_TOPO_LIBRARY_FILE=production/production.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=synchronous-workflow # Name of workflow in topology description library export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_DETECTORS_RECO= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_DETECTORS_FLP_PROCESSING= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB=ALL # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_DETECTORS_RECO=ALL # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_DETECTORS_FLP_PROCESSING=ALL # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=QC,CALIB,GPU,CTF,EVENT_DISPLAY # Additional paramters for the workflow export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=256 # Number of HBF per TF +export NHBPERTF=128 # Number of HBF per TF export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with From e038fdb877ee04532a0bf96e5734e0e83d3b6c1b Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 4 Oct 2021 16:05:55 +0200 Subject: [PATCH 098/236] Fix some broken copy&paste that corrupted dpl-workflow.sh --- production/dpl-workflow.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index bd4b785..2d54586 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -226,7 +226,7 @@ N_ITSRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSRAWDEC ? 6 * 30 / $ N_MFTRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTRAWDEC ? 6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTRAWDEC)) N_ITSTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSTRK)) N_MFTTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTTRK)) -N_CTPRAWDEC=$((30 / $RECO_NUM_NODES_WORKFLOW_CMP > N_CTPRAWDEC ? 30 / $RECO_NUM_NODhas_detector_flp_processing CPVES_WORKFLOW_CMP : $N_CTPRAWDEC)) +N_CTPRAWDEC=$((30 / $RECO_NUM_NODES_WORKFLOW_CMP > N_CTPRAWDEC ? 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_CTPRAWDEC)) # Apply external multiplicity factors N_TPCTRK=$((N_TPCTRK * $N_F_REST)) N_TPCITS=$((N_TPCITS * $N_F_REST)) @@ -292,8 +292,7 @@ if [ $CTFINPUT == 0 ]; then if has_detector TPC && [ $EPNMODE == 1 ]; then GPU_INPUT=zsonthefly WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline tpc-raw-to-digits-0:$N_TPCRAWDEC | " - WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS[ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/work/epn/configs/qc/ft0-digits-qc-ds.json -[ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/work/epn/configs/qc/fv0-digits-qc-ds.json_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:$N_TPCRAWDEC | " + WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:$N_TPCRAWDEC | " fi has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${ITSCLUSDICT}\" --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:$N_ITSRAWDEC | " has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:$N_MFTRAWDEC ${MFTDEC_CONFIG} --runmft true | " From 66b4261203fa02a01f8d01c4200a99e43224b393 Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 4 Oct 2021 11:58:44 +0200 Subject: [PATCH 099/236] Account for O2 fix of typo in option "vetex-track-matching-sources" --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 2d54586..23b857d 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -157,7 +157,7 @@ has_detector_matching MFTMCH && VTX_SOURCES+=",MFT-MCH" for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g" | grep -v "CTP"`; do has_detector_reco $det && VTX_SOURCES+=",$det" done -PVERTEX_CONFIG="--vertexing-sources $VTX_SOURCES --vetex-track-matching-sources $VTX_SOURCES" +PVERTEX_CONFIG="--vertexing-sources $VTX_SOURCES --vertex-track-matching-sources $VTX_SOURCES" has_detector_reco FT0 && PVERTEX_CONFIG+=" --validate-with-ft0" SECVERTEX_CONFIG="--vertexing-sources $VTX_SOURCES" From 14ae81d153d895b534b6baa224261e7817089654 Mon Sep 17 00:00:00 2001 From: Markus Fasel Date: Mon, 4 Oct 2021 21:16:33 +0200 Subject: [PATCH 100/236] [EMCAL-724] Initial workflows for EMCAL on the EPN Workflows for - reconstruction - reconstruction + Digits QC - reconstruction + CTF - reconstruction + CTF + Digits QC - reconstruction + CTF + Full QC - reconstruction + CTF + Digits QC (single node) --- .../EMC/qc/emcQCTasksAll_multinode.json | 216 ++++++++++++++++++ .../EMC/qc/emcQCTasks_multinode.json | 157 +++++++++++++ .../EMC/qc/emcQCTasks_singlenode.json | 150 ++++++++++++ .../EMC/runEMCRawToDigitsRecoPileline.sh | 29 +++ .../EMC/runEMCRawToDigitsRecoPilelineCTF.sh | 42 ++++ ...EMCRawToDigitsRecoPilelineQCAlllocalCTF.sh | 51 +++++ .../runEMCRawToDigitsRecoPilelineQClocal.sh | 35 +++ ...runEMCRawToDigitsRecoPilelineQClocalCTF.sh | 50 ++++ ...RawToDigitsRecoPilelineQClocalCTFSingle.sh | 52 +++++ testing/detectors/EMC/workflows.desc | 2 + 10 files changed, 784 insertions(+) create mode 100644 testing/detectors/EMC/qc/emcQCTasksAll_multinode.json create mode 100644 testing/detectors/EMC/qc/emcQCTasks_multinode.json create mode 100644 testing/detectors/EMC/qc/emcQCTasks_singlenode.json create mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPileline.sh create mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh create mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh create mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocal.sh create mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh create mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh diff --git a/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json b/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json new file mode 100644 index 0000000..f435792 --- /dev/null +++ b/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json @@ -0,0 +1,216 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawTask": { + "active": "true", + "className": "o2::quality_control_modules::emcal::RawTask", + "moduleName": "QcEMCAL", + "detectorName": "EMC", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "emcrawdata" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "alio2-cr1-qc02.cern.ch", + "remotePort": "47701", + "mergingMode": "delta", + "localControl": "odc" + }, + "DigitsTask": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitsQcTask", + "moduleName": "QcEMCAL", + "detectorName": "EMC", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "emccells" + }, + "taskParameters": { + "nothing": "rien" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "alio2-cr1-qc02.cern.ch", + "remotePort": "47702", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "RawCheck": { + "active": "true", + "className": "o2::quality_control_modules::emcal::RawCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "dataSource": [{ + "type": "Task", + "name": "RawTask", + "MOs": "all" + }] + }, + "checkAmplHighG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeHG_CAL", + "digitAmplitudeHG_PHYS" + ] + } + ] + }, + "checkAmplLowG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeLG_CAL", + "digitAmplitudeLG_PHYS" + ] + } + ] + }, + "checkDigitTimeHighG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitTimeHG_CAL", + "digitTimeHG_PHYS" + ] + } + ] + }, + "checkDigitTimeLowG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitTimeLG_CAL", + "digitTimeLG_PHYS" + ] + } + ] + }, + "checkAmplEMCAL": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeEMCAL_CAL", + "digitAmplitudeEMCAL_PHYS" + ] + } + ] + }, + "checkAmplDCAL": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeDCAL_CAL", + "digitAmplitudeDCAL_PHYS" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + { + "id": "emcrawdata", + "active": "true", + "machines": ["epn"], + "query": "readout:EMC/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1248" + } + ], + "blocking": "false" + }, + { + "id": "emccells", + "active": "true", + "machines": ["epn"], + "query": "emcal-digits:EMC/CELLS;emcal-triggerecords:EMC/CELLSTRGR", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1248" + } + ], + "blocking": "false" + } + ] + } \ No newline at end of file diff --git a/testing/detectors/EMC/qc/emcQCTasks_multinode.json b/testing/detectors/EMC/qc/emcQCTasks_multinode.json new file mode 100644 index 0000000..a7f22a4 --- /dev/null +++ b/testing/detectors/EMC/qc/emcQCTasks_multinode.json @@ -0,0 +1,157 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "alio2-cr1-hv-qcdb1-gpn.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "DigitsTask": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitsQcTask", + "moduleName": "QcEMCAL", + "detectorName": "EMC", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "emcal-digits:EMC/CELLS;emcal-triggerecords:EMC/CELLSTRGR" + }, + "taskParameters": { + "nothing": "rien" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "alio2-cr1-qc02.cern.ch", + "remotePort": "47702", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "checkAmplHighG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeHG_CAL", + "digitAmplitudeHG_PHYS" + ] + } + ] + }, + "checkAmplLowG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeLG_CAL", + "digitAmplitudeLG_PHYS" + ] + } + ] + }, + "checkDigitTimeHighG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitTimeHG_CAL", + "digitTimeHG_PHYS" + ] + } + ] + }, + "checkDigitTimeLowG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitTimeLG_CAL", + "digitTimeLG_PHYS" + ] + } + ] + }, + "checkAmplEMCAL": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeEMCAL_CAL", + "digitAmplitudeEMCAL_PHYS" + ] + } + ] + }, + "checkAmplDCAL": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeDCAL_CAL", + "digitAmplitudeDCAL_PHYS" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + ] + } \ No newline at end of file diff --git a/testing/detectors/EMC/qc/emcQCTasks_singlenode.json b/testing/detectors/EMC/qc/emcQCTasks_singlenode.json new file mode 100644 index 0000000..9de1398 --- /dev/null +++ b/testing/detectors/EMC/qc/emcQCTasks_singlenode.json @@ -0,0 +1,150 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "alio2-cr1-hv-qcdb1-gpn.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "DigitsTask": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitsQcTask", + "moduleName": "QcEMCAL", + "detectorName": "EMC", + "cycleDurationSeconds": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "emcal-digits:EMC/CELLS;emcal-triggerecords:EMC/CELLSTRGR" + }, + "taskParameters": { + "nothing": "rien" + }, + "location": "remote" + } + }, + "checks": { + "checkAmplHighG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeHG_CAL", + "digitAmplitudeHG_PHYS" + ] + } + ] + }, + "checkAmplLowG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeLG_CAL", + "digitAmplitudeLG_PHYS" + ] + } + ] + }, + "checkDigitTimeHighG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitTimeHG_CAL", + "digitTimeHG_PHYS" + ] + } + ] + }, + "checkDigitTimeLowG": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitTimeLG_CAL", + "digitTimeLG_PHYS" + ] + } + ] + }, + "checkAmplEMCAL": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeEMCAL_CAL", + "digitAmplitudeEMCAL_PHYS" + ] + } + ] + }, + "checkAmplDCAL": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnAny", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": [ + "digitAmplitudeDCAL_CAL", + "digitAmplitudeDCAL_PHYS" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + ] + } \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPileline.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPileline.sh new file mode 100755 index 0000000..d4c1842 --- /dev/null +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPileline.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +NCPU=12 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') +ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" +#HOST='$(hostname -s)-ib' + +INFOLOGGER_SEVERITY_RAWPROXY=warning +SEVERITY_RAWPROXY=warning +INFOLOGGER_SEVERITY=warning +SEVERITY=warning + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ + --severity $INFOLOGGER_SEVERITY_RAWPROXY \ + --infologger-severity $SEVERITY_RAWPROXY \ + | o2-emcal-reco-workflow $ARGS_ALL \ + --input-type raw \ + --output-type cells \ + --disable-root-input \ + --disable-root-output \ + --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ + --disable-mc \ + --severity $SEVERITY \ + --infologger-severity $INFOLOGGER_SEVERITY \ + --pipeline EMCALRawToCellConverterSpec:$NCPU \ + | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh new file mode 100755 index 0000000..bdaf225 --- /dev/null +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +source /home/mfasel/alice/O2DataProcessing/common/setenv.sh + +DISPLAY=0 + +PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +### Comment: MAKE SURE the channels match address=ipc://@tf-builder-pipe-0 + +hash=$1 + +VERBOSE="" +NCPU=12 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') +ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" +#HOST='$(hostname -s)-ib' + +CTF_OUTDIR=/tmp/datadist/ctf +CTF_DICTDIR=/home/epn/odc/files/ctf_dictionary.root + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ + --severity info \ + --infologger-severity info \ + | o2-emcal-reco-workflow $ARGS_ALL \ + --input-type raw \ + --output-type cells \ + --disable-root-input \ + --disable-root-output \ + --disable-mc \ + --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ + --severity warning \ + --infologger-severity warning \ + --pipeline EMCALRawToCellConverterSpec:8 \ + | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ + --ctf-dict $CTF_DICTDIR \ + | o2-ctf-writer-workflow $ARGS_ALL \ + --onlyDet EMC \ + --no-grp \ + --output-dir $CTF_OUTDIR \ + | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh new file mode 100755 index 0000000..7077659 --- /dev/null +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +source /home/mfasel/alice/O2DataProcessing/common/setenv.sh + +PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +NCPU=20 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') +ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" +#HOST='$(hostname -s)-ib' +HOST=epn + +QC_CONFIG=consul-json://aliecs.cern.ch:8500/o2/components/qc/ANY/any/emc-qcmn-epnall +#QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json +INFOLOGGER_SEVERITY_RAWPROXY=warning +SEVERITY_RAWPROXY=warning +INFOLOGGER_SEVERITY=warning +SEVERITY=warning +INFOLOGGER_SEVERITY_QC=warning +SEVERITY_QC=warning +CTF_OUTDIR=/tmp/datadist/ctf +CTF_DICTDIR=/home/epn/odc/files/ctf_dictionary.root + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ + --severity $SEVERITY_RAWPROXY \ + --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ + | o2-emcal-reco-workflow $ARGS_ALL \ + --input-type raw \ + --output-type cells \ + --disable-root-input \ + --disable-root-output \ + --disable-mc \ + --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ + --severity $SEVERITY \ + --infologger-severity $INFOLOGGER_SEVERITY \ + --pipeline EMCALRawToCellConverterSpec:$NCPU \ + | o2-qc $ARGS_ALL \ + --config $QC_CONFIG \ + --local \ + --host $HOST \ + --severity $SEVERITY_QC \ + --infologger-severity $INFOLOGGER_SEVERITY_QC \ + | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ + --ctf-dict $CTF_DICTDIR \ + | o2-ctf-writer-workflow $ARGS_ALL \ + --onlyDet EMC \ + --no-grp \ + --output-dir $CTF_OUTDIR \ + | o2-dpl-run $ARGS_ALL --dds + \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocal.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocal.sh new file mode 100755 index 0000000..3e30c0d --- /dev/null +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocal.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +source /home/mfasel/alice/O2DataProcessing/common/setenv.sh + +PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +NCPU=12 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') +ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" +#HOST='$(hostname -s)-ib' +HOST=epn + +QC_CONFIG=consul-json:///aliecs.cern.ch:8500/o2/components/qc/ANY/any/emc-qcmn-epn +#QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json +INFOLOGGER_SEVERITY_RAWPROXY=warning +SEVERITY_RAWPROXY=warning +INFOLOGGER_SEVERITY=warning +SEVERITY=warning + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ + --severity $SEVERITY_RAWPROXY \ + --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ + | o2-emcal-reco-workflow $ARGS_ALL \ + --input-type raw \ + --output-type cells \ + --disable-root-input \ + --disable-root-output \ + --disable-mc \ + --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ + --severity $SEVERITY \ + --infologger-severity $INFOLOGGER_SEVERITY \ + --pipeline EMCALRawToCellConverterSpec:$NCPU \ + | o2-qc $ARGS_ALL $QC_CONFIG --local --host $HOST \ + | o2-dpl-run $ARGS_ALL --dds diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh new file mode 100755 index 0000000..9353dc7 --- /dev/null +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +source /home/mfasel/alice/O2DataProcessing/common/setenv.sh + +PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +NCPU=20 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') +ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" +#HOST='$(hostname -s)-ib' +HOST=epn + +QC_CONFIG=consul-json://aliecs.cern.ch:8500/o2/components/qc/ANY/any/emc-qcmn-flpepn +#QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json +INFOLOGGER_SEVERITY_RAWPROXY=warning +SEVERITY_RAWPROXY=warning +INFOLOGGER_SEVERITY=warning +SEVERITY=warning +INFOLOGGER_SEVERITY_QC=warning +SEVERITY_QC=warning +CTF_OUTDIR=/tmp/datadist/ctf +CTF_DICTDIR=/home/epn/odc/files/ctf_dictionary.root + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ + --severity $SEVERITY_RAWPROXY \ + --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ + | o2-emcal-reco-workflow $ARGS_ALL \ + --input-type raw \ + --output-type cells \ + --disable-root-input \ + --disable-root-output \ + --disable-mc \ + --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ + --severity $SEVERITY \ + --infologger-severity $INFOLOGGER_SEVERITY \ + --pipeline EMCALRawToCellConverterSpec:$NCPU \ + | o2-qc $ARGS_ALL \ + --config $QC_CONFIG \ + --local \ + --host $HOST \ + --severity $SEVERITY_QC \ + --infologger-severity $INFOLOGGER_SEVERITY_QC \ + | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ + --ctf-dict $CTF_DICTDIR \ + | o2-ctf-writer-workflow $ARGS_ALL \ + --onlyDet EMC \ + --no-grp \ + --output-dir $CTF_OUTDIR \ + | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh new file mode 100755 index 0000000..257c84f --- /dev/null +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +NCPU=12 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') +ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" +#HOST='$(hostname -s)-ib' +HOST=epn + +#QC_CONFIG=consul-json://alio2-cr1-hv-aliecs:8500/o2/components/qc/ANY/any/emc-qcmn-epn +QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json +INFOLOGGER_SEVERITY_RAWPROXY=warning +SEVERITY_RAWPROXY=warning +INFOLOGGER_SEVERITY=warning +SEVERITY=warning +INFOLOGGER_SEVERITY_QC=warning +SEVERITY_QC=warning +CTF_OUTDIR=/tmp/datadist/ctf +CTF_DICTDIR=/home/epn/odc/files/ctf_dictionary.root + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ + --severity $SEVERITY_RAWPROXY \ + --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ + | o2-emcal-reco-workflow $ARGS_ALL \ + --input-type raw \ + --output-type cells \ + --disable-root-input \ + --disable-root-output \ + --disable-mc \ + --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ + --severity $SEVERITY \ + --infologger-severity $INFOLOGGER_SEVERITY \ + --pipeline EMCALRawToCellConverterSpec:$NCPU \ + | o2-qc $ARGS_ALL \ + --config $QC_CONFIG \ + --severity $SEVERITY_QC \ + --infologger-severity $INFOLOGGER_SEVERITY_QC \ + | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ + | o2-ctf-writer-workflow $ARGS_ALL \ + --onlyDet EMC \ + --no-grp \ + --output-dir $CTF_OUTDIR \ + | o2-dpl-run $ARGS_ALL --dds + +# Entropy encoder: +# --ctf-dict $CTF_DICTDIR \ + +# QC +# --local \ +# --host $HOST \ \ No newline at end of file diff --git a/testing/detectors/EMC/workflows.desc b/testing/detectors/EMC/workflows.desc index e69de29..9278286 100644 --- a/testing/detectors/EMC/workflows.desc +++ b/testing/detectors/EMC/workflows.desc @@ -0,0 +1,2 @@ ++emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" ++emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file From b3da80fa8196388fe64844016c2459eddf82497c Mon Sep 17 00:00:00 2001 From: Markus Fasel Date: Tue, 5 Oct 2021 14:44:35 +0200 Subject: [PATCH 101/236] [EMCAL-524] Small copy/paste error --- testing/detectors/EMC/workflows.desc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testing/detectors/EMC/workflows.desc b/testing/detectors/EMC/workflows.desc index 9278286..e6e2864 100644 --- a/testing/detectors/EMC/workflows.desc +++ b/testing/detectors/EMC/workflows.desc @@ -1,2 +1,2 @@ -+emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -+emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file +emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file From 1e723184ff6c26e7be2fe7d6ec9504bf9d3751b4 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 5 Oct 2021 23:24:25 +0200 Subject: [PATCH 102/236] sync of private w/flows to account new WORKFLOW_DETECTORS_XXX --- ...pcMNAll-itsEPNv2-mftClus-tofglobalrun.json | 4 +- .../qc/qc-tpcMNAll-itsEPNv2-mftClus.json | 4 +- .../qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json | 2 +- .../shahoian/qc/qc-tpcMNAll-itsEPNv2.json | 2 +- .../qc/qc-tpcMNAll-mftClus-tofglobalrun.json | 4 +- .../shahoian/qc/qc-tpcMNAll-mftClus.json | 4 +- .../shahoian/qc/qc-tpcMNAll-tofglobalrun.json | 2 +- testing/private/shahoian/runTF_ext_dpl.sh | 40 ++++++ testing/private/shahoian/run_ext_dpl.sh | 3 + testing/private/shahoian/workflows.desc | 131 +++++++++--------- testing/private/shahoian/workflows_dpl.desc | 130 +++++++++++++---- 11 files changed, 221 insertions(+), 105 deletions(-) create mode 100755 testing/private/shahoian/runTF_ext_dpl.sh diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json index 74070fa..e7248f6 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json @@ -177,7 +177,7 @@ "className": "o2::quality_control_modules::mft::QcMFTClusterTask", "moduleName": "QcMFT", "detectorName": "MFT", - "cycleDurationSeconds": "60", + "cycleDurationSeconds": "300", "maxNumberCycles": "-1", "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", "dataSource": { @@ -374,7 +374,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.005", + "fraction": "0.001", "seed": "0" } ], diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json index 65300d4..2f3b2b2 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json @@ -177,7 +177,7 @@ "className": "o2::quality_control_modules::mft::QcMFTClusterTask", "moduleName": "QcMFT", "detectorName": "MFT", - "cycleDurationSeconds": "60", + "cycleDurationSeconds": "300", "maxNumberCycles": "-1", "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", "dataSource": { @@ -280,7 +280,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.005", + "fraction": "0.001", "seed": "0" } ], diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json index fc4de32..5b28da5 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json @@ -335,7 +335,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.005", + "fraction": "0.001", "seed": "0" } ], diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json index bcdcbbf..3bdae9c 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json @@ -241,7 +241,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.005", + "fraction": "0.001", "seed": "0" } ], diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json index 8a985a4..41ac1ae 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json @@ -132,7 +132,7 @@ "className": "o2::quality_control_modules::mft::QcMFTClusterTask", "moduleName": "QcMFT", "detectorName": "MFT", - "cycleDurationSeconds": "60", + "cycleDurationSeconds": "300", "maxNumberCycles": "-1", "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", "dataSource": { @@ -297,7 +297,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.005", + "fraction": "0.001", "seed": "0" } ], diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json index d33ad90..00be51a 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json @@ -132,7 +132,7 @@ "className": "o2::quality_control_modules::mft::QcMFTClusterTask", "moduleName": "QcMFT", "detectorName": "MFT", - "cycleDurationSeconds": "60", + "cycleDurationSeconds": "300", "maxNumberCycles": "-1", "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", "dataSource": { @@ -203,7 +203,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.005", + "fraction": "0.001", "seed": "0" } ], diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json index 313ede1..b09d9a1 100644 --- a/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json +++ b/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json @@ -258,7 +258,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.005", + "fraction": "0.001", "seed": "0" } ], diff --git a/testing/private/shahoian/runTF_ext_dpl.sh b/testing/private/shahoian/runTF_ext_dpl.sh new file mode 100755 index 0000000..de27be2 --- /dev/null +++ b/testing/private/shahoian/runTF_ext_dpl.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard +#export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository + +export EXTINPUT=1 +export EPNMODE=1 +export SYNCMODE=1 +export SHMSIZE=128000000000 +export INFOLOGGER_SEVERITY=warning + +export EDJSONS_DIR="/home/ed/jsons" + +export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF +export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" +#export GPU_EXTRA_CONFIG="" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" + +export GEN_TOPO_IGNORE_ERROR=1 + +for wf in "$@" +do + export GEN_TOPO_WORKFLOW_NAME=$wf + /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.xml +done diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index 10b02a4..fa647e3 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -1,6 +1,7 @@ #!/bin/bash export GEN_TOPO_PARTITION=test # ECS Partition +#export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard # Use these settings to fetch the Workflow Repository using a hash / tag @@ -27,6 +28,8 @@ export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additiona export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) export NHBPERTF=128 # Number of HBF per TF export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" +#export GPU_EXTRA_CONFIG="" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=2;" export GEN_TOPO_IGNORE_ERROR=1 diff --git a/testing/private/shahoian/workflows.desc b/testing/private/shahoian/workflows.desc index ec7e817..f2faa10 100644 --- a/testing/private/shahoian/workflows.desc +++ b/testing/private/shahoian/workflows.desc @@ -1,89 +1,90 @@ -tpc-ctf-qcTPC-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-ctf2eos-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qcITS-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qcMFT-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-locrec-ctf-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-locrec-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -tpc-ctf-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-ctf2eos-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qcITS-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qcMFT-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPC-58: "DataDistribution QualityControl" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-ctf-qcTPC-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-ctf2eos-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qcITS-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qcMFT-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +its-locrec-ctf-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-locrec-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" + +tpc-ctf-qcTPC-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-ctf2eos-qcTPC-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qcITS-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qcMFT-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPC-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" # -#tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#its-mft-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#its-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#mft-tpc-ctf-qcTPCnodigi-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#tpc-ctf-qcTPCnodigi-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-mft-tpc-ctf-qcTPCnodigi-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-tpc-ctf-qcTPCnodigi-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#mft-tpc-ctf-qcTPCnodigi-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#its-mft-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#its-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#mft-tpc-ctf-qcTPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#tpc-ctf-qcTPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-mft-tpc-ctf-qcTPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-tpc-ctf-qcTPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#mft-tpc-ctf-qcTPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#its-tpc-ctf-qcITS_TPCnodigi-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoDigi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcITS_TPC-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpc.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcITS_TPCnoClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +#its-tpc-ctf-qcITS_TPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoDigi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcITS_TPC-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpc.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcITS_TPCnoClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" # -tpc-ctf-qcTPCMNAll-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcTPCMNAll-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCMNAll-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -ist-mft-tpc-ctf-qcTPCMNAll-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-ctf-qcTPCMNAll-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcTPCMNAll-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCMNAll-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +ist-mft-tpc-ctf-qcTPCMNAll-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcTPCMNAll-itsEPNv2-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCMNAll-mftClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPCMNAll-itsEPNv2-mftClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcTPCMNAll-itsEPNv2-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCMNAll-mftClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPCMNAll-itsEPNv2-mftClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-tofglobalrun-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-tofglobalrun-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-tofglobalrun-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-tofglobalrun-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-tof-ctf-qcTPCMNAll-mftClus-tofglobalrun-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-tof-ctf-qcTPCMNAll-mftClus-tofglobalrun-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" # -tpc-ctf-qcTPCMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcTPCMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -ist-mft-tpc-ctf-qcTPCMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-ctf-qcTPCMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcTPCMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +ist-mft-tpc-ctf-qcTPCMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcTPCMNAll-itsEPNv2-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCMNAll-mftClus-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPCMNAll-itsEPNv2-mftClus-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-ctf-qcTPCMNAll-itsEPNv2-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mft-tpc-ctf-qcTPCMNAll-mftClus-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-ctf-qcTPCMNAll-itsEPNv2-mftClus-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-tof-ctf-qctpcMNAll-tofglobalrun-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-tof-ctf-qctpcMNAll-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=TPC,TOF SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-tof-ctf-qctpcMNAll-tofglobalrun-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +tpc-tof-ctf-qctpcMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC,TOF SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-tofglobalrun-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-tofglobalrun-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-tofglobalrun-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-tofglobalrun-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qc-itsEPNv2-mftClus-59: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qc-itsEPNv2-mftClus-59mon: "DataDistribution QualityControl" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qc-itsEPNv2-mftClus-20: "DataDistribution QualityControl" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qc-itsEPNv2-mftClus-20mon: "DataDistribution QualityControl" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qc-itsEPNv2-mftClus-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qc-itsEPNv2-mftClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qc-itsEPNv2-mftClus-20: "O2PDPSuite" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-ctf-qc-itsEPNv2-mftClus-20mon: "O2PDPSuite" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-mid-ctf-qc-itsEPNv2-mftClus-20: "DataDistribution QualityControl" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT,MID SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +its-mft-mid-ctf-qc-itsEPNv2-mftClus-20: "O2PDPSuite" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT,MID SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mid-20: "DataDistribution QualityControl" reco,20,17,"WORKFLOW_DETECTORS=MID SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +mid-20: "O2PDPSuite" reco,20,17,"WORKFLOW_DETECTORS=MID SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" +itsqaFlpHack: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/itsqaHack.sh" diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc index 84803ff..f55f77d 100644 --- a/testing/private/shahoian/workflows_dpl.desc +++ b/testing/private/shahoian/workflows_dpl.desc @@ -1,42 +1,114 @@ -#tpc-ctf-qcTPC-59mon: "DataDistribution QualityControl" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +#tpc-ctf-qcTPC-59mon: "O2PDPSuite" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" -tpc-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" -tof-ctf-qcTOF-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh" -its-ctf-qcITS-20: "DataDistribution QualityControl" reco,20,20,"WORKFLOW_DETECTORS=ITS production/dpl-workflow.sh" -mft-ctf-qcMFT-30: "DataDistribution QualityControl" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" -its-mft-tpc-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -mft-tpc-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh" -mft-tpc-tof-CTF-QC-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" +tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +tof-ctf-qcTOF-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh" +its-ctf-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS production/dpl-workflow.sh" +mft-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" +mftHR-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" -#tpcCPU-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" -its-mft-tpcCPU-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -mft-tpcCPU-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh" -mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" -mft-tof-CTF-QC-mft-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh" +its-mft-tpc-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +mft-tpc-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh" +mft-tpc-tof-CTF-QC-mft-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" -tpcCPU-ctf-qcTPC-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" -its-tof-CTF-QC-its-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh" +#tpcCPU-ctf-qcTPC-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +its-mft-tpcCPU-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +mft-tpcCPU-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh" +mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" +mft-tof-CTF-QC-mft-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh" -its-tpc-tof-CTF-QC-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -its-tpc-tof-CTF-QC-its-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh" -its-tpc-CTF-QC-its-tpc-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" +tpcCPU-ctf-qcTPC-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +its-tof-CTF-QC-its-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh" -mch-mid-CTF-5: "DataDistribution QualityControl" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS=MCH,MID production/dpl-workflow.sh" +its-tpc-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" +its-tpc-tof-CTF-QC-its-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh" -#trd-ctf-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=TRD production/dpl-workflow.sh" +its-tpc-CTF-QC-its-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" +its-tpc-CTF-QC-its-tpc-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" +its-tpc-CTF-QC-its-tpc-50-nomon: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" +#its-tpc-nomatch-CTF-QC-its-tpc-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" -its-tpc-tof-trd-CTF-QC-its-tpc-tof-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" -its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" -tpc-ctf-qcTPC-ED-59: "DataDistribution QualityControl" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +mch-mid-CTF-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS=MCH,MID production/dpl-workflow.sh" -its-tpc-tof-trd-CTF-QC-its-tpc-tof-50: "DataDistribution QualityControl" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" -its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50: "DataDistribution QualityControl" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" -tpc-ctf-qcTPC-ED-50: "DataDistribution QualityControl" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +trd-ctf-20: "O2PDPSuite" reco,20,20,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=TRD production/dpl-workflow.sh" +tpc-trd-ctf-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=TPC,TRD production/dpl-workflow.sh" -tpc-ctf-ED-50: "DataDistribution QualityControl" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" + +its-tpc-tof-trd-CTF-QC-its-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" +its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" +tpc-ctf-qcTPC-ED-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" + +its-tpc-tof-trd-CTF-QC-its-tpc-tof-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" + +its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" +its-tpc-tof-CTF-QC-its-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh" +its-tpc-CTF-QC-its-tpc-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" +tpc-ctf-qcTPC-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" + +tpc-ctf-qcTPCnodig-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC QC_JSON_TPC=/home/epn/odc/files/tpcQCTasks_multinode_ALL_nodigi.json production/dpl-workflow.sh" + +tpc-tof-CTF-QC-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh" + +tpc-ctf-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +tpc-ctf-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" + +its-mft-mid-mch-CTF-QC-its-mft-20: "O2PDPSuite" reco,20,20,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT production/dpl-workflow.sh" +#its-mft-mid-mch-TF-CTF-QC-its-mft-20: "O2PDPSuite" reco,20,20,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT production/dpl-workflow.sh" + +ft0-CTF-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FT0 MULTIPLICITY_FACTOR_RAWDECODERS=4 MULTIPLICITY_FACTOR_CTFENCODERS=4 production/dpl-workflow.sh" +fv0-CTF-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FV0 MULTIPLICITY_FACTOR_RAWDECODERS=4 MULTIPLICITY_FACTOR_CTFENCODERS=4 production/dpl-workflow.sh" +ft0-fv0-CTF-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FT0,FV0 MULTIPLICITY_FACTOR_RAWDECODERS=4 MULTIPLICITY_FACTOR_CTFENCODERS=4 production/dpl-workflow.sh" + +ft0-TF-CTF-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FT0 MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_CTFENCODERS=2 production/dpl-workflow.sh" +fv0-TF-CTF-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FV0 MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_CTFENCODERS=2 production/dpl-workflow.sh" +ft0-fv0-TF-CTF-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FT0,FV0 MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_CTFENCODERS=2 production/dpl-workflow.sh" +ft0-fv0-mft-mid-mch-TF-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=FT0,FV0,MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_CTFENCODERS=2 production/dpl-workflow.sh" + +mft-mid-mch-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +mft-mid-mch-TF-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" + +mft-mid-mch-CTF-QC-mft-10: "O2PDPSuite" reco,10,10,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +mft-mid-mch-TF-CTF-QC-mft-10: "O2PDPSuite" reco,10,10,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" + +mft-mch-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +mft-mch-TF-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" + +mft-mch-CTF-QC-mft-10: "O2PDPSuite" reco,10,10,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +mft-mch-TF-CTF-QC-mft-10: "O2PDPSuite" reco,10,10,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" + + +mft-mid-mch-TF-CTF-QC-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +mft-mch-TF-CTF-QC-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" + +mft-TF-CTF-QC-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" + +ft0-fv0-mft-mid-mch-TF-CTF-QC-mft-ft0-fv0-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=FT0,FV0,MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT,FT0,FV0 production/dpl-workflow.sh" +ft0-fv0-mft-mch-TF-CTF-QC-mft-ft0-fv0-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=FT0,FV0,MFT,MCH WORKFLOW_DETECTORS_QC=MFT,FT0,FV0 production/dpl-workflow.sh" + +ft0-fv0-TF-CTF-QC-ft0-fv0-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=FT0,FV0 WORKFLOW_DETECTORS_QC=FT0,FV0 production/dpl-workflow.sh" + +mft-tpc-CTF-QC-mft-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,TPC WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +mft-tpc-CTF-QC-mft-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,TPC WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" + +its-ctf-qcITS-notracking-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +its_notracking-mft-tpc-CTF-QC-its-mft-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +its_notracking-tpc-CTF-QC-its-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC WORKFLOW_DETECTORS_QC=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +its_notracking-tpc-CTF-QC-its-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC WORKFLOW_DETECTORS_QC=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +its_notracking-tpc-tof-CTF-QC-its-tof-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +its_notracking-tpc-tof-CTF-QC-its-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF ,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF ,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +its_notracking-mft-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +its_notracking-mft-TF-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" From a553cfc9006a356b46d3499a4ec73847250f4de5 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 6 Oct 2021 14:29:29 +0200 Subject: [PATCH 103/236] Update README.md --- README.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e325b6c..84fe198 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The options for the production workflow are described [here](production/README.m - **common** contains common scripts that can be used by all workflows, most importantly common environment variable scripts. - **production** contains the production workflows for global runs, which are maintained by PDP experts. - **tools** contains the **parser** script and auxiliary tools. -- **testing** contains scripts for tests / standalone runs maintained by detectors or privately. +- **testing** contains scripts for tests / standalone runs maintained by detectors or privately. Subfolders are **examples** for example workflows provided, **detectors** for standalone detector workflows, and **private** for workflows of users. # Topology descriptions and description library files: Another abstraction layer above the *workflows* are **topology descriptions**. The *parser* tool can generate the *full topology* XML file from such a *description*, using the `–dds` option of DPL and the `odc-topo-epn` tool. *Topology descriptions* are stored in **description library files** in the `O2DataProcessing` repository. A *description library file* can contain multiple *topology descriptions* each identified by a **topology name** @@ -34,20 +34,23 @@ Another abstraction layer above the *workflows* are **topology descriptions**. T # Configuring and selecting workflow in AliECS: There are 3 ways foreseenm to configure the *full topology* in AliECS: (currently only the manual XML option exists) -- **hash of workflow repository**: In this mode, the following settings are configured in AliECS, and they uniquely identify a *full topology*. The *parser* will then create the final DDS XML file with the *full topology*: +- **version of workflow repository**: In this mode, the following settings are configured in AliECS, and they uniquely identify a *full topology*. The *parser* will then create the final DDS XML file with the *full topology*: - A **commit hash** identifying a state of the `O2DataProcessing` repository (this can also be a tag, and in the case of production workflows it is required to be a tag). - The path of a **description library file** (relative path inside the `O2DataProcessing` repository). - The **workflow name** inside the *description library file*. - - **detector list**: Three comma-separated lists of detectors participating in the run (global list, list for qc, list for calibration), defaulting to `ALL` for all detectors. + - **detector list**: Multiple comma-separated lists of detectors participating in the run (global list, list for qc, list for calibration, list of detectors to run reconstruction for, list of detectors to include in the CTF, list of detectors that have processing on the FLP), defaulting to `ALL` for all detectors. - **workflow parameters**: text field passed to workflow as environment variable for additional options. - **number of nodes override**: Overrides the setting for the number of nodes required in the workflow (meant so quickly increase / decrease the EPN partition size). + - **process multiplicity overrides**: Scaling factors for the process multiplicities for raw decoders, ctf encoders, and other processes. + - **extra environment options**: Free text field where the operator can put additional environment variables, that will be forwarded to the workflow. + - **wipe workflow cache**: Normally the XMLs are cached, when they are created from the same repository version / same workflow / same O2 version. This option clears the cache for the current partition. - **repository directory**: This is almost identical to the case above, but instead of the commit hash, there is the **repository path** specified, pointing to a checked out repository on the shared home folder in the EPN farm. The procedure is the same as before, the parser will create the full topology XML file from the specified workflow in the repository. - **manual XML file**: In this mode the `O2DataProcessing` repository is not used at all, but the absolute path of a *full topology* XML file in the EPN's shared home folder is specified. Such an XML file must be prepared manually by the same means as the *parser* would usually do (see paragraph on manual XML file below). # Topology descriptions: A *topology description* consists of - A list of modules to load, both for generating the DDS XML file with DPL's `--dds` option and when running the workflow. It can either be a single module, or a space-separated list of modules in double-quotes. In particular, this setting identifies the O2 version. We provide the `O2PDPSuite` package, which has the same versions as O2 itself, and which contain also corresponding versions `DataDistribution` and `QualityControl`, thus it is usually sufficient to just load `O2PDPSuite/[version]`. -- A list of workflows, in the form of commands to run to create XML files by the `–dds` option. The command is executed with the `O2DataProcessing` path as working directory. The env options used to configure the workflow are prepended in normal shell syntax. +- A list of workflows, in the form of commands to run to create XML files by the `–dds` option. The command is executed with the `O2DataProcessing` path as working directory. The env options used to configure the workflow are prepended in normal shell syntax. Certain env options are set by the EPN and must not be overridden: `FILEWORKDIR`, `INRAWCHANNAME`, `CTF_DIR`. - Each workflow is amended with the following parameters (the parameters stand in front of the workflow command, and are separated by commas without spaces, the workflow command must be in double-quotes): - Zone where to run the workflow (calib / reco) - For reco: @@ -93,10 +96,12 @@ DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml WORKFLOW_DETECTORS - `$DDMODE`: How to operate DataDistribution: **discard** (build TF and discard them), **disk** (build TF and store to disk), **processing** (build TF and run DPL workflow on TF data), **processing-disk** (both store TF to disk and run processing). - `$DDWORKFLOW`: (*alternative*): Explicit path to the XML file with the partial workflow for *DataDistribution*. - `$GEN_TOPO_IGNORE_ERROR`: Ignore ERROR messages during workflow creation. + - `$WORKFLOWMODE`: Can be set to print. In that case the parser will not create the DDS topology output, but the list of shell commands to start to run the workflows locally. - When run on the EPN farm (indicated by the `$EPNMODE=1` variable), the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. - The parser exports the env variable `$RECO_NUM_NODES_WORKFLOW` that contains on how many nodes the workflow will be running when running the workflow script. This can be used to tune the process multiplicities. -# Creating a full topology DDS XML file manually: +# Creating a full topology DDS XML file manually using the parser: +- **NOTE** This is only for reference, or for running on a private PC. For creating XMLs on the EPN, please refer to [here](#Quick-guide-to-create-and-deploy-detector-workflow). - Check out the `O2DataProcessing` repository, adjust the workflows and topology description to your need. - Open a shell and go to the root folder of `O2DataProcessing`. - Make sure the `odc-topo-epn` is in your path (e.g. `module load ODC` / `alienv enter ODC/latest`). @@ -112,12 +117,12 @@ FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_work - Now you can use `/tmp/dds-topology.xml` to start the workflow via DDS. # Quick guide to create and deploy detector workflow: -** Note: this is the current state of the EPN, not all configuration features (see [here](#Configuring-and-selecting-workflow-in-AliECS)) are available in AliECS yet, thus this guide shows only how to create the XML file for DDS. That XML file must then still be entered in the AliECS GUI as topology. This will be simplified in the future!** +- **Note**: Not all configuration features (see [here](#Configuring-and-selecting-workflow-in-AliECS)) are available in AliECS yet, thus this guide shows only how to create the XML file for DDS. That XML file must then still be entered in the AliECS GUI as topology. While this option will remain also for the future, i.e. you will always be able to create XMLs manually and then run them, the default way will become that the options are configured in AliECS and then the XML is created on-the-fly. - **Note** the topology must be created on an epn, which has the O2 version installed, which is requested by the topology. In principle any node should do since the installed O2 version should be the same on all nodes. - Check out the [O2DataProcessing](https://github.com/AliceO2Group/O2DataProcessing) repository to your home folder on the EPN (`$HOME` in the following). - Copy the content of `O2DataProcessing/testing/examples` (description library file `workflows.desc` and workflow script `example-workflow.sh`) to another place INSIDE the repository, usually under `testing/detectors/[DETECTOR]` or `testing/private/[USERNAME]`. - Edit the workflow script to your needs, adjust / rename the workflow in the description library file. - - See [here](#Topology-descriptions) for the syntax of the lbirary file (in case it is not obvious), the workflow script is just a bash script that starts a DPL workflow, which must have the `--dds` parameter in order to create a partial DDS topology. + - See [here](#Topology-descriptions) for the syntax of the library file (in case it is not obvious), and make sure not to override the listed protected environment variables. The workflow script is just a bash script that starts a DPL workflow, which must have the `--dds` parameter in order to create a partial DDS topology. Make sure that the workflow script fullfils the [requirements](#Workflow-requirements) - Please note that the modules to load must be exactly `"DataDistribution QualityControl"`. Later it will be possible to use `O2PDPSuite` and specify the version, but for now that must not be used as it would create a module collision! - Create an empty folder in your `$HOME` on the EPN, in the following `$HOME/test`. - Copy the topology generation template from `O2DataProcessing/tools/epn/run.sh` to your folder. From 29d279c65d9be85f5524bf7d409f7b5af382262e Mon Sep 17 00:00:00 2001 From: Markus Fasel Date: Tue, 5 Oct 2021 15:41:19 +0200 Subject: [PATCH 104/236] [EMCAL-724] Adding EMCAL QC on EPN Currently on EPN: - Digits QC - Raw QC --- production/qc-workflow.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index ca12484..eae9ce4 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -6,6 +6,7 @@ [ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json [ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/work/epn/configs/qc/ft0-digits-qc-ds.json [ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/work/epn/configs/qc/fv0-digits-qc-ds.json +[ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json if [ -z "$WORKFLOW" ]; then echo This script must be called from the dpl-workflow.sh and not standalone 1>&2 From 701ddf454a072fd003128a04ba5e53dd89b4c2f1 Mon Sep 17 00:00:00 2001 From: Markus Fasel Date: Tue, 5 Oct 2021 16:24:50 +0200 Subject: [PATCH 105/236] [EMCAL-724] Adapt CTF writing in scripts to new method via global variables --- .../EMC/runEMCRawToDigitsRecoPilelineCTF.sh | 15 ++++++++----- ...EMCRawToDigitsRecoPilelineQCAlllocalCTF.sh | 16 +++++++++----- ...runEMCRawToDigitsRecoPilelineQClocalCTF.sh | 18 ++++++++++----- ...RawToDigitsRecoPilelineQClocalCTFSingle.sh | 22 +++++++++---------- testing/detectors/EMC/workflows.desc | 4 ++-- 5 files changed, 46 insertions(+), 29 deletions(-) diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh index bdaf225..5b20605 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh @@ -15,8 +15,10 @@ NCPU=12 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" #HOST='$(hostname -s)-ib' -CTF_OUTDIR=/tmp/datadist/ctf -CTF_DICTDIR=/home/epn/odc/files/ctf_dictionary.root +# CTF compression dictionary +CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" +# min file size for CTF (accumulate CTFs until it is reached) +CTF_MINSIZE="2000000"t o2-dpl-raw-proxy $ARGS_ALL \ --dataspec "$PROXY_INSPEC" \ @@ -34,9 +36,12 @@ o2-dpl-raw-proxy $ARGS_ALL \ --infologger-severity warning \ --pipeline EMCALRawToCellConverterSpec:8 \ | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ - --ctf-dict $CTF_DICTDIR \ + --ctf-dict "${CTF_DICT}" \ | o2-ctf-writer-workflow $ARGS_ALL \ - --onlyDet EMC \ + --configKeyValues "${CONFKEYVAL}" \ --no-grp \ - --output-dir $CTF_OUTDIR \ + --onlyDet $WORKFLOW_DETECTORS \ + --ctf-dict "${CTF_DICT}" \ + --output-dir $CTF_DIR \ + --min-file-size "${CTF_MINSIZE}" \ | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh index 7077659..3b2e022 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh @@ -17,8 +17,11 @@ INFOLOGGER_SEVERITY=warning SEVERITY=warning INFOLOGGER_SEVERITY_QC=warning SEVERITY_QC=warning -CTF_OUTDIR=/tmp/datadist/ctf -CTF_DICTDIR=/home/epn/odc/files/ctf_dictionary.root + +# CTF compression dictionary +CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" +# min file size for CTF (accumulate CTFs until it is reached) +CTF_MINSIZE="2000000" o2-dpl-raw-proxy $ARGS_ALL \ --dataspec "$PROXY_INSPEC" \ @@ -42,10 +45,13 @@ o2-dpl-raw-proxy $ARGS_ALL \ --severity $SEVERITY_QC \ --infologger-severity $INFOLOGGER_SEVERITY_QC \ | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ - --ctf-dict $CTF_DICTDIR \ + --ctf-dict "${CTF_DICT}" \ | o2-ctf-writer-workflow $ARGS_ALL \ - --onlyDet EMC \ + --configKeyValues "${CONFKEYVAL}" \ --no-grp \ - --output-dir $CTF_OUTDIR \ + --onlyDet $WORKFLOW_DETECTORS \ + --ctf-dict "${CTF_DICT}" \ + --output-dir $CTF_DIR \ + --min-file-size "${CTF_MINSIZE}" \ | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh index 9353dc7..0d25e80 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh @@ -17,8 +17,11 @@ INFOLOGGER_SEVERITY=warning SEVERITY=warning INFOLOGGER_SEVERITY_QC=warning SEVERITY_QC=warning -CTF_OUTDIR=/tmp/datadist/ctf -CTF_DICTDIR=/home/epn/odc/files/ctf_dictionary.root + +# CTF compression dictionary +CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" +# min file size for CTF (accumulate CTFs until it is reached) +CTF_MINSIZE="2000000" o2-dpl-raw-proxy $ARGS_ALL \ --dataspec "$PROXY_INSPEC" \ @@ -42,9 +45,12 @@ o2-dpl-raw-proxy $ARGS_ALL \ --severity $SEVERITY_QC \ --infologger-severity $INFOLOGGER_SEVERITY_QC \ | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ - --ctf-dict $CTF_DICTDIR \ + --ctf-dict "${CTF_DICT}" \ | o2-ctf-writer-workflow $ARGS_ALL \ - --onlyDet EMC \ + --configKeyValues "${CONFKEYVAL}" \ --no-grp \ - --output-dir $CTF_OUTDIR \ - | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file + --onlyDet $WORKFLOW_DETECTORS \ + --ctf-dict "${CTF_DICT}" \ + --output-dir $CTF_DIR \ + --min-file-size "${CTF_MINSIZE}" \\ + | o2-dpl-run $ARGS_ALL --dds diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh index 257c84f..ca0499a 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh @@ -15,8 +15,11 @@ INFOLOGGER_SEVERITY=warning SEVERITY=warning INFOLOGGER_SEVERITY_QC=warning SEVERITY_QC=warning -CTF_OUTDIR=/tmp/datadist/ctf -CTF_DICTDIR=/home/epn/odc/files/ctf_dictionary.root + +# CTF compression dictionary +CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" +# min file size for CTF (accumulate CTFs until it is reached) +CTF_MINSIZE="2000000" o2-dpl-raw-proxy $ARGS_ALL \ --dataspec "$PROXY_INSPEC" \ @@ -38,15 +41,12 @@ o2-dpl-raw-proxy $ARGS_ALL \ --severity $SEVERITY_QC \ --infologger-severity $INFOLOGGER_SEVERITY_QC \ | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ + --ctf-dict "${CTF_DICT}" \ | o2-ctf-writer-workflow $ARGS_ALL \ - --onlyDet EMC \ + --configKeyValues "${CONFKEYVAL}" \ --no-grp \ - --output-dir $CTF_OUTDIR \ + --onlyDet $WORKFLOW_DETECTORS \ + --ctf-dict "${CTF_DICT}" \ + --output-dir $CTF_DIR \ + --min-file-size "${CTF_MINSIZE}" \ | o2-dpl-run $ARGS_ALL --dds - -# Entropy encoder: -# --ctf-dict $CTF_DICTDIR \ - -# QC -# --local \ -# --host $HOST \ \ No newline at end of file diff --git a/testing/detectors/EMC/workflows.desc b/testing/detectors/EMC/workflows.desc index e6e2864..d092bba 100644 --- a/testing/detectors/EMC/workflows.desc +++ b/testing/detectors/EMC/workflows.desc @@ -1,2 +1,2 @@ -emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file +emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file From e15b05ea79612f7f3937a29eaf973aeb5e37973a Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 5 Oct 2021 23:01:21 +0200 Subject: [PATCH 106/236] Sync for O2 PR7216 --- production/dpl-workflow.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 23b857d..e6c5015 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -24,13 +24,16 @@ workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" +ITS_NOISE="${FILEWORKDIR}" MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" + MID_FEEID_MAP="$FILEWORKDIR/mid-feeId_mapper.txt" CTF_MINSIZE="2000000" NITSDECTHREADS=2 NMFTDECTHREADS=2 CTF_DICT=${CTF_DICT_DIR}/ctf_dictionary.root +ITSMFT_FILES="ITSClustererParam.dictFilePath=$ITSCLUSDICT;MFTClustererParam.dictFilePath=$MFTCLUSDICT"; if [ "0$O2_ROOT" == "0" ]; then eval "`alienv shell-helper`" @@ -78,7 +81,6 @@ TRD_CONFIG_KEY= TRD_TRANSFORMER_CONFIG= CPV_INPUT=raw EVE_CONFIG=" --jsons-folder $EDJSONS_DIR" -MFTDEC_CONFIG= MIDDEC_CONFIG= if [ $SYNCMODE == 1 ]; then @@ -104,7 +106,7 @@ fi if [ $EPNMODE == 1 ]; then EVE_CONFIG+=" --eve-dds-collection-index 0" - MFTDEC_CONFIG+=" --noise-file \"${MFT_NOISE}\"" + ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE"; MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" # Options for decoding current TRD real raw data (not needed for data converted from MC) if [ -z $TRD_DECODER_OPTIONS ]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 --ignore-digithcheader --halfchamberwords 2 --halfchambermajor 33 "; fi @@ -294,8 +296,8 @@ if [ $CTFINPUT == 0 ]; then WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline tpc-raw-to-digits-0:$N_TPCRAWDEC | " WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:$N_TPCRAWDEC | " fi - has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${ITSCLUSDICT}\" --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:$N_ITSRAWDEC | " - has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --dict-file \"${MFTCLUSDICT}\" --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:$N_MFTRAWDEC ${MFTDEC_CONFIG} --runmft true | " + has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:$N_ITSRAWDEC | " + has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:$N_MFTRAWDEC --runmft true | " has_detector FT0 && ! has_detector_flp_processing FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline ft0-datareader-dpl:$N_F_RAW | " has_detector FV0 && ! has_detector_flp_processing FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fv0-datareader-dpl:$N_F_RAW | " has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline MIDRawDecoder:$N_F_RAW,MIDDecodedDataAggregator:$N_F_RAW | " @@ -315,8 +317,8 @@ fi # Common reconstruction workflows (has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " (has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC --pipeline tof-compressed-decoder:$N_F_RAW,TOFClusterer:$N_F_REST | " -has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY\" --its-dictionary-path $FILEWORKDIR --pipeline its-tracker:$N_ITSTRK | " -has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --its-dictionary-path $FILEWORKDIR --pipeline itstpc-track-matcher:$N_TPCITS | " +has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY;$ITSMFT_FILES\" --pipeline its-tracker:$N_ITSTRK | " +has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline itstpc-track-matcher:$N_TPCITS | " has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline ft0-reconstructor:$N_F_REST | " has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES | " @@ -327,7 +329,7 @@ has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-t if [ $SYNCMODE == 0 ]; then has_detector_reco MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline MIDClusterizer:$N_F_REST,MIDTracker:$N_F_REST | " has_detector_reco MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK,mch-cluster-finder:$N_F_REST,mch-cluster-transformer:$N_F_REST | " - has_detector_reco MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK --mft-dictionary-path $FILEWORKDIR | " + has_detector_reco MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK | " has_detector_reco FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector_reco FV0 && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector_reco ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " @@ -381,7 +383,7 @@ workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS # --------------------------------------------------------------------------------------------------------------------- # Event display -workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --display-tracks TPC --display-clusters TPC $EVE_CONFIG $DISABLE_MC | " +workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --display-tracks TPC --display-clusters TPC $EVE_CONFIG $DISABLE_MC | " # --------------------------------------------------------------------------------------------------------------------- # Quality Control From e0c429b3d9461bd0aa2bfe3fc6c7253f3f9c6b61 Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 6 Oct 2021 18:10:39 +0200 Subject: [PATCH 107/236] add CTF_METAFILES_DIR to dpl-workflow --- production/dpl-workflow.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index e6c5015..423a264 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -11,6 +11,7 @@ source $MYDIR/setenv.sh if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries +if [ -z $CTF_METAFILES_DIR ]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers if [ $SYNCMODE == 1 ]; then if [ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]; then export WORKFLOW_DETECTORS_MATCHING="ITSTPC,ITSTPCTRD,ITSTPCTOF"; fi # Select matchings that are enabled in sync mode @@ -372,7 +373,7 @@ if [ $CTFINPUT == 0 ] && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi - CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --onlyDet $WORKFLOW_DETECTORS" + CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --onlyDet $WORKFLOW_DETECTORS --meta-output-dir $CTF_METAFILES_DIR " if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $NTIMEFRAMES"; fi WORKFLOW+="$CMD_CTF | " fi From ba1028a6d9d24b639cad696b8495cc3e08fecdfe Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 6 Oct 2021 18:06:16 +0200 Subject: [PATCH 108/236] private workflows updates --- testing/private/shahoian/runTF_ext_dpl.sh | 5 +++++ testing/private/shahoian/run_ext_dpl.sh | 6 +++++- testing/private/shahoian/workflows_dpl.desc | 6 ++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/testing/private/shahoian/runTF_ext_dpl.sh b/testing/private/shahoian/runTF_ext_dpl.sh index de27be2..c322d40 100755 --- a/testing/private/shahoian/runTF_ext_dpl.sh +++ b/testing/private/shahoian/runTF_ext_dpl.sh @@ -33,6 +33,11 @@ export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" export GEN_TOPO_IGNORE_ERROR=1 + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 +export MULTIPLICITY_FACTOR_CTFENCODERS=1 +export MULTIPLICITY_FACTOR_REST=1 + for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index fa647e3..2c42d45 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -29,10 +29,14 @@ export RECO_NUM_NODES_OVERRIDE=0 # Override export NHBPERTF=128 # Number of HBF per TF export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" #export GPU_EXTRA_CONFIG="" -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=2;" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" export GEN_TOPO_IGNORE_ERROR=1 +export MULTIPLICITY_FACTOR_RAWDECODERS=1 +export MULTIPLICITY_FACTOR_CTFENCODERS=1 +export MULTIPLICITY_FACTOR_REST=1 + for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc index f55f77d..2353799 100644 --- a/testing/private/shahoian/workflows_dpl.desc +++ b/testing/private/shahoian/workflows_dpl.desc @@ -107,8 +107,10 @@ its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-50: "O2PDPSuite" reco,50,50,"WO its_notracking-tpc-tof-CTF-QC-its-tof-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" its_notracking-tpc-tof-CTF-QC-its-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF ,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF ,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50-ctfmeta: "O2PDPSuite" reco,50,50,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" its_notracking-mft-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" its_notracking-mft-TF-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" From 2812458eb44d087c4fcefd34c81a2aae700ef45b Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 6 Oct 2021 19:25:12 +0200 Subject: [PATCH 109/236] Increase TPC rawdec multiplicity --- production/dpl-workflow.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 423a264..14bab85 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -215,7 +215,7 @@ elif [ $EPNPIPELINES != 0 ]; then N_EMC=$((7 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 7 * $EPNPIPELINES * $NGPUS / 4 : 1)) N_TRDENT=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) N_TRDTRK=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) - N_TPCRAWDEC=$((6 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 6 * $EPNPIPELINES * $NGPUS / 4 : 1)) + N_TPCRAWDEC=$((8 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 8 * $EPNPIPELINES * $NGPUS / 4 : 1)) if [ $GPUTYPE == "CPU" ]; then N_TPCTRK=8 GPU_CONFIG_KEY+="GPU_proc.ompThreads=4;" @@ -373,7 +373,7 @@ if [ $CTFINPUT == 0 ] && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi - CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --onlyDet $WORKFLOW_DETECTORS --meta-output-dir $CTF_METAFILES_DIR " + CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --onlyDet $WORKFLOW_DETECTORS --meta-output-dir $CTF_METAFILES_DIR " if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $NTIMEFRAMES"; fi WORKFLOW+="$CMD_CTF | " fi From 87a040f7efd07bc7dd0f6c87a1ec9da1994422ca Mon Sep 17 00:00:00 2001 From: afurs Date: Thu, 7 Oct 2021 10:32:04 +0200 Subject: [PATCH 110/236] FT0 and FV0 topology generation scripts are added --- production/qc-workflow.sh | 4 +- testing/detectors/FT0/ft0-ctf.sh | 24 ++++ testing/detectors/FT0/ft0-digits-ctf.sh | 25 ++++ testing/detectors/FT0/ft0-digits-ds.json | 69 +++++++++++ testing/detectors/FT0/ft0-digits-qc-ctf.sh | 25 ++++ testing/detectors/FT0/run_ft0_ctf.sh | 34 ++++++ testing/detectors/FT0/run_ft0_digits_ctf.sh | 34 ++++++ .../detectors/FT0/run_ft0_digits_qc_ctf.sh | 34 ++++++ testing/detectors/FT0/workflows.desc | 3 + testing/detectors/FV0/fv0-ctf.sh | 24 ++++ testing/detectors/FV0/fv0-digits-ctf.sh | 25 ++++ testing/detectors/FV0/fv0-digits-ds.json | 69 +++++++++++ testing/detectors/FV0/fv0-digits-qc-ctf.sh | 25 ++++ testing/detectors/FV0/run_fv0_ctf.sh | 34 ++++++ testing/detectors/FV0/run_fv0_digits_ctf.sh | 34 ++++++ .../detectors/FV0/run_fv0_digits_qc_ctf.sh | 34 ++++++ testing/detectors/FV0/workflows.desc | 3 + testing/private/afurs/ft0-digits-ds.json | 69 +++++++++++ testing/private/afurs/ft0-fv0-ctf.sh | 31 +++++ testing/private/afurs/ft0-fv0-digits-ds.json | 108 ++++++++++++++++++ .../private/afurs/ft0-fv0-digits-qc-ctf.sh | 35 ++++++ testing/private/afurs/fv0-digits-ds.json | 69 +++++++++++ testing/private/afurs/run_ft0_fv0_ctf.sh | 34 ++++++ .../afurs/run_ft0_fv0_digits_qc_ctf.sh | 31 +++++ testing/private/afurs/workflows.desc | 2 + 25 files changed, 877 insertions(+), 2 deletions(-) create mode 100755 testing/detectors/FT0/ft0-ctf.sh create mode 100755 testing/detectors/FT0/ft0-digits-ctf.sh create mode 100644 testing/detectors/FT0/ft0-digits-ds.json create mode 100755 testing/detectors/FT0/ft0-digits-qc-ctf.sh create mode 100755 testing/detectors/FT0/run_ft0_ctf.sh create mode 100755 testing/detectors/FT0/run_ft0_digits_ctf.sh create mode 100755 testing/detectors/FT0/run_ft0_digits_qc_ctf.sh create mode 100755 testing/detectors/FV0/fv0-ctf.sh create mode 100755 testing/detectors/FV0/fv0-digits-ctf.sh create mode 100644 testing/detectors/FV0/fv0-digits-ds.json create mode 100755 testing/detectors/FV0/fv0-digits-qc-ctf.sh create mode 100755 testing/detectors/FV0/run_fv0_ctf.sh create mode 100755 testing/detectors/FV0/run_fv0_digits_ctf.sh create mode 100755 testing/detectors/FV0/run_fv0_digits_qc_ctf.sh create mode 100644 testing/private/afurs/ft0-digits-ds.json create mode 100755 testing/private/afurs/ft0-fv0-ctf.sh create mode 100644 testing/private/afurs/ft0-fv0-digits-ds.json create mode 100755 testing/private/afurs/ft0-fv0-digits-qc-ctf.sh create mode 100644 testing/private/afurs/fv0-digits-ds.json create mode 100755 testing/private/afurs/run_ft0_fv0_ctf.sh create mode 100755 testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh create mode 100644 testing/private/afurs/workflows.desc diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index eae9ce4..5233338 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -4,8 +4,8 @@ [ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/epn/jliu/itsEPNv2.json [ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster.json [ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json -[ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/work/epn/configs/qc/ft0-digits-qc-ds.json -[ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/work/epn/configs/qc/fv0-digits-qc-ds.json +[ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json +[ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json [ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json if [ -z "$WORKFLOW" ]; then diff --git a/testing/detectors/FT0/ft0-ctf.sh b/testing/detectors/FT0/ft0-ctf.sh new file mode 100755 index 0000000..dedb366 --- /dev/null +++ b/testing/detectors/FT0/ft0-ctf.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +ARGS_CTF="--min-file-size 50000000" + +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FT0/ft0-digits-ctf.sh b/testing/detectors/FT0/ft0-digits-ctf.sh new file mode 100755 index 0000000..d9fe4aa --- /dev/null +++ b/testing/detectors/FT0/ft0-digits-ctf.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +ARGS_CTF="--min-file-size 50000000" + +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="x:FT0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-ft0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline ft0-datareader-dpl:$NTHREADS \ +| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FT0/ft0-digits-ds.json b/testing/detectors/FT0/ft0-digits-ds.json new file mode 100644 index 0000000..3ebc0b8 --- /dev/null +++ b/testing/detectors/FT0/ft0-digits-ds.json @@ -0,0 +1,69 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFT0": { + "active": "true", + "className": "o2::quality_control_modules::ft0::DigitQcTask", + "moduleName": "QcFT0", + "detectorName": "FT0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "ft0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "epn102-ib", + "remotePort": "65019", + "mergingMode": "delta", + "localControl" : "odc" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "ft0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "4533" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/testing/detectors/FT0/ft0-digits-qc-ctf.sh b/testing/detectors/FT0/ft0-digits-qc-ctf.sh new file mode 100755 index 0000000..42edda6 --- /dev/null +++ b/testing/detectors/FT0/ft0-digits-qc-ctf.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +ARGS_CTF="--min-file-size 50000000" + +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-qc ${ARGS_ALL} --config json://${MYDIR}/ft0-digits-ds.json \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FT0/run_ft0_ctf.sh b/testing/detectors/FT0/run_ft0_ctf.sh new file mode 100755 index 0000000..5320ad1 --- /dev/null +++ b/testing/detectors/FT0/run_ft0_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/detectors/FT0/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=ft0-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FT0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FT0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/ft0-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/detectors/FT0/run_ft0_digits_ctf.sh b/testing/detectors/FT0/run_ft0_digits_ctf.sh new file mode 100755 index 0000000..c6f1011 --- /dev/null +++ b/testing/detectors/FT0/run_ft0_digits_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/detectors/FT0/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=ft0-digits-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FT0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FT0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/ft0-digits-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/detectors/FT0/run_ft0_digits_qc_ctf.sh b/testing/detectors/FT0/run_ft0_digits_qc_ctf.sh new file mode 100755 index 0000000..70a9a35 --- /dev/null +++ b/testing/detectors/FT0/run_ft0_digits_qc_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/detectors/FT0/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=ft0-digits-qc-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FT0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FT0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/ft0-digits-qc-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/detectors/FT0/workflows.desc b/testing/detectors/FT0/workflows.desc index e69de29..89e56a2 100644 --- a/testing/detectors/FT0/workflows.desc +++ b/testing/detectors/FT0/workflows.desc @@ -0,0 +1,3 @@ +ft0-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-ctf.sh" +ft0-digits-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-digits-ctf.sh" +ft0-digits-qc-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-digits-qc-ctf.sh" diff --git a/testing/detectors/FV0/fv0-ctf.sh b/testing/detectors/FV0/fv0-ctf.sh new file mode 100755 index 0000000..f91093d --- /dev/null +++ b/testing/detectors/FV0/fv0-ctf.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +ARGS_CTF="--min-file-size 50000000" + +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FV0/fv0-digits-ctf.sh b/testing/detectors/FV0/fv0-digits-ctf.sh new file mode 100755 index 0000000..944bd1f --- /dev/null +++ b/testing/detectors/FV0/fv0-digits-ctf.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +ARGS_CTF="--min-file-size 50000000" + +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="x:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fv0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fv0-datareader-dpl:$NTHREADS \ +| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FV0/fv0-digits-ds.json b/testing/detectors/FV0/fv0-digits-ds.json new file mode 100644 index 0000000..9b381b9 --- /dev/null +++ b/testing/detectors/FV0/fv0-digits-ds.json @@ -0,0 +1,69 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFV0": { + "active": "true", + "className": "o2::quality_control_modules::fv0::DigitQcTask", + "moduleName": "QcFV0", + "detectorName": "FV0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "fv0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "epn102-ib", + "remotePort": "65018", + "mergingMode": "delta", + "localControl" : "odc" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "fv0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "4533" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/testing/detectors/FV0/fv0-digits-qc-ctf.sh b/testing/detectors/FV0/fv0-digits-qc-ctf.sh new file mode 100755 index 0000000..95ddf3d --- /dev/null +++ b/testing/detectors/FV0/fv0-digits-qc-ctf.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +ARGS_CTF="--min-file-size 50000000" + +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-qc ${ARGS_ALL} --config json://${MYDIR}/fv0-digits-ds.json \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FV0/run_fv0_ctf.sh b/testing/detectors/FV0/run_fv0_ctf.sh new file mode 100755 index 0000000..77c4fc3 --- /dev/null +++ b/testing/detectors/FV0/run_fv0_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/detectors/FV0/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=fv0-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FV0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/fv0-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/detectors/FV0/run_fv0_digits_ctf.sh b/testing/detectors/FV0/run_fv0_digits_ctf.sh new file mode 100755 index 0000000..fa4c508 --- /dev/null +++ b/testing/detectors/FV0/run_fv0_digits_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/detectors/FV0/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=fv0-digits-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FV0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/fv0-digits-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/detectors/FV0/run_fv0_digits_qc_ctf.sh b/testing/detectors/FV0/run_fv0_digits_qc_ctf.sh new file mode 100755 index 0000000..aac6d08 --- /dev/null +++ b/testing/detectors/FV0/run_fv0_digits_qc_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/detectors/FV0/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=fv0-digits-qc-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FV0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/fv0-digits-qc-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/detectors/FV0/workflows.desc b/testing/detectors/FV0/workflows.desc index e69de29..04d860e 100644 --- a/testing/detectors/FV0/workflows.desc +++ b/testing/detectors/FV0/workflows.desc @@ -0,0 +1,3 @@ +fv0-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-ctf.sh" +fv0-digits-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-digits-ctf.sh" +fv0-digits-qc-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-digits-qc-ctf.sh" diff --git a/testing/private/afurs/ft0-digits-ds.json b/testing/private/afurs/ft0-digits-ds.json new file mode 100644 index 0000000..3ebc0b8 --- /dev/null +++ b/testing/private/afurs/ft0-digits-ds.json @@ -0,0 +1,69 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFT0": { + "active": "true", + "className": "o2::quality_control_modules::ft0::DigitQcTask", + "moduleName": "QcFT0", + "detectorName": "FT0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "ft0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "epn102-ib", + "remotePort": "65019", + "mergingMode": "delta", + "localControl" : "odc" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "ft0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "4533" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/testing/private/afurs/ft0-fv0-ctf.sh b/testing/private/afurs/ft0-fv0-ctf.sh new file mode 100755 index 0000000..45d62c4 --- /dev/null +++ b/testing/private/afurs/ft0-fv0-ctf.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#CTFOUT="/home/afurs/public/out/" +#CTFOUT="${EPN_DATA_DIR}" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#CTFOUT=$FILEWORKDIR +#CTFOUT=$FILEWORKDIR +#FILEWORKDIR=$CTFOUT +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +# ARGS_CTF="" + +ARGS_CTF="--min-file-size 1000000" +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/private/afurs/ft0-fv0-digits-ds.json b/testing/private/afurs/ft0-fv0-digits-ds.json new file mode 100644 index 0000000..d452f6c --- /dev/null +++ b/testing/private/afurs/ft0-fv0-digits-ds.json @@ -0,0 +1,108 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFT0": { + "active": "true", + "className": "o2::quality_control_modules::ft0::DigitQcTask", + "moduleName": "QcFT0", + "detectorName": "FT0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "ft0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "epn102-ib", + "remotePort": "65019", + "mergingMode": "delta", + "localControl" : "odc" + }, + "DigitQcTaskFV0": { + "active": "true", + "className": "o2::quality_control_modules::fv0::DigitQcTask", + "moduleName": "QcFV0", + "detectorName": "FV0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "fv0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "epn102-ib", + "remotePort": "65018", + "mergingMode": "delta", + "localControl" : "odc" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "ft0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "4533" + } + ], + "blocking": "false" + }, + { + "id": "fv0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "4533" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh new file mode 100755 index 0000000..d377f39 --- /dev/null +++ b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#CTFOUT="/home/afurs/public/out/" +#CTFOUT="${EPN_DATA_DIR}" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#CTFOUT=$FILEWORKDIR +#CTFOUT=$FILEWORKDIR +#FILEWORKDIR=$CTFOUT +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +# ARGS_CTF="" + +ARGS_CTF="--min-file-size 1000000" +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fv0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fv0-datareader-dpl:$NTHREADS \ +| o2-ft0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline ft0-datareader-dpl:$NTHREADS \ +| o2-qc ${ARGS_ALL} --config json://${MYDIR}/ft0-fv0-digits-ds.json \ +| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds + diff --git a/testing/private/afurs/fv0-digits-ds.json b/testing/private/afurs/fv0-digits-ds.json new file mode 100644 index 0000000..9b381b9 --- /dev/null +++ b/testing/private/afurs/fv0-digits-ds.json @@ -0,0 +1,69 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFV0": { + "active": "true", + "className": "o2::quality_control_modules::fv0::DigitQcTask", + "moduleName": "QcFV0", + "detectorName": "FV0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "fv0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "epn102-ib", + "remotePort": "65018", + "mergingMode": "delta", + "localControl" : "odc" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "fv0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "4533" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/testing/private/afurs/run_ft0_fv0_ctf.sh b/testing/private/afurs/run_ft0_fv0_ctf.sh new file mode 100755 index 0000000..7f0c5a2 --- /dev/null +++ b/testing/private/afurs/run_ft0_fv0_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=ft0-fv0-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/ft0-fv0-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh b/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh new file mode 100755 index 0000000..ed8be34 --- /dev/null +++ b/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard +# Use these settings to fetch the Workflow Repository using a hash / tag +export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +export GEN_TOPO_SOURCE=v1.3 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=ft0-fv0-digits-qc-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/ft0-fv0-digits-qc-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi diff --git a/testing/private/afurs/workflows.desc b/testing/private/afurs/workflows.desc new file mode 100644 index 0000000..384097a --- /dev/null +++ b/testing/private/afurs/workflows.desc @@ -0,0 +1,2 @@ +ft0-fv0-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-ctf.sh" +ft0-fv0-digits-qc-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-digits-qc-ctf.sh" From 90ab9b4c74d694b6d249becf58d67d3307888790 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 7 Oct 2021 23:01:03 +0200 Subject: [PATCH 111/236] impose higher min-file-size and fixed max number of CTFs per file --- production/dpl-workflow.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 14bab85..31cc821 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -13,6 +13,9 @@ if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Dire if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries if [ -z $CTF_METAFILES_DIR ]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers +if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="500000000"; fi # accumulate CTFs until file size reached +if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="200"; fi # but no more than given number of CTFs per file + if [ $SYNCMODE == 1 ]; then if [ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]; then export WORKFLOW_DETECTORS_MATCHING="ITSTPC,ITSTPCTRD,ITSTPCTOF"; fi # Select matchings that are enabled in sync mode else @@ -29,7 +32,6 @@ ITS_NOISE="${FILEWORKDIR}" MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" MID_FEEID_MAP="$FILEWORKDIR/mid-feeId_mapper.txt" -CTF_MINSIZE="2000000" NITSDECTHREADS=2 NMFTDECTHREADS=2 CTF_DICT=${CTF_DICT_DIR}/ctf_dictionary.root @@ -373,7 +375,7 @@ if [ $CTFINPUT == 0 ] && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi - CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --onlyDet $WORKFLOW_DETECTORS --meta-output-dir $CTF_METAFILES_DIR " + CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --max-ctf-per-file ${CTF_MAX_PER_FILE} --onlyDet $WORKFLOW_DETECTORS --meta-output-dir $CTF_METAFILES_DIR " if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $NTIMEFRAMES"; fi WORKFLOW+="$CMD_CTF | " fi From 50f8b974c0d3d170da4a2260213b5821477bf697 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 8 Oct 2021 09:47:47 +0200 Subject: [PATCH 112/236] Set GPU_NUM_MEM_REG_CALLBACKS on EPN --- production/dpl-workflow.sh | 1 + production/production.desc | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 31cc821..8ab3bd8 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -113,6 +113,7 @@ if [ $EPNMODE == 1 ]; then MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" # Options for decoding current TRD real raw data (not needed for data converted from MC) if [ -z $TRD_DECODER_OPTIONS ]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 --ignore-digithcheader --halfchamberwords 2 --halfchambermajor 33 "; fi + if [ $EXTINPUT == 1 ] && [ $GPUTYPE != "CPU" ] && [ -z "GPU_NUM_MEM_REG_CALLBACKS" ]; then GPU_NUM_MEM_REG_CALLBACKS=4; fi fi if [ $GPUTYPE == "HIP" ]; then diff --git a/production/production.desc b/production/production.desc index 06e7768..cad8925 100644 --- a/production/production.desc +++ b/production/production.desc @@ -1,2 +1,2 @@ -synchronous-workflow: "O2PDPSuite" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 production/dpl-workflow.sh" reco,128,128,"SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 production/dpl-workflow.sh" +synchronous-workflow: "O2PDPSuite" reco,128,128,"GPU_NUM_MEM_REG_CALLBACKS=5 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 production/dpl-workflow.sh" reco,128,128,"GPU_NUM_MEM_REG_CALLBACKS=5 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 production/dpl-workflow.sh" synchronous-workflow-1numa: "O2PDPSuite" reco,128,128,"SYNCMODE=1 production/dpl-workflow.sh" From 22418d5038a6d3d72f0ba0715782424fa7bdb1fe Mon Sep 17 00:00:00 2001 From: Markus Fasel Date: Thu, 7 Oct 2021 18:59:49 +0200 Subject: [PATCH 113/236] [EMCAL-525, EMCAL-527] Update QC configurations with checkers Enable digits checker in all configs and raw checkers in emcQCTasksAll_multinode.json --- .../EMC/qc/emcQCTasksAll_multinode.json | 145 +++++------------- .../EMC/qc/emcQCTasks_multinode.json | 118 ++------------ .../EMC/qc/emcQCTasks_singlenode.json | 118 ++------------ 3 files changed, 73 insertions(+), 308 deletions(-) diff --git a/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json b/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json index f435792..8180cd8 100644 --- a/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json +++ b/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json @@ -68,117 +68,54 @@ } }, "checks": { - "RawCheck": { - "active": "true", - "className": "o2::quality_control_modules::emcal::RawCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "dataSource": [{ - "type": "Task", - "name": "RawTask", - "MOs": "all" - }] - }, - "checkAmplHighG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeHG_CAL", - "digitAmplitudeHG_PHYS" - ] - } - ] - }, - "checkAmplLowG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeLG_CAL", - "digitAmplitudeLG_PHYS" - ] - } - ] - }, - "checkDigitTimeHighG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitTimeHG_CAL", - "digitTimeHG_PHYS" - ] - } - ] - }, - "checkDigitTimeLowG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitTimeLG_CAL", - "digitTimeLG_PHYS" - ] - } - ] + "RawBunchMinAmplitude": { + "active": "true", + "className": "o2::quality_control_modules::emcal::RawCheck", + "moduleName": "QcEMCAL", + "policy": "OnEachSeparately", + "dataSource": [ + { + "type": "Task", + "name": "RawTask", + "MOs": ["BunchMinRawAmplitudeFull_PHYS", "BunchMinRawAmplitudeEMCAL_PHYS", "BunchMinRawAmplitudeDCAL_PHYS", + "BunchMinRawAmplitude_SM0_PHYS", "BunchMinRawAmplitude_SM1_PHYS", "BunchMinRawAmplitude_SM2_PHYS", + "BunchMinRawAmplitude_SM3_PHYS", "BunchMinRawAmplitude_SM4_PHYS", "BunchMinRawAmplitude_SM5_PHYS", + "BunchMinRawAmplitude_SM6_PHYS", "BunchMinRawAmplitude_SM7_PHYS", "BunchMinRawAmplitude_SM8_PHYS", + "BunchMinRawAmplitude_SM9_PHYS", "BunchMinRawAmplitude_SM10_PHYS", "BunchMinRawAmplitude_SM11_PHYS", + "BunchMinRawAmplitude_SM12_PHYS", "BunchMinRawAmplitude_SM13_PHYS", "BunchMinRawAmplitude_SM14_PHYS", + "BunchMinRawAmplitude_SM15_PHYS", "BunchMinRawAmplitude_SM16_PHYS", "BunchMinRawAmplitude_SM17_PHYS", + "BunchMinRawAmplitude_SM18_PHYS", "BunchMinRawAmplitude_SM19_PHYS" + ] + } + ] }, - "checkAmplEMCAL": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeEMCAL_CAL", - "digitAmplitudeEMCAL_PHYS" - ] - } - ] + "RawErrorCheck": { + "active": "true", + "className": "o2::quality_control_modules::emcal::RawCheck", + "moduleName": "QcEMCAL", + "policy": "OnEachSeparately", + "dataSource": [ + { + "type": "Task", + "name": "RawTask", + "MOs": ["ErrorTypePerSM"] + } + ] }, - "checkAmplDCAL": { + "DigitsCheckAmplitude": { "active": "true", "className": "o2::quality_control_modules::emcal::DigitCheck", "moduleName": "QcEMCAL", - "policy": "OnAny", + "policy": "OnEachSeparately", "detectorName": "EMC", "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeDCAL_CAL", - "digitAmplitudeDCAL_PHYS" - ] - } + { + "type": "Task", + "name": "DigitsTask", + "MOs": ["digitAmplitudeEMCAL_CAL", "digitAmplitudeEMCAL_PHYS", "digitAmplitudeDCAL_CAL", "digitAmplitudeDCAL_PHYS", + "digitAmplitude_CAL", "digitAmplitude_PHYS" + ] + } ] } } diff --git a/testing/detectors/EMC/qc/emcQCTasks_multinode.json b/testing/detectors/EMC/qc/emcQCTasks_multinode.json index a7f22a4..219b4a6 100644 --- a/testing/detectors/EMC/qc/emcQCTasks_multinode.json +++ b/testing/detectors/EMC/qc/emcQCTasks_multinode.json @@ -48,108 +48,22 @@ } }, "checks": { - "checkAmplHighG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeHG_CAL", - "digitAmplitudeHG_PHYS" - ] - } - ] - }, - "checkAmplLowG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeLG_CAL", - "digitAmplitudeLG_PHYS" - ] - } - ] - }, - "checkDigitTimeHighG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitTimeHG_CAL", - "digitTimeHG_PHYS" - ] - } - ] - }, - "checkDigitTimeLowG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitTimeLG_CAL", - "digitTimeLG_PHYS" - ] - } - ] - }, - "checkAmplEMCAL": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeEMCAL_CAL", - "digitAmplitudeEMCAL_PHYS" - ] - } - ] - }, - "checkAmplDCAL": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeDCAL_CAL", - "digitAmplitudeDCAL_PHYS" - ] - } - ] - } + "DigitsCheckAmplitude": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnEachSeparately", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": ["digitAmplitudeEMCAL_CAL", "digitAmplitudeEMCAL_PHYS", "digitAmplitudeDCAL_CAL", "digitAmplitudeDCAL_PHYS", + "digitAmplitude_CAL", "digitAmplitude_PHYS" + ] + } + ] + } } }, "dataSamplingPolicies": [ diff --git a/testing/detectors/EMC/qc/emcQCTasks_singlenode.json b/testing/detectors/EMC/qc/emcQCTasks_singlenode.json index 9de1398..cb9b820 100644 --- a/testing/detectors/EMC/qc/emcQCTasks_singlenode.json +++ b/testing/detectors/EMC/qc/emcQCTasks_singlenode.json @@ -41,108 +41,22 @@ } }, "checks": { - "checkAmplHighG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeHG_CAL", - "digitAmplitudeHG_PHYS" - ] - } - ] - }, - "checkAmplLowG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeLG_CAL", - "digitAmplitudeLG_PHYS" - ] - } - ] - }, - "checkDigitTimeHighG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitTimeHG_CAL", - "digitTimeHG_PHYS" - ] - } - ] - }, - "checkDigitTimeLowG": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitTimeLG_CAL", - "digitTimeLG_PHYS" - ] - } - ] - }, - "checkAmplEMCAL": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeEMCAL_CAL", - "digitAmplitudeEMCAL_PHYS" - ] - } - ] - }, - "checkAmplDCAL": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnAny", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": [ - "digitAmplitudeDCAL_CAL", - "digitAmplitudeDCAL_PHYS" - ] - } - ] - } + "DigitsCheckAmplitude": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnEachSeparately", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": ["digitAmplitudeEMCAL_CAL", "digitAmplitudeEMCAL_PHYS", "digitAmplitudeDCAL_CAL", "digitAmplitudeDCAL_PHYS", + "digitAmplitude_CAL", "digitAmplitude_PHYS" + ] + } + ] + } } }, "dataSamplingPolicies": [ From b70a708b6b7f1fa3085e4c4ef511d356ef98cc74 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 8 Oct 2021 20:03:40 +0200 Subject: [PATCH 114/236] Fix typo --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 8ab3bd8..ad0d6f5 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -113,7 +113,7 @@ if [ $EPNMODE == 1 ]; then MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" # Options for decoding current TRD real raw data (not needed for data converted from MC) if [ -z $TRD_DECODER_OPTIONS ]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 --ignore-digithcheader --halfchamberwords 2 --halfchambermajor 33 "; fi - if [ $EXTINPUT == 1 ] && [ $GPUTYPE != "CPU" ] && [ -z "GPU_NUM_MEM_REG_CALLBACKS" ]; then GPU_NUM_MEM_REG_CALLBACKS=4; fi + if [ $EXTINPUT == 1 ] && [ $GPUTYPE != "CPU" ] && [ -z "$GPU_NUM_MEM_REG_CALLBACKS" ]; then GPU_NUM_MEM_REG_CALLBACKS=4; fi fi if [ $GPUTYPE == "HIP" ]; then From 6061eaf9cc7b6e090f6ffa92ce5dce5784686b1a Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 9 Oct 2021 10:55:27 +0200 Subject: [PATCH 115/236] Module load output should go to the normal log file not stderr log --- tools/parse | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/parse b/tools/parse index 069d647..262428d 100755 --- a/tools/parse +++ b/tools/parse @@ -123,7 +123,7 @@ for line in f: if len(calibworkflows): odccommand += " --calib " + " ".join(calibworkflows) if args[1] != "": - odccommand += " --prependexe \"module load " + args[1] + "; \"" + odccommand += " --prependexe \"module load " + args[1] + " 2>&1 ; \"" odccommand += " -o " + sys.argv[3] if os.system(odccommand) != 0: print("\nError running odc: ", odccommand) From d94be3460a4d1560551500877708ff2bcda90f96 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 9 Oct 2021 09:35:37 +0200 Subject: [PATCH 116/236] Merge change from O2, use early forwarding in NORAW mode --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index ad0d6f5..d69dc91 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -45,7 +45,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA --early-forward-policy noraw" if [ $EPNMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" From 0dd46c0a2f1b02f5f820efefb6514cad84db2378 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 10 Oct 2021 11:13:24 +0200 Subject: [PATCH 117/236] Add source XML for EPN monitoring tool --- tools/monitoring_workflows/dd-disk.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tools/monitoring_workflows/dd-disk.xml diff --git a/tools/monitoring_workflows/dd-disk.xml b/tools/monitoring_workflows/dd-disk.xml new file mode 100644 index 0000000..0294d2c --- /dev/null +++ b/tools/monitoring_workflows/dd-disk.xml @@ -0,0 +1,14 @@ + + + + o2-epn-epn-stderr-monitor -P ODC --infologger 1 + + EPNstderrMonitorRequirement + + +
+ + EPNstderrMonitorTask + +
+
From aaf91ef65bca730d5e938783b2874d35779f7af9 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 10 Oct 2021 11:16:11 +0200 Subject: [PATCH 118/236] Ignore events that trigger GPU buffer overflow during online processing --- production/dpl-workflow.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index d69dc91..dc53a3b 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -109,8 +109,9 @@ fi if [ $EPNMODE == 1 ]; then EVE_CONFIG+=" --eve-dds-collection-index 0" - ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE"; + ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE" MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" + GPU_CONFIG_KEY+="GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;" # Options for decoding current TRD real raw data (not needed for data converted from MC) if [ -z $TRD_DECODER_OPTIONS ]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 --ignore-digithcheader --halfchamberwords 2 --halfchambermajor 33 "; fi if [ $EXTINPUT == 1 ] && [ $GPUTYPE != "CPU" ] && [ -z "$GPU_NUM_MEM_REG_CALLBACKS" ]; then GPU_NUM_MEM_REG_CALLBACKS=4; fi From 561d0721b2cbf299863a2859f0c977ef192b1a77 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 10 Oct 2021 18:57:32 +0200 Subject: [PATCH 119/236] Need to use distinct proxy names when we have 2 raw proxies in calib workflow --- production/calib/its-noise-aggregator.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/calib/its-noise-aggregator.sh b/production/calib/its-noise-aggregator.sh index 7eab024..b458630 100755 --- a/production/calib/its-noise-aggregator.sh +++ b/production/calib/its-noise-aggregator.sh @@ -17,7 +17,7 @@ ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;Na PROXY_INSPEC="A:ITS/COMPCLUSTERS/0;B:ITS/PATTERNS/0;C:ITS/CLUSTERSROF/0;eos:***/INFORMATION" -WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=its-noise-calib,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " +WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name its-noise-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=its-noise-calib,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " WORKFLOW+="o2-calibration-its-calib-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --prob-threshold 1e-5 | " WORKFLOW+="o2-calibration-ccdb-populator-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ccdb-path=\"http://ccdb-test.cern.ch:8080\" | " WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" From 5257c594b2fcd244673a05882322d2971a1dbbfb Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 10 Oct 2021 18:57:48 +0200 Subject: [PATCH 120/236] Add multiplicities for TRD raw decoders --- production/dpl-workflow.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index dc53a3b..57e9f4e 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -176,6 +176,7 @@ N_TPCITS=1 N_ITSRAWDEC=1 N_MFTRAWDEC=1 N_CTPRAWDEC=1 +N_TRDRAWDEC=1 N_TPCRAWDEC=$NGPUS N_EMC=1 N_TRDENT=1 @@ -229,11 +230,13 @@ elif [ $EPNPIPELINES != 0 ]; then fi # Scale some multiplicities with the number of nodes RECO_NUM_NODES_WORKFLOW_CMP=$(($RECO_NUM_NODES_WORKFLOW > 15 ? $RECO_NUM_NODES_WORKFLOW : 15)) # Limit the scaling factor -N_ITSRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSRAWDEC ? 6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSRAWDEC)) -N_MFTRAWDEC=$((6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTRAWDEC ? 6 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTRAWDEC)) -N_ITSTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSTRK)) -N_MFTTRK=$((2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTTRK ? 2 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTTRK)) -N_CTPRAWDEC=$((30 / $RECO_NUM_NODES_WORKFLOW_CMP > N_CTPRAWDEC ? 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_CTPRAWDEC)) +[ $NUMAGPUIDS == 1 ] && RECO_NUM_NODES_WORKFLOW_CMP=$(($RECO_NUM_NODES_WORKFLOW_CMP * 2)) # If we have 2 NUMA Domains, we have each process twice anyway +N_ITSRAWDEC=$((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSRAWDEC ? 3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSRAWDEC)) +N_MFTRAWDEC=$((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTRAWDEC ? 3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTRAWDEC)) +N_ITSTRK=$((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSTRK ? 1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSTRK)) +N_MFTTRK=$((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTTRK ? 1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTTRK)) +N_CTPRAWDEC=$((1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_CTPRAWDEC ? 1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_CTPRAWDEC)) +N_TRDRAWDEC=$((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_TRDRAWDEC ? 3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_TRDRAWDEC)) # Apply external multiplicity factors N_TPCTRK=$((N_TPCTRK * $N_F_REST)) N_TPCITS=$((N_TPCITS * $N_F_REST)) @@ -309,7 +312,7 @@ if [ $CTFINPUT == 0 ]; then has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-data-decoder:$N_F_RAW | " has_detector TOF && ! has_detector_flp_processing TOF && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " has_detector FDD && ! has_detector_flp_processing FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fdd-datareader-dpl:$N_F_RAW | " - has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline trd-datareader:$N_F_RAW | " + has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline trd-datareader:$N_TRDRAWDEC | " has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline zdc-datareader-dpl:$N_F_RAW | " has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline HMP-RawStreamDecoder:$N_F_RAW | " has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline CTP-RawStreamDecoder:$N_CTPRAWDEC | " From 36b06e2d2f9319c325d8caf18e92422ad0fa7e81 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 11 Oct 2021 00:25:58 +0200 Subject: [PATCH 121/236] Improve possibilities to change number of pipeline instances --- production/README.md | 9 ++ production/dpl-workflow.sh | 181 +++++++++++++++++-------------------- 2 files changed, 91 insertions(+), 99 deletions(-) diff --git a/production/README.md b/production/README.md index c625eef..42a2b65 100644 --- a/production/README.md +++ b/production/README.md @@ -25,6 +25,15 @@ You can use the following options to change the workflow behavior: - `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. - `MULTIPLICITY_FACTOR_REST` (default `1`) : Scales the number of other reconstruction processes by this factor. +Application of multiplicity factors: +- The production workflow has internally a default value how many instances of a process to run in parallel (which was tuned for Pb-Pb processing) +- Some critical processes for synchronous pp processing are automatically scaled by the inverse of the number of nodes, i.e. the multiplicity is increased by a factor of 2 if 125 instead of 250 nodes are used, to enable the processing using only a subset of the nodes. +- Factors can be provided externally to scale the multiplicity of processes further. All these factors are multiplied. + - One factor can be provided based on the type of the processes: raw decoder (`MULTIPLICITY_FACTOR_RAWDECODERS`), CTF encoder (`MULTIPLICITY_FACTOR_CTFENCODERS`), or other reconstruction process (`MULTIPLICITY_FACTOR_REST`) + - One factor can be provided per detector via `MULTIPLICITY_FACTOR_DETECTOR_[DET]` using the 3 character detector representation, or `MATCH` for the global matching and vertexing workflows. +- The multiplicity of an individual process can be overridden externally (this is an override, no scaling factor) by using `MULTIPLICITY_FACTOR_PROCESS_[PROCESS_NAME]`. In the process name, dashes `-` must be replaced by underscores `_`. +- For example, creating the workflow with `MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_DETECTOR_ITS=3 MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=5` will scale the number of ITS raw decoders by 6, of other ITS processes by 3, of other raw decoders by 2, and will run exactly 5 `mft-stf-decoder` processes. + Most of these settings are configurable in the AliECS GUI. But some of the uncommon settings (`WORKFLOW_DETECTORS_FLP_PROCESSING`, `WORKFLOW_DETECTORS_CTF`, `WORKFLOW_DETECTORS_RECO`, `WORKFLOW_DETECTORS_MATCHING`) can only be set via the "Additional environment variables field" in the GUI using bash syntax, e.g. `WORKFLOW_DETECTORS_FLP_PROCESSING=TPC`. For user modification of the workflow settings, the folloing *EXTRA* environment variables exist: diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 57e9f4e..bcc7bae 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -170,25 +170,25 @@ SECVERTEX_CONFIG="--vertexing-sources $VTX_SOURCES" # --------------------------------------------------------------------------------------------------------------------- # Process multiplicities -N_TPCTRK=1 -N_TPCENT=1 -N_TPCITS=1 -N_ITSRAWDEC=1 -N_MFTRAWDEC=1 -N_CTPRAWDEC=1 -N_TRDRAWDEC=1 -N_TPCRAWDEC=$NGPUS -N_EMC=1 -N_TRDENT=1 -N_TRDTRK=1 -N_TPCENTDEC=1 -N_MFTTRK=1 -N_ITSTRK=1 -N_MCHTRK=1 -N_TOFMATCH=1 + +# Helper function to apply scaling factors for process type (RAW/CTF/REST) and detector, or override multiplicity set for individual process externally. N_F_REST=$MULTIPLICITY_FACTOR_REST N_F_RAW=$MULTIPLICITY_FACTOR_RAWDECODERS N_F_CTF=$MULTIPLICITY_FACTOR_CTFENCODERS +get_N() # USAGE: get_N [processor-name] [DETECTOR_NAME] [RAW|CTF|REST] [optional name [FOO] of variable "$N_[FOO]" with default, default = 1] +{ + local NAME_FACTOR="N_F_$3" + local NAME_DET="MULTIPLICITY_FACTOR_DETECTOR_$2" + local NAME_PROC="MULTIPLICITY_FACTOR_PROCESS_${1//-/_}" + local NAME_DEFAULT="N_$4" + echo $1:${!NAME_PROC:-$((${!NAME_FACTOR} * ${!NAME_DET:-1} * ${!NAME_DEFAULT:-1}))} 1>&2 + echo $1:${!NAME_PROC:-$((${!NAME_FACTOR} * ${!NAME_DET:-1} * ${!NAME_DEFAULT:-1}))} +} +math_max() +{ + echo $(($1 > $2 ? $1 : $2)) +} + if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then # Tuned multiplicities for async Pb-Pb processing if [ $SYNCMODE == "1" ]; then echo "Must not use OPTIMIZED_PARALLEL_ASYNC with GPU or SYNCMODE" 1>&2; exit 1; fi @@ -204,23 +204,23 @@ if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then N_TOFMATCH=$((9 * $N_NUMAFACTOR)) N_TPCTRK=$((6 * $N_NUMAFACTOR)) else - N_TPCENTDEC=$((3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) - N_MFTTRK=$((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) - N_ITSTRK=$((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) - N_TPCITS=$((4 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 4 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) - N_MCHTRK=$((2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) - N_TOFMATCH=$((20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 > 0 ? 20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4 : 1)) + N_TPCENTDEC=$(math_max $((3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) + N_MFTTRK=$(math_max $((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) + N_ITSTRK=$(math_max $((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) + N_TPCITS=$(math_max $((4 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) + N_MCHTRK=$(math_max $((2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) + N_TOFMATCH=$(math_max $((20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) N_TPCTRK=$NGPUS fi elif [ $EPNPIPELINES != 0 ]; then # Tuned multiplicities for sync Pb-Pb processing - N_TPCENT=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) - N_TPCITS=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) - N_ITSRAWDEC=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) - N_EMC=$((7 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 7 * $EPNPIPELINES * $NGPUS / 4 : 1)) - N_TRDENT=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) - N_TRDTRK=$((3 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 3 * $EPNPIPELINES * $NGPUS / 4 : 1)) - N_TPCRAWDEC=$((8 * $EPNPIPELINES * $NGPUS / 4 > 0 ? 8 * $EPNPIPELINES * $NGPUS / 4 : 1)) + N_TPCENT=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) + N_TPCITS=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) + N_ITSRAWDEC=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) + N_EMCREC=$(math_max $((7 * $EPNPIPELINES * $NGPUS / 4)) 1) + N_TRDENT=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) + N_TRDTRK=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) + N_TPCRAWDEC=$(math_max $((8 * $EPNPIPELINES * $NGPUS / 4)) 1) if [ $GPUTYPE == "CPU" ]; then N_TPCTRK=8 GPU_CONFIG_KEY+="GPU_proc.ompThreads=4;" @@ -229,30 +229,13 @@ elif [ $EPNPIPELINES != 0 ]; then fi fi # Scale some multiplicities with the number of nodes -RECO_NUM_NODES_WORKFLOW_CMP=$(($RECO_NUM_NODES_WORKFLOW > 15 ? $RECO_NUM_NODES_WORKFLOW : 15)) # Limit the scaling factor -[ $NUMAGPUIDS == 1 ] && RECO_NUM_NODES_WORKFLOW_CMP=$(($RECO_NUM_NODES_WORKFLOW_CMP * 2)) # If we have 2 NUMA Domains, we have each process twice anyway -N_ITSRAWDEC=$((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSRAWDEC ? 3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSRAWDEC)) -N_MFTRAWDEC=$((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTRAWDEC ? 3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTRAWDEC)) -N_ITSTRK=$((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_ITSTRK ? 1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_ITSTRK)) -N_MFTTRK=$((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_MFTTRK ? 1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_MFTTRK)) -N_CTPRAWDEC=$((1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_CTPRAWDEC ? 1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_CTPRAWDEC)) -N_TRDRAWDEC=$((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP > $N_TRDRAWDEC ? 3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP : $N_TRDRAWDEC)) -# Apply external multiplicity factors -N_TPCTRK=$((N_TPCTRK * $N_F_REST)) -N_TPCITS=$((N_TPCITS * $N_F_REST)) -N_EMC=$((N_EMC * $N_F_REST)) -N_TRDTRK=$((N_TRDTRK * $N_F_REST)) -N_TPCENTDEC=$((N_TPCENTDEC * $N_F_REST)) -N_MFTTRK=$((N_MFTTRK * $N_F_REST)) -N_ITSTRK=$((N_ITSTRK * $N_F_REST)) -N_MCHTRK=$((N_MCHTRK * $N_F_REST)) -N_TOFMATCH=$((N_TOFMATCH * $N_F_REST)) -N_TPCENT=$((N_TPCENT * $N_F_CTF)) -N_TRDENT=$((N_TRDENT * $N_F_CTF)) -N_ITSRAWDEC=$((N_ITSRAWDEC * $N_F_RAW)) -N_MFTRAWDEC=$((N_MFTRAWDEC * $N_F_RAW)) -N_TPCRAWDEC=$((N_TPCRAWDEC * $N_F_RAW)) -N_CTPRAWDEC=$((N_CTPRAWDEC * $N_F_RAW)) +RECO_NUM_NODES_WORKFLOW_CMP=$((($RECO_NUM_NODES_WORKFLOW > 15 ? $RECO_NUM_NODES_WORKFLOW : 15) * ($NUMAGPUIDS == 1 ? 2 : 1))) # Limit the lowert scaling factor, multiply by 2 if we have 2 NUMA domains +N_ITSRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSRAWDEC:-1}) +N_MFTRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTRAWDEC:-1}) +N_ITSTRK=$(math_max $((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSTRK:-1}) +N_MFTTRK=$(math_max $((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTTRK:-1}) +N_CTPRAWDEC=$(math_max $((1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_CTPRAWDEC:-1}) +N_TRDRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_TRDRAWDEC:-1}) # --------------------------------------------------------------------------------------------------------------------- # Input workflow @@ -301,72 +284,72 @@ fi if [ $CTFINPUT == 0 ]; then if has_detector TPC && [ $EPNMODE == 1 ]; then GPU_INPUT=zsonthefly - WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline tpc-raw-to-digits-0:$N_TPCRAWDEC | " - WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline tpc-zsEncoder:$N_TPCRAWDEC | " + WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline $(get_N tpc-raw-to-digits-0 TPC RAW TPCRAWDEC) | " + WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline $(get_N tpc-zsEncoder TPC RAW TPCRAWDEC) | " fi - has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:$N_ITSRAWDEC | " - has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:$N_MFTRAWDEC --runmft true | " - has_detector FT0 && ! has_detector_flp_processing FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline ft0-datareader-dpl:$N_F_RAW | " - has_detector FV0 && ! has_detector_flp_processing FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fv0-datareader-dpl:$N_F_RAW | " - has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline MIDRawDecoder:$N_F_RAW,MIDDecodedDataAggregator:$N_F_RAW | " - has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-data-decoder:$N_F_RAW | " - has_detector TOF && ! has_detector_flp_processing TOF && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" | " - has_detector FDD && ! has_detector_flp_processing FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline fdd-datareader-dpl:$N_F_RAW | " - has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline trd-datareader:$N_TRDRAWDEC | " - has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline zdc-datareader-dpl:$N_F_RAW | " - has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline HMP-RawStreamDecoder:$N_F_RAW | " - has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline CTP-RawStreamDecoder:$N_CTPRAWDEC | " - has_detector PHS && ! has_detector_flp_processing PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output --pipeline PHOSRawToCellConverterSpec:$N_F_REST $DISABLE_MC | " - has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $CPV_INPUT --output-type clusters --disable-root-input --disable-root-output --pipeline CPVRawToDigitConverterSpec:$N_F_REST,CPVClusterizerSpec:$N_F_REST $DISABLE_MC | " - has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline EMCALRawToCellConverterSpec:$N_EMC | " + has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NITSDECTHREADS} --pipeline $(get_N its-stf-decoder ITS RAW ITSRAWDEC) | " + has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NMFTDECTHREADS} --pipeline $(get_N mft-stf-decoder MFT RAW MFTRAWDEC) --runmft true | " + has_detector FT0 && ! has_detector_flp_processing FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N ft0-datareader-dpl FT0 RAW) | " + has_detector FV0 && ! has_detector_flp_processing FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N fv0-datareader-dpl FV0 RAW) | " + has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline $(get_N MIDRawDecoder MID RAW),$(get_N MIDDecodedDataAggregator MID RAW) | " + has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N mch-data-decoder MCH RAW) | " + has_detector TOF && ! has_detector_flp_processing TOF && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N tof-compressor TOF RAW)| " + has_detector FDD && ! has_detector_flp_processing FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N fdd-datareader-dpl FDD RAW) | " + has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline $(get_N trd-datareader TRD RAW TRDRAWDEC) | " + has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N zdc-datareader-dpl ZDC RAW) | " + has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N HMP-RawStreamDecoder HMP RAW) | " + has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N CTP-RawStreamDecoder CTP RAW) | " + has_detector PHS && ! has_detector_flp_processing PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output --pipeline $(get_N PHOSRawToCellConverterSpec PHS REST) $DISABLE_MC | " + has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $CPV_INPUT --output-type clusters --disable-root-input --disable-root-output --pipeline $(get_N CPVRawToDigitConverterSpec CPV REST),$(get_N CPVClusterizerSpec CPV REST) $DISABLE_MC | " + has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST RMCREC) | " fi # --------------------------------------------------------------------------------------------------------------------- # Common reconstruction workflows -(has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:$N_TPCTRK $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " -(has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC --pipeline tof-compressed-decoder:$N_F_RAW,TOFClusterer:$N_F_REST | " -has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY;$ITSMFT_FILES\" --pipeline its-tracker:$N_ITSTRK | " -has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline itstpc-track-matcher:$N_TPCITS | " -has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline ft0-reconstructor:$N_F_REST | " -has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline TRDTRACKLETTRANSFORMER:$N_TRDTRK | " +(has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:${N_TPCTRK:-1} $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " +(has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST) | " +has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY;$ITSMFT_FILES\" --pipeline $(get_N its-tracker ITS REST ITSTRK) | " +has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS) | " +has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST) | " +has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK) | " has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES | " -has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources $TOF_SOURCES --pipeline tof-matcher:$N_TOFMATCH | " +has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH) | " # --------------------------------------------------------------------------------------------------------------------- # Reconstruction workflows in async mode if [ $SYNCMODE == 0 ]; then - has_detector_reco MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline MIDClusterizer:$N_F_REST,MIDTracker:$N_F_REST | " - has_detector_reco MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline mch-track-finder:$N_MCHTRK,mch-cluster-finder:$N_F_REST,mch-cluster-transformer:$N_F_REST | " - has_detector_reco MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline mft-tracker:$N_MFTTRK | " + has_detector_reco MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST) | " + has_detector_reco MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST) | " + has_detector_reco MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline $(get_N mft-tracker MFT REST MFTTRK) | " has_detector_reco FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector_reco FV0 && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detector_reco ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " fi -has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline globalfwd-track-matcher:$N_F_REST | " -has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output $PVERTEX_CONFIG --pipeline primary-vertexing:$N_F_REST | " -has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $SECVERTEX_CONFIG --pipeline secondary-vertexing:$N_F_REST | " +has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST) | " +has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " +has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $SECVERTEX_CONFIG --pipeline $(get_N secondary-vertexing MATCH REST) | " # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode if [ $CTFINPUT == 0 ] && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then # Entropy encoder workflows - has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline mft-entropy-encoder:$N_F_CTF | " - has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline ft0-entropy-encoder:$N_F_CTF | " - has_detector_ctf FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fv0-entropy-encoder:$N_F_CTF | " - has_detector_ctf MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mid-entropy-encoder:$N_F_CTF | " - has_detector_ctf MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline mch-entropy-encoder:$N_F_CTF | " - has_detector_ctf PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline phos-entropy-encoder:$N_F_CTF | " - has_detector_ctf CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline cpv-entropy-encoder:$N_F_CTF | " - has_detector_ctf EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline emcal-entropy-encoder:$N_F_CTF | " - has_detector_ctf ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline zdc-entropy-encoder:$N_F_CTF | " - has_detector_ctf FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline fdd-entropy-encoder:$N_F_CTF | " - has_detector_ctf HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline hmpid-entropy-encoder:$N_F_CTF | " - has_detector_ctf TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline tof-entropy-encoder:$N_F_CTF | " - has_detector_ctf ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF | " - has_detector_ctf TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline trd-entropy-encoder:$N_TRDENT | " - has_detector_ctf TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline tpc-entropy-encoder:$N_TPCENT | " - has_detector_ctf CTP && WORKFLOW+="o2-ctp-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline its-entropy-encoder:$N_F_CTF| " + has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF) | " + has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N ft0-entropy-encoder FT0 CTF) | " + has_detector_ctf FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N fv0-entropy-encoder FV0 CTF) | " + has_detector_ctf MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N mid-entropy-encoder MID CTF) | " + has_detector_ctf MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N mch-entropy-encoder MCH CTF) | " + has_detector_ctf PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N phos-entropy-encoder PHS CTF) | " + has_detector_ctf CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N cpv-entropy-encoder CPV CTF) | " + has_detector_ctf EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N emcal-entropy-encoder EMC CTF) | " + has_detector_ctf ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N zdc-entropy-encoder ZDC CTF) | " + has_detector_ctf FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N fdd-entropy-encoder FDD CTF) | " + has_detector_ctf HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N hmpid-entropy-encoder HMP CTF) | " + has_detector_ctf TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N tof-entropy-encoder TOF CTF) | " + has_detector_ctf ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N its-entropy-encoder ITS CTF) | " + has_detector_ctf TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N trd-entropy-encoder TRD CTF TRDENT) | " + has_detector_ctf TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline $(get_N tpc-entropy-encoder TPC CTF TPCENT) | " + has_detector_ctf CTP && WORKFLOW+="o2-ctp-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N its-entropy-encoder CTP CTF)| " # CTF / dictionary writer workflow if [ $SAVECTF == 1 ]; then From 526ed042feca0b57836fef7a5d38b143cb5d91b9 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 11 Oct 2021 11:29:50 +0200 Subject: [PATCH 122/236] Reduce QC InfoLogger verbosity --- production/dpl-workflow.sh | 1 - production/qc-workflow.sh | 4 ++-- production/qc_global.json | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 production/qc_global.json diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index bcc7bae..ebff2b1 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -181,7 +181,6 @@ get_N() # USAGE: get_N [processor-name] [DETECTOR_NAME] [RAW|CTF|REST] [optional local NAME_DET="MULTIPLICITY_FACTOR_DETECTOR_$2" local NAME_PROC="MULTIPLICITY_FACTOR_PROCESS_${1//-/_}" local NAME_DEFAULT="N_$4" - echo $1:${!NAME_PROC:-$((${!NAME_FACTOR} * ${!NAME_DET:-1} * ${!NAME_DEFAULT:-1}))} 1>&2 echo $1:${!NAME_PROC:-$((${!NAME_FACTOR} * ${!NAME_DET:-1} * ${!NAME_DEFAULT:-1}))} } math_max() diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 5233338..568a2b9 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -8,7 +8,7 @@ [ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json [ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json -if [ -z "$WORKFLOW" ]; then +if [ -z "$WORKFLOW" ] || [ -z "$MYDIR" ]; then echo This script must be called from the dpl-workflow.sh and not standalone 1>&2 exit 1 fi @@ -34,7 +34,7 @@ if [ ! -z "$JSON_FILES" ]; then find $GEN_TOPO_WORKDIR/json_cache/ -maxdepth 1 -type f -mtime +30 | xargs rm -f fi MERGED_JSON_FILENAME=$GEN_TOPO_WORKDIR/json_cache/`date +%Y%m%d-%H%M%S`-$$-$RANDOM-$OUTPUT_SUFFIX.json - jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' $JSON_FILES > $MERGED_JSON_FILENAME + jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' $MYDIR/qc_global.json $JSON_FILES > $MERGED_JSON_FILENAME if [ $? != 0 ]; then echo Merging QC workflow with JSON files $JSON_FILES failed 1>&2 exit 1 diff --git a/production/qc_global.json b/production/qc_global.json new file mode 100644 index 0000000..cf33c3f --- /dev/null +++ b/production/qc_global.json @@ -0,0 +1,30 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + }, + "infologger": { + "filterDiscardDebug": "true", + "filterDiscardLevel": "1" + } + } + } +} From aaab4e3a1b503e6de4c906983916be7414c0fe5b Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 11 Oct 2021 12:55:00 +0200 Subject: [PATCH 123/236] use only syncmode to switch between modes --- production/dpl-workflow.sh | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index ebff2b1..f057aeb 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -92,21 +92,18 @@ if [ $SYNCMODE == 1 ]; then elif [ $BEAMTYPE == "pp" ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" fi + ITS_CONFIG+=" --tracking-mode sync" + GPU_OUTPUT+=",compressed-clusters-ctf" GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" TRD_CONFIG+=" --filter-trigrec" TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" +else + ITS_CONFIG+=" --tracking-mode async" fi has_detector_flp_processing CPV && CPV_INPUT=digits -if [ $CTFINPUT == 1 ]; then - ITS_CONFIG+=" --tracking-mode async" -else - ITS_CONFIG+=" --tracking-mode sync" - GPU_OUTPUT+=",compressed-clusters-ctf" -fi - if [ $EPNMODE == 1 ]; then EVE_CONFIG+=" --eve-dds-collection-index 0" ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE" From 3e0e14ee6fad9c6e60e2f3a9eebc6a8038e52b8a Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 11 Oct 2021 13:30:50 +0200 Subject: [PATCH 124/236] more SYNCMODE==1 as swith for sync.mode --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index f057aeb..6395a9f 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -328,7 +328,7 @@ has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondar # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode -if [ $CTFINPUT == 0 ] && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then +if [ $SYNCMODE == 1 ] && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then # Entropy encoder workflows has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF) | " has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N ft0-entropy-encoder FT0 CTF) | " From 0282fb332bc4b9d09a4436278c1f1ae43e7f0292 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 11 Oct 2021 14:04:54 +0200 Subject: [PATCH 125/236] Add WORKFLOW_EXTRA_PROCESSING_STEPS option --- production/README.md | 15 ++++++++---- production/dpl-workflow.sh | 47 ++++++++++++++++++++++++-------------- 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/production/README.md b/production/README.md index 42a2b65..99e124c 100644 --- a/production/README.md +++ b/production/README.md @@ -1,10 +1,14 @@ +# Production workflows This folder stores the production workflows for global runs, in the description library file `production.desc`. There are currently 2 workflows: - `synchronous-workflow`: the default workflow using 8 GPUs and 2 NUMA domains. (Note that this workflow currently does not terminate correctly: https://alice.its.cern.ch/jira/browse/O2-2375) - `synchronous-workflow-1numa`: workfloy using only 4 GPUs without NUMA pinning. (Fully sufficient for pp) +Standalone calibration workflows are contained in `standalone-calibration.desc`. + If processing is to be disabled, please use the `no-processing` workflow in `no-processing.desc`. +# Configuration options You can use the following options to change the workflow behavior: - `DDMODE` (default `processing`) : Must be `processing` (synchronous processing) or `processing-disk` (synchronous processing + storing of raw time frames to disk, not that this is the raw time frame not the CTF!). The `DDMODE` `discard` and `disk` are not compatible with the synchronous processing workflow, you must use the `no-processing.desc` workflow instead!. - `WORKFLOW_DETECTORS` (default `ALL`) : Comma-separated list of detectors for which the processing is enabled. If these are less detectors than participating in the run, data of the other detectors is ignored. If these are more detectors than participating in the run, the processes for the additional detectors will be started but will not do anything. @@ -14,6 +18,7 @@ You can use the following options to change the workflow behavior: - `WORKFLOW_DETECTORS_RECO` (default `ALL`) : Comma-separated list of detectors for which to run reconstruction. - `WORKFLOW_DETECTORS_CTF` (default `ALL`) : Comma-separated list of detectors to include in CTF. - `WORKFLOW_DETECTORS_MATCHING` (default selected corresponding to default workflow for sync or async mode respectively) : Comma-separated list of matching / vertexing algorithms to run. Use `ALL` to enable all of them. Currently supported options: `ITSTPC`, `TPCTRD`, `ITSTPCTRD`, `TPCTOF`, `ITSTPCTOF`, `MFTMCH`, `PRIMVTX`, `SECVTX`. +- `WORKFLOW_EXTRA_PROCESSING_STEPS` Enable additional processing steps not in the preset for the SYNC / ASYNC mode. Possible values are: `MID_RECO` `MCH_RECO` `MFT_RECO` `FDD_RECO` `FV0_RECO` `ZDC_RECO` `ENTROPY_ENCODER` `MATCH_ITSTPC` `MATCH_TPCTRD` `MATCH_ITSTPCTRD` `MATCH_TPCTOF` `MATCH_ITSTPCTOF` `MATCH_MFTMCH` `MATCH_MFTMCH` `MATCH_PRIMVTX` `MATCH_SECVTX`. - `WORKFLOW_PARAMETERS` (default `NONE`) : Comma-separated list, enables additional features of the workflow. Currently the following features are available: - `GPU` : Performs the TPC processing on the GPU, otherwise everything is processed on the CPU. - `CTF` : Write the CTF to disk (CTF creation is always enabled, but if this parameter is missing, it is not stored). @@ -25,7 +30,9 @@ You can use the following options to change the workflow behavior: - `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. - `MULTIPLICITY_FACTOR_REST` (default `1`) : Scales the number of other reconstruction processes by this factor. -Application of multiplicity factors: +Most of these settings are configurable in the AliECS GUI. But some of the uncommon settings (`WORKFLOW_DETECTORS_FLP_PROCESSING`, `WORKFLOW_DETECTORS_CTF`, `WORKFLOW_DETECTORS_RECO`, `WORKFLOW_DETECTORS_MATCHING`, `WORKFLOW_EXTRA_PROCESSING_STEPS`, advanced `MULTIPLICITY_FACTOR` settings) can only be set via the "Additional environment variables field" in the GUI using bash syntax, e.g. `WORKFLOW_DETECTORS_FLP_PROCESSING=TPC`. + +# Process multiplicity factors - The production workflow has internally a default value how many instances of a process to run in parallel (which was tuned for Pb-Pb processing) - Some critical processes for synchronous pp processing are automatically scaled by the inverse of the number of nodes, i.e. the multiplicity is increased by a factor of 2 if 125 instead of 250 nodes are used, to enable the processing using only a subset of the nodes. - Factors can be provided externally to scale the multiplicity of processes further. All these factors are multiplied. @@ -34,14 +41,14 @@ Application of multiplicity factors: - The multiplicity of an individual process can be overridden externally (this is an override, no scaling factor) by using `MULTIPLICITY_FACTOR_PROCESS_[PROCESS_NAME]`. In the process name, dashes `-` must be replaced by underscores `_`. - For example, creating the workflow with `MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_DETECTOR_ITS=3 MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=5` will scale the number of ITS raw decoders by 6, of other ITS processes by 3, of other raw decoders by 2, and will run exactly 5 `mft-stf-decoder` processes. -Most of these settings are configurable in the AliECS GUI. But some of the uncommon settings (`WORKFLOW_DETECTORS_FLP_PROCESSING`, `WORKFLOW_DETECTORS_CTF`, `WORKFLOW_DETECTORS_RECO`, `WORKFLOW_DETECTORS_MATCHING`) can only be set via the "Additional environment variables field" in the GUI using bash syntax, e.g. `WORKFLOW_DETECTORS_FLP_PROCESSING=TPC`. - +# Additional custom control variables For user modification of the workflow settings, the folloing *EXTRA* environment variables exist: - `ARGS_ALL_EXTRA` : Extra command line options added to all workflows - `ALL_EXTRA_CONFIG` : Extra config key values added to all workflows - `GPU_EXTRA_CONFIG` : Extra options added to the configKeyValues of the GPU workflow -Some remarks for the QC: +# Remarks on QC The JSON files for the individual detectors are merged into one JSON file, which is cached during the run on the shared EPN home folder. The default JSON file per detector is defined in `qc-workflow.sh`. JSONs per detector can be overridden by exporting `QC_JSON_[DETECTOR_NAME]`, e.g. `QC_JSON_TPC`, when creating the workflow. +The global section of the merged qc JSON config is taken from qc_global.json diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 6395a9f..45a4aed 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -22,7 +22,6 @@ else if [ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]; then export WORKFLOW_DETECTORS_MATCHING="ALL"; fi # All matching / vertexing enabled in async mode fi - workflow_has_parameter CTF && export SAVECTF=1 workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } @@ -38,9 +37,26 @@ CTF_DICT=${CTF_DICT_DIR}/ctf_dictionary.root ITSMFT_FILES="ITSClustererParam.dictFilePath=$ITSCLUSDICT;MFTClustererParam.dictFilePath=$MFTCLUSDICT"; -if [ "0$O2_ROOT" == "0" ]; then - eval "`alienv shell-helper`" - alienv --no-refresh load O2/latest +# --------------------------------------------------------------------------------------------------------------------- +# Set active reconstruction steps (defaults added according to SYNCMODE) + +has_processing_step() +{ + [[ $WORKFLOW_EXTRA_PROCESSING_STEPS =~ (^|,)"$1"(,|$) ]] +} + +for i in ITSTPC TPCTRD ITSTPCTRD TPCTOF ITSTPCTOF MFTMCH MFTMCH PRIMVTX SECVTX; do + has_processing_step MATCH_$i && add_comma_separated WORKFLOW_DETECTORS_MATCHING $i # Enable extra matchings requested via WORKFLOW_EXTRA_PROCESSING_STEPS +done +if [ $SYNCMODE == 1 ]; then # Add default steps for synchronous mode + add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ENTROPY_ENCODER +else # Add default steps for async mode + has_detector_reco MID && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS MID_RECO + has_detector_reco MCH && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS MCH_RECO + has_detector_reco MFT && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS MFT_RECO + has_detector_reco FDD && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS FDD_RECO + has_detector_reco FV0 && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS FV0_RECO + has_detector_reco ZDC && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ZDC_RECO fi # --------------------------------------------------------------------------------------------------------------------- @@ -93,14 +109,14 @@ if [ $SYNCMODE == 1 ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" fi ITS_CONFIG+=" --tracking-mode sync" - GPU_OUTPUT+=",compressed-clusters-ctf" GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" TRD_CONFIG+=" --filter-trigrec" TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" else - ITS_CONFIG+=" --tracking-mode async" + ITS_CONFIG+=" --tracking-mode async" fi +has_processing_step ENTROPY_ENCODER && GPU_OUTPUT+=",compressed-clusters-ctf" has_detector_flp_processing CPV && CPV_INPUT=digits @@ -312,23 +328,20 @@ has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-g has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH) | " # --------------------------------------------------------------------------------------------------------------------- -# Reconstruction workflows in async mode -if [ $SYNCMODE == 0 ]; then - has_detector_reco MID && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST) | " - has_detector_reco MCH && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST) | " - has_detector_reco MFT && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline $(get_N mft-tracker MFT REST MFTTRK) | " - has_detector_reco FDD && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " - has_detector_reco FV0 && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " - has_detector_reco ZDC && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " -fi - +# Reconstruction workflows normally active only in async mode in async mode, but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS +has_processing_step MID_RECO && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST) | " +has_processing_step MCH_RECO && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST) | " +has_processing_step MFT_RECO && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline $(get_N mft-tracker MFT REST MFTTRK) | " +has_processing_step FDD_RECO && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " +has_processing_step FV0_RECO && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " +has_processing_step ZDC_RECO && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST) | " has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $SECVERTEX_CONFIG --pipeline $(get_N secondary-vertexing MATCH REST) | " # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode -if [ $SYNCMODE == 1 ] && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then +if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then # Entropy encoder workflows has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF) | " has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N ft0-entropy-encoder FT0 CTF) | " From cfdc2f0ad3339db8fc5fcd4c0bb526f51a9af52f Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 11 Oct 2021 14:10:06 +0200 Subject: [PATCH 126/236] Make DISABLE_ROOT_OUTPUT a variable --- common/setenv.sh | 6 ++--- production/dpl-workflow.sh | 50 +++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index e281918..45b9817 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -60,9 +60,9 @@ if [ -z "$MULTIPLICITY_FACTOR_RAWDECODERS" ]; then export MULTIPLICITY_FACTOR_RA if [ -z "$MULTIPLICITY_FACTOR_CTFENCODERS" ]; then export MULTIPLICITY_FACTOR_CTFENCODERS=1; fi if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then export MULTIPLICITY_FACTOR_REST=1; fi - -SEVERITY_TPC="info" # overrides severity for the tpc workflow -DISABLE_MC="--disable-mc" +[ -z "${SEVERITY_TPC+x}" ] && SEVERITY_TPC="info" # overrides severity for the tpc workflow +[ -z "${DISABLE_MC+x}" ] && DISABLE_MC="--disable-mc" +[ -z "${DISABLE_ROOT_OUTPUT+x}" ] && DISABLE_ROOT_OUTPUT="--disable-root-output" if [ $EXTINPUT == 1 ] && [ $CTFINPUT == 1 ]; then echo EXTINPUT and CTFINPUT are incompatible diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 45a4aed..a98ca4c 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -301,43 +301,43 @@ if [ $CTFINPUT == 0 ]; then fi has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NITSDECTHREADS} --pipeline $(get_N its-stf-decoder ITS RAW ITSRAWDEC) | " has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NMFTDECTHREADS} --pipeline $(get_N mft-stf-decoder MFT RAW MFTRAWDEC) --runmft true | " - has_detector FT0 && ! has_detector_flp_processing FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N ft0-datareader-dpl FT0 RAW) | " - has_detector FV0 && ! has_detector_flp_processing FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N fv0-datareader-dpl FV0 RAW) | " + has_detector FT0 && ! has_detector_flp_processing FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N ft0-datareader-dpl FT0 RAW) | " + has_detector FV0 && ! has_detector_flp_processing FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N fv0-datareader-dpl FV0 RAW) | " has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline $(get_N MIDRawDecoder MID RAW),$(get_N MIDDecodedDataAggregator MID RAW) | " has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N mch-data-decoder MCH RAW) | " has_detector TOF && ! has_detector_flp_processing TOF && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N tof-compressor TOF RAW)| " - has_detector FDD && ! has_detector_flp_processing FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N fdd-datareader-dpl FDD RAW) | " + has_detector FDD && ! has_detector_flp_processing FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N fdd-datareader-dpl FDD RAW) | " has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline $(get_N trd-datareader TRD RAW TRDRAWDEC) | " - has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N zdc-datareader-dpl ZDC RAW) | " + has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N zdc-datareader-dpl ZDC RAW) | " has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N HMP-RawStreamDecoder HMP RAW) | " - has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --pipeline $(get_N CTP-RawStreamDecoder CTP RAW) | " - has_detector PHS && ! has_detector_flp_processing PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input --disable-root-output --pipeline $(get_N PHOSRawToCellConverterSpec PHS REST) $DISABLE_MC | " - has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $CPV_INPUT --output-type clusters --disable-root-input --disable-root-output --pipeline $(get_N CPVRawToDigitConverterSpec CPV REST),$(get_N CPVClusterizerSpec CPV REST) $DISABLE_MC | " - has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-output $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST RMCREC) | " + has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N CTP-RawStreamDecoder CTP RAW) | " + has_detector PHS && ! has_detector_flp_processing PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N PHOSRawToCellConverterSpec PHS REST) $DISABLE_MC | " + has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $CPV_INPUT --output-type clusters --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N CPVRawToDigitConverterSpec CPV REST),$(get_N CPVClusterizerSpec CPV REST) $DISABLE_MC | " + has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST RMCREC) | " fi # --------------------------------------------------------------------------------------------------------------------- # Common reconstruction workflows (has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:${N_TPCTRK:-1} $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " -(has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST) | " -has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY;$ITSMFT_FILES\" --pipeline $(get_N its-tracker ITS REST ITSTRK) | " -has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS) | " -has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST) | " -has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK) | " -has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input --disable-root-output $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES | " -has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH) | " +(has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST) | " +has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream $DISABLE_ROOT_OUTPUT $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY;$ITSMFT_FILES\" --pipeline $(get_N its-tracker ITS REST ITSTRK) | " +has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS) | " +has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST) | " +has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK) | " +has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES | " +has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH) | " # --------------------------------------------------------------------------------------------------------------------- # Reconstruction workflows normally active only in async mode in async mode, but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS -has_processing_step MID_RECO && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST) | " -has_processing_step MCH_RECO && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST) | " -has_processing_step MFT_RECO && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC --disable-root-output --pipeline $(get_N mft-tracker MFT REST MFTTRK) | " -has_processing_step FDD_RECO && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " -has_processing_step FV0_RECO && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " -has_processing_step ZDC_RECO && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC | " -has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST) | " -has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input --disable-root-output $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " -has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input --disable-root-output $SECVERTEX_CONFIG --pipeline $(get_N secondary-vertexing MATCH REST) | " +has_processing_step MID_RECO && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST) | " +has_processing_step MCH_RECO && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST) | " +has_processing_step MFT_RECO && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC $DISABLE_ROOT_OUTPUT --pipeline $(get_N mft-tracker MFT REST MFTTRK) | " +has_processing_step FDD_RECO && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " +has_processing_step FV0_RECO && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " +has_processing_step ZDC_RECO && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " +has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST) | " +has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " +has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $SECVERTEX_CONFIG --pipeline $(get_N secondary-vertexing MATCH REST) | " # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode @@ -379,7 +379,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Calibration workflows -workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " +workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " # --------------------------------------------------------------------------------------------------------------------- # Event display From 00359d84b65986c5ed7a5c7b480009f0d279b9d7 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 11 Oct 2021 14:43:40 +0200 Subject: [PATCH 127/236] General improvements --- common/setenv.sh | 4 ++-- production/dpl-workflow.sh | 32 ++++++++++++++------------------ 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 45b9817..5183345 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -126,7 +126,7 @@ _check_multiple() CHECKER=$1 shift while true; do - if [ "0$1" == "0" ]; then return 0; fi + if [[ "0$1" == "0" ]]; then return 0; fi if ! $CHECKER $1; then return 1; fi shift done @@ -178,7 +178,7 @@ add_comma_separated() fi for ((i = 2; i <= $#; i++ )); do - if [ -z ${!1} ]; then + if [[ -z ${!1} ]]; then eval $1+="${!i}" else eval $1+=",${!i}" diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index a98ca4c..f8bf5c6 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -51,12 +51,9 @@ done if [ $SYNCMODE == 1 ]; then # Add default steps for synchronous mode add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ENTROPY_ENCODER else # Add default steps for async mode - has_detector_reco MID && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS MID_RECO - has_detector_reco MCH && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS MCH_RECO - has_detector_reco MFT && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS MFT_RECO - has_detector_reco FDD && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS FDD_RECO - has_detector_reco FV0 && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS FV0_RECO - has_detector_reco ZDC && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ZDC_RECO + for i in MID MCH MFT FDD FV0 ZDC; do + has_detector_reco $i && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ${i}_RECO + done fi # --------------------------------------------------------------------------------------------------------------------- @@ -167,19 +164,18 @@ fi # Assemble matching sources TRD_SOURCES= TOF_SOURCES= -VTX_SOURCES=ITS -has_detector_matching ITSTPC && VTX_SOURCES+=",ITS-TPC" -has_detector_matching TPCTRD && (add_comma_separated TRD_SOURCES TPC; VTX_SOURCES+=",TPC-TRD") -has_detector_matching ITSTPCTRD && (add_comma_separated TRD_SOURCES ITS-TPC; VTX_SOURCES+=",ITS-TPC-TRD") -has_detector_matching TPCTOF && (add_comma_separated TOF_SOURCES TPC; VTX_SOURCES+=",TPC-TOF") -has_detector_matching ITSTPCTOF && (add_comma_separated TOF_SOURCES ITS-TPC; VTX_SOURCES+=",ITS-TPC-TOF") -has_detector_matching MFTMCH && VTX_SOURCES+=",MFT-MCH" -for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g" | grep -v "CTP"`; do - has_detector_reco $det && VTX_SOURCES+=",$det" +TRACK_SOURCES= +has_detector_matching ITSTPC && add_comma_separated TRACK_SOURCES "ITS-TPC" +has_detector_matching TPCTRD && { add_comma_separated TRD_SOURCES TPC; add_comma_separated TRACK_SOURCES "TPC-TRD"; } +has_detector_matching ITSTPCTRD && { add_comma_separated TRD_SOURCES ITS-TPC; add_comma_separated TRACK_SOURCES "ITS-TPC-TRD"; } +has_detector_matching TPCTOF && { add_comma_separated TOF_SOURCES TPC; add_comma_separated TRACK_SOURCES "TPC-TOF"; } +has_detector_matching ITSTPCTOF && { add_comma_separated TOF_SOURCES ITS-TPC; add_comma_separated TRACK_SOURCES "ITS-TPC-TOF"; } +has_detector_matching MFTMCH && add_comma_separated TRACK_SOURCES "MFT-MCH" +for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do + has_detector_reco $det && add_comma_separated TRACK_SOURCES "$det" done -PVERTEX_CONFIG="--vertexing-sources $VTX_SOURCES --vertex-track-matching-sources $VTX_SOURCES" +PVERTEX_CONFIG="--vertexing-sources $TRACK_SOURCES --vertex-track-matching-sources $TRACK_SOURCES" has_detector_reco FT0 && PVERTEX_CONFIG+=" --validate-with-ft0" -SECVERTEX_CONFIG="--vertexing-sources $VTX_SOURCES" # --------------------------------------------------------------------------------------------------------------------- # Process multiplicities @@ -337,7 +333,7 @@ has_processing_step FV0_RECO && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --conf has_processing_step ZDC_RECO && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST) | " has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " -has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $SECVERTEX_CONFIG --pipeline $(get_N secondary-vertexing MATCH REST) | " +has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $TRACK_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST) | " # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode From d14836ef13cf5b7736bec754c32382d0e4c40177 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 12 Oct 2021 18:27:56 +0200 Subject: [PATCH 128/236] add ITS cosmic mode in sync mode --- production/dpl-workflow.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index f8bf5c6..e47b425 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -102,10 +102,15 @@ MIDDEC_CONFIG= if [ $SYNCMODE == 1 ]; then if [ $BEAMTYPE == "PbPb" ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" + ITS_CONFIG+=" --tracking-mode sync" elif [ $BEAMTYPE == "pp" ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" + ITS_CONFIG+=" --tracking-mode sync" + elif [ $BEAMTYPE == "cosmic" ]; then + ITS_CONFIG+=" --tracking-mode cosmic" + else + ITS_CONFIG+=" --tracking-mode sync" fi - ITS_CONFIG+=" --tracking-mode sync" GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" TRD_CONFIG+=" --filter-trigrec" TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" From c8605340255f0e522e0a491ed13d4e60ba34f7ef Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 12 Oct 2021 18:44:38 +0200 Subject: [PATCH 129/236] fix double entry of MFTMCH in has_processing_step MATCH check --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index e47b425..70ca6e7 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -45,7 +45,7 @@ has_processing_step() [[ $WORKFLOW_EXTRA_PROCESSING_STEPS =~ (^|,)"$1"(,|$) ]] } -for i in ITSTPC TPCTRD ITSTPCTRD TPCTOF ITSTPCTOF MFTMCH MFTMCH PRIMVTX SECVTX; do +for i in ITSTPC TPCTRD ITSTPCTRD TPCTOF ITSTPCTOF MFTMCH PRIMVTX SECVTX; do has_processing_step MATCH_$i && add_comma_separated WORKFLOW_DETECTORS_MATCHING $i # Enable extra matchings requested via WORKFLOW_EXTRA_PROCESSING_STEPS done if [ $SYNCMODE == 1 ]; then # Add default steps for synchronous mode From 1b7780d4ad27334b31f8f56ec2987c59b50703d1 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 12 Oct 2021 19:52:16 +0200 Subject: [PATCH 130/236] fix typo cosmic -> cosmics --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 70ca6e7..df18749 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -107,7 +107,7 @@ if [ $SYNCMODE == 1 ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" ITS_CONFIG+=" --tracking-mode sync" elif [ $BEAMTYPE == "cosmic" ]; then - ITS_CONFIG+=" --tracking-mode cosmic" + ITS_CONFIG+=" --tracking-mode cosmics" else ITS_CONFIG+=" --tracking-mode sync" fi From 081b8944e2a216eabb180e57587f060c01b9f705 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 12 Oct 2021 23:55:51 +0200 Subject: [PATCH 131/236] Add MCH QC --- production/qc-workflow.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 568a2b9..e4738fc 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -7,6 +7,7 @@ [ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json [ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json [ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json +[ -z "$QC_JSON_MCH" ] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json if [ -z "$WORKFLOW" ] || [ -z "$MYDIR" ]; then echo This script must be called from the dpl-workflow.sh and not standalone 1>&2 From c844c03a01c1e52030f3a3d4de8ae915f558d257 Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 13 Oct 2021 02:57:31 +0200 Subject: [PATCH 132/236] provide ITS-specific files to global w-flows with ITS --- production/dpl-workflow.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index df18749..c89fb59 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -325,8 +325,8 @@ has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $ has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS) | " has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST) | " has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK) | " -has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES | " -has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH) | " +has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES | " +has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH) | " # --------------------------------------------------------------------------------------------------------------------- # Reconstruction workflows normally active only in async mode in async mode, but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS @@ -380,7 +380,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Calibration workflows -workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " +workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" $DISABLE_ROOT_OUTPUT --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " # --------------------------------------------------------------------------------------------------------------------- # Event display From ac3ce7a8988ad2b03c535ee5ac094e2d2ed604f9 Mon Sep 17 00:00:00 2001 From: noferini Date: Wed, 13 Oct 2021 15:35:59 +0200 Subject: [PATCH 133/236] moving tof to O2PDPSuite --- testing/detectors/TOF/tof-epn-cosmics-dig.sh | 2 +- testing/detectors/TOF/workflows.desc | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/testing/detectors/TOF/tof-epn-cosmics-dig.sh b/testing/detectors/TOF/tof-epn-cosmics-dig.sh index 64af0a3..6f06250 100755 --- a/testing/detectors/TOF/tof-epn-cosmics-dig.sh +++ b/testing/detectors/TOF/tof-epn-cosmics-dig.sh @@ -2,7 +2,7 @@ source common/setenv.sh -calibration_node="epn003-ib:30453" +calibration_node="epn007-ib:30453" SEVERITY=warning ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" diff --git a/testing/detectors/TOF/workflows.desc b/testing/detectors/TOF/workflows.desc index 55d8649..15216c5 100644 --- a/testing/detectors/TOF/workflows.desc +++ b/testing/detectors/TOF/workflows.desc @@ -1,4 +1,4 @@ -tof-cosmics: "DataDistribution QualityControl" reco,20,20,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics.sh" -tof-cos-dig: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-dig.sh" -tof-cosmicsNoQC: "DataDistribution QualityControl" reco,20,20,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmicsNoQC.sh" -tof-cos-digNoQC: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh" +tof-cosmics: "O2PDPSuite" reco,20,20,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics.sh" +tof-cos-dig: "O2PDPSuite" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-dig.sh" +tof-cosmicsNoQC: "O2PDPSuite" reco,20,20,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmicsNoQC.sh" +tof-cos-digNoQC: "O2PDPSuite" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh" From 8d2746967c9a39ddfa720de24b7346c6ccc04423 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 14 Oct 2021 13:23:23 +0200 Subject: [PATCH 134/236] Add QC host option --- production/qc-workflow.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index e4738fc..d92afb5 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -9,6 +9,8 @@ [ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json [ -z "$QC_JSON_MCH" ] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json +[ -z "$QC_HOST" ] && QC_HOST=local + if [ -z "$WORKFLOW" ] || [ -z "$MYDIR" ]; then echo This script must be called from the dpl-workflow.sh and not standalone 1>&2 exit 1 @@ -42,5 +44,5 @@ if [ ! -z "$JSON_FILES" ]; then fi MERGED_JSON_FILENAME=`realpath $MERGED_JSON_FILENAME` - WORKFLOW+="o2-qc $ARGS_ALL --config json://$MERGED_JSON_FILENAME --local --host localhost | " + WORKFLOW+="o2-qc $ARGS_ALL --config json://$MERGED_JSON_FILENAME --local --host $QC_HOST | " fi From 9a32e13b7a5568b75275f6bddc78666dc4c06f6c Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 14 Oct 2021 13:23:59 +0200 Subject: [PATCH 135/236] Temporarily allow explicit env.vars for ED tracks and clusters --- production/dpl-workflow.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index c89fb59..139eb63 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -384,7 +384,10 @@ workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS # --------------------------------------------------------------------------------------------------------------------- # Event display -workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --display-tracks TPC --display-clusters TPC $EVE_CONFIG $DISABLE_MC | " +# RS this is a temporary setting +[ -z "$ED_TRACKS" ] && ED_TRACKS=$TRACK_SOURCES +[ -z "$ED_CLUSTERS" ] && ED_CLUSTERS=$TRACK_SOURCES +workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --display-tracks $ED_TRACKS --display-clusters $ED_CLUSTERS $EVE_CONFIG $DISABLE_MC | " # --------------------------------------------------------------------------------------------------------------------- # Quality Control From deaadeb86fd18eab72c60f4b4c5c015286f8a048 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 14 Oct 2021 13:30:04 +0200 Subject: [PATCH 136/236] more flexible settings for ITS/MFT noise and dictionaries --- production/dpl-workflow.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 139eb63..6bef766 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -25,10 +25,10 @@ fi workflow_has_parameter CTF && export SAVECTF=1 workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } -ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" -MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" -ITS_NOISE="${FILEWORKDIR}" -MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" +[ -z $ITSCLUSDICT ] && ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" +[ -z $MFTCLUSDICT ] && MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" +[ -z $ITS_NOISE ] && ITS_NOISE="${FILEWORKDIR}" +[ -z $MFT_NOISE ] && MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" MID_FEEID_MAP="$FILEWORKDIR/mid-feeId_mapper.txt" NITSDECTHREADS=2 From fd99f1bfb0379c8c527e3bf75044a18aa23f7bf9 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 14 Oct 2021 14:28:35 +0200 Subject: [PATCH 137/236] typo fix for QC: local -> localhost --- production/qc-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index d92afb5..e8d2aa9 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -9,7 +9,7 @@ [ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json [ -z "$QC_JSON_MCH" ] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json -[ -z "$QC_HOST" ] && QC_HOST=local +[ -z "$QC_HOST" ] && QC_HOST=localhost if [ -z "$WORKFLOW" ] || [ -z "$MYDIR" ]; then echo This script must be called from the dpl-workflow.sh and not standalone 1>&2 From 6f0d3cff7741bc7a185bfc2566b0cafb2771cc98 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 15 Oct 2021 00:34:04 +0200 Subject: [PATCH 138/236] Disable SHM throw on the EPN --- common/setenv.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/setenv.sh b/common/setenv.sh index 5183345..b71fb01 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -51,7 +51,7 @@ else # Defaults when running on the EPN if [ -z "$NGPUS" ]; then export NGPUS=4; fi if [ -z "$EXTINPUT" ]; then export EXTINPUT=1; fi if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=1; fi - if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # NOTE: SHMTHROW SHOULD BE 0 FOR EPN, BUT IS =1 FOR TESTS DURING COMMISSIONING WHILE WE HAVE NO MEMORY MONITORING + if [ -z "$SHMTHROW" ]; then export SHMTHROW=0; fi if [ -z "${WORKFLOW_DETECTORS_FLP_PROCESSING+x}" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF"; fi # Current default in sync processing is that FLP processing is only enabled for TOF fi # Some more options for running on the EPN From 7183a99345e7b1f2ab3b2d763169d2068ffacfab Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 15 Oct 2021 10:51:10 +0200 Subject: [PATCH 139/236] Update README and examples --- README.md | 16 +++++++++------- production/standalone-calibration.desc | 2 +- testing/examples/workflows.desc | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 84fe198..2a7a1e8 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ Another abstraction layer above the *workflows* are **topology descriptions**. T - `SEVERITY` and `INFOLOGGER_SEVERITY` or they must be set to `warning` - `NORATELOG` or the fmq rate logging must be disabled - `GPUTYPE` (if the workflow supports GPUs) + - `GLOBALDPLOPT` This option must be appended to the the workflow (to the final binary if merged with `|` syntax) - ... (to be continued). # Configuring and selecting workflow in AliECS: @@ -49,7 +50,7 @@ There are 3 ways foreseenm to configure the *full topology* in AliECS: (currentl # Topology descriptions: A *topology description* consists of -- A list of modules to load, both for generating the DDS XML file with DPL's `--dds` option and when running the workflow. It can either be a single module, or a space-separated list of modules in double-quotes. In particular, this setting identifies the O2 version. We provide the `O2PDPSuite` package, which has the same versions as O2 itself, and which contain also corresponding versions `DataDistribution` and `QualityControl`, thus it is usually sufficient to just load `O2PDPSuite/[version]`. +- A list of modules to load, both for generating the DDS XML file with DPL's `--dds` option and when running the workflow. It can either be a single module, or a space-separated list of modules in double-quotes. In particular, this setting identifies the O2 version. We provide the `O2PDPSuite` package, which has the same versions as O2 itself, and which contain also corresponding versions `DataDistribution`,`QualityControl` and `ODC`. Thus by default one should just load `O2PDPSuite/[version]`. - A list of workflows, in the form of commands to run to create XML files by the `–dds` option. The command is executed with the `O2DataProcessing` path as working directory. The env options used to configure the workflow are prepended in normal shell syntax. Certain env options are set by the EPN and must not be overridden: `FILEWORKDIR`, `INRAWCHANNAME`, `CTF_DIR`. - Each workflow is amended with the following parameters (the parameters stand in front of the workflow command, and are separated by commas without spaces, the workflow command must be in double-quotes): - Zone where to run the workflow (calib / reco) @@ -109,7 +110,7 @@ DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml WORKFLOW_DETECTORS ``` FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml INRAWCHANNAME=tf-builder-pipe-0 WORKFLOW_DETECTORS=TPC,ITS,TRD,TOF,FT0 ``` -- If you are not on the EPN farm and have NOT set `EPNMODE=1`: Load the required modules for O2 / QC (`alienv load O2/latest QualityControl/latest`) +- If you are not on the EPN farm and have NOT set `EPNMODE=1`: Load the required modules for O2 / QC (`alienv load O2PDPSuite/latest`) - Run the parser, e.g.: ``` ./tools/parse production/production.desc synchronous-workflow /tmp/dds-topology.xml @@ -122,8 +123,9 @@ FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_work - Check out the [O2DataProcessing](https://github.com/AliceO2Group/O2DataProcessing) repository to your home folder on the EPN (`$HOME` in the following). - Copy the content of `O2DataProcessing/testing/examples` (description library file `workflows.desc` and workflow script `example-workflow.sh`) to another place INSIDE the repository, usually under `testing/detectors/[DETECTOR]` or `testing/private/[USERNAME]`. - Edit the workflow script to your needs, adjust / rename the workflow in the description library file. - - See [here](#Topology-descriptions) for the syntax of the library file (in case it is not obvious), and make sure not to override the listed protected environment variables. The workflow script is just a bash script that starts a DPL workflow, which must have the `--dds` parameter in order to create a partial DDS topology. Make sure that the workflow script fullfils the [requirements](#Workflow-requirements) - - Please note that the modules to load must be exactly `"DataDistribution QualityControl"`. Later it will be possible to use `O2PDPSuite` and specify the version, but for now that must not be used as it would create a module collision! + - See [here](#Topology-descriptions) for the syntax of the library file (in case it is not obvious), and make sure not to override the listed protected environment variables. The workflow script is just a bash script that starts a DPL workflow, which must have the `--dds` parameter in order to create a partial DDS topology. + - Make sure that the workflow script fullfils the [requirements](#Workflow-requirements), particularly that it respects the requested environment variables. + - Use `O2PDPSuite` for the modules to load to have the latest installed version, or `O2PDPSuite/[version]` to specify a version. - Create an empty folder in your `$HOME` on the EPN, in the following `$HOME/test`. - Copy the topology generation template from `O2DataProcessing/tools/epn/run.sh` to your folder. - N.B.: this template script contains all the options that will be provided via AliECS automatically as environment variables. Eventually this file will not be needed any more, but the XML file will be automatically created from the AliECS GUI. @@ -167,7 +169,7 @@ example-workflow.sh workflows.desc [drohr@epn245 testing]$ mv private/drohr/example-workflow.sh private/drohr/my-workflow.sh [drohr@epn245 testing]$ vi private/drohr/my-workflow.sh [drohr@epn245 testing]$ cat private/drohr/workflows.desc -drohr-workflow: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh" +drohr-workflow: "O2PDPSuite" reco,10,10,"SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh" [drohr@epn245 testing]$ mkdir ~/test [drohr@epn245 testing]$ cd ~/test [drohr@epn245 test]$ cp ~/O2DataProcessing/tools/epn/run.sh . @@ -201,7 +203,7 @@ Loading ODC/0.36-1 Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-3 fmt/7.1.0-10 FairLogger/v1.9.1-7 zlib/v1.2.8-8 OpenSSL/v1.0.2o-9 libpng/v1.6.34-9 sqlite/v3.15.0-2 libffi/v3.2.1-2 FreeType/v2.10.1-8 Python/v3.6.10-12 Python-modules/1.0-16 boost/v1.75.0-13 ZeroMQ/v4.3.3-6 ofi/v1.7.1-8 asio/v1.19.1-2 asiofi/v0.5.1-2 DDS/3.5.16-5 FairMQ/v1.4.40-4 protobuf/v3.14.0-9 c-ares/v1.17.1-5 re2/2019-09-01-11 grpc/v1.34.0-alice2-1 Using topology drohr-workflow of library testing/private/drohr/workflows.desc -Found topology drohr-workflow - ['drohr-workflow:', 'DataDistribution QualityControl', 'reco,10,10,SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh'] +Found topology drohr-workflow - ['drohr-workflow:', 'O2PDPSuite', 'reco,10,10,SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh'] Loading module DataDistribution Loading DataDistribution/v1.0.6-2 Loading requirement: libInfoLogger/v2.1.1-5 Ppconsul/v0.2.2-5 utf8proc/v2.6.1-3 lzma/v5.2.3-6 Clang/v12.0.1-2 lz4/v1.9.3-9 arrow/v5.0.0-alice1-4 GSL/v1.16-8 libxml2/v2.9.3-8 ROOT/v6-24-02-12 FairRoot/v18.4.2-7 Vc/1.4.1-11 Monitoring/v3.8.7-4 Configuration/v2.6.2-4 Common-O2/v1.6.0-13 ms_gsl/3.1.0-5 GLFW/3.3.2-10 libuv/v1.40.0-10 @@ -252,7 +254,7 @@ Loading ODC/0.36-1 Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-3 fmt/7.1.0-10 FairLogger/v1.9.1-7 zlib/v1.2.8-8 OpenSSL/v1.0.2o-9 libpng/v1.6.34-9 sqlite/v3.15.0-2 libffi/v3.2.1-2 FreeType/v2.10.1-8 Python/v3.6.10-12 Python-modules/1.0-16 boost/v1.75.0-13 ZeroMQ/v4.3.3-6 ofi/v1.7.1-8 asio/v1.19.1-2 asiofi/v0.5.1-2 DDS/3.5.16-5 FairMQ/v1.4.40-4 protobuf/v3.14.0-9 c-ares/v1.17.1-5 re2/2019-09-01-11 grpc/v1.34.0-alice2-1 Using topology synchronous-workflow of library production/production.desc -Found topology synchronous-workflow - ['synchronous-workflow:', 'DataDistribution QualityControl', 'reco,128,128,EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh', 'reco,128,128,EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh'] +Found topology synchronous-workflow - ['synchronous-workflow:', 'O2PDPSuite', 'reco,128,128,EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh', 'reco,128,128,EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh'] Loading module DataDistribution Loading DataDistribution/v1.0.6-2 Loading requirement: libInfoLogger/v2.1.1-5 Ppconsul/v0.2.2-5 utf8proc/v2.6.1-3 lzma/v5.2.3-6 Clang/v12.0.1-2 lz4/v1.9.3-9 arrow/v5.0.0-alice1-4 GSL/v1.16-8 libxml2/v2.9.3-8 ROOT/v6-24-02-12 FairRoot/v18.4.2-7 Vc/1.4.1-11 Monitoring/v3.8.7-4 Configuration/v2.6.2-4 Common-O2/v1.6.0-13 ms_gsl/3.1.0-5 GLFW/3.3.2-10 libuv/v1.40.0-10 diff --git a/production/standalone-calibration.desc b/production/standalone-calibration.desc index 77bbcd7..4fcb69f 100644 --- a/production/standalone-calibration.desc +++ b/production/standalone-calibration.desc @@ -1 +1 @@ -ITS-noise-calibration: "DataDistribution QualityControl" reco,10,10,"production/calib/its-noise-processing.sh" calib,10,"production/calib/its-noise-aggregator.sh" +ITS-noise-calibration: "O2PDPSuite" reco,10,10,"production/calib/its-noise-processing.sh" calib,10,"production/calib/its-noise-aggregator.sh" diff --git a/testing/examples/workflows.desc b/testing/examples/workflows.desc index 12a5b54..0150ffa 100644 --- a/testing/examples/workflows.desc +++ b/testing/examples/workflows.desc @@ -1 +1 @@ -example-workflow: "DataDistribution QualityControl" reco,10,10,"SHMSIZE=128000000000 testing/examples/example-workflow.sh" +example-workflow: "O2PDPSuite" reco,10,10,"SHMSIZE=128000000000 testing/examples/example-workflow.sh" From 9a28e41cf553701182e975ae633c241a8e614708 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 15 Oct 2021 10:57:24 +0200 Subject: [PATCH 140/236] Tune some process multiplicities --- production/dpl-workflow.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 6bef766..2c8f94e 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -229,8 +229,9 @@ elif [ $EPNPIPELINES != 0 ]; then # Tuned multiplicities for sync Pb-Pb processing N_TPCENT=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) N_TPCITS=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) + N_ITSTRK=$(math_max $((2 * $EPNPIPELINES * $NGPUS / 4)) 1) N_ITSRAWDEC=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) - N_EMCREC=$(math_max $((7 * $EPNPIPELINES * $NGPUS / 4)) 1) + N_EMCREC=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) N_TRDENT=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) N_TRDTRK=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) N_TPCRAWDEC=$(math_max $((8 * $EPNPIPELINES * $NGPUS / 4)) 1) @@ -243,9 +244,9 @@ elif [ $EPNPIPELINES != 0 ]; then fi # Scale some multiplicities with the number of nodes RECO_NUM_NODES_WORKFLOW_CMP=$((($RECO_NUM_NODES_WORKFLOW > 15 ? $RECO_NUM_NODES_WORKFLOW : 15) * ($NUMAGPUIDS == 1 ? 2 : 1))) # Limit the lowert scaling factor, multiply by 2 if we have 2 NUMA domains -N_ITSRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSRAWDEC:-1}) +N_ITSRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSRAWDEC:-1}) # This means, if we have 60 EPN nodes, we need at least 3 ITS RAW decoders N_MFTRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTRAWDEC:-1}) -N_ITSTRK=$(math_max $((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSTRK:-1}) +N_ITSTRK=$(math_max $((1 * 200 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSTRK:-1}) N_MFTTRK=$(math_max $((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTTRK:-1}) N_CTPRAWDEC=$(math_max $((1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_CTPRAWDEC:-1}) N_TRDRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_TRDRAWDEC:-1}) @@ -314,7 +315,7 @@ if [ $CTFINPUT == 0 ]; then has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N CTP-RawStreamDecoder CTP RAW) | " has_detector PHS && ! has_detector_flp_processing PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N PHOSRawToCellConverterSpec PHS REST) $DISABLE_MC | " has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $CPV_INPUT --output-type clusters --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N CPVRawToDigitConverterSpec CPV REST),$(get_N CPVClusterizerSpec CPV REST) $DISABLE_MC | " - has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST RMCREC) | " + has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST EMCREC) | " fi # --------------------------------------------------------------------------------------------------------------------- From 7ca63e9f44295e7fc7ef255663541fcb3136a173 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 15 Oct 2021 13:57:38 +0200 Subject: [PATCH 141/236] Add/fix documentation/example for dpl metric monitoring / infologger --- README.md | 3 +++ testing/examples/example-workflow.sh | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a7a1e8..f2c959e 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,9 @@ Another abstraction layer above the *workflows* are **topology descriptions**. T - `GPUTYPE` (if the workflow supports GPUs) - `GLOBALDPLOPT` This option must be appended to the the workflow (to the final binary if merged with `|` syntax) - ... (to be continued). +- DPL metrics and InfoLogger (not a requirement in the sense that something would fail, but without it is difficult to debug): + - The workflow commands should contain `--monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60` for the DPL metrics. + - `--infologger-severity $INFOLOGGER_SEVERITY` enables the infologger. # Configuring and selecting workflow in AliECS: There are 3 ways foreseenm to configure the *full topology* in AliECS: (currently only the manual XML option exists) diff --git a/testing/examples/example-workflow.sh b/testing/examples/example-workflow.sh index f42c33e..8a85112 100755 --- a/testing/examples/example-workflow.sh +++ b/testing/examples/example-workflow.sh @@ -5,7 +5,9 @@ source common/setenv.sh SEVERITY=warning ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +[ $NORATELOG == 1 ] && ARGS_ALL+=" --fairmq-rate-logging 0" + ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" PROXY_INSPEC="A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" From 9bde6842f92f8d846afc01535a7c45fa0dcf4e9f Mon Sep 17 00:00:00 2001 From: Markus Fasel Date: Thu, 14 Oct 2021 10:54:43 +0200 Subject: [PATCH 142/236] [EMCAL-724] Add meta-output-dir for CTF writer --- .../detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh | 1 + .../EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh | 1 + .../EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh | 3 ++- .../runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh | 1 + testing/detectors/EMC/workflows.desc | 10 ++++++++-- 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh index 5b20605..e426607 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh @@ -43,5 +43,6 @@ o2-dpl-raw-proxy $ARGS_ALL \ --onlyDet $WORKFLOW_DETECTORS \ --ctf-dict "${CTF_DICT}" \ --output-dir $CTF_DIR \ + --meta-output-dir ${CTF_METAFILES_DIR} \ --min-file-size "${CTF_MINSIZE}" \ | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh index 3b2e022..1c949fc 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh @@ -52,6 +52,7 @@ o2-dpl-raw-proxy $ARGS_ALL \ --onlyDet $WORKFLOW_DETECTORS \ --ctf-dict "${CTF_DICT}" \ --output-dir $CTF_DIR \ + --meta-output-dir ${CTF_METAFILES_DIR} \ --min-file-size "${CTF_MINSIZE}" \ | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh index 0d25e80..dfb9cce 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh @@ -52,5 +52,6 @@ o2-dpl-raw-proxy $ARGS_ALL \ --onlyDet $WORKFLOW_DETECTORS \ --ctf-dict "${CTF_DICT}" \ --output-dir $CTF_DIR \ - --min-file-size "${CTF_MINSIZE}" \\ + --meta-output-dir ${CTF_METAFILES_DIR} \ + --min-file-size "${CTF_MINSIZE}" \ | o2-dpl-run $ARGS_ALL --dds diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh index ca0499a..c31b105 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh @@ -48,5 +48,6 @@ o2-dpl-raw-proxy $ARGS_ALL \ --onlyDet $WORKFLOW_DETECTORS \ --ctf-dict "${CTF_DICT}" \ --output-dir $CTF_DIR \ + --meta-output-dir ${CTF_METAFILES_DIR} \ --min-file-size "${CTF_MINSIZE}" \ | o2-dpl-run $ARGS_ALL --dds diff --git a/testing/detectors/EMC/workflows.desc b/testing/detectors/EMC/workflows.desc index d092bba..5a74b4f 100644 --- a/testing/detectors/EMC/workflows.desc +++ b/testing/detectors/EMC/workflows.desc @@ -1,2 +1,8 @@ -emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file +emc-qcall-ctf-3: "O2PDPSuite" reco,3,3,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-4: "O2PDPSuite" reco,4,4,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-6: "O2PDPSuite" reco,6,6,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-7: "O2PDPSuite" reco,7,7,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-8: "O2PDPSuite" reco,8,8,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-13: "O2PDPSuite" reco,13,13,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file From 091a9cbcb2d3af1fcfd82fe217458f81e0f7104f Mon Sep 17 00:00:00 2001 From: Markus Fasel Date: Thu, 14 Oct 2021 11:03:47 +0200 Subject: [PATCH 143/236] [EMCAL-724] Create staging directory for configurations in testing/development phase --- ...EMCRawToDigitsRecoPilelineQCAlllocalCTF.sh | 58 +++++++++++++++++++ testing/private/mfasel/workflows.desc | 8 +++ 2 files changed, 66 insertions(+) create mode 100755 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh create mode 100644 testing/private/mfasel/workflows.desc diff --git a/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh b/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh new file mode 100755 index 0000000..24310cd --- /dev/null +++ b/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +source /home/mfasel/alice/O2DataProcessing/common/setenv.sh + +PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +NCPU=20 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') +ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" +#HOST='$(hostname -s)-ib' +HOST=epn + +QC_CONFIG=consul-json://aliecs.cern.ch:8500/o2/components/qc/ANY/any/emc-qcmn-epnall-work +#QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json +INFOLOGGER_SEVERITY_RAWPROXY=warning +SEVERITY_RAWPROXY=warning +INFOLOGGER_SEVERITY=warning +SEVERITY=warning +INFOLOGGER_SEVERITY_QC=warning +SEVERITY_QC=warning + +# CTF compression dictionary +CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" +# min file size for CTF (accumulate CTFs until it is reached) +CTF_MINSIZE="2000000" + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ + --severity $SEVERITY_RAWPROXY \ + --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ + | o2-emcal-reco-workflow $ARGS_ALL \ + --input-type raw \ + --output-type cells \ + --disable-root-input \ + --disable-root-output \ + --disable-mc \ + --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ + --severity $SEVERITY \ + --infologger-severity $INFOLOGGER_SEVERITY \ + --pipeline EMCALRawToCellConverterSpec:$NCPU \ + | o2-qc $ARGS_ALL \ + --config $QC_CONFIG \ + --local \ + --host $HOST \ + --severity $SEVERITY_QC \ + --infologger-severity $INFOLOGGER_SEVERITY_QC \ + | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ + --ctf-dict "${CTF_DICT}" \ + | o2-ctf-writer-workflow $ARGS_ALL \ + --configKeyValues "${CONFKEYVAL}" \ + --no-grp \ + --onlyDet $WORKFLOW_DETECTORS \ + --ctf-dict "${CTF_DICT}" \ + --output-dir $CTF_DIR \ + --meta-output-dir ${CTF_METAFILES_DIR} \ + --min-file-size "${CTF_MINSIZE}" \ + | o2-dpl-run $ARGS_ALL --dds + \ No newline at end of file diff --git a/testing/private/mfasel/workflows.desc b/testing/private/mfasel/workflows.desc new file mode 100644 index 0000000..2004a0a --- /dev/null +++ b/testing/private/mfasel/workflows.desc @@ -0,0 +1,8 @@ +emc-qcall-ctf-3: "O2PDPSuite" reco,3,3,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-4: "O2PDPSuite" reco,4,4,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-6: "O2PDPSuite" reco,6,6,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-7: "O2PDPSuite" reco,7,7,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-8: "O2PDPSuite" reco,8,8,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" +emc-qcall-ctf-13: "O2PDPSuite" reco,13,13,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file From ff3b4af2feea275227c125edba0951c4abe03547 Mon Sep 17 00:00:00 2001 From: Markus Fasel Date: Fri, 15 Oct 2021 21:28:03 +0200 Subject: [PATCH 144/236] [EMCAL-724] Discard debug messages from QC in infoLogger --- testing/detectors/EMC/qc/emcQCTasksAll_multinode.json | 4 ++++ testing/detectors/EMC/qc/emcQCTasks_multinode.json | 4 ++++ testing/detectors/EMC/qc/emcQCTasks_singlenode.json | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json b/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json index 8180cd8..b0bf738 100644 --- a/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json +++ b/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json @@ -8,6 +8,10 @@ "password": "not_applicable", "name": "not_applicable" }, + "infologger": { + "filterDiscardDebug": "true", + "filterDiscardLevel": "1" + }, "Activity": { "number": "42", "type": "2" diff --git a/testing/detectors/EMC/qc/emcQCTasks_multinode.json b/testing/detectors/EMC/qc/emcQCTasks_multinode.json index 219b4a6..7d4e533 100644 --- a/testing/detectors/EMC/qc/emcQCTasks_multinode.json +++ b/testing/detectors/EMC/qc/emcQCTasks_multinode.json @@ -8,6 +8,10 @@ "password": "not_applicable", "name": "not_applicable" }, + "infologger": { + "filterDiscardDebug": "true", + "filterDiscardLevel": "1" + }, "Activity": { "number": "42", "type": "2" diff --git a/testing/detectors/EMC/qc/emcQCTasks_singlenode.json b/testing/detectors/EMC/qc/emcQCTasks_singlenode.json index cb9b820..d77c703 100644 --- a/testing/detectors/EMC/qc/emcQCTasks_singlenode.json +++ b/testing/detectors/EMC/qc/emcQCTasks_singlenode.json @@ -8,6 +8,10 @@ "password": "not_applicable", "name": "not_applicable" }, + "infologger": { + "filterDiscardDebug": "true", + "filterDiscardLevel": "1" + }, "Activity": { "number": "42", "type": "2" From e31b98e6c3ed85e30949e5b19a7515dafceeabf1 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 15 Oct 2021 22:27:20 +0200 Subject: [PATCH 145/236] Fixes for ITS noise calibration workflow --- production/calib/its-noise-aggregator.sh | 2 +- production/calib/its-noise-processing.sh | 2 +- tools/parse | 8 ++------ 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/production/calib/its-noise-aggregator.sh b/production/calib/its-noise-aggregator.sh index b458630..2a63382 100755 --- a/production/calib/its-noise-aggregator.sh +++ b/production/calib/its-noise-aggregator.sh @@ -17,7 +17,7 @@ ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;Na PROXY_INSPEC="A:ITS/COMPCLUSTERS/0;B:ITS/PATTERNS/0;C:ITS/CLUSTERSROF/0;eos:***/INFORMATION" -WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name its-noise-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=its-noise-calib,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " +WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name its-noise-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=its-noise-input-proxy,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " WORKFLOW+="o2-calibration-its-calib-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --prob-threshold 1e-5 | " WORKFLOW+="o2-calibration-ccdb-populator-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ccdb-path=\"http://ccdb-test.cern.ch:8080\" | " WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" diff --git a/production/calib/its-noise-processing.sh b/production/calib/its-noise-processing.sh index f8a6eaa..273f5b1 100755 --- a/production/calib/its-noise-processing.sh +++ b/production/calib/its-noise-processing.sh @@ -20,7 +20,7 @@ PROXY_OUTSPEC="downstreamA:ITS/COMPCLUSTERS/0;downstreamB:ITS/PATTERNS/0;downstr WORKFLOW="o2-dpl-raw-proxy ${ARGS_ALL} --dataspec \"$PROXY_INSPEC\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " WORKFLOW+="o2-itsmft-stf-decoder-workflow ${ARGS_ALL} --configKeyValues \"$ARGS_ALL_CONFIG\" --nthreads 4 | " -WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --channel-config \"name=its-noise-calib,method=connect,type=push,transport=zeromq\" | " +WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --proxy-channel-name its-noise-input-proxy --channel-config \"name=its-noise-input-proxy,method=connect,type=push,transport=zeromq,rateLogging=0\" | " WORKFLOW+="o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" if [ $WORKFLOWMODE == "print" ]; then diff --git a/tools/parse b/tools/parse index 262428d..5d2c609 100755 --- a/tools/parse +++ b/tools/parse @@ -33,10 +33,6 @@ if 'WORKFLOWMODE' in os.environ: raise else: os.environ['WORKFLOWMODE'] = 'dds' -if 'GLOBALDPLOPT' in os.environ: - os.environ['GLOBALDPLOPT'] += " -b" -else: - os.environ['GLOBALDPLOPT'] = "-b" if 'RECO_NUM_NODES_OVERRIDE' in os.environ and os.environ['RECO_NUM_NODES_OVERRIDE'] != "" and int(os.environ['RECO_NUM_NODES_OVERRIDE']) > 0: reco_num_nodes_override = int(os.environ['RECO_NUM_NODES_OVERRIDE']) @@ -102,7 +98,7 @@ for line in f: command_log_filter = "\"^\[\"" else: command_log_filter = "\"^\[INFO\"" - command = wf[3] + " | grep -v " + command_log_filter + " > " + filename + " && [ `grep \"^\[\" " + filename + " | wc -l` == 0 ]" + command = "GLOBALDPLOPT+=\" -b --dds-workflow-suffix _" + wf[0] + str(i) + "\" " + wf[3] + " | grep -v " + command_log_filter + " > " + filename + " && [ `grep \"^\[\" " + filename + " | wc -l` == 0 ]" print("Running DPL command", command) if reco_num_nodes_override == 0: os.environ['RECO_NUM_NODES_WORKFLOW'] = wf[1] @@ -121,7 +117,7 @@ for line in f: odccommand += " --reco " + " ".join(recoworkflows) odccommand += " --n " + str(reconodes) if len(calibworkflows): - odccommand += " --calib " + " ".join(calibworkflows) + odccommand += " --calibwn 'wn_online-calib_.*' --calib " + " ".join(calibworkflows) if args[1] != "": odccommand += " --prependexe \"module load " + args[1] + " 2>&1 ; \"" odccommand += " -o " + sys.argv[3] From a7c46de75c42b4038b9653fa0f2e43fe4d8215e2 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 15 Oct 2021 22:29:03 +0200 Subject: [PATCH 146/236] Enable EPN STDERR monitoring tool --- tools/datadistribution_workflows/dd-discard.xml | 2 +- tools/datadistribution_workflows/dd-disk.xml | 2 +- tools/datadistribution_workflows/dd-processing-disk.xml | 2 +- tools/datadistribution_workflows/dd-processing.xml | 2 +- tools/epn/gen_topo.sh | 1 + .../{dd-disk.xml => epnstderrlog.xml} | 8 ++++---- tools/parse | 2 ++ 7 files changed, 11 insertions(+), 8 deletions(-) rename tools/monitoring_workflows/{dd-disk.xml => epnstderrlog.xml} (57%) diff --git a/tools/datadistribution_workflows/dd-discard.xml b/tools/datadistribution_workflows/dd-discard.xml index 2ceb5db..26028c4 100644 --- a/tools/datadistribution_workflows/dd-discard.xml +++ b/tools/datadistribution_workflows/dd-discard.xml @@ -7,7 +7,7 @@
- + TfBuilderTask
diff --git a/tools/datadistribution_workflows/dd-disk.xml b/tools/datadistribution_workflows/dd-disk.xml index 86383a7..ad62cb9 100644 --- a/tools/datadistribution_workflows/dd-disk.xml +++ b/tools/datadistribution_workflows/dd-disk.xml @@ -7,7 +7,7 @@
- + TfBuilderTask
diff --git a/tools/datadistribution_workflows/dd-processing-disk.xml b/tools/datadistribution_workflows/dd-processing-disk.xml index 3a9a093..ef376b3 100644 --- a/tools/datadistribution_workflows/dd-processing-disk.xml +++ b/tools/datadistribution_workflows/dd-processing-disk.xml @@ -7,7 +7,7 @@
- + TfBuilderTask
diff --git a/tools/datadistribution_workflows/dd-processing.xml b/tools/datadistribution_workflows/dd-processing.xml index eba9c80..fd531b8 100644 --- a/tools/datadistribution_workflows/dd-processing.xml +++ b/tools/datadistribution_workflows/dd-processing.xml @@ -7,7 +7,7 @@
- + TfBuilderTask
diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh index 667721e..4427475 100755 --- a/tools/epn/gen_topo.sh +++ b/tools/epn/gen_topo.sh @@ -20,6 +20,7 @@ export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc fil export INRAWCHANNAME=tf-builder-pipe-0 # Pipe name to get data from TfBuilder export CTF_DIR=/data/tf/compressed # Output directory for CTFs export GEN_TOPO_WORKDIR=$HOME/gen_topo/${GEN_TOPO_PARTITION}_${GEN_TOPO_ONTHEFLY} # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir +export GEN_TOPO_STDERR_LOGGING=1 # Load required module and run gen_topo_o2dataprocessing (PDP part of this script) module load ODC O2DataProcessing 1>&2 || { echo Error loading ODC / O2DataProcessing 1>&2; exit 1; } diff --git a/tools/monitoring_workflows/dd-disk.xml b/tools/monitoring_workflows/epnstderrlog.xml similarity index 57% rename from tools/monitoring_workflows/dd-disk.xml rename to tools/monitoring_workflows/epnstderrlog.xml index 0294d2c..b359058 100644 --- a/tools/monitoring_workflows/dd-disk.xml +++ b/tools/monitoring_workflows/epnstderrlog.xml @@ -1,14 +1,14 @@ - - o2-epn-epn-stderr-monitor -P ODC --infologger 1 + + o2-epn-stderr-monitor -P odc --infologger 1 EPNstderrMonitorRequirement
- - EPNstderrMonitorTask + + ErrorMonitorTask
diff --git a/tools/parse b/tools/parse index 5d2c609..e09e3a1 100755 --- a/tools/parse +++ b/tools/parse @@ -118,6 +118,8 @@ for line in f: odccommand += " --n " + str(reconodes) if len(calibworkflows): odccommand += " --calibwn 'wn_online-calib_.*' --calib " + " ".join(calibworkflows) + if "GEN_TOPO_STDERR_LOGGING" in os.environ and int(os.environ['GEN_TOPO_STDERR_LOGGING']): + odccommand += " --mon tools/monitoring_workflows/epnstderrlog.xml" if args[1] != "": odccommand += " --prependexe \"module load " + args[1] + " 2>&1 ; \"" odccommand += " -o " + sys.argv[3] From e2a8c0af191c376b000759b2a3bc6a28a42375f9 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 15 Oct 2021 22:59:39 +0200 Subject: [PATCH 147/236] Add documentation and examples for calibration workflows --- README.md | 16 ++++++++++ testing/examples/calib-workflows.desc | 1 + testing/examples/example-calib-aggregator.sh | 30 ++++++++++++++++++ testing/examples/example-calib-processing.sh | 33 ++++++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 testing/examples/calib-workflows.desc create mode 100755 testing/examples/example-calib-aggregator.sh create mode 100755 testing/examples/example-calib-processing.sh diff --git a/README.md b/README.md index f2c959e..1a6df30 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,22 @@ other-topology: O2PDPSuite/v1.0.0 reco,2,1,"tpc-test/tpc-standalone-test-1.sh" commit=xxxx|path=xxxx file=topologies.desc topology=demo-full-topology parameters="EVENT_DISPLAY" detectors="TPC,ITS" detectors_qc="TPC" [...] ``` +# Calibration workflows with aggregator +Calibration workflows can be different when they use an aggregator. In that case, there is processing running on each EPN, and the output is sent to an aggregator node. Communication happens via the `o2-dpl-raw-proxy` and the `o2-dpl-output-proxy`. +To set up such a workflow, a couple of points must be followed: +- There are 2 different shell scripts, one for the "reco" part running on each EPN, and one for the calibration aggregator "reco" part on the calibration node. There may be more than one aggregator in the topology, in that case it is one *reco* script and multiple *calib* scripts. +- The *reco* script must contain an `o2-dpl-output-proxy` to send the output and each calib script must contain an `o2-dpl-raw-proxy` for the input. +- Each of the input "raw" proxies must be assigned a unique name via the `--proxy-name [NAME]` option. Note that the *reco* script also contains an input raw proxy, with the default name `readout-proxy`. +- The channel-name of each input proxy must match the proxy name. The *calib* input proxies' channels must use `method=bind`. The output proxies must use `method=connect` and the channel name must match the name of the input proxy they are connecting to. +- The `dataspec` of the proxies is configured in the same way as for the `readout-proxy` and the specs must be equal for corresponding input and output proxies. +- The channels of input and output proxies (except for the *reco* `readout-proxy`) must be configured without address! +- The output proxies must use the command line option `--proxy-channel-name [name]` with `name` being the configured channel name. +- To run on the EPN, the *calib* input proxies must have the command line option `--network-interface ib0` (this ensures data is sent via InfiniBand not via Ethernet). + +For an example, chek the calibration workflows [here](testing/examples) + +*NOTE* For reference, to run a workflow with calib aggregator on the EPN with AliECS, currently a node from the `online-calib` zone must be requested, by setting `odc_resources` to `[ {"zone":"online", "n":10}, {"zone":"online-calib", "n":1 } ]` (adjust the `10` to the number of required reconstruction nodes). This will be improved later and then this extra setting will not be needed any more. + # The parser script: The **parser** is a simple python script that parses a *topology description* and generates the DDS XML file with the *full topology*. To do so, it runs all the DPL workflows with the `--dds` option and then uses the `odc-topo-epn` tool to merge the *partial topology* into the final *full topology*. The *parser* is steered by some command line options and by some environment variables (note that the env variables get also passed through to the workflows). diff --git a/testing/examples/calib-workflows.desc b/testing/examples/calib-workflows.desc new file mode 100644 index 0000000..78aa0ce --- /dev/null +++ b/testing/examples/calib-workflows.desc @@ -0,0 +1 @@ +ITS-noise-calibration: "O2PDPSuite" reco,10,10,"testing/examples/example-calib-processing.sh" calib,10,"testing/examples/example-calib-aggregator.sh" diff --git a/testing/examples/example-calib-aggregator.sh b/testing/examples/example-calib-aggregator.sh new file mode 100755 index 0000000..01f15ec --- /dev/null +++ b/testing/examples/example-calib-aggregator.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source common/setenv.sh + +# --------------------------------------------------------------------------------------------------------------------- +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" +ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" + +PROXY_INSPEC="A:ITS/COMPCLUSTERS/0;B:ITS/PATTERNS/0;C:ITS/CLUSTERSROF/0;eos:***/INFORMATION" + +WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name its-noise-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=its-noise-input-proxy,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " +WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi diff --git a/testing/examples/example-calib-processing.sh b/testing/examples/example-calib-processing.sh new file mode 100755 index 0000000..273f5b1 --- /dev/null +++ b/testing/examples/example-calib-processing.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +source common/setenv.sh + +# --------------------------------------------------------------------------------------------------------------------- +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" +ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" + +PROXY_INSPEC="A:ITS/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" +PROXY_OUTSPEC="downstreamA:ITS/COMPCLUSTERS/0;downstreamB:ITS/PATTERNS/0;downstreamC:ITS/CLUSTERSROF/0" + +WORKFLOW="o2-dpl-raw-proxy ${ARGS_ALL} --dataspec \"$PROXY_INSPEC\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " +WORKFLOW+="o2-itsmft-stf-decoder-workflow ${ARGS_ALL} --configKeyValues \"$ARGS_ALL_CONFIG\" --nthreads 4 | " +WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --proxy-channel-name its-noise-input-proxy --channel-config \"name=its-noise-input-proxy,method=connect,type=push,transport=zeromq,rateLogging=0\" | " +WORKFLOW+="o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi From e6a112239a3fca415add4756cac80b5704b7da1c Mon Sep 17 00:00:00 2001 From: shahoian Date: Sat, 16 Oct 2021 14:11:29 +0200 Subject: [PATCH 148/236] Make sure N_TPCENTDEC is set --- production/dpl-workflow.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 2c8f94e..0542720 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -250,6 +250,7 @@ N_ITSTRK=$(math_max $((1 * 200 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSTRK:-1}) N_MFTTRK=$(math_max $((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTTRK:-1}) N_CTPRAWDEC=$(math_max $((1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_CTPRAWDEC:-1}) N_TRDRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_TRDRAWDEC:-1}) +[ -z $N_TPCENTDEC ] && N_TPCENTDEC=1 # --------------------------------------------------------------------------------------------------------------------- # Input workflow From ecbbc9d13a0b63732358fb31c0839babdc2ea370 Mon Sep 17 00:00:00 2001 From: shahoian Date: Sat, 16 Oct 2021 16:36:11 +0200 Subject: [PATCH 149/236] Suppress unneeded TRD options --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 0542720..cf96a5d 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -128,7 +128,7 @@ if [ $EPNMODE == 1 ]; then MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" GPU_CONFIG_KEY+="GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;" # Options for decoding current TRD real raw data (not needed for data converted from MC) - if [ -z $TRD_DECODER_OPTIONS ]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 --ignore-digithcheader --halfchamberwords 2 --halfchambermajor 33 "; fi + if [ -z $TRD_DECODER_OPTIONS ]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 "; fi if [ $EXTINPUT == 1 ] && [ $GPUTYPE != "CPU" ] && [ -z "$GPU_NUM_MEM_REG_CALLBACKS" ]; then GPU_NUM_MEM_REG_CALLBACKS=4; fi fi From ea27a3e747a95478133d9f667a38a9069fad3f7c Mon Sep 17 00:00:00 2001 From: shahoian Date: Sat, 16 Oct 2021 22:13:54 +0200 Subject: [PATCH 150/236] No vertexing in cosmics mode --- production/dpl-workflow.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index cf96a5d..6bbeef1 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -339,8 +339,11 @@ has_processing_step FDD_RECO && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --conf has_processing_step FV0_RECO && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " has_processing_step ZDC_RECO && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST) | " -has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " -has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $TRACK_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST) | " + +if [ $BEAMTYPE != "cosmic" ]; then + has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " + has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $TRACK_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST) | " +fi # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode From 23b2cde04e544e834705c1df65c6ee7fa9655e21 Mon Sep 17 00:00:00 2001 From: shahoian Date: Sat, 16 Oct 2021 22:42:23 +0200 Subject: [PATCH 151/236] complete ITS tracking options --- production/dpl-workflow.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 6bbeef1..317b5a0 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -104,7 +104,7 @@ if [ $SYNCMODE == 1 ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" ITS_CONFIG+=" --tracking-mode sync" elif [ $BEAMTYPE == "pp" ]; then - ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" + ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" ITS_CONFIG+=" --tracking-mode sync" elif [ $BEAMTYPE == "cosmic" ]; then ITS_CONFIG+=" --tracking-mode cosmics" @@ -116,8 +116,18 @@ if [ $SYNCMODE == 1 ]; then TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" else - ITS_CONFIG+=" --tracking-mode async" + if [ $BEAMTYPE == "PbPb" ]; then + ITS_CONFIG+=" --tracking-mode async" + elif [ $BEAMTYPE == "pp" ]; then + ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" + ITS_CONFIG+=" --tracking-mode async" + elif [ $BEAMTYPE == "cosmic" ]; then + ITS_CONFIG+=" --tracking-mode cosmics" + else + ITS_CONFIG+=" --tracking-mode async" + fi fi + has_processing_step ENTROPY_ENCODER && GPU_OUTPUT+=",compressed-clusters-ctf" has_detector_flp_processing CPV && CPV_INPUT=digits From 96ca4462610025dda5c9549122b0922a0bdf0d3b Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 18 Oct 2021 14:10:41 +0200 Subject: [PATCH 152/236] Update TPC QC json --- production/qc-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index e8d2aa9..1f5c9cd 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -1,6 +1,6 @@ #!/bin/bash -[ -z "$QC_JSON_TPC" ] && QC_JSON_TPC=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json +[ -z "$QC_JSON_TPC" ] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multimode_ALL.json [ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/epn/jliu/itsEPNv2.json [ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster.json [ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json From 9eba622304bdc121650706141fc4257e18da4405 Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 18 Oct 2021 14:19:46 +0200 Subject: [PATCH 153/236] Update TPC QC json --- production/qc-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 1f5c9cd..0afa949 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -1,6 +1,6 @@ #!/bin/bash -[ -z "$QC_JSON_TPC" ] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multimode_ALL.json +[ -z "$QC_JSON_TPC" ] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json [ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/epn/jliu/itsEPNv2.json [ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster.json [ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json From 7e46153726a068736e31aa8ba768305fa480b16c Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 18 Oct 2021 15:26:40 +0200 Subject: [PATCH 154/236] Set MFT QC to /home/epn/odc/files/qc-mft-cluster-merger-raw-cluster.json --- production/qc-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 0afa949..b9b7ddf 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -2,7 +2,7 @@ [ -z "$QC_JSON_TPC" ] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json [ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/epn/jliu/itsEPNv2.json -[ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster.json +[ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-cluster.json [ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json [ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json [ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json From d4cfb6e71d68788e53d10cd8a001e60c80aa03f8 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 18 Oct 2021 19:21:31 +0200 Subject: [PATCH 155/236] Don't add detectors to TRACK_SOURCES that do not have tracking --- production/README.md | 2 +- production/dpl-workflow.sh | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/production/README.md b/production/README.md index 99e124c..d1b9623 100644 --- a/production/README.md +++ b/production/README.md @@ -18,7 +18,7 @@ You can use the following options to change the workflow behavior: - `WORKFLOW_DETECTORS_RECO` (default `ALL`) : Comma-separated list of detectors for which to run reconstruction. - `WORKFLOW_DETECTORS_CTF` (default `ALL`) : Comma-separated list of detectors to include in CTF. - `WORKFLOW_DETECTORS_MATCHING` (default selected corresponding to default workflow for sync or async mode respectively) : Comma-separated list of matching / vertexing algorithms to run. Use `ALL` to enable all of them. Currently supported options: `ITSTPC`, `TPCTRD`, `ITSTPCTRD`, `TPCTOF`, `ITSTPCTOF`, `MFTMCH`, `PRIMVTX`, `SECVTX`. -- `WORKFLOW_EXTRA_PROCESSING_STEPS` Enable additional processing steps not in the preset for the SYNC / ASYNC mode. Possible values are: `MID_RECO` `MCH_RECO` `MFT_RECO` `FDD_RECO` `FV0_RECO` `ZDC_RECO` `ENTROPY_ENCODER` `MATCH_ITSTPC` `MATCH_TPCTRD` `MATCH_ITSTPCTRD` `MATCH_TPCTOF` `MATCH_ITSTPCTOF` `MATCH_MFTMCH` `MATCH_MFTMCH` `MATCH_PRIMVTX` `MATCH_SECVTX`. +- `WORKFLOW_EXTRA_PROCESSING_STEPS` Enable additional processing steps not in the preset for the SYNC / ASYNC mode. Possible values are: `MID_RECO` `MCH_RECO` `MFT_RECO` `FDD_RECO` `FV0_RECO` `ZDC_RECO` `ENTROPY_ENCODER` `MATCH_ITSTPC` `MATCH_TPCTRD` `MATCH_ITSTPCTRD` `MATCH_TPCTOF` `MATCH_ITSTPCTOF` `MATCH_MFTMCH` `MATCH_MFTMCH` `MATCH_PRIMVTX` `MATCH_SECVTX`. (Here `_RECO` means full async reconstruction, and can be used to enable it also in sync mode.) - `WORKFLOW_PARAMETERS` (default `NONE`) : Comma-separated list, enables additional features of the workflow. Currently the following features are available: - `GPU` : Performs the TPC processing on the GPU, otherwise everything is processed on the CPU. - `CTF` : Write the CTF to disk (CTF creation is always enabled, but if this parameter is missing, it is not stored). diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 317b5a0..4efcb17 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -37,6 +37,8 @@ CTF_DICT=${CTF_DICT_DIR}/ctf_dictionary.root ITSMFT_FILES="ITSClustererParam.dictFilePath=$ITSCLUSDICT;MFTClustererParam.dictFilePath=$MFTCLUSDICT"; +LIST_OF_ASYNC_RECO_STEPS="MID MCH MFT FDD FV0 ZDC" + # --------------------------------------------------------------------------------------------------------------------- # Set active reconstruction steps (defaults added according to SYNCMODE) @@ -51,7 +53,7 @@ done if [ $SYNCMODE == 1 ]; then # Add default steps for synchronous mode add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ENTROPY_ENCODER else # Add default steps for async mode - for i in MID MCH MFT FDD FV0 ZDC; do + for i in $LIST_OF_ASYNC_RECO_STEPSMID; do has_detector_reco $i && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ${i}_RECO done fi @@ -187,7 +189,11 @@ has_detector_matching TPCTOF && { add_comma_separated TOF_SOURCES TPC; add_comma has_detector_matching ITSTPCTOF && { add_comma_separated TOF_SOURCES ITS-TPC; add_comma_separated TRACK_SOURCES "ITS-TPC-TOF"; } has_detector_matching MFTMCH && add_comma_separated TRACK_SOURCES "MFT-MCH" for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do - has_detector_reco $det && add_comma_separated TRACK_SOURCES "$det" + if [[ $LIST_OF_ASYNC_RECO_STEPS =~ (^| )${det}( |$) ]]; then + has_processing_step ${det}_RECO && add_comma_separated TRACK_SOURCES "$det" + else + has_detector_reco $det && add_comma_separated TRACK_SOURCES "$det" + fi done PVERTEX_CONFIG="--vertexing-sources $TRACK_SOURCES --vertex-track-matching-sources $TRACK_SOURCES" has_detector_reco FT0 && PVERTEX_CONFIG+=" --validate-with-ft0" @@ -341,7 +347,7 @@ has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-g has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH) | " # --------------------------------------------------------------------------------------------------------------------- -# Reconstruction workflows normally active only in async mode in async mode, but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS +# Reconstruction workflows normally active only in async mode in async mode ($LIST_OF_ASYNC_RECO_STEPS), but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS has_processing_step MID_RECO && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST) | " has_processing_step MCH_RECO && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST) | " has_processing_step MFT_RECO && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC $DISABLE_ROOT_OUTPUT --pipeline $(get_N mft-tracker MFT REST MFTTRK) | " From d1663f02f6928da0d99beaef3f32a0d96525275e Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 18 Oct 2021 19:21:40 +0200 Subject: [PATCH 156/236] Fix defaults --- tools/epn/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/epn/run.sh b/tools/epn/run.sh index 9ce9cba..7b6cf89 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -17,7 +17,7 @@ export WORKFLOW_DETECTORS=ALL # Optional export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for export WORKFLOW_DETECTORS_CALIB=ALL # Optional parameters for the workflow: Detectors to run calibration for export WORKFLOW_DETECTORS_RECO=ALL # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_DETECTORS_FLP_PROCESSING=ALL # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_DETECTORS_FLP_PROCESSING= # Optional parameters for the workflow: Detectors to run calibration for export WORKFLOW_PARAMETERS=QC,CALIB,GPU,CTF,EVENT_DISPLAY # Additional paramters for the workflow export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) export NHBPERTF=128 # Number of HBF per TF From 4086de3f9a6bcb59145162b79777f6f5c68f37a1 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 18 Oct 2021 19:25:26 +0200 Subject: [PATCH 157/236] Use $HOME instead of hardcoded patch to /home/drohr in example (#86) --- tools/epn/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/epn/run.sh b/tools/epn/run.sh index 7b6cf89..45ef175 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -9,7 +9,7 @@ export DDMODE=processing # DataDistr # Use these settings to specify a path to the workflow repository in your home dir export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/drohr/alice/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository export GEN_TOPO_LIBRARY_FILE=production/production.desc # Topology description library file to load export GEN_TOPO_WORKFLOW_NAME=synchronous-workflow # Name of workflow in topology description library From c9f8137739509c324da73d372a9eada863b75406 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 18 Oct 2021 19:31:36 +0200 Subject: [PATCH 158/236] Add IS_SIMULATED_DATA variable, and correct treatment in EMCAL raw 2 cell decoder --- production/dpl-workflow.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 4efcb17..4117d90 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -8,13 +8,14 @@ source $MYDIR/setenv.sh # --------------------------------------------------------------------------------------------------------------------- #Some additional settings used in this workflow -if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs -if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries +if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs +if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries if [ -z $CTF_METAFILES_DIR ]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing -if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers -if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="500000000"; fi # accumulate CTFs until file size reached -if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="200"; fi # but no more than given number of CTFs per file +if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers +if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="500000000"; fi # accumulate CTFs until file size reached +if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="200"; fi # but no more than given number of CTFs per file +if [ -z $IS_SIMULATED_DATA ]; then IS_SIMULATED_DATA=1; fi # processing simulated data if [ $SYNCMODE == 1 ]; then if [ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]; then export WORKFLOW_DETECTORS_MATCHING="ITSTPC,ITSTPCTRD,ITSTPCTOF"; fi # Select matchings that are enabled in sync mode @@ -100,6 +101,7 @@ TRD_TRANSFORMER_CONFIG= CPV_INPUT=raw EVE_CONFIG=" --jsons-folder $EDJSONS_DIR" MIDDEC_CONFIG= +EMCRAW2C_CONFIG= if [ $SYNCMODE == 1 ]; then if [ $BEAMTYPE == "PbPb" ]; then @@ -177,6 +179,8 @@ if ! has_detector_reco TOF; then TOF_OUTPUT=digits fi +[ $IS_SIMULATED_DATA == "1" ] && EMCRAW2C_CONFIG+=" --no-mergeHGLG" + # --------------------------------------------------------------------------------------------------------------------- # Assemble matching sources TRD_SOURCES= @@ -332,7 +336,7 @@ if [ $CTFINPUT == 0 ]; then has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N CTP-RawStreamDecoder CTP RAW) | " has_detector PHS && ! has_detector_flp_processing PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N PHOSRawToCellConverterSpec PHS REST) $DISABLE_MC | " has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $CPV_INPUT --output-type clusters --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N CPVRawToDigitConverterSpec CPV REST),$(get_N CPVClusterizerSpec CPV REST) $DISABLE_MC | " - has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST EMCREC) | " + has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells $EMCRAW2C_CONFIG $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST EMCREC) | " fi # --------------------------------------------------------------------------------------------------------------------- From 7b5beb8165f3522058eceebed8b575c1a5f33d18 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 19 Oct 2021 01:15:43 +0200 Subject: [PATCH 159/236] set CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos as default for EPNMODE --- production/dpl-workflow.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 4117d90..24f7285 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -11,7 +11,6 @@ source $MYDIR/setenv.sh if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries -if [ -z $CTF_METAFILES_DIR ]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="500000000"; fi # accumulate CTFs until file size reached if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="200"; fi # but no more than given number of CTFs per file @@ -137,6 +136,7 @@ has_processing_step ENTROPY_ENCODER && GPU_OUTPUT+=",compressed-clusters-ctf" has_detector_flp_processing CPV && CPV_INPUT=digits if [ $EPNMODE == 1 ]; then + [ -z $CTF_METAFILES_DIR ] && CTF_METAFILES_DIR="/data/epn2eos_tool/epn2eos" EVE_CONFIG+=" --eve-dds-collection-index 0" ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE" MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" @@ -180,6 +180,7 @@ if ! has_detector_reco TOF; then fi [ $IS_SIMULATED_DATA == "1" ] && EMCRAW2C_CONFIG+=" --no-mergeHGLG" +[ -z $CTF_METAFILES_DIR ] && CTF_METAFILES_DIR="/dev/null" # --------------------------------------------------------------------------------------------------------------------- # Assemble matching sources From ffa2929fb60dbef5ce7e3a9d826dedc83f0f28c3 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 19 Oct 2021 01:26:25 +0200 Subject: [PATCH 160/236] updade of private directory --- testing/private/shahoian/reproc_CTF | 1 + testing/private/shahoian/reproc_TF_CTF | 1 + testing/private/shahoian/run_ext_dpl.sh | 3 + testing/private/shahoian/run_test.sh | 49 ++++++++ testing/private/shahoian/workflows_dpl.desc | 132 ++++++++++++++++---- 5 files changed, 165 insertions(+), 21 deletions(-) create mode 100755 testing/private/shahoian/reproc_CTF create mode 100755 testing/private/shahoian/reproc_TF_CTF create mode 100755 testing/private/shahoian/run_test.sh diff --git a/testing/private/shahoian/reproc_CTF b/testing/private/shahoian/reproc_CTF new file mode 100755 index 0000000..e5ce55f --- /dev/null +++ b/testing/private/shahoian/reproc_CTF @@ -0,0 +1 @@ +cat workflows_dpl.desc | grep -v '#' | grep -v '\-TF\-' | cut -d':' -f1 | xargs ./run_ext_dpl.sh diff --git a/testing/private/shahoian/reproc_TF_CTF b/testing/private/shahoian/reproc_TF_CTF new file mode 100755 index 0000000..4bf2e4c --- /dev/null +++ b/testing/private/shahoian/reproc_TF_CTF @@ -0,0 +1 @@ +cat workflows_dpl.desc | grep -v '#' | grep '\-TF\-' | cut -d':' -f1 | xargs ./runTF_ext_dpl.sh diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index 2c42d45..ba08819 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -40,5 +40,8 @@ export MULTIPLICITY_FACTOR_REST=1 for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf + export WORKFLOWMODE=dds /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.xml +# export WORKFLOWMODE=print +# /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.sh done diff --git a/testing/private/shahoian/run_test.sh b/testing/private/shahoian/run_test.sh new file mode 100755 index 0000000..3482c9a --- /dev/null +++ b/testing/private/shahoian/run_test.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +#export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository + +export EXTINPUT=1 +export EPNMODE=1 +export SYNCMODE=0 +export CTFINPUT=0 +export SHMSIZE=128000000000 +export INFOLOGGER_SEVERITY=warning + +export EDJSONS_DIR="/home/ed/jsons" + +export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_test.desc # Topology description library file to load +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF +export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" +#export GPU_EXTRA_CONFIG="" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" + +export GEN_TOPO_IGNORE_ERROR=1 + +export CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 +export MULTIPLICITY_FACTOR_CTFENCODERS=1 +export MULTIPLICITY_FACTOR_REST=1 + +export WORKFLOWMODE=print + +for wf in "$@" +do + export GEN_TOPO_WORKFLOW_NAME=$wf + /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/test/${GEN_TOPO_WORKFLOW_NAME}.xml +done diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc index 2353799..bfa9c5c 100644 --- a/testing/private/shahoian/workflows_dpl.desc +++ b/testing/private/shahoian/workflows_dpl.desc @@ -5,6 +5,8 @@ tof-ctf-qcTOF-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=TOF production/dpl its-ctf-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS production/dpl-workflow.sh" mft-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" +its-ctf-qcITSMRG-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json production/dpl-workflow.sh" + mftHR-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" its-mft-tpc-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" @@ -41,20 +43,20 @@ tpc-trd-ctf-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU WORKFLOW_DE its-tpc-tof-trd-CTF-QC-its-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" -tpc-ctf-qcTPC-ED-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +tpc-ctf-qcTPC-ED-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" its-tpc-tof-trd-CTF-QC-its-tpc-tof-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" -its-tpc-tof-CTF-QC-its-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh" -its-tpc-CTF-QC-its-tpc-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" -tpc-ctf-qcTPC-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +its-tpc-tof-CTF-QC-its-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY ED_TRACKS=ITS,TPC,ITS-TPC ED_CLUSTERS=ITS,TPC WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh" +its-tpc-CTF-QC-its-tpc-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC ED_TRACKS=ITS,TPC,ITS-TPC ED_CLUSTERS=ITS,TPC production/dpl-workflow.sh" +tpc-ctf-qcTPC-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" -tpc-ctf-qcTPCnodig-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC QC_JSON_TPC=/home/epn/odc/files/tpcQCTasks_multinode_ALL_nodigi.json production/dpl-workflow.sh" +tpc-ctf-qcTPCnodig-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC QC_JSON_TPC=/home/epn/odc/files/tpcQCTasks_multinode_ALL_nodigi.json ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" -tpc-tof-CTF-QC-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh" +tpc-tof-CTF-QC-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" -tpc-ctf-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" +tpc-ctf-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" tpc-ctf-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" its-mft-mid-mch-CTF-QC-its-mft-20: "O2PDPSuite" reco,20,20,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT production/dpl-workflow.sh" @@ -92,25 +94,113 @@ ft0-fv0-mft-mch-TF-CTF-QC-mft-ft0-fv0-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARA ft0-fv0-TF-CTF-QC-ft0-fv0-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=FT0,FV0 WORKFLOW_DETECTORS_QC=FT0,FV0 production/dpl-workflow.sh" -mft-tpc-CTF-QC-mft-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,TPC WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -mft-tpc-CTF-QC-mft-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,TPC WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +mft-tpc-CTF-QC-mft-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,TPC WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" +mft-tpc-CTF-QC-mft-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,TPC WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" its-ctf-qcITS-notracking-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-mft-tpc-CTF-QC-its-mft-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-tpc-CTF-QC-its-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC WORKFLOW_DETECTORS_QC=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-tpc-CTF-QC-its-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC WORKFLOW_DETECTORS_QC=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +#its_notracking-mft-tpc-CTF-QC-its-mft-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +#its_notracking-tpc-CTF-QC-its-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC WORKFLOW_DETECTORS_QC=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +#its_notracking-tpc-CTF-QC-its-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC WORKFLOW_DETECTORS_QC=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +#its_notracking-tpc-tof-CTF-QC-its-tof-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +#its_notracking-tpc-tof-CTF-QC-its-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50-ctfmeta: "O2PDPSuite" reco,50,50,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +#its_notracking-mft-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +#its_notracking-mft-TF-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" + +#--- + +itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-trd-tof-mid-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-CTF-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +ft0-fv0-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED_noits-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=MFT,MCH ED_CLUSTERS=MFT,MCH production/dpl-workflow.sh" +ft0FLP-fv0FLP-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED_noits-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=MFT,MCH ED_CLUSTERS=MFT,MCH production/dpl-workflow.sh" + +ft0-fv0-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,MCH ED_CLUSTERS=ITS,MFT,MCH production/dpl-workflow.sh" +ft0FLP-fv0FLP-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,MCH ED_CLUSTERS=ITS,MFT,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-5: "O2PDPSuite" reco,5,5,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-10: "O2PDPSuite" reco,10,10,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" + +ft0-fv0-its-mftTR-mid-mch_noreco-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT ED_CLUSTERS=ITS,MFT production/dpl-workflow.sh" +ft0FLP-fv0FLP-its-mftTR-mid-mch_noreco-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT ED_CLUSTERS=ITS,MFT production/dpl-workflow.sh" + + +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-5: "O2PDPSuite" reco,5,5,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-10: "O2PDPSuite" reco,10,10,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" + + + + +#--- tof QC suppressed + +itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos production/dpl-workflow.sh" +its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + + +its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +itsCOSM-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS N_ITSTRK=25 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-TF-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS N_ITSTRK=25 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +#---- +mft_decoder2digits_for_noise_calib-30: "O2PDPSuite" reco,30,30,"testing/private/shahoian/mft_decoder2digits_for_noise_calib.sh" + +its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-TF-CTF-QC-its-mft-tpc-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 production/dpl-workflow.sh" -its_notracking-tpc-tof-CTF-QC-its-tof-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-tpc-tof-CTF-QC-its-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +#---------------------- +mft-ctf-qc-raw-cluster-MFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" +mft-ctf-qc-raw-digit-cluster-MFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" -its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50-ctfmeta: "O2PDPSuite" reco,50,50,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" +ctf_itsCOSM-mftTR-tpc-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +ctf_itsCOSM-mftTR-tpcCPU-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -its_notracking-mft-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -its_notracking-mft-TF-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" From 9b39bd7bf91c16cdf13325510a6ac2b51aa5b412 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 19 Oct 2021 09:39:29 +0200 Subject: [PATCH 161/236] Use $HOME instead of hardcoded path --- testing/private/shahoian/run_ext.sh | 2 +- testing/private/shahoian/run_ext_dpl.sh | 2 +- testing/private/shahoian/run_test.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/testing/private/shahoian/run_ext.sh b/testing/private/shahoian/run_ext.sh index df6513a..b3bf684 100755 --- a/testing/private/shahoian/run_ext.sh +++ b/testing/private/shahoian/run_ext.sh @@ -9,7 +9,7 @@ export DDMODE=processing # DataDistr # Use these settings to specify a path to the workflow repository in your home dir export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows.desc # Topology description library file to load export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index ba08819..2dc7bd2 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -10,7 +10,7 @@ export DDMODE=processing # DataDistr # Use these settings to specify a path to the workflow repository in your home dir export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository export EXTINPUT=1 export EPNMODE=1 diff --git a/testing/private/shahoian/run_test.sh b/testing/private/shahoian/run_test.sh index 3482c9a..82f9bfc 100755 --- a/testing/private/shahoian/run_test.sh +++ b/testing/private/shahoian/run_test.sh @@ -10,7 +10,7 @@ export DDMODE=processing # DataDistr # Use these settings to specify a path to the workflow repository in your home dir export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository export EXTINPUT=1 export EPNMODE=1 From e51c82fcb8bf561797fcf47085c6ede37595d56b Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 19 Oct 2021 10:11:09 +0200 Subject: [PATCH 162/236] Fix typo --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 24f7285..6e58ef3 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -53,7 +53,7 @@ done if [ $SYNCMODE == 1 ]; then # Add default steps for synchronous mode add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ENTROPY_ENCODER else # Add default steps for async mode - for i in $LIST_OF_ASYNC_RECO_STEPSMID; do + for i in $LIST_OF_ASYNC_RECO_STEPS; do has_detector_reco $i && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ${i}_RECO done fi From 02493a59548b45b86601bb149a60fe658a2b0386 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 19 Oct 2021 09:24:08 +0200 Subject: [PATCH 163/236] Revert "set CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos as default for EPNMODE" This reverts commit 7b5beb8165f3522058eceebed8b575c1a5f33d18. --- production/dpl-workflow.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 6e58ef3..83e1d76 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -11,6 +11,7 @@ source $MYDIR/setenv.sh if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries +if [ -z $CTF_METAFILES_DIR ]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="500000000"; fi # accumulate CTFs until file size reached if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="200"; fi # but no more than given number of CTFs per file @@ -136,7 +137,6 @@ has_processing_step ENTROPY_ENCODER && GPU_OUTPUT+=",compressed-clusters-ctf" has_detector_flp_processing CPV && CPV_INPUT=digits if [ $EPNMODE == 1 ]; then - [ -z $CTF_METAFILES_DIR ] && CTF_METAFILES_DIR="/data/epn2eos_tool/epn2eos" EVE_CONFIG+=" --eve-dds-collection-index 0" ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE" MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" @@ -180,7 +180,6 @@ if ! has_detector_reco TOF; then fi [ $IS_SIMULATED_DATA == "1" ] && EMCRAW2C_CONFIG+=" --no-mergeHGLG" -[ -z $CTF_METAFILES_DIR ] && CTF_METAFILES_DIR="/dev/null" # --------------------------------------------------------------------------------------------------------------------- # Assemble matching sources From 0779dfba1fbab114cd63c63d13c7a0a1e546cc1e Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 19 Oct 2021 09:25:15 +0200 Subject: [PATCH 164/236] EPN specific folders should be set in /home/epn/pdp/gen_topo.sh --- tools/epn/gen_topo.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh index 4427475..8ffdb85 100755 --- a/tools/epn/gen_topo.sh +++ b/tools/epn/gen_topo.sh @@ -16,11 +16,12 @@ if [ -z "$MULTIPLICITY_FACTOR_CTFENCODERS" ]; then echo \$MULTIPLICITY_FACTOR_CT if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then echo \$MULTIPLICITY_FACTOR_REST missing; exit 1; fi # Process multiplicity scaling parameter # Settings for some EPN paths / names / etc. -export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc files -export INRAWCHANNAME=tf-builder-pipe-0 # Pipe name to get data from TfBuilder -export CTF_DIR=/data/tf/compressed # Output directory for CTFs -export GEN_TOPO_WORKDIR=$HOME/gen_topo/${GEN_TOPO_PARTITION}_${GEN_TOPO_ONTHEFLY} # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir -export GEN_TOPO_STDERR_LOGGING=1 +[ -z "$FILEWORKDIR" ] && export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc files +[ -z "$INRAWCHANNAME" ] && export INRAWCHANNAME=tf-builder-pipe-0 # Pipe name to get data from TfBuilder +[ -z "$CTF_DIR" ] && export CTF_DIR=/data/tf/compressed # Output directory for CTFs +[ -z "$CTF_METAFILES_DIR" ] && [ "0$WORKFLOWMODE" != "0print" ] && export CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos #CTF Metafiles directory +[ -z "$GEN_TOPO_WORKDIR" ] && export GEN_TOPO_WORKDIR=$HOME/gen_topo/${GEN_TOPO_PARTITION}_${GEN_TOPO_ONTHEFLY} # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir +[ -z "$GEN_TOPO_STDERR_LOGGING" ] && export GEN_TOPO_STDERR_LOGGING=1 # Load required module and run gen_topo_o2dataprocessing (PDP part of this script) module load ODC O2DataProcessing 1>&2 || { echo Error loading ODC / O2DataProcessing 1>&2; exit 1; } From e912156fb63d1b355f33dcf6828084ad1bb7d6a2 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 19 Oct 2021 23:41:58 +0200 Subject: [PATCH 165/236] Sync changes from O2 repository --- production/dpl-workflow.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 83e1d76..0277995 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -65,7 +65,7 @@ ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm- if [ $EPNMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" -else +elif [ "0$ENABLE_METRICS" != "01" ]; then ARGS_ALL+=" --monitoring-backend no-op://" fi if [ $EXTINPUT == 1 ] || [ $NUMAGPUIDS == 1 ]; then @@ -91,6 +91,7 @@ GPU_INPUT=zsraw GPU_OUTPUT=tracks,clusters GPU_CONFIG= GPU_CONFIG_KEY= +TOF_CONFIG= TOF_INPUT=raw TOF_OUTPUT=clusters ITS_CONFIG= @@ -135,6 +136,7 @@ fi has_processing_step ENTROPY_ENCODER && GPU_OUTPUT+=",compressed-clusters-ctf" has_detector_flp_processing CPV && CPV_INPUT=digits +! has_detector_flp_processing TOF && TOF_CONFIG+=" --ignore-dist-stf" if [ $EPNMODE == 1 ]; then EVE_CONFIG+=" --eve-dds-collection-index 0" @@ -186,12 +188,12 @@ fi TRD_SOURCES= TOF_SOURCES= TRACK_SOURCES= -has_detector_matching ITSTPC && add_comma_separated TRACK_SOURCES "ITS-TPC" -has_detector_matching TPCTRD && { add_comma_separated TRD_SOURCES TPC; add_comma_separated TRACK_SOURCES "TPC-TRD"; } -has_detector_matching ITSTPCTRD && { add_comma_separated TRD_SOURCES ITS-TPC; add_comma_separated TRACK_SOURCES "ITS-TPC-TRD"; } -has_detector_matching TPCTOF && { add_comma_separated TOF_SOURCES TPC; add_comma_separated TRACK_SOURCES "TPC-TOF"; } -has_detector_matching ITSTPCTOF && { add_comma_separated TOF_SOURCES ITS-TPC; add_comma_separated TRACK_SOURCES "ITS-TPC-TOF"; } -has_detector_matching MFTMCH && add_comma_separated TRACK_SOURCES "MFT-MCH" +has_detectors_reco ITS TPC && has_detector_matching ITSTPC && add_comma_separated TRACK_SOURCES "ITS-TPC" +has_detectors_reco TPC TRD && has_detector_matching TPCTRD && { add_comma_separated TRD_SOURCES TPC; add_comma_separated TRACK_SOURCES "TPC-TRD"; } +has_detectors_reco ITS TPC TRD && has_detector_matching ITSTPCTRD && { add_comma_separated TRD_SOURCES ITS-TPC; add_comma_separated TRACK_SOURCES "ITS-TPC-TRD"; } +has_detectors_reco TPC TOF && has_detector_matching TPCTOF && { add_comma_separated TOF_SOURCES TPC; add_comma_separated TRACK_SOURCES "TPC-TOF"; } +has_detectors_reco ITS TPC TOF && has_detector_matching ITSTPCTOF && { add_comma_separated TOF_SOURCES ITS-TPC; add_comma_separated TRACK_SOURCES "ITS-TPC-TOF"; } +has_detectors_reco MFT MCH && has_detector_matching MFTMCH && add_comma_separated TRACK_SOURCES "MFT-MCH" for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do if [[ $LIST_OF_ASYNC_RECO_STEPS =~ (^| )${det}( |$) ]]; then has_processing_step ${det}_RECO && add_comma_separated TRACK_SOURCES "$det" @@ -342,7 +344,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Common reconstruction workflows (has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:${N_TPCTRK:-1} $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " -(has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST) | " +(has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $TOF_CONFIG --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST) | " has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream $DISABLE_ROOT_OUTPUT $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY;$ITSMFT_FILES\" --pipeline $(get_N its-tracker ITS REST ITSTRK) | " has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS) | " has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST) | " From ed8dbb00a712edb699031d307819d9d706f04bdc Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 20 Oct 2021 14:29:37 +0200 Subject: [PATCH 166/236] allow adding global + arbitrary extra QC jsons --- common/setenv.sh | 18 ++- production/dpl-workflow.sh | 2 +- production/qc-workflow.sh | 18 +++ .../shahoian/its-mft-tpc_reco_ctf_qc-uni.sh | 107 --------------- testing/private/shahoian/reco_ctf_qc-uni.sh | 122 ------------------ testing/private/shahoian/workflows.desc | 90 ------------- 6 files changed, 32 insertions(+), 325 deletions(-) delete mode 100755 testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh delete mode 100755 testing/private/shahoian/reco_ctf_qc-uni.sh delete mode 100644 testing/private/shahoian/workflows.desc diff --git a/common/setenv.sh b/common/setenv.sh index b71fb01..6e8bd0b 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -8,6 +8,9 @@ if [ $? != 0 ]; then fi LIST_OF_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH,CTP" + +LIST_OF_GLORECO="ITSTPC,TPCTRD,ITSTPCTRD,TPCTOF,ITSTPCTOF,MFTMCH,PRIMVTX,SECVTX" + # Detectors used in the workflow / enabled parameters if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS=$LIST_OF_DETECTORS; fi if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi @@ -86,11 +89,6 @@ has_detector() [[ $WORKFLOW_DETECTORS =~ (^|,)"$1"(,|$) ]] } -has_detector_qc() -{ - has_detector $1 && [[ $WORKFLOW_DETECTORS_QC =~ (^|,)"$1"(,|$) ]] -} - has_detector_calib() { has_detector $1 && [[ $WORKFLOW_DETECTORS_CALIB =~ (^|,)"$1"(,|$) ]] @@ -116,6 +114,16 @@ has_detector_matching() [[ $WORKFLOW_DETECTORS_MATCHING =~ (^|,)"ALL"(,|$) ]] || [[ $WORKFLOW_DETECTORS_MATCHING =~ (^|,)"$1"(,|$) ]] } +has_detector_qc() +{ + has_detector $1 && [[ $WORKFLOW_DETECTORS_QC =~ (^|,)"$1"(,|$) ]] +} + +has_matching_qc() +{ + has_detector_matching $1 && [[ $WORKFLOW_DETECTORS_QC =~ (^|,)"$1"(,|$) ]] +} + workflow_has_parameter() { [[ $WORKFLOW_PARAMETERS =~ (^|,)"$1"(,|$) ]] diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 0277995..2457435 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -48,7 +48,7 @@ has_processing_step() [[ $WORKFLOW_EXTRA_PROCESSING_STEPS =~ (^|,)"$1"(,|$) ]] } -for i in ITSTPC TPCTRD ITSTPCTRD TPCTOF ITSTPCTOF MFTMCH PRIMVTX SECVTX; do +for i in `echo $LIST_OF_GLORECO | sed "s/,/ /g"`; do has_processing_step MATCH_$i && add_comma_separated WORKFLOW_DETECTORS_MATCHING $i # Enable extra matchings requested via WORKFLOW_EXTRA_PROCESSING_STEPS done if [ $SYNCMODE == 1 ]; then # Add default steps for synchronous mode diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index b9b7ddf..8412743 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -9,6 +9,9 @@ [ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json [ -z "$QC_JSON_MCH" ] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json +[ -z "$QC_JSON_PRIMVTX" ] && QC_JSON_PRIMVTX=/home/shahoian/jsons/vertexing-qc.json + + [ -z "$QC_HOST" ] && QC_HOST=localhost if [ -z "$WORKFLOW" ] || [ -z "$MYDIR" ]; then @@ -31,6 +34,21 @@ for i in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do fi done +# matching / vertexing QC +for i in `echo $LIST_OF_GLORECO | sed "s/,/ /g"`; do + GLO_JSON_FILE="QC_JSON_$i" + if has_detector_matching $i && has_matching_qc $i && [ ! -z "${!GLO_JSON_FILE}" ]; then + JSON_FILES+=" ${!GLO_JSON_FILE}" + OUTPUT_SUFFIX+="-$i" + fi +done + +# arbitrary extra QC +if [ ! -z $QC_JSON_EXTRA ]; then + JSON_FILES+=" ${QC_JSON_EXTRA}" + OUTPUT_SUFFIX+="-EXTRA" +fi + if [ ! -z "$JSON_FILES" ]; then mkdir -p $GEN_TOPO_WORKDIR/json_cache if [ "0$GEN_TOPO_ONTHEFLY" == "01" ]; then diff --git a/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh b/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh deleted file mode 100755 index b24d194..0000000 --- a/testing/private/shahoian/its-mft-tpc_reco_ctf_qc-uni.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash - -# accounts for externally set WORKFLOW_DETECTORS, SHMSIZE, SAVECTF, CTF_DIR, QCJSON, WORKFLOWMODE - -# HACK -###WORKFLOW_DETECTORS=`echo $WORKFLOW_DETECTORS | tr _ ,` - -source /home/shahoian/alice/O2DataProcessing/common/setenv.sh - -# EPN script. Including CTF creation and QC. -export GPUTYPE=HIP -export GPUMEMSIZE=$(( 24 << 30 )) -export HOSTMEMSIZE=$(( 5 << 30 )) - -SEVERITY=INFO -INFOLOGGER_SEVERITY=WARNING - -# global args -ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -#ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE " - -# raw input proxy channel -PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1" -# raw input data filtered by the proxy -PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -# add detectors -has_detector ITS && PROXY_INSPEC+=";I:ITS/RAWDATA" -has_detector MFT && PROXY_INSPEC+=";M:MFT/RAWDATA" -has_detector TPC && PROXY_INSPEC+=";T:TPC/RAWDATA" - -TPC_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION;T:TPC/RAWDATA" -TPC_OUTPUT="clusters,tracks,disable-writer" -if [ $SAVECTF == 1 ]; then - TPC_OUTPUT+=",encoded-clusters" -fi - -# directory for external files -#FILEWORKDIR="/home/epn/odc/files" - -# Clusterization dictionaries path -ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" -MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" - -MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" - -# CTF compression dictionary -CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" -# min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="2000000" -# output directory for CTF files -#CTF_DIR="/tmp/eosbuffer" - -# key/values config string -CONFKEYVAL="NameConf.mDirGRP=${FILEWORKDIR};NameConf.mDirGeom=${FILEWORKDIR}" - -# number of decoding pipelines and threads per pipeline -NITSDECPIPELINES=6 -NITSDECTHREADS=2 -NMFTDECPIPELINES=6 -NMFTDECTHREADS=2 - -# number of reconstruction pipelines and threads per pipeline -NITSRECPIPELINES=2 -NMFTRECPIPELINES=2 - -# number of compression pipelines -NITSENCODERPIPELINES=1 -NMFTENCODERPIPELINES=1 - -# uncomment this to disable intermediate reconstruction output -#DISABLE_RECO_OUTPUT=" --disable-root-output " - -HOST=localhost - -WORKFLOW="o2-dpl-raw-proxy -b ${ARGS_ALL} --dataspec \"${PROXY_INSPEC}\" --channel-config \"${PROXY_CHANNEL}\" | " -has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:${NITSDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${ITSCLUSDICT}\" | " -has_detector ITS && WORKFLOW+="o2-its-reco-workflow -b ${ARGS_ALL} ${DISABLE_RECO_OUTPUT} --trackerCA --tracking-mode sync --disable-mc --clusters-from-upstream --pipeline its-tracker:${NITSRECPIPELINES} --its-dictionary-path \"${ITSCLUSDICT}\" --configKeyValues \"${CONFKEYVAL}\" | " -# -has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:${NMFTDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${MFTCLUSDICT}\" --runmft --noise-file \"${MFT_NOISE}\" | " -# -has_detector TPC && WORKFLOW+="o2-tpc-raw-to-digits-workflow -b ${ARGS_ALL} --input-spec \"${TPC_INSPEC}\" --configKeyValues \"TPCDigitDump.LastTimeBin=1000\" --pipeline tpc-raw-to-digits-0:6 | " -has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow -b ${ARGS_ALL} --input-type digitizer --output-type $TPC_OUTPUT --disable-mc --pipeline tpc-tracker:4 --environment ROCR_VISIBLE_DEVICES={timeslice0} --configKeyValues \"align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;GPU_proc.deviceNum=0;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;GPU_proc.memoryScalingFactor=3;${CONFKEYVAL}\" | " -# -if [ $SAVECTF == 1 ]; then - has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline its-entropy-encoder:${NITSENCODERPIPELINES} | " - has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline mft-entropy-encoder:${NMFTENCODERPIPELINES} --runmft | " - WORKFLOW+="o2-ctf-writer-workflow -b ${ARGS_ALL} --configKeyValues \"${CONFKEYVAL}\" --no-grp --onlyDet $WORKFLOW_DETECTORS --ctf-dict \"${CTF_DICT}\" --output-dir \"$CTF_DIR\" --min-file-size ${CTF_MINSIZE} | " -fi - -if [ -n "$QCJSON" ]; then - WORKFLOW+="o2-qc -b ${ARGS_ALL} --config json://$QCJSON --local --host $HOST | " -fi - -WORKFLOW+=" o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi - - - diff --git a/testing/private/shahoian/reco_ctf_qc-uni.sh b/testing/private/shahoian/reco_ctf_qc-uni.sh deleted file mode 100755 index 8a9e3b6..0000000 --- a/testing/private/shahoian/reco_ctf_qc-uni.sh +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/bash - -# accounts for externally set WORKFLOW_DETECTORS, SHMSIZE, SAVECTF, CTF_DIR, QCJSON, WORKFLOWMODE - -# HACK -###WORKFLOW_DETECTORS=`echo $WORKFLOW_DETECTORS | tr _ ,` - -source /home/shahoian/alice/O2DataProcessing/common/setenv.sh - -# EPN script. Including CTF creation and QC. -export GPUTYPE=HIP -export GPUMEMSIZE=$(( 24 << 30 )) -export HOSTMEMSIZE=$(( 5 << 30 )) - -SEVERITY=INFO -INFOLOGGER_SEVERITY=WARNING - -# global args -#ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL=" --session default --severity $SEVERITY --infologger-severity $INFOLOGGER_SEVERITY --shm-segment-size $SHMSIZE " - -# raw input proxy channel -PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1" -# raw input data filtered by the proxy -PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -# add detectors -has_detector ITS && PROXY_INSPEC+=";I:ITS/RAWDATA" -has_detector MFT && PROXY_INSPEC+=";M:MFT/RAWDATA" -has_detector TPC && PROXY_INSPEC+=";T:TPC/RAWDATA" -has_detector TOF && PROXY_INSPEC+=";X:TOF/CRAWDATA" -has_detector MID && PROXY_INSPEC+=";A:MID/RAWDATA" - -# CTF compression dictionary -CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" -# min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="2000000" -# output directory for CTF files -#CTF_DIR="/tmp/eosbuffer" - -TPC_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION;T:TPC/RAWDATA" -TPC_OUTPUT="clusters,tracks,disable-writer" -TPC_EXTRAOPT="" -if [ $SAVECTF == 1 ]; then - TPC_OUTPUT+=",encoded-clusters" - TPC_EXTRAOPT+=" --ctf-dict $CTF_DICT " -fi - -# directory for external files -#FILEWORKDIR="/home/epn/odc/files" - -# Clusterization dictionaries path -ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" -MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" - -MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" - -# key/values config string -CONFKEYVAL="NameConf.mDirGRP=${FILEWORKDIR};NameConf.mDirGeom=${FILEWORKDIR}" - -# number of decoding pipelines and threads per pipeline -NITSDECPIPELINES=6 -NITSDECTHREADS=2 -NMFTDECPIPELINES=6 -NMFTDECTHREADS=2 - -NMIDDECPIPELINES=1 - -# number of reconstruction pipelines and threads per pipeline -NITSRECPIPELINES=2 -NMFTRECPIPELINES=2 -NTOFRECPIPELINES=1 - -# number of compression pipelines -NITSENCODERPIPELINES=1 -NMFTENCODERPIPELINES=1 -NTOFENCODERPIPELINES=1 -NMIDENCODERPIPELINES=1 - -# uncomment this to disable intermediate reconstruction output -#DISABLE_RECO_OUTPUT=" --disable-root-output " - -HOST=localhost - -WORKFLOW="o2-dpl-raw-proxy -b ${ARGS_ALL} --dataspec \"${PROXY_INSPEC}\" --channel-config \"${PROXY_CHANNEL}\" | " -has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NITSDECTHREADS} --pipeline its-stf-decoder:${NITSDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${ITSCLUSDICT}\" | " -has_detector ITS && WORKFLOW+="o2-its-reco-workflow -b ${ARGS_ALL} ${DISABLE_RECO_OUTPUT} --trackerCA --tracking-mode sync --disable-mc --clusters-from-upstream --pipeline its-tracker:${NITSRECPIPELINES} --its-dictionary-path \"${ITSCLUSDICT}\" --configKeyValues \"${CONFKEYVAL}\" | " -# -has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow -b ${ARGS_ALL} --nthreads ${NMFTDECTHREADS} --pipeline mft-stf-decoder:${NMFTDECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" --dict-file \"${MFTCLUSDICT}\" --runmft --noise-file \"${MFT_NOISE}\" | " -# -has_detector TPC && WORKFLOW+="o2-tpc-raw-to-digits-workflow -b ${ARGS_ALL} --input-spec \"${TPC_INSPEC}\" --configKeyValues \"TPCDigitDump.LastTimeBin=1000\" --pipeline tpc-raw-to-digits-0:6 | " -has_detector TPC && WORKFLOW+="o2-tpc-reco-workflow -b ${ARGS_ALL} --input-type digitizer --output-type $TPC_OUTPUT ${TPC_EXTRAOPT} --disable-mc --pipeline tpc-tracker:4 --environment ROCR_VISIBLE_DEVICES={timeslice0} --configKeyValues \"align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;GPU_proc.deviceNum=0;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;GPU_proc.memoryScalingFactor=3;${CONFKEYVAL}\" | " -# -has_detector TOF && WORKFLOW+="o2-tof-reco-workflow -b ${ARGS_ALL} --input-type raw --output-type clusters --pipeline TOFClusterer:${NTOFRECPIPELINES} --configKeyValues \"${CONFKEYVAL}\" | " -# -has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow -b $ARGS_ALL --pipeline --MIDRawDecoder:${NMIDDECPIPELINES} --feeId-config-file \"$FILEWORKDIR/mid-feeId_mapper.txt\" --configKeyValues \"${CONFKEYVAL}\" | " - -if [ $SAVECTF == 1 ]; then - has_detector ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline its-entropy-encoder:${NITSENCODERPIPELINES} | " - has_detector MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline mft-entropy-encoder:${NMFTENCODERPIPELINES} --runmft | " - has_detector TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline tof-entropy-encoder:${NTOFENCODERPIPELINES} | " - has_detector MID && WORKFLOW+="o2-mid-entropy-encoder-workflow -b ${ARGS_ALL} --ctf-dict \"${CTF_DICT}\" --pipeline mid-entropy-encoder:${NMIDENCODERPIPELINES} | " - WORKFLOW+="o2-ctf-writer-workflow -b ${ARGS_ALL} --configKeyValues \"${CONFKEYVAL}\" --no-grp --onlyDet $WORKFLOW_DETECTORS --ctf-dict \"${CTF_DICT}\" --output-dir \"$CTF_DIR\" --min-file-size ${CTF_MINSIZE} | " -fi - -if [ -n "$QCJSON" ]; then - WORKFLOW+="o2-qc -b ${ARGS_ALL} --config json://$QCJSON --local --host $HOST | " -fi - -WORKFLOW+=" o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi - - - diff --git a/testing/private/shahoian/workflows.desc b/testing/private/shahoian/workflows.desc deleted file mode 100644 index f2faa10..0000000 --- a/testing/private/shahoian/workflows.desc +++ /dev/null @@ -1,90 +0,0 @@ -tpc-ctf-qcTPC-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-ctf2eos-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qcITS-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qcMFT-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-locrec-ctf-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-locrec-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS SAVECTF=0 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -tpc-ctf-qcTPC-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-ctf2eos-qcTPC-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOW_PARAMETERS=CTF WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qcITS-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/jliu/itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qcMFT-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/epn/odc/files/qc-mft-cluster.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPC-58: "O2PDPSuite" reco,58,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -# -#tpc-ctf-qcTPCnodigi-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#its-mft-tpc-ctf-qcTPCnodigi-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#its-tpc-ctf-qcTPCnodigi-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#mft-tpc-ctf-qcTPCnodigi-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -#tpc-ctf-qcTPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#its-mft-tpc-ctf-qcTPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#its-tpc-ctf-qcTPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -#mft-tpc-ctf-qcTPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL_no_digi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -#its-tpc-ctf-qcITS_TPCnodigi-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoDigi.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcITS_TPC-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpc.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcITS_TPCnoClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc_its_tpcNoClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -# - -tpc-ctf-qcTPCMNAll-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcTPCMNAll-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCMNAll-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -ist-mft-tpc-ctf-qcTPCMNAll-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-tpc-ctf-qcTPCMNAll-itsEPNv2-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCMNAll-mftClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPCMNAll-itsEPNv2-mftClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-tofglobalrun-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-tofglobalrun-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -mft-tpc-tof-ctf-qcTPCMNAll-mftClus-tofglobalrun-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -# - - -tpc-ctf-qcTPCMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-ctf-qcTPCMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -ist-mft-tpc-ctf-qcTPCMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-tpc-ctf-qcTPCMNAll-itsEPNv2-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -mft-tpc-ctf-qcTPCMNAll-mftClus-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-ctf-qcTPCMNAll-itsEPNv2-mftClus-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -tpc-tof-ctf-qctpcMNAll-tofglobalrun-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -tpc-tof-ctf-qctpcMNAll-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=TPC,TOF SAVECTF=1 QCJSON=/home/epn/odc/files/tpcQCTasks_multinode_ALL.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-tofglobalrun-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-tpc-tof-ctf-qcTPCMNAll-itsEPNv2-mftClus-tofglobalrun-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - - -its-mft-ctf-qc-itsEPNv2-mftClus-59: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qc-itsEPNv2-mftClus-59mon: "O2PDPSuite" reco,59,54,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qc-itsEPNv2-mftClus-20: "O2PDPSuite" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" -its-mft-ctf-qc-itsEPNv2-mftClus-20mon: "O2PDPSuite" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -its-mft-mid-ctf-qc-itsEPNv2-mftClus-20: "O2PDPSuite" reco,20,17,"WORKFLOW_DETECTORS=ITS,MFT,MID SAVECTF=1 QCJSON=/home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -mid-20: "O2PDPSuite" reco,20,17,"WORKFLOW_DETECTORS=MID SAVECTF=1 DISABLE_RECO_OUTPUT=\" --disable-root-output \" SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/reco_ctf_qc-uni.sh" - -itsqaFlpHack: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS SHMSIZE=128000000000 WORKFLOWMODE=dds testing/private/shahoian/itsqaHack.sh" From d8267c786b173b00daa72df8d6770a92091ac19a Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 21 Oct 2021 01:03:56 +0200 Subject: [PATCH 167/236] pass option _ENC_MEMFACT=F factor for memory allocation to entropy encoders --- production/dpl-workflow.sh | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 2457435..7eeb533 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -219,6 +219,7 @@ get_N() # USAGE: get_N [processor-name] [DETECTOR_NAME] [RAW|CTF|REST] [optional local NAME_DEFAULT="N_$4" echo $1:${!NAME_PROC:-$((${!NAME_FACTOR} * ${!NAME_DET:-1} * ${!NAME_DEFAULT:-1}))} } + math_max() { echo $(($1 > $2 ? $1 : $2)) @@ -371,22 +372,22 @@ fi # Entropy encoding / ctf creation workflows - disabled in async mode if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then # Entropy encoder workflows - has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF) | " - has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N ft0-entropy-encoder FT0 CTF) | " - has_detector_ctf FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N fv0-entropy-encoder FV0 CTF) | " - has_detector_ctf MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N mid-entropy-encoder MID CTF) | " - has_detector_ctf MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N mch-entropy-encoder MCH CTF) | " - has_detector_ctf PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N phos-entropy-encoder PHS CTF) | " - has_detector_ctf CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N cpv-entropy-encoder CPV CTF) | " - has_detector_ctf EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N emcal-entropy-encoder EMC CTF) | " - has_detector_ctf ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N zdc-entropy-encoder ZDC CTF) | " - has_detector_ctf FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N fdd-entropy-encoder FDD CTF) | " - has_detector_ctf HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N hmpid-entropy-encoder HMP CTF) | " - has_detector_ctf TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N tof-entropy-encoder TOF CTF) | " - has_detector_ctf ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N its-entropy-encoder ITS CTF) | " - has_detector_ctf TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N trd-entropy-encoder TRD CTF TRDENT) | " - has_detector_ctf TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline $(get_N tpc-entropy-encoder TPC CTF TPCENT) | " - has_detector_ctf CTP && WORKFLOW+="o2-ctp-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N its-entropy-encoder CTP CTF)| " + has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${MFT_ENC_MEMFACT:-1.5} --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF) | " + has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${FT0_ENC_MEMFACT:-1.5} --pipeline $(get_N ft0-entropy-encoder FT0 CTF) | " + has_detector_ctf FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${FV0_ENC_MEMFACT:-1.5} --pipeline $(get_N fv0-entropy-encoder FV0 CTF) | " + has_detector_ctf MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${MID_ENC_MEMFACT:-1.5} --pipeline $(get_N mid-entropy-encoder MID CTF) | " + has_detector_ctf MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${MCH_ENC_MEMFACT:-1.5} --pipeline $(get_N mch-entropy-encoder MCH CTF) | " + has_detector_ctf PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${PHS_ENC_MEMFACT:-1.5} --pipeline $(get_N phos-entropy-encoder PHS CTF) | " + has_detector_ctf CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${CPV_ENC_MEMFACT:-1.5} --pipeline $(get_N cpv-entropy-encoder CPV CTF) | " + has_detector_ctf EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${EMC_ENC_MEMFACT:-1.5} --pipeline $(get_N emcal-entropy-encoder EMC CTF) | " + has_detector_ctf ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${ZDC_ENC_MEMFACT:-1.5} --pipeline $(get_N zdc-entropy-encoder ZDC CTF) | " + has_detector_ctf FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${FDD_ENC_MEMFACT:-1.5} --pipeline $(get_N fdd-entropy-encoder FDD CTF) | " + has_detector_ctf HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${HMP_ENC_MEMFACT:-1.5} --pipeline $(get_N hmpid-entropy-encoder HMP CTF) | " + has_detector_ctf TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${TOF_ENC_MEMFACT:-1.5} --pipeline $(get_N tof-entropy-encoder TOF CTF) | " + has_detector_ctf ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${ITS_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder ITS CTF) | " + has_detector_ctf TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${TRD_ENC_MEMFACT:-1.5} --pipeline $(get_N trd-entropy-encoder TRD CTF TRDENT) | " + has_detector_ctf TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --mem-factor ${TPC_ENC_MEMFACT:-1.5} --pipeline $(get_N tpc-entropy-encoder TPC CTF TPCENT) | " + has_detector_ctf CTP && WORKFLOW+="o2-ctp-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${CTP_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder CTP CTF)| " # CTF / dictionary writer workflow if [ $SAVECTF == 1 ]; then From 86565961a280fb6d9fabfcea93c24305f037cf40 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 21 Oct 2021 01:08:37 +0200 Subject: [PATCH 168/236] update readme --- production/README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/production/README.md b/production/README.md index d1b9623..c22c64e 100644 --- a/production/README.md +++ b/production/README.md @@ -12,12 +12,12 @@ If processing is to be disabled, please use the `no-processing` workflow in `no- You can use the following options to change the workflow behavior: - `DDMODE` (default `processing`) : Must be `processing` (synchronous processing) or `processing-disk` (synchronous processing + storing of raw time frames to disk, not that this is the raw time frame not the CTF!). The `DDMODE` `discard` and `disk` are not compatible with the synchronous processing workflow, you must use the `no-processing.desc` workflow instead!. - `WORKFLOW_DETECTORS` (default `ALL`) : Comma-separated list of detectors for which the processing is enabled. If these are less detectors than participating in the run, data of the other detectors is ignored. If these are more detectors than participating in the run, the processes for the additional detectors will be started but will not do anything. -- `WORKFLOW_DETECTORS_QC` (default `ALL`) : Comma-separated list of detectors for which to run QC, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the QC is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=QC` is set. +- `WORKFLOW_DETECTORS_QC` (default `ALL`) : Comma-separated list of detectors for which to run QC, can be a subset of `WORKFLOW_DETECTORS` (for standalone detectors QC) and `WORKFLOW_DETECTORS_MATCHING` (for matching/vertexing QC). If a detector (matching/vertexing step) is not listed in `WORKFLOW_DETECTORS` (`WORKFLOW_DETECTORS_MATCHING`), the QC is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=QC` is set. - `WORKFLOW_DETECTORS_CALIB` (default `ALL`) : Comma-separated list of detectors for which to run calibration, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the calibration is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=CALIB` is set. - `WORKFLOW_DETECTORS_FLP_PROCESSING` (default `TOF` for sync processing on EPN, `NONE` otherwise) : Signals that these detectors have processing on the FLP enabled. The corresponding steps are thus inactive in the EPN epl-workflow, and the raw-proxy is configured to receive the FLP-processed data instead of the raw data in that case. - `WORKFLOW_DETECTORS_RECO` (default `ALL`) : Comma-separated list of detectors for which to run reconstruction. - `WORKFLOW_DETECTORS_CTF` (default `ALL`) : Comma-separated list of detectors to include in CTF. -- `WORKFLOW_DETECTORS_MATCHING` (default selected corresponding to default workflow for sync or async mode respectively) : Comma-separated list of matching / vertexing algorithms to run. Use `ALL` to enable all of them. Currently supported options: `ITSTPC`, `TPCTRD`, `ITSTPCTRD`, `TPCTOF`, `ITSTPCTOF`, `MFTMCH`, `PRIMVTX`, `SECVTX`. +- `WORKFLOW_DETECTORS_MATCHING` (default selected corresponding to default workflow for sync or async mode respectively) : Comma-separated list of matching / vertexing algorithms to run. Use `ALL` to enable all of them. Currently supported options (see LIST_OF_GLORECO in common/setenv.h): `ITSTPC`, `TPCTRD`, `ITSTPCTRD`, `TPCTOF`, `ITSTPCTOF`, `MFTMCH`, `PRIMVTX`, `SECVTX`. - `WORKFLOW_EXTRA_PROCESSING_STEPS` Enable additional processing steps not in the preset for the SYNC / ASYNC mode. Possible values are: `MID_RECO` `MCH_RECO` `MFT_RECO` `FDD_RECO` `FV0_RECO` `ZDC_RECO` `ENTROPY_ENCODER` `MATCH_ITSTPC` `MATCH_TPCTRD` `MATCH_ITSTPCTRD` `MATCH_TPCTOF` `MATCH_ITSTPCTOF` `MATCH_MFTMCH` `MATCH_MFTMCH` `MATCH_PRIMVTX` `MATCH_SECVTX`. (Here `_RECO` means full async reconstruction, and can be used to enable it also in sync mode.) - `WORKFLOW_PARAMETERS` (default `NONE`) : Comma-separated list, enables additional features of the workflow. Currently the following features are available: - `GPU` : Performs the TPC processing on the GPU, otherwise everything is processed on the CPU. @@ -29,7 +29,7 @@ You can use the following options to change the workflow behavior: - `MULTIPLICITY_FACTOR_RAWDECODERS` (default `1`) : Scales the number of parallel processes used for raw decoding by this factor. - `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. - `MULTIPLICITY_FACTOR_REST` (default `1`) : Scales the number of other reconstruction processes by this factor. - +- `QC_JSON_EXTRA` (default `NONE`) : extra QC jsons to add (if does not fit to those defined in WORKFLOW_DETECTORS_QC & (WORKFLOW_DETECTORS | WORKFLOW_DETECTORS_MATCHING) Most of these settings are configurable in the AliECS GUI. But some of the uncommon settings (`WORKFLOW_DETECTORS_FLP_PROCESSING`, `WORKFLOW_DETECTORS_CTF`, `WORKFLOW_DETECTORS_RECO`, `WORKFLOW_DETECTORS_MATCHING`, `WORKFLOW_EXTRA_PROCESSING_STEPS`, advanced `MULTIPLICITY_FACTOR` settings) can only be set via the "Additional environment variables field" in the GUI using bash syntax, e.g. `WORKFLOW_DETECTORS_FLP_PROCESSING=TPC`. # Process multiplicity factors @@ -47,6 +47,8 @@ For user modification of the workflow settings, the folloing *EXTRA* environment - `ALL_EXTRA_CONFIG` : Extra config key values added to all workflows - `GPU_EXTRA_CONFIG` : Extra options added to the configKeyValues of the GPU workflow +In case the CTF dictionaries were created from the data drastically different from the one being compressed, the default memory allocation for the CTF buffer might be insufficient. One can apply scaling factor to the buffer size estimate (default=1.5) of particular detector by defining variable e.g. `TPC_ENC_MEMFACT=3.5` + # Remarks on QC The JSON files for the individual detectors are merged into one JSON file, which is cached during the run on the shared EPN home folder. The default JSON file per detector is defined in `qc-workflow.sh`. From eedd6af7fe516d49c95e0a4cfb938e06e57e978d Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 20 Oct 2021 23:38:32 +0200 Subject: [PATCH 169/236] sync private directory --- testing/private/shahoian/runTF_PB.sh | 47 +++++++++++++++++++++ testing/private/shahoian/runTF_ext_dpl.sh | 4 +- testing/private/shahoian/run_PB.sh | 47 +++++++++++++++++++++ testing/private/shahoian/run_ext_dpl.sh | 7 ++- testing/private/shahoian/workflows_PB.desc | 4 ++ testing/private/shahoian/workflows_dpl.desc | 2 +- 6 files changed, 105 insertions(+), 6 deletions(-) create mode 100755 testing/private/shahoian/runTF_PB.sh create mode 100755 testing/private/shahoian/run_PB.sh create mode 100644 testing/private/shahoian/workflows_PB.desc diff --git a/testing/private/shahoian/runTF_PB.sh b/testing/private/shahoian/runTF_PB.sh new file mode 100755 index 0000000..f39ce66 --- /dev/null +++ b/testing/private/shahoian/runTF_PB.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard +#export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository + +export EXTINPUT=1 +export EPNMODE=1 +export SYNCMODE=1 +export SHMSIZE=128000000000 +export INFOLOGGER_SEVERITY=warning + +export EDJSONS_DIR="/home/ed/jsons" + +export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_PB.desc # Topology description library file to load: Pilot Beam +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF +export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" +#export GPU_EXTRA_CONFIG="" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" + +export GEN_TOPO_IGNORE_ERROR=1 + + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 +export MULTIPLICITY_FACTOR_CTFENCODERS=1 +export MULTIPLICITY_FACTOR_REST=1 + +for wf in "$@" +do + export GEN_TOPO_WORKFLOW_NAME=$wf + EXT="xml" + [ $WORKFLOWMODE == "print" ] && EXT="sh" + /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" +done diff --git a/testing/private/shahoian/runTF_ext_dpl.sh b/testing/private/shahoian/runTF_ext_dpl.sh index c322d40..f188d8b 100755 --- a/testing/private/shahoian/runTF_ext_dpl.sh +++ b/testing/private/shahoian/runTF_ext_dpl.sh @@ -41,5 +41,7 @@ export MULTIPLICITY_FACTOR_REST=1 for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf - /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.xml + EXT="xml" + [ $WORKFLOWMODE == "print" ] && EXT="sh" + /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" done diff --git a/testing/private/shahoian/run_PB.sh b/testing/private/shahoian/run_PB.sh new file mode 100755 index 0000000..fe58907 --- /dev/null +++ b/testing/private/shahoian/run_PB.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +#export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository + +export EXTINPUT=1 +export EPNMODE=1 +export SYNCMODE=1 +export SHMSIZE=128000000000 +export INFOLOGGER_SEVERITY=warning + +export EDJSONS_DIR="/home/ed/jsons" + +export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_PB.desc # Topology description library file to load: Pilot Beam +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF +export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" +#export GPU_EXTRA_CONFIG="" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" + +export GEN_TOPO_IGNORE_ERROR=1 + + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 +export MULTIPLICITY_FACTOR_CTFENCODERS=1 +export MULTIPLICITY_FACTOR_REST=1 + +for wf in "$@" +do + export GEN_TOPO_WORKFLOW_NAME=$wf + EXT="xml" + [ $WORKFLOWMODE == "print" ] && EXT="sh" + /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" +done diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index 2dc7bd2..f4d3268 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -40,8 +40,7 @@ export MULTIPLICITY_FACTOR_REST=1 for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf - export WORKFLOWMODE=dds - /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.xml -# export WORKFLOWMODE=print -# /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.sh + EXT="xml" + [ $WORKFLOWMODE == "print" ] && EXT="sh" + /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" done diff --git a/testing/private/shahoian/workflows_PB.desc b/testing/private/shahoian/workflows_PB.desc new file mode 100644 index 0000000..03ae79c --- /dev/null +++ b/testing/private/shahoian/workflows_PB.desc @@ -0,0 +1,4 @@ +its-pvtx-CTF-QC-its-pvtx-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-pvtx-CTF-QC-its-mft-tpc-tof-pvtx-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +async-ED-75: "O2PDPSuite" reco,75,75,"SYNCMODE=0 BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc index bfa9c5c..8254e9b 100644 --- a/testing/private/shahoian/workflows_dpl.desc +++ b/testing/private/shahoian/workflows_dpl.desc @@ -5,7 +5,7 @@ tof-ctf-qcTOF-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=TOF production/dpl its-ctf-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS production/dpl-workflow.sh" mft-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" -its-ctf-qcITSMRG-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json production/dpl-workflow.sh" +its-ctf-qcITSMRG-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS QC_HOST=epn QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json production/dpl-workflow.sh" mftHR-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" From 848401835749520043fc492a8d35e3094508d6b9 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 21 Oct 2021 09:54:35 +0200 Subject: [PATCH 170/236] Reduce resource metric interval to 15 seconds --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 7eeb533..51c1f95 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -64,7 +64,7 @@ fi ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA --early-forward-policy noraw" if [ $EPNMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" - ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" + ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 15" elif [ "0$ENABLE_METRICS" != "01" ]; then ARGS_ALL+=" --monitoring-backend no-op://" fi From 6c4ccd3b26f27e33c16f15c4954246b7f4e830c2 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 21 Oct 2021 09:55:11 +0200 Subject: [PATCH 171/236] Improve example workflow --- testing/examples/example-workflow.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/testing/examples/example-workflow.sh b/testing/examples/example-workflow.sh index 8a85112..5debd53 100755 --- a/testing/examples/example-workflow.sh +++ b/testing/examples/example-workflow.sh @@ -4,8 +4,12 @@ source common/setenv.sh SEVERITY=warning ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +if [ $EPNMODE == 1 ]; then + ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" + ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 15" +elif [ "0$ENABLE_METRICS" != "01" ]; then + ARGS_ALL+=" --monitoring-backend no-op://" +fi [ $NORATELOG == 1 ] && ARGS_ALL+=" --fairmq-rate-logging 0" ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" From fa1d9184429ada1dedaa50d1b23d531ed1307317 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 21 Oct 2021 10:15:30 +0200 Subject: [PATCH 172/236] fix typo in private script --- testing/private/shahoian/runTF_ext_dpl.sh | 2 +- testing/private/shahoian/run_ext_dpl.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/testing/private/shahoian/runTF_ext_dpl.sh b/testing/private/shahoian/runTF_ext_dpl.sh index f188d8b..f032cb6 100755 --- a/testing/private/shahoian/runTF_ext_dpl.sh +++ b/testing/private/shahoian/runTF_ext_dpl.sh @@ -43,5 +43,5 @@ do export GEN_TOPO_WORKFLOW_NAME=$wf EXT="xml" [ $WORKFLOWMODE == "print" ] && EXT="sh" - /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" + /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" done diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index f4d3268..3da7c2e 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -42,5 +42,5 @@ do export GEN_TOPO_WORKFLOW_NAME=$wf EXT="xml" [ $WORKFLOWMODE == "print" ] && EXT="sh" - /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" + /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" done From 7c5131d761d6ed7707db236ad79c25d87a8e35b6 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 21 Oct 2021 18:54:36 +0200 Subject: [PATCH 173/236] Allow rawTF input, allow input placeholder in \"print\" mode + small fixes Disable extending CTF destination directory by detector name for standalone runs Change max TFs per CTF to 500 Fix readers --loop setting Add extra option for CTF dictionary autosaving --- common/setenv.sh | 16 ++++++++++++++-- production/dpl-workflow.sh | 23 ++++++++++++++++++----- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 6e8bd0b..4d9a03c 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -20,7 +20,10 @@ if [ -z "${WORKFLOW_DETECTORS_CTF+x}" ] || [ "0$WORKFLOW_DETECTORS_CTF" == "0ALL if [ "0$WORKFLOW_DETECTORS_FLP_PROCESSING" == "0ALL" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING=$WORKFLOW_DETECTORS; fi if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi -if [ -z "$NTIMEFRAMES" ]; then export NTIMEFRAMES=1; fi # Number of time frames to process +if [ -z "$TFLOOP" ]; then export TFLOOP=0; fi # loop over timeframes +if [ -z "$NTIMEFRAMES" ]; then export NTIMEFRAMES=-1; fi # max number of time frames to process, <=0 : unlimited +if [ -z "$CTFDICT_NTF" ]; then export CTFDICT_NTF=100; fi # auto-save CTF dictionary after each CTFDICT_NTF TFs (if > 0) +if [ -z "$CTF_MAXDETEXT" ]; then export CTF_MAXDETEXT=0; fi # extend CTF output dir.name by detectors names if their number does not exceed this if [ -z "$TFDELAY" ]; then export TFDELAY=100; fi # Delay in seconds between publishing time frames if [ -z "$GPUTYPE" ]; then export GPUTYPE=CPU; fi # GPU Tracking backend to use, can be CPU / CUDA / HIP / OCL / OCL2 if [ -z "$DDSHMSIZE" ]; then export DDSHMSIZE=$(( 8 << 10 )); fi # Size of shared memory for DD Input @@ -31,7 +34,8 @@ if [ -z "$SAVECTF" ]; then export SAVECTF=0; fi # Save th if [ -z "$SYNCMODE" ]; then export SYNCMODE=0; fi # Run only reconstruction steps of the synchronous reconstruction if [ -z "$NUMAID" ]; then export NUMAID=0; fi # SHM segment id to use for shipping data as well as set of GPUs to use (use 0 / 1 for 2 NUMA domains) if [ -z "$NUMAGPUIDS" ]; then export NUMAGPUIDS=0; fi # NUMAID-aware GPU id selection -if [ -z "$CTFINPUT" ]; then export CTFINPUT=0; fi # Read input from CTF (incompatible to EXTINPUT=1) +if [ -z "$CTFINPUT" ]; then export CTFINPUT=0; fi # Read input from CTF using o2-ctf-reader (incompatible to EXTINPUT=1 and RAWTFINPUT) +if [ -z "$RAWTFINPUT" ]; then export RAWTFINPUT=0; fi # Read input from raw TFs using o2-raw-tf-reader (incompatible to EXTINPUT=1 and CTFINPUT=1) if [ -z "$NHBPERTF" ]; then export NHBPERTF=128; fi # Time frame length (in HBF) if [ -z "$GLOBALDPLOPT" ]; then export GLOBALDPLOPT=; fi # Global DPL workflow options appended at the end if [ -z "$SEVERITY" ]; then export SEVERITY="info"; fi # Log verbosity @@ -71,6 +75,14 @@ if [ $EXTINPUT == 1 ] && [ $CTFINPUT == 1 ]; then echo EXTINPUT and CTFINPUT are incompatible exit 1 fi +if [ $EXTINPUT == 1 ] && [ $RAWTFINPUT == 1 ]; then + echo EXTINPUT and RAWTFINPUT are incompatible + exit 1 +fi +if [ $CTFINPUT == 1 ] && [ $RAWTFINPUT == 1 ]; then + echo CTFINPUT and RAWTFINPUT are incompatible + exit 1 +fi if [ $SAVECTF == 1 ] && [ $CTFINPUT == 1 ]; then echo SAVECTF and CTFINPUT are incompatible exit 1 diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 51c1f95..4b8bbaa 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -14,7 +14,7 @@ if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # D if [ -z $CTF_METAFILES_DIR ]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="500000000"; fi # accumulate CTFs until file size reached -if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="200"; fi # but no more than given number of CTFs per file +if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="500"; fi # but no more than given number of CTFs per file if [ -z $IS_SIMULATED_DATA ]; then IS_SIMULATED_DATA=1; fi # processing simulated data if [ $SYNCMODE == 1 ]; then @@ -280,8 +280,21 @@ N_TRDRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_TRDRAWDEC: if [ $CTFINPUT == 1 ]; then GPU_INPUT=compressed-clusters-ctf TOF_INPUT=digits - CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root | head -n1` - WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $NTIMEFRAMES --ctf-input ${CTFName} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " + CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root 2> /dev/null | head -n1` + if [ -z $CTFName ]; then + if [ $WORKFLOWMODE == "print" ]; then + CTFName='$CTFName' + fi + fi + WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP --max-tf $NTIMEFRAMES --ctf-input ${CTFName} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " +elif [ $RAWTFINPUT == 1 ]; then + TFName=`ls -t $FILEWORKDIR/o2_*.tf 2> /dev/null | head -n1` + if [ -z $TFName ]; then + if [ $WORKFLOWMODE == "print" ]; then + TFName='$TFName' + fi + fi + WORKFLOW="o2-raw-tf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP --max-tf $NTIMEFRAMES --input-data ${TFName} --onlyDet $WORKFLOW_DETECTORS | " elif [ $EXTINPUT == 1 ]; then PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0" PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" @@ -401,8 +414,8 @@ if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; th if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi - CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --max-ctf-per-file ${CTF_MAX_PER_FILE} --onlyDet $WORKFLOW_DETECTORS --meta-output-dir $CTF_METAFILES_DIR " - if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $NTIMEFRAMES"; fi + CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --max-ctf-per-file ${CTF_MAX_PER_FILE} --onlyDet $WORKFLOW_DETECTORS --append-det-to-period $CTF_MAXDETEXT --meta-output-dir $CTF_METAFILES_DIR " + if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $SAVE_CTFDICT_NTIMEFRAMES"; fi WORKFLOW+="$CMD_CTF | " fi From 97c1c3efdeff8b17fe6073ce4ecc677b644c72a2 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 21 Oct 2021 18:55:04 +0200 Subject: [PATCH 174/236] Update ITS QC file --- production/qc-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 8412743..8dac2af 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -1,7 +1,7 @@ #!/bin/bash [ -z "$QC_JSON_TPC" ] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json -[ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/epn/jliu/itsEPNv2.json +[ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json [ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-cluster.json [ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json [ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json From 32589344124a86b6c33c5fa7bfbb5acd43dbdb6f Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 21 Oct 2021 18:55:20 +0200 Subject: [PATCH 175/236] sync private directory --- testing/private/shahoian/runTF_PB.sh | 3 +-- testing/private/shahoian/runTF_ext_dpl.sh | 3 +-- testing/private/shahoian/run_PB.sh | 3 +-- testing/private/shahoian/run_ext_dpl.sh | 6 ++++-- testing/private/shahoian/workflows_PB.desc | 4 ++++ testing/private/shahoian/workflows_dpl.desc | 7 ++++++- 6 files changed, 17 insertions(+), 9 deletions(-) diff --git a/testing/private/shahoian/runTF_PB.sh b/testing/private/shahoian/runTF_PB.sh index f39ce66..224c7c7 100755 --- a/testing/private/shahoian/runTF_PB.sh +++ b/testing/private/shahoian/runTF_PB.sh @@ -33,7 +33,6 @@ export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" export GEN_TOPO_IGNORE_ERROR=1 - export MULTIPLICITY_FACTOR_RAWDECODERS=1 export MULTIPLICITY_FACTOR_CTFENCODERS=1 export MULTIPLICITY_FACTOR_REST=1 @@ -42,6 +41,6 @@ for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf EXT="xml" - [ $WORKFLOWMODE == "print" ] && EXT="sh" + [ ! -z $WORKFLOWMODE ] && [ $WORKFLOWMODE == "print" ] && EXT="sh" /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" done diff --git a/testing/private/shahoian/runTF_ext_dpl.sh b/testing/private/shahoian/runTF_ext_dpl.sh index f032cb6..64a33bc 100755 --- a/testing/private/shahoian/runTF_ext_dpl.sh +++ b/testing/private/shahoian/runTF_ext_dpl.sh @@ -33,7 +33,6 @@ export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" export GEN_TOPO_IGNORE_ERROR=1 - export MULTIPLICITY_FACTOR_RAWDECODERS=1 export MULTIPLICITY_FACTOR_CTFENCODERS=1 export MULTIPLICITY_FACTOR_REST=1 @@ -42,6 +41,6 @@ for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf EXT="xml" - [ $WORKFLOWMODE == "print" ] && EXT="sh" + [ ! -z $WORKFLOWMODE ] && [ $WORKFLOWMODE == "print" ] && EXT="sh" /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" done diff --git a/testing/private/shahoian/run_PB.sh b/testing/private/shahoian/run_PB.sh index fe58907..59ad343 100755 --- a/testing/private/shahoian/run_PB.sh +++ b/testing/private/shahoian/run_PB.sh @@ -33,7 +33,6 @@ export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" export GEN_TOPO_IGNORE_ERROR=1 - export MULTIPLICITY_FACTOR_RAWDECODERS=1 export MULTIPLICITY_FACTOR_CTFENCODERS=1 export MULTIPLICITY_FACTOR_REST=1 @@ -42,6 +41,6 @@ for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf EXT="xml" - [ $WORKFLOWMODE == "print" ] && EXT="sh" + [ ! -z $WORKFLOWMODE ] && [ $WORKFLOWMODE == "print" ] && EXT="sh" /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" done diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index 3da7c2e..d09fc07 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -37,10 +37,12 @@ export MULTIPLICITY_FACTOR_RAWDECODERS=1 export MULTIPLICITY_FACTOR_CTFENCODERS=1 export MULTIPLICITY_FACTOR_REST=1 +#[ -z $WORKFLOWMODE ] && export WORKFLOWMODE="dds" + for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf - EXT="xml" - [ $WORKFLOWMODE == "print" ] && EXT="sh" + EXT="xml" + [ ! -z $WORKFLOWMODE ] && [ $WORKFLOWMODE == "print" ] && EXT="sh" /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" done diff --git a/testing/private/shahoian/workflows_PB.desc b/testing/private/shahoian/workflows_PB.desc index 03ae79c..fedf773 100644 --- a/testing/private/shahoian/workflows_PB.desc +++ b/testing/private/shahoian/workflows_PB.desc @@ -1,4 +1,8 @@ its-pvtx-CTF-QC-its-pvtx-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-pvtx-CTF-QC-its-mft-tpc-tof-pvtx-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +ctf_itsCOSM-tpcCPU-trd-tof_A: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=0 RAWTFINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" +ctf_itsCOSM-tpcCPU-trd-tof_B: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" +ctf_itsCOSM-tpcCPU-trd-tof_C: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=0 CTFINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" + async-ED-75: "O2PDPSuite" reco,75,75,"SYNCMODE=0 BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc index 8254e9b..367aad5 100644 --- a/testing/private/shahoian/workflows_dpl.desc +++ b/testing/private/shahoian/workflows_dpl.desc @@ -189,7 +189,7 @@ itsCOSM-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARA itsCOSM-TF-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS N_ITSTRK=25 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" #---- -mft_decoder2digits_for_noise_calib-30: "O2PDPSuite" reco,30,30,"testing/private/shahoian/mft_decoder2digits_for_noise_calib.sh" +#mft_decoder2digits_for_noise_calib-30: "O2PDPSuite" reco,30,30,"testing/private/shahoian/mft_decoder2digits_for_noise_calib.sh" its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" @@ -200,6 +200,11 @@ its-mftTR-tpc-trd-tof-mid-TF-CTF-QC-its-mft-tpc-ED-20: "O2PDPSuite" reco,20,20," mft-ctf-qc-raw-cluster-MFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" mft-ctf-qc-raw-digit-cluster-MFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" +hmp-TF-CTF-1: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" +hmp-TF-CTF-2: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" + +hmp-CTF-1: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" +hmp-CTF-2: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" ctf_itsCOSM-mftTR-tpc-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" ctf_itsCOSM-mftTR-tpcCPU-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" From ae82f7941aeec3d94e4096c1620f3357da206359 Mon Sep 17 00:00:00 2001 From: afurs Date: Thu, 21 Oct 2021 18:42:09 +0200 Subject: [PATCH 176/236] FIT:all topologies are added --- production/qc-workflow.sh | 1 + testing/detectors/FDD/fdd-ctf.sh | 24 +++ testing/detectors/FDD/fdd-digits-ctf.sh | 25 +++ .../FDD/fdd-digits-ds.json} | 26 +-- testing/detectors/FDD/fdd-digits-qc-ctf.sh | 26 +++ testing/detectors/FDD/run_fdd_ctf.sh | 34 ++++ testing/detectors/FDD/run_fdd_digits_ctf.sh | 34 ++++ .../detectors/FDD/run_fdd_digits_qc_ctf.sh | 34 ++++ testing/detectors/FDD/workflows.desc | 3 + testing/detectors/FT0/ft0-ctf.sh | 3 +- testing/detectors/FT0/ft0-digits-ctf.sh | 2 +- testing/detectors/FT0/ft0-digits-ds.json | 10 +- testing/detectors/FT0/ft0-digits-qc-ctf.sh | 7 +- testing/detectors/FT0/run_ft0_ctf.sh | 4 +- testing/detectors/FT0/workflows.desc | 6 +- testing/detectors/FV0/fv0-ctf.sh | 2 +- testing/detectors/FV0/fv0-digits-ctf.sh | 2 +- testing/detectors/FV0/fv0-digits-ds.json | 9 +- testing/detectors/FV0/fv0-digits-qc-ctf.sh | 7 +- testing/detectors/FV0/workflows.desc | 6 +- testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh | 32 ++++ testing/private/afurs/fdd-ft0-fv0-ctf.sh | 32 ++++ .../private/afurs/fdd-ft0-fv0-digits-ds.json | 150 ++++++++++++++++++ .../afurs/fdd-ft0-fv0-digits-qc-ctf.sh | 38 +++++ testing/private/afurs/ft0-fv0-ctf-raw.sh | 31 ++++ testing/private/afurs/ft0-fv0-ctf.sh | 2 +- testing/private/afurs/ft0-fv0-digits-ds.json | 19 ++- .../private/afurs/ft0-fv0-digits-qc-ctf.sh | 7 +- testing/private/afurs/fv0-digits-ds.json | 69 -------- testing/private/afurs/run_fdd_ft0_fv0_ctf.sh | 34 ++++ .../private/afurs/run_fdd_ft0_fv0_ctf_raw.sh | 34 ++++ .../afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh | 31 ++++ testing/private/afurs/run_ft0_fv0_ctf_raw.sh | 34 ++++ .../afurs/run_ft0_fv0_digits_qc_ctf.sh | 2 +- testing/private/afurs/workflows.desc | 9 +- 35 files changed, 667 insertions(+), 122 deletions(-) create mode 100755 testing/detectors/FDD/fdd-ctf.sh create mode 100755 testing/detectors/FDD/fdd-digits-ctf.sh rename testing/{private/afurs/ft0-digits-ds.json => detectors/FDD/fdd-digits-ds.json} (71%) create mode 100755 testing/detectors/FDD/fdd-digits-qc-ctf.sh create mode 100755 testing/detectors/FDD/run_fdd_ctf.sh create mode 100755 testing/detectors/FDD/run_fdd_digits_ctf.sh create mode 100755 testing/detectors/FDD/run_fdd_digits_qc_ctf.sh create mode 100755 testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh create mode 100755 testing/private/afurs/fdd-ft0-fv0-ctf.sh create mode 100644 testing/private/afurs/fdd-ft0-fv0-digits-ds.json create mode 100755 testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh create mode 100755 testing/private/afurs/ft0-fv0-ctf-raw.sh delete mode 100644 testing/private/afurs/fv0-digits-ds.json create mode 100755 testing/private/afurs/run_fdd_ft0_fv0_ctf.sh create mode 100755 testing/private/afurs/run_fdd_ft0_fv0_ctf_raw.sh create mode 100755 testing/private/afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh create mode 100755 testing/private/afurs/run_ft0_fv0_ctf_raw.sh diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 8dac2af..1d51a7a 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -4,6 +4,7 @@ [ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json [ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-cluster.json [ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json +[ -z "$QC_JSON_FDD" ] && QC_JSON_FDD=/home/afurs/O2DataProcessing/testing/detectors/FDD/fdd-digits-ds.json [ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json [ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json [ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json diff --git a/testing/detectors/FDD/fdd-ctf.sh b/testing/detectors/FDD/fdd-ctf.sh new file mode 100755 index 0000000..588ffce --- /dev/null +++ b/testing/detectors/FDD/fdd-ctf.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" + +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FDD/fdd-digits-ctf.sh b/testing/detectors/FDD/fdd-digits-ctf.sh new file mode 100755 index 0000000..3532bc5 --- /dev/null +++ b/testing/detectors/FDD/fdd-digits-ctf.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" + +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="x:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fdd-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fdd-datareader-dpl:$NTHREADS \ +| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/private/afurs/ft0-digits-ds.json b/testing/detectors/FDD/fdd-digits-ds.json similarity index 71% rename from testing/private/afurs/ft0-digits-ds.json rename to testing/detectors/FDD/fdd-digits-ds.json index 3ebc0b8..a0ff903 100644 --- a/testing/private/afurs/ft0-digits-ds.json +++ b/testing/detectors/FDD/fdd-digits-ds.json @@ -23,43 +23,45 @@ } }, "tasks": { - "DigitQcTaskFT0": { + "DigitQcTaskFDD": { "active": "true", - "className": "o2::quality_control_modules::ft0::DigitQcTask", - "moduleName": "QcFT0", - "detectorName": "FT0", + "className": "o2::quality_control_modules::fdd::DigitQcTask", + "moduleName": "QcFDD", + "detectorName": "FDD", "cycleDurationSeconds": "60", "maxNumberCycles": "-1", "resetAfterCycles": "1", + "mergerCycleMultiplier": "2", "dataSource": { "type": "dataSamplingPolicy", - "name": "ft0-digits" + "name": "fdd-digits" }, "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" }, "location": "local", "localMachines": [ "epn" ], - "remoteMachine": "epn102-ib", - "remotePort": "65019", + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47720", "mergingMode": "delta", - "localControl" : "odc" + "localControl": "odc" + } } }, "dataSamplingPolicies": [ { - "id": "ft0-digits", + "id": "fdd-digits", "active": "true", "machines": [], "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", + "query": "digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0", "samplingConditions": [ { "condition": "random", - "fraction": "0.01", + "fraction": "1.", "seed": "4533" } ], diff --git a/testing/detectors/FDD/fdd-digits-qc-ctf.sh b/testing/detectors/FDD/fdd-digits-qc-ctf.sh new file mode 100755 index 0000000..080f565 --- /dev/null +++ b/testing/detectors/FDD/fdd-digits-qc-ctf.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" + +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="x:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fdd-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fdd-datareader-dpl:$NTHREADS \ +| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/fdd-digits-ds.json \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FDD/run_fdd_ctf.sh b/testing/detectors/FDD/run_fdd_ctf.sh new file mode 100755 index 0000000..80b6e52 --- /dev/null +++ b/testing/detectors/FDD/run_fdd_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/detectors/FDD/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=fdd-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FDD # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FDD # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/fdd-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/detectors/FDD/run_fdd_digits_ctf.sh b/testing/detectors/FDD/run_fdd_digits_ctf.sh new file mode 100755 index 0000000..9db8f74 --- /dev/null +++ b/testing/detectors/FDD/run_fdd_digits_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/detectors/FDD/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=fdd-digits-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FDD # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FDD # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/fdd-digits-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/detectors/FDD/run_fdd_digits_qc_ctf.sh b/testing/detectors/FDD/run_fdd_digits_qc_ctf.sh new file mode 100755 index 0000000..91b8301 --- /dev/null +++ b/testing/detectors/FDD/run_fdd_digits_qc_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/detectors/FDD/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=fdd-digits-qc-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FDD # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FDD # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/fdd-digits-qc-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/detectors/FDD/workflows.desc b/testing/detectors/FDD/workflows.desc index e69de29..d199afd 100644 --- a/testing/detectors/FDD/workflows.desc +++ b/testing/detectors/FDD/workflows.desc @@ -0,0 +1,3 @@ +fdd-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FDD/fdd-ctf.sh" +fdd-digits-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FDD/fdd-digits-ctf.sh" +fdd-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FDD/fdd-digits-qc-ctf.sh" diff --git a/testing/detectors/FT0/ft0-ctf.sh b/testing/detectors/FT0/ft0-ctf.sh index dedb366..601c999 100755 --- a/testing/detectors/FT0/ft0-ctf.sh +++ b/testing/detectors/FT0/ft0-ctf.sh @@ -12,9 +12,10 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 50000000" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" MYDIR="$(dirname $(readlink -f $0))" + PROXY_INSPEC="digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/detectors/FT0/ft0-digits-ctf.sh b/testing/detectors/FT0/ft0-digits-ctf.sh index d9fe4aa..1f14d3a 100755 --- a/testing/detectors/FT0/ft0-digits-ctf.sh +++ b/testing/detectors/FT0/ft0-digits-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 50000000" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FT0/ft0-digits-ds.json b/testing/detectors/FT0/ft0-digits-ds.json index 3ebc0b8..23abe60 100644 --- a/testing/detectors/FT0/ft0-digits-ds.json +++ b/testing/detectors/FT0/ft0-digits-ds.json @@ -42,10 +42,12 @@ "localMachines": [ "epn" ], - "remoteMachine": "epn102-ib", - "remotePort": "65019", + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47721", "mergingMode": "delta", - "localControl" : "odc" + "mergerCycleMultiplier": "2", + "localControl": "odc" + } } }, @@ -59,7 +61,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.01", + "fraction": "1.", "seed": "4533" } ], diff --git a/testing/detectors/FT0/ft0-digits-qc-ctf.sh b/testing/detectors/FT0/ft0-digits-qc-ctf.sh index 42edda6..f618fb4 100755 --- a/testing/detectors/FT0/ft0-digits-qc-ctf.sh +++ b/testing/detectors/FT0/ft0-digits-qc-ctf.sh @@ -12,14 +12,15 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 50000000" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +PROXY_INSPEC="x:FT0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-ft0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline ft0-datareader-dpl:$NTHREADS \ | o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-qc ${ARGS_ALL} --config json://${MYDIR}/ft0-digits-ds.json \ +| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/ft0-digits-ds.json \ | o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ | o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FT0/run_ft0_ctf.sh b/testing/detectors/FT0/run_ft0_ctf.sh index 5320ad1..253029a 100755 --- a/testing/detectors/FT0/run_ft0_ctf.sh +++ b/testing/detectors/FT0/run_ft0_ctf.sh @@ -4,8 +4,8 @@ export GEN_TOPO_PARTITION=test # ECS Parti export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard # Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch +# export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +# export GEN_TOPO_SOURCE=v1.3 # Git hash to fetch # Use these settings to specify a path to the workflow repository in your home dir export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository diff --git a/testing/detectors/FT0/workflows.desc b/testing/detectors/FT0/workflows.desc index 89e56a2..9fe3dfb 100644 --- a/testing/detectors/FT0/workflows.desc +++ b/testing/detectors/FT0/workflows.desc @@ -1,3 +1,3 @@ -ft0-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-ctf.sh" -ft0-digits-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-digits-ctf.sh" -ft0-digits-qc-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-digits-qc-ctf.sh" +ft0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-ctf.sh" +ft0-digits-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-digits-ctf.sh" +ft0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-digits-qc-ctf.sh" diff --git a/testing/detectors/FV0/fv0-ctf.sh b/testing/detectors/FV0/fv0-ctf.sh index f91093d..68d64f6 100755 --- a/testing/detectors/FV0/fv0-ctf.sh +++ b/testing/detectors/FV0/fv0-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 50000000" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" diff --git a/testing/detectors/FV0/fv0-digits-ctf.sh b/testing/detectors/FV0/fv0-digits-ctf.sh index 944bd1f..3f0a3bd 100755 --- a/testing/detectors/FV0/fv0-digits-ctf.sh +++ b/testing/detectors/FV0/fv0-digits-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 50000000" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FV0/fv0-digits-ds.json b/testing/detectors/FV0/fv0-digits-ds.json index 9b381b9..4cd40df 100644 --- a/testing/detectors/FV0/fv0-digits-ds.json +++ b/testing/detectors/FV0/fv0-digits-ds.json @@ -31,6 +31,7 @@ "cycleDurationSeconds": "60", "maxNumberCycles": "-1", "resetAfterCycles": "1", + "mergerCycleMultiplier": "2", "dataSource": { "type": "dataSamplingPolicy", "name": "fv0-digits" @@ -42,10 +43,10 @@ "localMachines": [ "epn" ], - "remoteMachine": "epn102-ib", - "remotePort": "65018", + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47722", "mergingMode": "delta", - "localControl" : "odc" + "localControl": "odc" } } }, @@ -59,7 +60,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.01", + "fraction": "1.", "seed": "4533" } ], diff --git a/testing/detectors/FV0/fv0-digits-qc-ctf.sh b/testing/detectors/FV0/fv0-digits-qc-ctf.sh index 95ddf3d..6094ed2 100755 --- a/testing/detectors/FV0/fv0-digits-qc-ctf.sh +++ b/testing/detectors/FV0/fv0-digits-qc-ctf.sh @@ -12,14 +12,15 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 50000000" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +PROXY_INSPEC="x:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fv0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fv0-datareader-dpl:$NTHREADS \ | o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-qc ${ARGS_ALL} --config json://${MYDIR}/fv0-digits-ds.json \ +| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/fv0-digits-ds.json \ | o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ | o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FV0/workflows.desc b/testing/detectors/FV0/workflows.desc index 04d860e..f149aae 100644 --- a/testing/detectors/FV0/workflows.desc +++ b/testing/detectors/FV0/workflows.desc @@ -1,3 +1,3 @@ -fv0-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-ctf.sh" -fv0-digits-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-digits-ctf.sh" -fv0-digits-qc-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-digits-qc-ctf.sh" +fv0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-ctf.sh" +fv0-digits-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-digits-ctf.sh" +fv0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-digits-qc-ctf.sh" diff --git a/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh b/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh new file mode 100755 index 0000000..5cf375c --- /dev/null +++ b/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#CTFOUT="/home/afurs/public/out/" +#CTFOUT="${EPN_DATA_DIR}" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#CTFOUT=$FILEWORKDIR +#CTFOUT=$FILEWORKDIR +#FILEWORKDIR=$CTFOUT +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +# ARGS_CTF="" + +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;z:FDD/RAWDATA;digfdd:FDD/DIGITSBC/0;chanfdd:FDD/DIGITSCH/0;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD,FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/private/afurs/fdd-ft0-fv0-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-ctf.sh new file mode 100755 index 0000000..dbb14ae --- /dev/null +++ b/testing/private/afurs/fdd-ft0-fv0-ctf.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#CTFOUT="/home/afurs/public/out/" +#CTFOUT="${EPN_DATA_DIR}" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#CTFOUT=$FILEWORKDIR +#CTFOUT=$FILEWORKDIR +#FILEWORKDIR=$CTFOUT +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +# ARGS_CTF="" + +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="digfdd:FDD/DIGITSBC/0;chanfdd:FDD/DIGITSCH/0;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD,FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/private/afurs/fdd-ft0-fv0-digits-ds.json b/testing/private/afurs/fdd-ft0-fv0-digits-ds.json new file mode 100644 index 0000000..a21b3e2 --- /dev/null +++ b/testing/private/afurs/fdd-ft0-fv0-digits-ds.json @@ -0,0 +1,150 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFDD": { + "active": "true", + "className": "o2::quality_control_modules::fdd::DigitQcTask", + "moduleName": "QcFDD", + "detectorName": "FDD", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "fdd-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47720", + "mergingMode": "delta", + "mergerCycleMultiplier": "2", + "localControl": "odc" + }, + "DigitQcTaskFT0": { + "active": "true", + "className": "o2::quality_control_modules::ft0::DigitQcTask", + "moduleName": "QcFT0", + "detectorName": "FT0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "ft0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47721", + "mergingMode": "delta", + "mergerCycleMultiplier": "2", + "localControl": "odc" + }, + "DigitQcTaskFV0": { + "active": "true", + "className": "o2::quality_control_modules::fv0::DigitQcTask", + "moduleName": "QcFV0", + "detectorName": "FV0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "fv0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47722", + "mergingMode": "delta", + "mergerCycleMultiplier": "2", + "localControl": "odc" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "fdd-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "1.", + "seed": "4533" + } + ], + "blocking": "false" + }, + { + "id": "ft0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "1.", + "seed": "4533" + } + ], + "blocking": "false" + }, + { + "id": "fv0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "1.", + "seed": "4533" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh new file mode 100755 index 0000000..4142101 --- /dev/null +++ b/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#CTFOUT="/home/afurs/public/out/" +#CTFOUT="${EPN_DATA_DIR}" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#CTFOUT=$FILEWORKDIR +#CTFOUT=$FILEWORKDIR +#FILEWORKDIR=$CTFOUT +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=1 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +# ARGS_CTF="" + +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;z:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-fdd-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fdd-datareader-dpl:$NTHREADS \ +| o2-ft0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline ft0-datareader-dpl:$NTHREADS \ +| o2-fv0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fv0-datareader-dpl:$NTHREADS \ +| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/fdd-ft0-fv0-digits-ds.json \ +| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD,FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds + +# | o2-qc ${ARGS_ALL} --local --host epn ---config json://${MYDIR}/ft0-digits-ds.json \ diff --git a/testing/private/afurs/ft0-fv0-ctf-raw.sh b/testing/private/afurs/ft0-fv0-ctf-raw.sh new file mode 100755 index 0000000..42a314e --- /dev/null +++ b/testing/private/afurs/ft0-fv0-ctf-raw.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=INFO +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $SEVERITY" +#CTFOUT="/home/afurs/public/out/" +#CTFOUT="${EPN_DATA_DIR}" +if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files +#CTFOUT=$FILEWORKDIR +#CTFOUT=$FILEWORKDIR +#FILEWORKDIR=$CTFOUT +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" +CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" +NTHREADS=2 +# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` +# The directory must exist +# ARGS_CTF="" + +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +MYDIR="$(dirname $(readlink -f $0))" +PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" +IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" + +o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ +| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ +| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ +| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/private/afurs/ft0-fv0-ctf.sh b/testing/private/afurs/ft0-fv0-ctf.sh index 45d62c4..6f8f04d 100755 --- a/testing/private/afurs/ft0-fv0-ctf.sh +++ b/testing/private/afurs/ft0-fv0-ctf.sh @@ -19,7 +19,7 @@ NTHREADS=2 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 1000000" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/ft0-fv0-digits-ds.json b/testing/private/afurs/ft0-fv0-digits-ds.json index d452f6c..af09cef 100644 --- a/testing/private/afurs/ft0-fv0-digits-ds.json +++ b/testing/private/afurs/ft0-fv0-digits-ds.json @@ -42,10 +42,11 @@ "localMachines": [ "epn" ], - "remoteMachine": "epn102-ib", - "remotePort": "65019", + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47721", "mergingMode": "delta", - "localControl" : "odc" + "mergerCycleMultiplier": "2", + "localControl": "odc" }, "DigitQcTaskFV0": { "active": "true", @@ -66,10 +67,11 @@ "localMachines": [ "epn" ], - "remoteMachine": "epn102-ib", - "remotePort": "65018", + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47722", "mergingMode": "delta", - "localControl" : "odc" + "mergerCycleMultiplier": "2", + "localControl": "odc" } } }, @@ -83,7 +85,7 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.01", + "fraction": "1.", "seed": "4533" } ], @@ -98,11 +100,12 @@ "samplingConditions": [ { "condition": "random", - "fraction": "0.01", + "fraction": "1.", "seed": "4533" } ], "blocking": "false" } + ] } \ No newline at end of file diff --git a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh index d377f39..9063b96 100755 --- a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh +++ b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh @@ -14,12 +14,12 @@ if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Dire #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 +NTHREADS=1 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 1000000" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" @@ -27,9 +27,10 @@ IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,addres o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ | o2-fv0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fv0-datareader-dpl:$NTHREADS \ | o2-ft0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline ft0-datareader-dpl:$NTHREADS \ -| o2-qc ${ARGS_ALL} --config json://${MYDIR}/ft0-fv0-digits-ds.json \ +| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/ft0-fv0-digits-ds.json \ | o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ | o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ | o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ | o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds +# | o2-qc ${ARGS_ALL} --local --host epn ---config json://${MYDIR}/ft0-digits-ds.json \ diff --git a/testing/private/afurs/fv0-digits-ds.json b/testing/private/afurs/fv0-digits-ds.json deleted file mode 100644 index 9b381b9..0000000 --- a/testing/private/afurs/fv0-digits-ds.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFV0": { - "active": "true", - "className": "o2::quality_control_modules::fv0::DigitQcTask", - "moduleName": "QcFV0", - "detectorName": "FV0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "fv0-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn" - ], - "remoteMachine": "epn102-ib", - "remotePort": "65018", - "mergingMode": "delta", - "localControl" : "odc" - } - } - }, - "dataSamplingPolicies": [ - { - "id": "fv0-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "4533" - } - ], - "blocking": "false" - } - ] -} \ No newline at end of file diff --git a/testing/private/afurs/run_fdd_ft0_fv0_ctf.sh b/testing/private/afurs/run_fdd_ft0_fv0_ctf.sh new file mode 100755 index 0000000..fdec7d2 --- /dev/null +++ b/testing/private/afurs/run_fdd_ft0_fv0_ctf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=fdd-ft0-fv0-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/fdd-ft0-fv0-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/private/afurs/run_fdd_ft0_fv0_ctf_raw.sh b/testing/private/afurs/run_fdd_ft0_fv0_ctf_raw.sh new file mode 100755 index 0000000..55ea4a5 --- /dev/null +++ b/testing/private/afurs/run_fdd_ft0_fv0_ctf_raw.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=fdd-ft0-fv0-ctf-raw # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/ft0-fv0-ctf-raw.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/private/afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh b/testing/private/afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh new file mode 100755 index 0000000..8569e18 --- /dev/null +++ b/testing/private/afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard +# Use these settings to fetch the Workflow Repository using a hash / tag +export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +export GEN_TOPO_SOURCE=v1.3 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=fdd-ft0-fv0-digits-qc-ctf # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/fdd-ft0-fv0-digits-qc-ctf.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi diff --git a/testing/private/afurs/run_ft0_fv0_ctf_raw.sh b/testing/private/afurs/run_ft0_fv0_ctf_raw.sh new file mode 100755 index 0000000..579e2e7 --- /dev/null +++ b/testing/private/afurs/run_ft0_fv0_ctf_raw.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository +export GEN_TOPO_IGNORE_ERROR=1 +export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load +export GEN_TOPO_WORKFLOW_NAME=ft0-fv0-ctf-raw # Name of workflow in topology description library +export WORKFLOW_DETECTORS=FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS= # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +export OUTPUT_FILE_NAME=$HOME/topologies/ft0-fv0-ctf-raw.xml + +/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +if [ $? == 0 ]; then + echo Generated XML topology $OUTPUT_FILE_NAME +fi + + diff --git a/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh b/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh index ed8be34..7cdff9c 100755 --- a/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh +++ b/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh @@ -1,7 +1,7 @@ #!/bin/bash export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard # Use these settings to fetch the Workflow Repository using a hash / tag export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash export GEN_TOPO_SOURCE=v1.3 # Git hash to fetch diff --git a/testing/private/afurs/workflows.desc b/testing/private/afurs/workflows.desc index 384097a..c41812e 100644 --- a/testing/private/afurs/workflows.desc +++ b/testing/private/afurs/workflows.desc @@ -1,2 +1,7 @@ -ft0-fv0-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-ctf.sh" -ft0-fv0-digits-qc-ctf: "O2PDPSuite" reco,5,5,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-digits-qc-ctf.sh" +ft0-fv0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-ctf.sh" +ft0-fv0-ctf-raw: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-ctf-raw.sh" +ft0-fv0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-digits-qc-ctf.sh" +fdd-ft0-fv0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/fdd-ft0-fv0-ctf.sh" +fdd-ft0-fv0-ctf-raw: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh" +fdd-ft0-fv0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh" + From a166b5b9de096e855e60ff352ce5a8d09127c1ae Mon Sep 17 00:00:00 2001 From: afurs Date: Thu, 21 Oct 2021 19:14:34 +0200 Subject: [PATCH 177/236] FIT: new feature --append-det-to-period 0 is added --- testing/detectors/FDD/fdd-ctf.sh | 2 +- testing/detectors/FDD/fdd-digits-ctf.sh | 2 +- testing/detectors/FDD/fdd-digits-qc-ctf.sh | 2 +- testing/detectors/FT0/ft0-ctf.sh | 2 +- testing/detectors/FT0/ft0-digits-ctf.sh | 2 +- testing/detectors/FT0/ft0-digits-qc-ctf.sh | 2 +- testing/detectors/FV0/fv0-ctf.sh | 2 +- testing/detectors/FV0/fv0-digits-ctf.sh | 2 +- testing/detectors/FV0/fv0-digits-qc-ctf.sh | 2 +- testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh | 2 +- testing/private/afurs/fdd-ft0-fv0-ctf.sh | 2 +- testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh | 2 +- testing/private/afurs/ft0-fv0-ctf-raw.sh | 2 +- testing/private/afurs/ft0-fv0-ctf.sh | 2 +- testing/private/afurs/ft0-fv0-digits-qc-ctf.sh | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/testing/detectors/FDD/fdd-ctf.sh b/testing/detectors/FDD/fdd-ctf.sh index 588ffce..7c2f8a3 100755 --- a/testing/detectors/FDD/fdd-ctf.sh +++ b/testing/detectors/FDD/fdd-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" diff --git a/testing/detectors/FDD/fdd-digits-ctf.sh b/testing/detectors/FDD/fdd-digits-ctf.sh index 3532bc5..c219393 100755 --- a/testing/detectors/FDD/fdd-digits-ctf.sh +++ b/testing/detectors/FDD/fdd-digits-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FDD/fdd-digits-qc-ctf.sh b/testing/detectors/FDD/fdd-digits-qc-ctf.sh index 080f565..3fa9bb6 100755 --- a/testing/detectors/FDD/fdd-digits-qc-ctf.sh +++ b/testing/detectors/FDD/fdd-digits-qc-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FT0/ft0-ctf.sh b/testing/detectors/FT0/ft0-ctf.sh index 601c999..b28762e 100755 --- a/testing/detectors/FT0/ft0-ctf.sh +++ b/testing/detectors/FT0/ft0-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" diff --git a/testing/detectors/FT0/ft0-digits-ctf.sh b/testing/detectors/FT0/ft0-digits-ctf.sh index 1f14d3a..b0bafd9 100755 --- a/testing/detectors/FT0/ft0-digits-ctf.sh +++ b/testing/detectors/FT0/ft0-digits-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FT0/ft0-digits-qc-ctf.sh b/testing/detectors/FT0/ft0-digits-qc-ctf.sh index f618fb4..6bdc350 100755 --- a/testing/detectors/FT0/ft0-digits-qc-ctf.sh +++ b/testing/detectors/FT0/ft0-digits-qc-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FV0/fv0-ctf.sh b/testing/detectors/FV0/fv0-ctf.sh index 68d64f6..60b9558 100755 --- a/testing/detectors/FV0/fv0-ctf.sh +++ b/testing/detectors/FV0/fv0-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" diff --git a/testing/detectors/FV0/fv0-digits-ctf.sh b/testing/detectors/FV0/fv0-digits-ctf.sh index 3f0a3bd..cb6f986 100755 --- a/testing/detectors/FV0/fv0-digits-ctf.sh +++ b/testing/detectors/FV0/fv0-digits-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FV0/fv0-digits-qc-ctf.sh b/testing/detectors/FV0/fv0-digits-qc-ctf.sh index 6094ed2..de317bf 100755 --- a/testing/detectors/FV0/fv0-digits-qc-ctf.sh +++ b/testing/detectors/FV0/fv0-digits-qc-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh b/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh index 5cf375c..a926561 100755 --- a/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh +++ b/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh @@ -19,7 +19,7 @@ NTHREADS=2 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;z:FDD/RAWDATA;digfdd:FDD/DIGITSBC/0;chanfdd:FDD/DIGITSCH/0;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/fdd-ft0-fv0-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-ctf.sh index dbb14ae..74a5d66 100755 --- a/testing/private/afurs/fdd-ft0-fv0-ctf.sh +++ b/testing/private/afurs/fdd-ft0-fv0-ctf.sh @@ -19,7 +19,7 @@ NTHREADS=2 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digfdd:FDD/DIGITSBC/0;chanfdd:FDD/DIGITSCH/0;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh index 4142101..ec311ad 100755 --- a/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh +++ b/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh @@ -19,7 +19,7 @@ NTHREADS=1 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;z:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/ft0-fv0-ctf-raw.sh b/testing/private/afurs/ft0-fv0-ctf-raw.sh index 42a314e..bdf7924 100755 --- a/testing/private/afurs/ft0-fv0-ctf-raw.sh +++ b/testing/private/afurs/ft0-fv0-ctf-raw.sh @@ -19,7 +19,7 @@ NTHREADS=2 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/ft0-fv0-ctf.sh b/testing/private/afurs/ft0-fv0-ctf.sh index 6f8f04d..031e3e9 100755 --- a/testing/private/afurs/ft0-fv0-ctf.sh +++ b/testing/private/afurs/ft0-fv0-ctf.sh @@ -19,7 +19,7 @@ NTHREADS=2 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh index 9063b96..3ff49e1 100755 --- a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh +++ b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh @@ -19,7 +19,7 @@ NTHREADS=1 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" From 3196dc9b3056a537c2f70d3f88625deb4d0cb922 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 21 Oct 2021 19:32:41 +0200 Subject: [PATCH 178/236] add MID QC --- production/qc-workflow.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 1d51a7a..14fa6c9 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -9,6 +9,7 @@ [ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json [ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json [ -z "$QC_JSON_MCH" ] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json +[ -z "$QC_JSON_MID" ] && QC_JSON_MID=/home/dstocco/config/mid-qcmn-epn-digits.json [ -z "$QC_JSON_PRIMVTX" ] && QC_JSON_PRIMVTX=/home/shahoian/jsons/vertexing-qc.json From b4e8df8ee66f55d3e58340f0d44e4c2c17578220 Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 25 Oct 2021 16:56:02 +0200 Subject: [PATCH 179/236] Set max CTFs per file to 10K (with 0.5GB min_file_size) --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 4b8bbaa..10fe682 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -14,7 +14,7 @@ if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # D if [ -z $CTF_METAFILES_DIR ]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="500000000"; fi # accumulate CTFs until file size reached -if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="500"; fi # but no more than given number of CTFs per file +if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="10000"; fi # but no more than given number of CTFs per file if [ -z $IS_SIMULATED_DATA ]; then IS_SIMULATED_DATA=1; fi # processing simulated data if [ $SYNCMODE == 1 ]; then From d1840755824435548ceb3248f812edc126150a5b Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 25 Oct 2021 16:57:00 +0200 Subject: [PATCH 180/236] Suppress custom MFT noise file, use realistic ITS,MFT strobes --- production/dpl-workflow.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 10fe682..3dfb0ef 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -29,7 +29,9 @@ workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } [ -z $ITSCLUSDICT ] && ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" [ -z $MFTCLUSDICT ] && MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" [ -z $ITS_NOISE ] && ITS_NOISE="${FILEWORKDIR}" -[ -z $MFT_NOISE ] && MFT_NOISE="${FILEWORKDIR}/mft_noise_220721_R3C-520.root" +[ -z $MFT_NOISE ] && MFT_NOISE="${FILEWORKDIR}" +[ -z $ITS_STROBE ] && ITS_STROBE="891" +[ -z $MFT_STROBE ] && MFT_STROBE="198" MID_FEEID_MAP="$FILEWORKDIR/mid-feeId_mapper.txt" NITSDECTHREADS=2 @@ -140,7 +142,7 @@ has_detector_flp_processing CPV && CPV_INPUT=digits if [ $EPNMODE == 1 ]; then EVE_CONFIG+=" --eve-dds-collection-index 0" - ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE" + ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE;ITSAlpideParam.roFrameLengthInBC=$ITS_STROBE;MFTAlpideParam.roFrameLengthInBC=$MFT_STROBE;" MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" GPU_CONFIG_KEY+="GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;" # Options for decoding current TRD real raw data (not needed for data converted from MC) From 1ec2e870ebc3ef746c50290d765bd6610d08cf04 Mon Sep 17 00:00:00 2001 From: shahoian Date: Mon, 25 Oct 2021 16:57:24 +0200 Subject: [PATCH 181/236] sync private directory --- testing/private/shahoian/workflows_dpl.desc | 125 ++++++++++++-------- 1 file changed, 74 insertions(+), 51 deletions(-) diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc index 367aad5..5273e7a 100644 --- a/testing/private/shahoian/workflows_dpl.desc +++ b/testing/private/shahoian/workflows_dpl.desc @@ -37,6 +37,9 @@ its-tpc-CTF-QC-its-tpc-50-nomon: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS mch-mid-CTF-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS=MCH,MID production/dpl-workflow.sh" +mid-TF-CTF-QC-mid-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF,QC WORKFLOW_DETECTORS=MID WORKFLOW_DETECTORS_QC=MID production/dpl-workflow.sh" +mid-CTF-QC-mid-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF,QC WORKFLOW_DETECTORS=MID WORKFLOW_DETECTORS_QC=MID production/dpl-workflow.sh" + trd-ctf-20: "O2PDPSuite" reco,20,20,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=TRD production/dpl-workflow.sh" tpc-trd-ctf-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=TPC,TRD production/dpl-workflow.sh" @@ -119,82 +122,90 @@ its-ctf-qcITS-notracking-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS_RECO= #--- -itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-CTF-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-CTF-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +ft0-fv0-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED_noits-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=MFT,MCH ED_CLUSTERS=MFT,MCH production/dpl-workflow.sh" +ft0FLP-fv0FLP-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED_noits-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=MFT,MCH ED_CLUSTERS=MFT,MCH production/dpl-workflow.sh" -ft0-fv0-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED_noits-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=MFT,MCH ED_CLUSTERS=MFT,MCH production/dpl-workflow.sh" -ft0FLP-fv0FLP-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED_noits-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=MFT,MCH ED_CLUSTERS=MFT,MCH production/dpl-workflow.sh" +ft0-fv0-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,MCH ED_CLUSTERS=ITS,MFT,MCH production/dpl-workflow.sh" +ft0FLP-fv0FLP-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,MCH ED_CLUSTERS=ITS,MFT,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-5: "O2PDPSuite" reco,5,5,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-10: "O2PDPSuite" reco,10,10,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -ft0-fv0-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,MCH ED_CLUSTERS=ITS,MFT,MCH production/dpl-workflow.sh" -ft0FLP-fv0FLP-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,MCH ED_CLUSTERS=ITS,MFT,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-5: "O2PDPSuite" reco,5,5,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-10: "O2PDPSuite" reco,10,10,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" +ft0-fv0-its-mftTR-mid-mch_noreco-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT ED_CLUSTERS=ITS,MFT production/dpl-workflow.sh" +ft0FLP-fv0FLP-its-mftTR-mid-mch_noreco-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT ED_CLUSTERS=ITS,MFT production/dpl-workflow.sh" -ft0-fv0-its-mftTR-mid-mch_noreco-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT ED_CLUSTERS=ITS,MFT production/dpl-workflow.sh" -ft0FLP-fv0FLP-its-mftTR-mid-mch_noreco-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT ED_CLUSTERS=ITS,MFT production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-midTR-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpcCPU-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-5: "O2PDPSuite" reco,5,5,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-10: "O2PDPSuite" reco,10,10,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF_CTF-QC-its-mft-tpc-tof-mid-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF_CTF-QC-its-mft-tpc-tof-mid-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-5: "O2PDPSuite" reco,5,5,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-10: "O2PDPSuite" reco,10,10,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" #--- tof QC suppressed -itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos production/dpl-workflow.sh" -its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos production/dpl-workflow.sh" +its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -itsCOSM-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS N_ITSTRK=25 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -itsCOSM-TF-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS N_ITSTRK=25 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS MULTIPLICITY_FACTOR_PROCESS_its_tracker=25 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +itsCOSM-TF-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS MULTIPLICITY_FACTOR_PROCESS_its_tracker=25 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" #---- #mft_decoder2digits_for_noise_calib-30: "O2PDPSuite" reco,30,30,"testing/private/shahoian/mft_decoder2digits_for_noise_calib.sh" -its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-TF-CTF-QC-its-mft-tpc-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-TF-CTF-QC-its-mft-tpc-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 production/dpl-workflow.sh" #---------------------- mft-ctf-qc-raw-cluster-MFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" @@ -206,6 +217,18 @@ hmp-TF-CTF-2: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS= hmp-CTF-1: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" hmp-CTF-2: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" -ctf_itsCOSM-mftTR-tpc-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -ctf_itsCOSM-mftTR-tpcCPU-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - +ctf_itsCOSM-mftTR-tpc-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +ctf_itsCOSM-mftTR-tpcCPU-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" + +#--------------- +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-110: "O2PDPSuite" reco,110,110,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-110: "O2PDPSuite" reco,110,110,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" From 6b2e12b229aa14fdfa52bc61f923ca92db6a8aea Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 26 Oct 2021 08:28:16 +0200 Subject: [PATCH 182/236] Sync from O2 repo --- production/dpl-workflow.sh | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 3dfb0ef..897cf33 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -135,7 +135,7 @@ else fi fi -has_processing_step ENTROPY_ENCODER && GPU_OUTPUT+=",compressed-clusters-ctf" +has_processing_step ENTROPY_ENCODER && has_detector_ctf TPC && GPU_OUTPUT+=",compressed-clusters-ctf" has_detector_flp_processing CPV && CPV_INPUT=digits ! has_detector_flp_processing TOF && TOF_CONFIG+=" --ignore-dist-stf" @@ -283,18 +283,14 @@ if [ $CTFINPUT == 1 ]; then GPU_INPUT=compressed-clusters-ctf TOF_INPUT=digits CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root 2> /dev/null | head -n1` - if [ -z $CTFName ]; then - if [ $WORKFLOWMODE == "print" ]; then - CTFName='$CTFName' - fi + if [[ -z $CTFName && $WORKFLOWMODE == "print" ]]; then + CTFName='$CTFName' fi WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP --max-tf $NTIMEFRAMES --ctf-input ${CTFName} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " elif [ $RAWTFINPUT == 1 ]; then TFName=`ls -t $FILEWORKDIR/o2_*.tf 2> /dev/null | head -n1` - if [ -z $TFName ]; then - if [ $WORKFLOWMODE == "print" ]; then - TFName='$TFName' - fi + if [[ -z $TFName && $WORKFLOWMODE == "print" ]]; then + TFName='$TFName' fi WORKFLOW="o2-raw-tf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP --max-tf $NTIMEFRAMES --input-data ${TFName} --onlyDet $WORKFLOW_DETECTORS | " elif [ $EXTINPUT == 1 ]; then @@ -385,7 +381,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode -if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; then +if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ] && [ $WORKFLOW_DETECTORS_CTF != "NONE" ]; then # Entropy encoder workflows has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${MFT_ENC_MEMFACT:-1.5} --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF) | " has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${FT0_ENC_MEMFACT:-1.5} --pipeline $(get_N ft0-entropy-encoder FT0 CTF) | " @@ -416,7 +412,7 @@ if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ]; th if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi - CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --max-ctf-per-file ${CTF_MAX_PER_FILE} --onlyDet $WORKFLOW_DETECTORS --append-det-to-period $CTF_MAXDETEXT --meta-output-dir $CTF_METAFILES_DIR " + CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --max-ctf-per-file ${CTF_MAX_PER_FILE} --onlyDet $WORKFLOW_DETECTORS_CTF --append-det-to-period $CTF_MAXDETEXT --meta-output-dir $CTF_METAFILES_DIR " if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $SAVE_CTFDICT_NTIMEFRAMES"; fi WORKFLOW+="$CMD_CTF | " fi From f70d1b471a7bb690f35a0ca7fc0e120354d14212 Mon Sep 17 00:00:00 2001 From: afurs Date: Tue, 26 Oct 2021 11:04:24 +0200 Subject: [PATCH 183/236] FIT: some fixes for CTF writer configs --- testing/detectors/FDD/fdd-ctf.sh | 2 +- testing/detectors/FDD/fdd-digits-ctf.sh | 2 +- testing/detectors/FDD/fdd-digits-ds.json | 3 +- testing/detectors/FDD/fdd-digits-qc-ctf.sh | 2 +- testing/detectors/FT0/ft0-ctf.sh | 2 +- testing/detectors/FT0/ft0-digits-ctf.sh | 2 +- testing/detectors/FT0/ft0-digits-ds.json | 3 +- testing/detectors/FT0/ft0-digits-qc-ctf.sh | 2 +- testing/detectors/FV0/fv0-ctf.sh | 2 +- testing/detectors/FV0/fv0-digits-ctf.sh | 2 +- testing/detectors/FV0/fv0-digits-ds.json | 3 +- testing/detectors/FV0/fv0-digits-qc-ctf.sh | 2 +- testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh | 32 ----------------- testing/private/afurs/fdd-ft0-fv0-ctf.sh | 2 +- .../private/afurs/fdd-ft0-fv0-digits-ds.json | 9 +++-- .../afurs/fdd-ft0-fv0-digits-qc-ctf.sh | 2 +- testing/private/afurs/ft0-fv0-ctf-raw.sh | 31 ----------------- testing/private/afurs/ft0-fv0-ctf.sh | 2 +- testing/private/afurs/ft0-fv0-digits-ds.json | 6 ++-- .../private/afurs/ft0-fv0-digits-qc-ctf.sh | 2 +- .../private/afurs/run_fdd_ft0_fv0_ctf_raw.sh | 34 ------------------- testing/private/afurs/run_ft0_fv0_ctf_raw.sh | 34 ------------------- testing/private/afurs/workflows.desc | 2 -- 23 files changed, 29 insertions(+), 154 deletions(-) delete mode 100755 testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh delete mode 100755 testing/private/afurs/ft0-fv0-ctf-raw.sh delete mode 100755 testing/private/afurs/run_fdd_ft0_fv0_ctf_raw.sh delete mode 100755 testing/private/afurs/run_ft0_fv0_ctf_raw.sh diff --git a/testing/detectors/FDD/fdd-ctf.sh b/testing/detectors/FDD/fdd-ctf.sh index 7c2f8a3..ba3b23e 100755 --- a/testing/detectors/FDD/fdd-ctf.sh +++ b/testing/detectors/FDD/fdd-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" diff --git a/testing/detectors/FDD/fdd-digits-ctf.sh b/testing/detectors/FDD/fdd-digits-ctf.sh index c219393..465f1e4 100755 --- a/testing/detectors/FDD/fdd-digits-ctf.sh +++ b/testing/detectors/FDD/fdd-digits-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FDD/fdd-digits-ds.json b/testing/detectors/FDD/fdd-digits-ds.json index a0ff903..5855c29 100644 --- a/testing/detectors/FDD/fdd-digits-ds.json +++ b/testing/detectors/FDD/fdd-digits-ds.json @@ -41,7 +41,8 @@ }, "location": "local", "localMachines": [ - "epn" + "epn", + "localhost" ], "remoteMachine": "alio2-cr1-qme02.cern.ch", "remotePort": "47720", diff --git a/testing/detectors/FDD/fdd-digits-qc-ctf.sh b/testing/detectors/FDD/fdd-digits-qc-ctf.sh index 3fa9bb6..b2e094f 100755 --- a/testing/detectors/FDD/fdd-digits-qc-ctf.sh +++ b/testing/detectors/FDD/fdd-digits-qc-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FT0/ft0-ctf.sh b/testing/detectors/FT0/ft0-ctf.sh index b28762e..c10489e 100755 --- a/testing/detectors/FT0/ft0-ctf.sh +++ b/testing/detectors/FT0/ft0-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" diff --git a/testing/detectors/FT0/ft0-digits-ctf.sh b/testing/detectors/FT0/ft0-digits-ctf.sh index b0bafd9..0889e7b 100755 --- a/testing/detectors/FT0/ft0-digits-ctf.sh +++ b/testing/detectors/FT0/ft0-digits-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FT0/ft0-digits-ds.json b/testing/detectors/FT0/ft0-digits-ds.json index 23abe60..088321f 100644 --- a/testing/detectors/FT0/ft0-digits-ds.json +++ b/testing/detectors/FT0/ft0-digits-ds.json @@ -40,7 +40,8 @@ }, "location": "local", "localMachines": [ - "epn" + "epn", + "localhost" ], "remoteMachine": "alio2-cr1-qme02.cern.ch", "remotePort": "47721", diff --git a/testing/detectors/FT0/ft0-digits-qc-ctf.sh b/testing/detectors/FT0/ft0-digits-qc-ctf.sh index 6bdc350..110d1be 100755 --- a/testing/detectors/FT0/ft0-digits-qc-ctf.sh +++ b/testing/detectors/FT0/ft0-digits-qc-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FV0/fv0-ctf.sh b/testing/detectors/FV0/fv0-ctf.sh index 60b9558..218da6a 100755 --- a/testing/detectors/FV0/fv0-ctf.sh +++ b/testing/detectors/FV0/fv0-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" diff --git a/testing/detectors/FV0/fv0-digits-ctf.sh b/testing/detectors/FV0/fv0-digits-ctf.sh index cb6f986..74890d7 100755 --- a/testing/detectors/FV0/fv0-digits-ctf.sh +++ b/testing/detectors/FV0/fv0-digits-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/detectors/FV0/fv0-digits-ds.json b/testing/detectors/FV0/fv0-digits-ds.json index 4cd40df..8020f8d 100644 --- a/testing/detectors/FV0/fv0-digits-ds.json +++ b/testing/detectors/FV0/fv0-digits-ds.json @@ -41,7 +41,8 @@ }, "location": "local", "localMachines": [ - "epn" + "epn", + "localhost" ], "remoteMachine": "alio2-cr1-qme02.cern.ch", "remotePort": "47722", diff --git a/testing/detectors/FV0/fv0-digits-qc-ctf.sh b/testing/detectors/FV0/fv0-digits-qc-ctf.sh index de317bf..1187d81 100755 --- a/testing/detectors/FV0/fv0-digits-qc-ctf.sh +++ b/testing/detectors/FV0/fv0-digits-qc-ctf.sh @@ -12,7 +12,7 @@ CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" NTHREADS=2 # Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` # The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" diff --git a/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh b/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh deleted file mode 100755 index a926561..0000000 --- a/testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=INFO -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#CTFOUT="/home/afurs/public/out/" -#CTFOUT="${EPN_DATA_DIR}" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#CTFOUT=$FILEWORKDIR -#CTFOUT=$FILEWORKDIR -#FILEWORKDIR=$CTFOUT -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -# ARGS_CTF="" - -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;z:FDD/RAWDATA;digfdd:FDD/DIGITSBC/0;chanfdd:FDD/DIGITSCH/0;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD,FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/private/afurs/fdd-ft0-fv0-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-ctf.sh index 74a5d66..b1b5cf4 100755 --- a/testing/private/afurs/fdd-ft0-fv0-ctf.sh +++ b/testing/private/afurs/fdd-ft0-fv0-ctf.sh @@ -19,7 +19,7 @@ NTHREADS=2 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digfdd:FDD/DIGITSBC/0;chanfdd:FDD/DIGITSCH/0;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/fdd-ft0-fv0-digits-ds.json b/testing/private/afurs/fdd-ft0-fv0-digits-ds.json index a21b3e2..54a5681 100644 --- a/testing/private/afurs/fdd-ft0-fv0-digits-ds.json +++ b/testing/private/afurs/fdd-ft0-fv0-digits-ds.json @@ -40,7 +40,8 @@ }, "location": "local", "localMachines": [ - "epn" + "epn", + "localhost" ], "remoteMachine": "alio2-cr1-qme02.cern.ch", "remotePort": "47720", @@ -65,7 +66,8 @@ }, "location": "local", "localMachines": [ - "epn" + "epn", + "localhost" ], "remoteMachine": "alio2-cr1-qme02.cern.ch", "remotePort": "47721", @@ -90,7 +92,8 @@ }, "location": "local", "localMachines": [ - "epn" + "epn", + "localhost" ], "remoteMachine": "alio2-cr1-qme02.cern.ch", "remotePort": "47722", diff --git a/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh index ec311ad..0476afc 100755 --- a/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh +++ b/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh @@ -19,7 +19,7 @@ NTHREADS=1 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;z:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/ft0-fv0-ctf-raw.sh b/testing/private/afurs/ft0-fv0-ctf-raw.sh deleted file mode 100755 index bdf7924..0000000 --- a/testing/private/afurs/ft0-fv0-ctf-raw.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=INFO -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#CTFOUT="/home/afurs/public/out/" -#CTFOUT="${EPN_DATA_DIR}" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#CTFOUT=$FILEWORKDIR -#CTFOUT=$FILEWORKDIR -#FILEWORKDIR=$CTFOUT -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -# ARGS_CTF="" - -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/private/afurs/ft0-fv0-ctf.sh b/testing/private/afurs/ft0-fv0-ctf.sh index 031e3e9..64a9233 100755 --- a/testing/private/afurs/ft0-fv0-ctf.sh +++ b/testing/private/afurs/ft0-fv0-ctf.sh @@ -19,7 +19,7 @@ NTHREADS=2 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/ft0-fv0-digits-ds.json b/testing/private/afurs/ft0-fv0-digits-ds.json index af09cef..17c2da3 100644 --- a/testing/private/afurs/ft0-fv0-digits-ds.json +++ b/testing/private/afurs/ft0-fv0-digits-ds.json @@ -40,7 +40,8 @@ }, "location": "local", "localMachines": [ - "epn" + "epn", + "localhost" ], "remoteMachine": "alio2-cr1-qme02.cern.ch", "remotePort": "47721", @@ -65,7 +66,8 @@ }, "location": "local", "localMachines": [ - "epn" + "epn", + "localhost" ], "remoteMachine": "alio2-cr1-qme02.cern.ch", "remotePort": "47722", diff --git a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh index 3ff49e1..7e4c713 100755 --- a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh +++ b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh @@ -19,7 +19,7 @@ NTHREADS=1 # The directory must exist # ARGS_CTF="" -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 200 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" +ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" MYDIR="$(dirname $(readlink -f $0))" PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" diff --git a/testing/private/afurs/run_fdd_ft0_fv0_ctf_raw.sh b/testing/private/afurs/run_fdd_ft0_fv0_ctf_raw.sh deleted file mode 100755 index 55ea4a5..0000000 --- a/testing/private/afurs/run_fdd_ft0_fv0_ctf_raw.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=fdd-ft0-fv0-ctf-raw # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/ft0-fv0-ctf-raw.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/private/afurs/run_ft0_fv0_ctf_raw.sh b/testing/private/afurs/run_ft0_fv0_ctf_raw.sh deleted file mode 100755 index 579e2e7..0000000 --- a/testing/private/afurs/run_ft0_fv0_ctf_raw.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=ft0-fv0-ctf-raw # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/ft0-fv0-ctf-raw.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/private/afurs/workflows.desc b/testing/private/afurs/workflows.desc index c41812e..29600e6 100644 --- a/testing/private/afurs/workflows.desc +++ b/testing/private/afurs/workflows.desc @@ -1,7 +1,5 @@ ft0-fv0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-ctf.sh" -ft0-fv0-ctf-raw: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-ctf-raw.sh" ft0-fv0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-digits-qc-ctf.sh" fdd-ft0-fv0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/fdd-ft0-fv0-ctf.sh" -fdd-ft0-fv0-ctf-raw: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/fdd-ft0-fv0-ctf-raw.sh" fdd-ft0-fv0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh" From d8202abc4502de4ac53172f9a73dee700b53af7d Mon Sep 17 00:00:00 2001 From: Chiara Zampolli Date: Mon, 25 Oct 2021 13:28:19 +0200 Subject: [PATCH 184/236] Adding TOF time and diagnostic workflow --- production/calib/tof-diagn-aggregator.sh | 32 + .../tof-standalone-cosmic-reco-time-calib.sh | 36 ++ production/calib/tof-standalone-reco.sh | 36 ++ production/calib/tof-time-calib-aggregator.sh | 32 + production/standalone-calibration.desc | 4 + testing/private/zampolli/calib/run.sh | 39 ++ .../zampolli/out_run_ext_dpl_20211014.out | 607 ++++++++++++++++++ testing/private/zampolli/reproc_CTF | 1 + testing/private/zampolli/reproc_TF_CTF | 1 + testing/private/zampolli/runTF_ext_dpl.sh | 48 ++ testing/private/zampolli/run_ext_dpl.sh | 53 ++ testing/private/zampolli/workflows.desc | 1 + testing/private/zampolli/zampolli-workflow.sh | 20 + 13 files changed, 910 insertions(+) create mode 100755 production/calib/tof-diagn-aggregator.sh create mode 100755 production/calib/tof-standalone-cosmic-reco-time-calib.sh create mode 100755 production/calib/tof-standalone-reco.sh create mode 100755 production/calib/tof-time-calib-aggregator.sh create mode 100755 testing/private/zampolli/calib/run.sh create mode 100644 testing/private/zampolli/out_run_ext_dpl_20211014.out create mode 100755 testing/private/zampolli/reproc_CTF create mode 100755 testing/private/zampolli/reproc_TF_CTF create mode 100755 testing/private/zampolli/runTF_ext_dpl.sh create mode 100755 testing/private/zampolli/run_ext_dpl.sh create mode 100644 testing/private/zampolli/workflows.desc create mode 100755 testing/private/zampolli/zampolli-workflow.sh diff --git a/production/calib/tof-diagn-aggregator.sh b/production/calib/tof-diagn-aggregator.sh new file mode 100755 index 0000000..01de0bb --- /dev/null +++ b/production/calib/tof-diagn-aggregator.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +source common/setenv.sh + +# --------------------------------------------------------------------------------------------------------------------- +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" +ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +ARGS_ALL_CONFIG="keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" + +PROXY_INSPEC="diagWords:TOF/DIAFREQ/0;eos:***/INFORMATION" + +WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name tof-diagn-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=tof-diagn-input-proxy,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " +WORKFLOW+="o2-calibration-tof-diagnostic-workflow --tf-per-slot 25000 --max-delay 10 $ARGS_ALL | " +WORKFLOW+="o2-calibration-ccdb-populator-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ccdb-path=\"http://ccdb-test.cern.ch:8080\" | " +WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi diff --git a/production/calib/tof-standalone-cosmic-reco-time-calib.sh b/production/calib/tof-standalone-cosmic-reco-time-calib.sh new file mode 100755 index 0000000..87c4ee5 --- /dev/null +++ b/production/calib/tof-standalone-cosmic-reco-time-calib.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +source common/setenv.sh + +# --------------------------------------------------------------------------------------------------------------------- +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" +ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" + +PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" +NTHREADS=1 +PROXY_OUTSPEC="calclus:TOF/INFOCALCLUS;cosmics:TOF/INFOCOSMICS;trkcos:TOF/INFOTRACKCOS;trksiz:TOF/INFOTRACKSIZE" +MYDIR="$(dirname $(readlink -f $0))/../../testing/detectors/TOF" + +WORKFLOW="o2-dpl-raw-proxy ${ARGS_ALL} --dataspec \"$PROXY_INSPEC\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " +WORKFLOW+="o2-tof-reco-workflow --input-type raw --output-type clusters ${ARGS_ALL} --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics --pipeline \"tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS}\" | " +WORKFLOW+="o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn | " +WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --proxy-channel-name tof-time-calib-input-proxy --channel-config \"name=tof-time-calib-input-proxy,method=connect,type=push,transport=zeromq,rateLogging=0\" | " +WORKFLOW+="o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi diff --git a/production/calib/tof-standalone-reco.sh b/production/calib/tof-standalone-reco.sh new file mode 100755 index 0000000..185ff11 --- /dev/null +++ b/production/calib/tof-standalone-reco.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +source common/setenv.sh + +# --------------------------------------------------------------------------------------------------------------------- +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" +ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" + +PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" +NTHREADS=1 +PROXY_OUTSPEC="diagWords:TOF/DIAFREQ" +MYDIR="$(dirname $(readlink -f $0))/../../testing/detectors/TOF" + +WORKFLOW="o2-dpl-raw-proxy ${ARGS_ALL} --dataspec \"$PROXY_INSPEC\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " +WORKFLOW+="o2-tof-reco-workflow --input-type raw --output-type clusters ${ARGS_ALL} --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics --pipeline \"tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS}\" | " +WORKFLOW+="o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn | " +WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --proxy-channel-name tof-diagn-input-proxy --channel-config \"name=tof-diagn-input-proxy,method=connect,type=push,transport=zeromq,rateLogging=0\" | " +WORKFLOW+="o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi diff --git a/production/calib/tof-time-calib-aggregator.sh b/production/calib/tof-time-calib-aggregator.sh new file mode 100755 index 0000000..de0b1af --- /dev/null +++ b/production/calib/tof-time-calib-aggregator.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +source common/setenv.sh + +# --------------------------------------------------------------------------------------------------------------------- +# Set general arguments +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" +ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" +if [ $SHMTHROW == 0 ]; then + ARGS_ALL+=" --shm-throw-bad-alloc 0" +fi +if [ $NORATELOG == 1 ]; then + ARGS_ALL+=" --fairmq-rate-logging 0" +fi +ARGS_ALL_CONFIG="keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" + +PROXY_INSPEC="calclus:TOF/INFOCALCLUS/0;cosmics:TOF/INFOCOSMICS/0;trkcos:TOF/INFOTRACKCOS/0;trksiz:TOF/INFOTRACKSIZE/0;eos:***/INFORMATION" + +WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name tof-time-calib-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=tof-time-calib-input-proxy,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " +WORKFLOW+="o2-calibration-tof-calib-workflow --cosmics --do-channel-offset --min-entries 1000 $ARGS_ALL | " +WORKFLOW+="o2-calibration-ccdb-populator-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ccdb-path=\"http://ccdb-test.cern.ch:8080\" | " +WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" + +if [ $WORKFLOWMODE == "print" ]; then + echo Workflow command: + echo $WORKFLOW | sed "s/| */|\n/g" +else + # Execute the command we have assembled + WORKFLOW+=" --$WORKFLOWMODE" + eval $WORKFLOW +fi diff --git a/production/standalone-calibration.desc b/production/standalone-calibration.desc index 4fcb69f..1e9af1d 100644 --- a/production/standalone-calibration.desc +++ b/production/standalone-calibration.desc @@ -1 +1,5 @@ ITS-noise-calibration: "O2PDPSuite" reco,10,10,"production/calib/its-noise-processing.sh" calib,10,"production/calib/its-noise-aggregator.sh" + +TOF-diagnostic-calibration: "O2PDPSuite" reco,10,10,"SHMSIZE=64000000000 production/calib/tof-standalone-reco.sh" calib,4,"production/calib/tof-diagn-aggregator.sh" + +TOF-time-calibration: "O2PDPSuite" reco,10,10,"SHMSIZE=64000000000 production/calib/tof-standalone-cosmic-reco-time-calib.sh" calib,4,"production/calib/tof-time-calib-aggregator.sh" diff --git a/testing/private/zampolli/calib/run.sh b/testing/private/zampolli/calib/run.sh new file mode 100755 index 0000000..46277a0 --- /dev/null +++ b/testing/private/zampolli/calib/run.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.13 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository + +export GEN_TOPO_LIBRARY_FILE=production/standalone-calibration.desc # Topology description library file to load +export WORKFLOW_DETECTORS=TOF # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=TOF # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB=TOF # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_DETECTORS_RECO=TOF # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_DETECTORS_FLP_PROCESSING= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=QC,CALIB # Additional paramters for the workflow +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF +export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with +export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with +export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with + +for wf in "$@" +do + echo + echo + echo Processing workflow $wf + export GEN_TOPO_WORKFLOW_NAME=$wf + export WORKFLOWMODE=dds + /home/epn/pdp/gen_topo.sh > $HOME/gen_topo_calib/dplTest/${GEN_TOPO_WORKFLOW_NAME}.xml + # export WORKFLOWMODE=print + # /home/epn/pdp/gen_topo.sh > $HOME/gen_topo_calib/dpl/${GEN_TOPO_WORKFLOW_NAME}.sh + +done + diff --git a/testing/private/zampolli/out_run_ext_dpl_20211014.out b/testing/private/zampolli/out_run_ext_dpl_20211014.out new file mode 100644 index 0000000..ac041a8 --- /dev/null +++ b/testing/private/zampolli/out_run_ext_dpl_20211014.out @@ -0,0 +1,607 @@ +[zampolli@epn158 zampolli]$ cat ../shahoian/workflows_dpl.desc | grep -v '#' | grep 'TOF' | cut -d':' -f1 | xargs ../shahoian/run_ext_dpl.sh > out_run_ext_dpl_20211014.out +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology tof-ctf-qcTOF-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology tof-ctf-qcTOF-59 - ['tof-ctf-qcTOF-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_qkk28h60/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_qkk28h60/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-mft-tpc-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-mft-tpc-tof-CTF-QC-tpc-59 - ['its-mft-tpc-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh +Running DPL command WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_cmyue90z/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_cmyue90z/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology mft-tpc-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology mft-tpc-tof-CTF-QC-tpc-59 - ['mft-tpc-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh +Running DPL command WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_ykua0q5j/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_ykua0q5j/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59 - ['its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_p1qii2br/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_p1qii2br/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology mft-tpc-tof-CTF-QC-mft-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology mft-tpc-tof-CTF-QC-mft-tpc-tof-59 - ['mft-tpc-tof-CTF-QC-mft-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_uq_lb2ec/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_uq_lb2ec/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-mft-tpcCPU-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-mft-tpcCPU-tof-CTF-QC-tpc-59 - ['its-mft-tpcCPU-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_pnsrdnmi/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_pnsrdnmi/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology mft-tpcCPU-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology mft-tpcCPU-tof-CTF-QC-tpc-59 - ['mft-tpcCPU-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_8ji2jq3x/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_8ji2jq3x/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59 - ['its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_cpo_qpby/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_cpo_qpby/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59 - ['mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_oq_mea7f/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_oq_mea7f/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology mft-tof-CTF-QC-mft-tof-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology mft-tof-CTF-QC-mft-tof-59 - ['mft-tof-CTF-QC-mft-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_d4npvb3_/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_d4npvb3_/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-tof-CTF-QC-its-tof-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-tof-CTF-QC-its-tof-59 - ['its-tof-CTF-QC-its-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_eopxro95/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_eopxro95/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-tpc-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-tpc-tof-CTF-QC-tpc-59 - ['its-tpc-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh +Running DPL command WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_7cmco9vf/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_7cmco9vf/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-tpc-tof-CTF-QC-its-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-tpc-tof-CTF-QC-its-tpc-tof-59 - ['its-tpc-tof-CTF-QC-its-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_sc_zfbpq/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_sc_zfbpq/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-59 - ['its-tpc-tof-trd-CTF-QC-its-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh +Running DPL command WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_kbfxfas5/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_kbfxfas5/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59 - ['its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_3ybd740q/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_3ybd740q/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-50 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-50 - ['its-tpc-tof-trd-CTF-QC-its-tpc-tof-50:', 'O2PDPSuite', 'reco,50,50,WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 50 - 50 nodes): WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh +Running DPL command WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_pkhqnxxu/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_pkhqnxxu/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50 - ['its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50:', 'O2PDPSuite', 'reco,50,50,WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 50 - 50 nodes): WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_thvk_tyo/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_thvk_tyo/wf2.dds | wc -l` == 0 ] +Creating reconstruction collection... +New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" +DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" +Done +Removing temporary output file /home/zampolli/gen_topo/test_/output.xml +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its-tpc-tof-CTF-QC-its-tpc-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc +Found topology its-tpc-tof-CTF-QC-its-tpc-tof-ED-50 - ['its-tpc-tof-CTF-QC-its-tpc-tof-ED-50:', 'O2PDPSuite', 'reco,50,50,WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 50 - 50 nodes): WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_1ig3geij/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_1ig3geij/wf2.dds | wc -l` == 0 ] +Error running command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_1ig3geij/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_1ig3geij/wf2.dds | wc -l` == 0 ] + +Traceback (most recent call last): + File "./tools/parse", line 113, in + raise +RuntimeError: No active exception to reraise +Error during workflow description parsing +topology generation failed +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology tpc-tof-CTF-QC-tpc-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc +Found topology tpc-tof-CTF-QC-tpc-tof-ED-50 - ['tpc-tof-CTF-QC-tpc-tof-ED-50:', 'O2PDPSuite', 'reco,50,50,WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh'] +Loading module O2PDPSuite +Loading O2PDPSuite/dataflow-20211014-1 + Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 + lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 + ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 + Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 + Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 + DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 + DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 + VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 +Adding reco workflow ( 50 - 50 nodes): WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh +Running DPL command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_ebj8u_py/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_ebj8u_py/wf2.dds | wc -l` == 0 ] +Error running command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_ebj8u_py/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_ebj8u_py/wf2.dds | wc -l` == 0 ] + +Traceback (most recent call last): + File "./tools/parse", line 113, in + raise +RuntimeError: No active exception to reraise +Error during workflow description parsing +topology generation failed +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-70 of library testing/private/shahoian/workflows_dpl.desc +Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-70 +Error during workflow description parsing +topology generation failed +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc +Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-50 +Error during workflow description parsing +topology generation failed +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its_notracking-tpc-tof-CTF-QC-its-tof-ED-70 of library testing/private/shahoian/workflows_dpl.desc +Could not find workflow its_notracking-tpc-tof-CTF-QC-its-tof-ED-70 +Error during workflow description parsing +topology generation failed +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its_notracking-tpc-tof-CTF-QC-its-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc +Could not find workflow its_notracking-tpc-tof-CTF-QC-its-tof-ED-50 +Error during workflow description parsing +topology generation failed +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70 of library testing/private/shahoian/workflows_dpl.desc +Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70 +Error during workflow description parsing +topology generation failed +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50 of library testing/private/shahoian/workflows_dpl.desc +Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50 +Error during workflow description parsing +topology generation failed +Loading ODC/0.50-6 + Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 + FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 + sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 + Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 + asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 + protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 +Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml +Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50-ctfmeta of library testing/private/shahoian/workflows_dpl.desc +Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50-ctfmeta +Error during workflow description parsing +topology generation failed +[zampolli@epn158 zampolli]$ ls /home/epn/jliu/itsCluster.json +/home/epn/jliu/itsCluster.json +[zampolli@epn158 zampolli]$ diff --git a/testing/private/zampolli/reproc_CTF b/testing/private/zampolli/reproc_CTF new file mode 100755 index 0000000..1eb2db3 --- /dev/null +++ b/testing/private/zampolli/reproc_CTF @@ -0,0 +1 @@ +cat ../shahoian/workflows_dpl.desc | grep -v '#' | grep -v '\-TF\-' | grep 'tof' | cut -d':' -f1 | xargs ./run_ext_dpl.sh diff --git a/testing/private/zampolli/reproc_TF_CTF b/testing/private/zampolli/reproc_TF_CTF new file mode 100755 index 0000000..5cdd690 --- /dev/null +++ b/testing/private/zampolli/reproc_TF_CTF @@ -0,0 +1 @@ +cat ../shahoian/workflows_dpl.desc | grep -v '#' | grep '\-TF\-' | grep 'tof' | cut -d':' -f1 | xargs ./runTF_ext_dpl.sh diff --git a/testing/private/zampolli/runTF_ext_dpl.sh b/testing/private/zampolli/runTF_ext_dpl.sh new file mode 100755 index 0000000..517573d --- /dev/null +++ b/testing/private/zampolli/runTF_ext_dpl.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard +#export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository + +export EXTINPUT=1 +export EPNMODE=1 +export SYNCMODE=1 +export SHMSIZE=128000000000 +export INFOLOGGER_SEVERITY=warning + +export EDJSONS_DIR="/home/ed/jsons" + +export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF +export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" +#export GPU_EXTRA_CONFIG="" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" + +export GEN_TOPO_IGNORE_ERROR=1 + + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 +export MULTIPLICITY_FACTOR_CTFENCODERS=1 +export MULTIPLICITY_FACTOR_REST=1 + +for wf in "$@" +do + echo + echo + echo Processing workflow $wf + export GEN_TOPO_WORKFLOW_NAME=$wf + /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.xml +done diff --git a/testing/private/zampolli/run_ext_dpl.sh b/testing/private/zampolli/run_ext_dpl.sh new file mode 100755 index 0000000..ba30283 --- /dev/null +++ b/testing/private/zampolli/run_ext_dpl.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +export GEN_TOPO_PARTITION=test # ECS Partition +#export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard +export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard + +# Use these settings to fetch the Workflow Repository using a hash / tag +#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash +#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch + +# Use these settings to specify a path to the workflow repository in your home dir +export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository +export GEN_TOPO_SOURCE=/home/zampolli/alice/O2DataProcessing # Path to O2DataProcessing repository + +export EXTINPUT=1 +export EPNMODE=1 +export SYNCMODE=1 +export SHMSIZE=128000000000 +export INFOLOGGER_SEVERITY=warning + +export EDJSONS_DIR="/home/ed/jsons" + +export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load +export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) +export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for +export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for +export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU +export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) +export NHBPERTF=128 # Number of HBF per TF +export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" +#export GPU_EXTRA_CONFIG="" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" + +export GEN_TOPO_IGNORE_ERROR=1 + +export MULTIPLICITY_FACTOR_RAWDECODERS=1 +export MULTIPLICITY_FACTOR_CTFENCODERS=1 +export MULTIPLICITY_FACTOR_REST=1 + + +for wf in "$@" +do + + echo + echo + echo Processing workflow $wf + export GEN_TOPO_WORKFLOW_NAME=$wf + export WORKFLOWMODE=dds + /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dplTest/${GEN_TOPO_WORKFLOW_NAME}.xml +# export WORKFLOWMODE=print +# /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.sh + +done diff --git a/testing/private/zampolli/workflows.desc b/testing/private/zampolli/workflows.desc new file mode 100644 index 0000000..f2e03e4 --- /dev/null +++ b/testing/private/zampolli/workflows.desc @@ -0,0 +1 @@ +zampolli-workflow: "DataDistribution QualityControl" reco,20,20,"SHMSIZE=64000000000 testing/private/zampolli/zampolli-workflow.sh" diff --git a/testing/private/zampolli/zampolli-workflow.sh b/testing/private/zampolli/zampolli-workflow.sh new file mode 100755 index 0000000..44bcedc --- /dev/null +++ b/testing/private/zampolli/zampolli-workflow.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +source common/setenv.sh + +SEVERITY=warning +ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" +ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" +#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" +ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" + +PROXY_INSPEC="A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + +o2-dpl-raw-proxy $ARGS_ALL \ + --dataspec "$PROXY_INSPEC" \ + --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ + | o2-tpc-raw-to-digits-workflow $ARGS_ALL \ + --input-spec "$PROXY_INSPEC" \ + --remove-duplicates \ + --configKeyValues "$ARGS_ALL_CONFIG;TPCDigitDump.LastTimeBin=1000;" \ + | o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds From 4eaa76e531b1360c078ea682c9e1600f792f36f3 Mon Sep 17 00:00:00 2001 From: Chiara Zampolli Date: Mon, 25 Oct 2021 13:36:54 +0200 Subject: [PATCH 185/236] remove obsolete file --- .../zampolli/out_run_ext_dpl_20211014.out | 607 ------------------ 1 file changed, 607 deletions(-) delete mode 100644 testing/private/zampolli/out_run_ext_dpl_20211014.out diff --git a/testing/private/zampolli/out_run_ext_dpl_20211014.out b/testing/private/zampolli/out_run_ext_dpl_20211014.out deleted file mode 100644 index ac041a8..0000000 --- a/testing/private/zampolli/out_run_ext_dpl_20211014.out +++ /dev/null @@ -1,607 +0,0 @@ -[zampolli@epn158 zampolli]$ cat ../shahoian/workflows_dpl.desc | grep -v '#' | grep 'TOF' | cut -d':' -f1 | xargs ../shahoian/run_ext_dpl.sh > out_run_ext_dpl_20211014.out -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology tof-ctf-qcTOF-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology tof-ctf-qcTOF-59 - ['tof-ctf-qcTOF-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_qkk28h60/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_qkk28h60/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-mft-tpc-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-mft-tpc-tof-CTF-QC-tpc-59 - ['its-mft-tpc-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh -Running DPL command WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_cmyue90z/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_cmyue90z/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology mft-tpc-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology mft-tpc-tof-CTF-QC-tpc-59 - ['mft-tpc-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh -Running DPL command WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_ykua0q5j/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_ykua0q5j/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59 - ['its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_p1qii2br/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_p1qii2br/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology mft-tpc-tof-CTF-QC-mft-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology mft-tpc-tof-CTF-QC-mft-tpc-tof-59 - ['mft-tpc-tof-CTF-QC-mft-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_uq_lb2ec/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_uq_lb2ec/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-mft-tpcCPU-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-mft-tpcCPU-tof-CTF-QC-tpc-59 - ['its-mft-tpcCPU-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_pnsrdnmi/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_pnsrdnmi/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology mft-tpcCPU-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology mft-tpcCPU-tof-CTF-QC-tpc-59 - ['mft-tpcCPU-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_8ji2jq3x/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_8ji2jq3x/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59 - ['its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_cpo_qpby/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_cpo_qpby/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59 - ['mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_oq_mea7f/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_oq_mea7f/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology mft-tof-CTF-QC-mft-tof-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology mft-tof-CTF-QC-mft-tof-59 - ['mft-tof-CTF-QC-mft-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_d4npvb3_/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_d4npvb3_/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-tof-CTF-QC-its-tof-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-tof-CTF-QC-its-tof-59 - ['its-tof-CTF-QC-its-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_eopxro95/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_eopxro95/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-tpc-tof-CTF-QC-tpc-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-tpc-tof-CTF-QC-tpc-59 - ['its-tpc-tof-CTF-QC-tpc-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh -Running DPL command WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_7cmco9vf/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_7cmco9vf/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-tpc-tof-CTF-QC-its-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-tpc-tof-CTF-QC-its-tpc-tof-59 - ['its-tpc-tof-CTF-QC-its-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_sc_zfbpq/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_sc_zfbpq/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-59 - ['its-tpc-tof-trd-CTF-QC-its-tpc-tof-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh -Running DPL command WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_kbfxfas5/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_kbfxfas5/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59 - ['its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59:', 'O2PDPSuite', 'reco,59,59,WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 59 - 59 nodes): WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_3ybd740q/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_3ybd740q/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-50 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-50 - ['its-tpc-tof-trd-CTF-QC-its-tpc-tof-50:', 'O2PDPSuite', 'reco,50,50,WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 50 - 50 nodes): WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh -Running DPL command WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_pkhqnxxu/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_pkhqnxxu/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50 - ['its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50:', 'O2PDPSuite', 'reco,50,50,WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 50 - 50 nodes): WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_thvk_tyo/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_thvk_tyo/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/zampolli/gen_topo/test_/output.xml" -DDS topology "topology" successfully opened from file "/home/zampolli/gen_topo/test_/output.xml" -Done -Removing temporary output file /home/zampolli/gen_topo/test_/output.xml -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its-tpc-tof-CTF-QC-its-tpc-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc -Found topology its-tpc-tof-CTF-QC-its-tpc-tof-ED-50 - ['its-tpc-tof-CTF-QC-its-tpc-tof-ED-50:', 'O2PDPSuite', 'reco,50,50,WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 50 - 50 nodes): WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_1ig3geij/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_1ig3geij/wf2.dds | wc -l` == 0 ] -Error running command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_1ig3geij/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_1ig3geij/wf2.dds | wc -l` == 0 ] - -Traceback (most recent call last): - File "./tools/parse", line 113, in - raise -RuntimeError: No active exception to reraise -Error during workflow description parsing -topology generation failed -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology tpc-tof-CTF-QC-tpc-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc -Found topology tpc-tof-CTF-QC-tpc-tof-ED-50 - ['tpc-tof-CTF-QC-tpc-tof-ED-50:', 'O2PDPSuite', 'reco,50,50,WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh'] -Loading module O2PDPSuite -Loading O2PDPSuite/dataflow-20211014-1 - Loading requirement: utf8proc/v2.6.1-4 lzma/v5.2.3-7 Clang/v12.0.1-9 - lz4/v1.9.3-10 arrow/v5.0.0-alice1-12 GSL/v1.16-9 libxml2/v2.9.3-9 - ROOT/v6-24-06-9 FairRoot/v18.4.2-25 Vc/1.4.1-12 libInfoLogger/v2.2.0-2 - Monitoring/v3.8.9-8 Ppconsul/v0.2.2-10 Configuration/v2.6.3-6 - Common-O2/v1.6.0-18 ms_gsl/3.1.0-6 GLFW/3.3.2-12 libuv/v1.40.0-12 - DebugGUI/v0.6.1-4 libjalienO2/0.1.3-9 FFTW3/v3.3.9-7 O2/dataflow-20211014-1 - DataDistribution/v1.0.10-47 Control-OCCPlugin/v0.26.82-1 - VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-50 QualityControl/v1.33.0-7 -Adding reco workflow ( 50 - 50 nodes): WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh -Running DPL command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_ebj8u_py/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_ebj8u_py/wf2.dds | wc -l` == 0 ] -Error running command WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF production/dpl-workflow.sh | grep -v "^\[" > /tmp/o2_workflow_ebj8u_py/wf2.dds && [ `grep "^\[" /tmp/o2_workflow_ebj8u_py/wf2.dds | wc -l` == 0 ] - -Traceback (most recent call last): - File "./tools/parse", line 113, in - raise -RuntimeError: No active exception to reraise -Error during workflow description parsing -topology generation failed -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-70 of library testing/private/shahoian/workflows_dpl.desc -Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-70 -Error during workflow description parsing -topology generation failed -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc -Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-50 -Error during workflow description parsing -topology generation failed -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its_notracking-tpc-tof-CTF-QC-its-tof-ED-70 of library testing/private/shahoian/workflows_dpl.desc -Could not find workflow its_notracking-tpc-tof-CTF-QC-its-tof-ED-70 -Error during workflow description parsing -topology generation failed -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its_notracking-tpc-tof-CTF-QC-its-tof-ED-50 of library testing/private/shahoian/workflows_dpl.desc -Could not find workflow its_notracking-tpc-tof-CTF-QC-its-tof-ED-50 -Error during workflow description parsing -topology generation failed -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70 of library testing/private/shahoian/workflows_dpl.desc -Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70 -Error during workflow description parsing -topology generation failed -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50 of library testing/private/shahoian/workflows_dpl.desc -Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50 -Error during workflow description parsing -topology generation failed -Loading ODC/0.50-6 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-4 fmt/7.1.0-12 - FairLogger/v1.10.1-3 zlib/v1.2.8-9 OpenSSL/v1.0.2o-10 libpng/v1.6.34-10 - sqlite/v3.15.0-4 libffi/v3.2.1-4 FreeType/v2.10.1-9 Python/v3.6.10-16 - Python-modules/1.0-21 boost/v1.75.0-18 ZeroMQ/v4.3.3-11 ofi/v1.7.1-9 - asio/v1.19.1-3 asiofi/v0.5.1-3 DDS/3.5.18-5 FairMQ/v1.4.42-8 - protobuf/v3.14.0-10 c-ares/v1.17.1-7 re2/2019-09-01-12 grpc/v1.34.0-alice2-6 -Running topology generation to temporary file /home/zampolli/gen_topo/test_/output.xml -Using topology its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50-ctfmeta of library testing/private/shahoian/workflows_dpl.desc -Could not find workflow its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50-ctfmeta -Error during workflow description parsing -topology generation failed -[zampolli@epn158 zampolli]$ ls /home/epn/jliu/itsCluster.json -/home/epn/jliu/itsCluster.json -[zampolli@epn158 zampolli]$ From ce8591c2f9d8333552f4d4025359030d11192d2a Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 26 Oct 2021 16:12:41 +0200 Subject: [PATCH 186/236] Sync updates from O2 repo --- production/dpl-workflow.sh | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 897cf33..ef3cfab 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -283,16 +283,16 @@ if [ $CTFINPUT == 1 ]; then GPU_INPUT=compressed-clusters-ctf TOF_INPUT=digits CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root 2> /dev/null | head -n1` - if [[ -z $CTFName && $WORKFLOWMODE == "print" ]]; then - CTFName='$CTFName' - fi - WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP --max-tf $NTIMEFRAMES --ctf-input ${CTFName} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " + [[ -z $CTFName && $WORKFLOWMODE == "print" ]] && CTFName='$CTFName' + [[ ! -z $INPUT_FILE_LIST ]] && CTFName=$INPUT_FILE_LIST + if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi + WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --ctf-input ${CTFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " elif [ $RAWTFINPUT == 1 ]; then TFName=`ls -t $FILEWORKDIR/o2_*.tf 2> /dev/null | head -n1` - if [[ -z $TFName && $WORKFLOWMODE == "print" ]]; then - TFName='$TFName' - fi - WORKFLOW="o2-raw-tf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP --max-tf $NTIMEFRAMES --input-data ${TFName} --onlyDet $WORKFLOW_DETECTORS | " + [[ -z $TFName && $WORKFLOWMODE == "print" ]] && TFName='$TFName' + [[ ! -z $INPUT_FILE_LIST ]] && TFName=$INPUT_FILE_LIST + if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi + WORKFLOW="o2-raw-tf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --input-data ${TFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --onlyDet $WORKFLOW_DETECTORS | " elif [ $EXTINPUT == 1 ]; then PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0" PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" @@ -325,7 +325,8 @@ elif [ $EXTINPUT == 1 ]; then done WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"$PROXY_INSPEC\" --channel-config \"$PROXY_CHANNEL\" | " else - WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg | " + if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--loop $NTIMEFRAMES"; fi + WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY $NTIMEFRAMES_CMD --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg | " fi # --------------------------------------------------------------------------------------------------------------------- From a4140e19efef4a81766a187948161a48d418569d Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 26 Oct 2021 16:12:46 +0200 Subject: [PATCH 187/236] Update documentation --- production/README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/production/README.md b/production/README.md index c22c64e..23c565f 100644 --- a/production/README.md +++ b/production/README.md @@ -49,8 +49,45 @@ For user modification of the workflow settings, the folloing *EXTRA* environment In case the CTF dictionaries were created from the data drastically different from the one being compressed, the default memory allocation for the CTF buffer might be insufficient. One can apply scaling factor to the buffer size estimate (default=1.5) of particular detector by defining variable e.g. `TPC_ENC_MEMFACT=3.5` +# File input for ctf-reader / raw-tf-reader +- The variable `$INPUT_FILE_LIST` can be a comma-seperated list of file, or a file with a file-list of CTFs/raw TFs. +- The variable `$INPUT_FILE_COPY_CMD` can provide a custom copy command (default is to fetch the files from EOS). + # Remarks on QC The JSON files for the individual detectors are merged into one JSON file, which is cached during the run on the shared EPN home folder. The default JSON file per detector is defined in `qc-workflow.sh`. JSONs per detector can be overridden by exporting `QC_JSON_[DETECTOR_NAME]`, e.g. `QC_JSON_TPC`, when creating the workflow. The global section of the merged qc JSON config is taken from qc_global.json + +# run-workflow-on-inputlist.sh +`O2/prodtests/full-system-test/run-workflow-on-inputlist.sh` is a small tool to run the `dpl-workflow.sh` on a list of files. +Technically, it is a small wrapper which just launches `dpl-workflow.sh`, and optionally the `StfBuilder` in parallel. + +*NOTE*: Currently it uses the `dpl-workflow.sh` in the O2 repo, not the O2DataProcessing repo. During development, there are 2 copies of this script. This will be cleaned up soon. + +The syntax is: +``` +run-workflow-on-inputlist.sh [CTF | DD | TF] [name of file with list of files to be processed] [Timeout in seconds (optional: default = disabled)] [Log to stdout (optional: default = enabled)] +``` +The modes are: +- DD: Read raw timeframes using DataDistribution / StfBuilder +- TF: Read raw timeframes using o2-raw-tf-reader-workflow +- CTF: Read CTFs using the o2-ctf-reader-workflow + +The second argument is the name of a list-files containing a list of files to be processed. +In the CTF and TF modes, it can also be a comma-separated list, but this is not supported in the DD mode. +- (The work `LOCAL` may be used to fetch files from the local folder.) +- (In case the copy command must be adjusted, use `$INPUT_FILE_COPY_CMD`) + +The third parameter is an optional timeout in seconds, after which the processing is aborted. + +The forth parameter enables writing of all workflow output to stdout in addition. +In any case the output is logged to files log_[date]_*.log. + +The tool passes all env variables on to `dpl-workflow.sh` thus it can be used in the same way. +*Note* Not that when running in `DD` mode, the SHM size for the StfBuilder must be provided. *NOTE* that this is in MB not in bytes. + +An example command line is: +``` +EPNMODE=1 WORKFLOW_DETECTORS=TPC XrdSecSSSKT=~/.eos/my.key TFDELAY=10 NTIMEFRAMES=10 SHMSIZE=32000000000 DDSHMSIZE=32000 ~/alice/O2/prodtests/full-system-test/run-workflow-on-inputlist.sh DD file_list.txt 500 1 +``` From 8f111eaa341d77e0d972abef7d8389c49290b462 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 26 Oct 2021 22:49:28 +0200 Subject: [PATCH 188/236] small adjustements, fixes --- production/dpl-workflow.sh | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index ef3cfab..a90ec86 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -96,7 +96,6 @@ GPU_CONFIG_KEY= TOF_CONFIG= TOF_INPUT=raw TOF_OUTPUT=clusters -ITS_CONFIG= ITS_CONFIG_KEY= TRD_CONFIG= TRD_CONFIG_KEY= @@ -109,14 +108,14 @@ EMCRAW2C_CONFIG= if [ $SYNCMODE == 1 ]; then if [ $BEAMTYPE == "PbPb" ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" - ITS_CONFIG+=" --tracking-mode sync" + [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode sync" elif [ $BEAMTYPE == "pp" ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" - ITS_CONFIG+=" --tracking-mode sync" + [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode sync" elif [ $BEAMTYPE == "cosmic" ]; then - ITS_CONFIG+=" --tracking-mode cosmics" + [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode cosmics" else - ITS_CONFIG+=" --tracking-mode sync" + [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode sync" fi GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" TRD_CONFIG+=" --filter-trigrec" @@ -124,14 +123,14 @@ if [ $SYNCMODE == 1 ]; then TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" else if [ $BEAMTYPE == "PbPb" ]; then - ITS_CONFIG+=" --tracking-mode async" + [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode async" elif [ $BEAMTYPE == "pp" ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" - ITS_CONFIG+=" --tracking-mode async" + [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode async" elif [ $BEAMTYPE == "cosmic" ]; then - ITS_CONFIG+=" --tracking-mode cosmics" + [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode cosmics" else - ITS_CONFIG+=" --tracking-mode async" + [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode async" fi fi @@ -198,7 +197,7 @@ has_detectors_reco ITS TPC TOF && has_detector_matching ITSTPCTOF && { add_comma has_detectors_reco MFT MCH && has_detector_matching MFTMCH && add_comma_separated TRACK_SOURCES "MFT-MCH" for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do if [[ $LIST_OF_ASYNC_RECO_STEPS =~ (^| )${det}( |$) ]]; then - has_processing_step ${det}_RECO && add_comma_separated TRACK_SOURCES "$det" + has_detector ${det} && has_processing_step ${det}_RECO && add_comma_separated TRACK_SOURCES "$det" else has_detector_reco $det && add_comma_separated TRACK_SOURCES "$det" fi @@ -259,7 +258,7 @@ elif [ $EPNPIPELINES != 0 ]; then N_EMCREC=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) N_TRDENT=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) N_TRDTRK=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) - N_TPCRAWDEC=$(math_max $((8 * $EPNPIPELINES * $NGPUS / 4)) 1) + N_TPCRAWDEC=$(math_max $((12 * $EPNPIPELINES * $NGPUS / 4)) 1) if [ $GPUTYPE == "CPU" ]; then N_TPCTRK=8 GPU_CONFIG_KEY+="GPU_proc.ompThreads=4;" @@ -358,8 +357,8 @@ fi # Common reconstruction workflows (has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:${N_TPCTRK:-1} $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " (has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $TOF_CONFIG --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST) | " -has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream $DISABLE_ROOT_OUTPUT $ITS_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY;$ITSMFT_FILES\" --pipeline $(get_N its-tracker ITS REST ITSTRK) | " -has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS) | " +has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $ITS_CONFIG $DISABLE_MC --clusters-from-upstream $DISABLE_ROOT_OUTPUT --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY;$ITSMFT_FILES\" --pipeline $(get_N its-tracker ITS REST ITSTRK) | " +has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSTPC_EXTRA_CONFIG;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS) | " has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST) | " has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK) | " has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES | " @@ -367,12 +366,12 @@ has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-t # --------------------------------------------------------------------------------------------------------------------- # Reconstruction workflows normally active only in async mode in async mode ($LIST_OF_ASYNC_RECO_STEPS), but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS -has_processing_step MID_RECO && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST) | " -has_processing_step MCH_RECO && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST) | " -has_processing_step MFT_RECO && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC $DISABLE_ROOT_OUTPUT --pipeline $(get_N mft-tracker MFT REST MFTTRK) | " -has_processing_step FDD_RECO && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " -has_processing_step FV0_RECO && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " -has_processing_step ZDC_RECO && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " +has_detector MID && has_processing_step MID_RECO && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST) | " +has_detector MCH && has_processing_step MCH_RECO && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST) | " +has_detector MFT && has_processing_step MFT_RECO && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC $DISABLE_ROOT_OUTPUT --pipeline $(get_N mft-tracker MFT REST MFTTRK) | " +has_detector FDD && has_processing_step FDD_RECO && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " +has_detector FV0 && has_processing_step FV0_RECO && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " +has_detector ZDC && has_processing_step ZDC_RECO && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST) | " if [ $BEAMTYPE != "cosmic" ]; then From 53f406c542ee351af4cf1cdc371e13583faf6d07 Mon Sep 17 00:00:00 2001 From: shahoian Date: Tue, 26 Oct 2021 22:49:46 +0200 Subject: [PATCH 189/236] sync private directory --- testing/private/shahoian/runTF_PB.sh | 12 +++++++ testing/private/shahoian/run_PB.sh | 3 ++ testing/private/shahoian/workflows_PB.desc | 36 +++++++++++++++++---- testing/private/shahoian/workflows_dpl.desc | 2 +- 4 files changed, 46 insertions(+), 7 deletions(-) diff --git a/testing/private/shahoian/runTF_PB.sh b/testing/private/shahoian/runTF_PB.sh index 224c7c7..a3a79a9 100755 --- a/testing/private/shahoian/runTF_PB.sh +++ b/testing/private/shahoian/runTF_PB.sh @@ -37,6 +37,18 @@ export MULTIPLICITY_FACTOR_RAWDECODERS=1 export MULTIPLICITY_FACTOR_CTFENCODERS=1 export MULTIPLICITY_FACTOR_REST=1 +export GPU_EXTRA_CONFIG="GPU_proc.memoryScalingFactor=1.5" +export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" +export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 +export MULTIPLICITY_FACTOR_PROCESS_its_stf_decoder=4 +export MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=2 +export MULTIPLICITY_FACTOR_PROCESS_itstpc_track_matcher=2 +export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 +export ITS_CONFIG=" --tracking-mode sync_misaligned " + +export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO,MID_RECO" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" +export WORKFLOW_DETECTORS_FLP_PROCESSING="FT0,FV0" + for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf diff --git a/testing/private/shahoian/run_PB.sh b/testing/private/shahoian/run_PB.sh index 59ad343..287c4a8 100755 --- a/testing/private/shahoian/run_PB.sh +++ b/testing/private/shahoian/run_PB.sh @@ -37,6 +37,9 @@ export MULTIPLICITY_FACTOR_RAWDECODERS=1 export MULTIPLICITY_FACTOR_CTFENCODERS=1 export MULTIPLICITY_FACTOR_REST=1 +export GPU_EXTRA_CONFIG="GPU_proc.memoryScalingFactor=1.5" +export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" + for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf diff --git a/testing/private/shahoian/workflows_PB.desc b/testing/private/shahoian/workflows_PB.desc index fedf773..ad20e30 100644 --- a/testing/private/shahoian/workflows_PB.desc +++ b/testing/private/shahoian/workflows_PB.desc @@ -1,8 +1,32 @@ -its-pvtx-CTF-QC-its-pvtx-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-pvtx-CTF-QC-its-mft-tpc-tof-pvtx-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +#its-pvtx-CTF-QC-its-pvtx-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +#its-mftTR-tpc-trd-tof-pvtx-CTF-QC-its-mft-tpc-tof-pvtx-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -ctf_itsCOSM-tpcCPU-trd-tof_A: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=0 RAWTFINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" -ctf_itsCOSM-tpcCPU-trd-tof_B: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" -ctf_itsCOSM-tpcCPU-trd-tof_C: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=0 CTFINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" +#ctf_itsCOSM-tpcCPU-trd-tof_A: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=0 RAWTFINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" +#ctf_itsCOSM-tpcCPU-trd-tof_B: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" +#ctf_itsCOSM-tpcCPU-trd-tof_C: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=0 CTFINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" -async-ED-75: "O2PDPSuite" reco,75,75,"SYNCMODE=0 BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +#async-ED-75: "O2PDPSuite" reco,75,75,"SYNCMODE=0 BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" + +mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +ft0-fv0-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0 WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-TF-CTF-QC-its-mft-tpc-tof-mid-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc index 5273e7a..e2b18d0 100644 --- a/testing/private/shahoian/workflows_dpl.desc +++ b/testing/private/shahoian/workflows_dpl.desc @@ -175,7 +175,7 @@ itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-120: "O2PD itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-5: "O2PDPSuite" reco,5,5,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-10: "O2PDPSuite" reco,10,10,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-110: "O2PDPSuite" reco,110,110,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" From ec1baaf932b7eab3548a6f474cdc0d53720cdc0c Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 27 Oct 2021 00:50:43 +0200 Subject: [PATCH 190/236] possibility to pass P/S Vertexing configKeyVal options --- production/dpl-workflow.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index a90ec86..70ec18c 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -375,8 +375,8 @@ has_detector ZDC && has_processing_step ZDC_RECO && WORKFLOW+="o2-zdc-digits-rec has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST) | " if [ $BEAMTYPE != "cosmic" ]; then - has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " - has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $TRACK_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST) | " + has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$PVERTEX_EXTRA_CONFIG\" $DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " + has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$SVERTEX_EXTRA_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $TRACK_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST) | " fi # --------------------------------------------------------------------------------------------------------------------- From c69a6b2e2ebe9501ef0131ebfb2ebb724c269823 Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 27 Oct 2021 00:51:04 +0200 Subject: [PATCH 191/236] sync private directory --- testing/private/shahoian/runTF_PB.sh | 1 + testing/private/shahoian/run_PB.sh | 10 +++++++ testing/private/shahoian/workflows_PB.desc | 35 +++++++++++----------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/testing/private/shahoian/runTF_PB.sh b/testing/private/shahoian/runTF_PB.sh index a3a79a9..53c6f74 100755 --- a/testing/private/shahoian/runTF_PB.sh +++ b/testing/private/shahoian/runTF_PB.sh @@ -39,6 +39,7 @@ export MULTIPLICITY_FACTOR_REST=1 export GPU_EXTRA_CONFIG="GPU_proc.memoryScalingFactor=1.5" export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" +export PVERTEX_EXTRA_CONFIG="pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 export MULTIPLICITY_FACTOR_PROCESS_its_stf_decoder=4 export MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=2 diff --git a/testing/private/shahoian/run_PB.sh b/testing/private/shahoian/run_PB.sh index 287c4a8..fc9186d 100755 --- a/testing/private/shahoian/run_PB.sh +++ b/testing/private/shahoian/run_PB.sh @@ -39,6 +39,16 @@ export MULTIPLICITY_FACTOR_REST=1 export GPU_EXTRA_CONFIG="GPU_proc.memoryScalingFactor=1.5" export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" +export PVERTEX_EXTRA_CONFIG="pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" +export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 +export MULTIPLICITY_FACTOR_PROCESS_its_stf_decoder=4 +export MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=2 +export MULTIPLICITY_FACTOR_PROCESS_itstpc_track_matcher=2 +export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 +export ITS_CONFIG=" --tracking-mode sync_misaligned " + +export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO,MID_RECO" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" +export WORKFLOW_DETECTORS_FLP_PROCESSING="FT0,FV0" for wf in "$@" do diff --git a/testing/private/shahoian/workflows_PB.desc b/testing/private/shahoian/workflows_PB.desc index ad20e30..4f3225a 100644 --- a/testing/private/shahoian/workflows_PB.desc +++ b/testing/private/shahoian/workflows_PB.desc @@ -10,23 +10,24 @@ mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" ft0-fv0-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0 WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-TF-CTF-QC-its-mft-tpc-tof-mid-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" From c571b081dfb089cf162b316978f4341dd9e19a02 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 27 Oct 2021 07:08:29 +0200 Subject: [PATCH 192/236] Sync changes from O2 repo --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 70ec18c..b6ccf05 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -63,7 +63,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA --early-forward-policy noraw" +ARGS_ALL="--session ${OVERRIDE_SESSION:-default} --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA --early-forward-policy noraw" if [ $EPNMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 15" From fa10b3b04b2a4d4003ff45837354fa966be57a54 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 27 Oct 2021 13:51:58 +0200 Subject: [PATCH 193/236] Simplify adding workflow binaries through get_W function, add ARGS_EXTRA_PROCESS_* and CONFIG_EXTRA_PROCESS_* options --- production/README.md | 4 +- production/dpl-workflow.sh | 135 +++++++++++++++++++++---------------- production/qc-workflow.sh | 2 +- 3 files changed, 80 insertions(+), 61 deletions(-) diff --git a/production/README.md b/production/README.md index 23c565f..8e2cb27 100644 --- a/production/README.md +++ b/production/README.md @@ -29,7 +29,7 @@ You can use the following options to change the workflow behavior: - `MULTIPLICITY_FACTOR_RAWDECODERS` (default `1`) : Scales the number of parallel processes used for raw decoding by this factor. - `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. - `MULTIPLICITY_FACTOR_REST` (default `1`) : Scales the number of other reconstruction processes by this factor. -- `QC_JSON_EXTRA` (default `NONE`) : extra QC jsons to add (if does not fit to those defined in WORKFLOW_DETECTORS_QC & (WORKFLOW_DETECTORS | WORKFLOW_DETECTORS_MATCHING) +- `QC_JSON_EXTRA` (default `NONE`) : extra QC jsons to add (if does not fit to those defined in WORKFLOW_DETECTORS_QC & (WORKFLOW_DETECTORS | WORKFLOW_DETECTORS_MATCHING) Most of these settings are configurable in the AliECS GUI. But some of the uncommon settings (`WORKFLOW_DETECTORS_FLP_PROCESSING`, `WORKFLOW_DETECTORS_CTF`, `WORKFLOW_DETECTORS_RECO`, `WORKFLOW_DETECTORS_MATCHING`, `WORKFLOW_EXTRA_PROCESSING_STEPS`, advanced `MULTIPLICITY_FACTOR` settings) can only be set via the "Additional environment variables field" in the GUI using bash syntax, e.g. `WORKFLOW_DETECTORS_FLP_PROCESSING=TPC`. # Process multiplicity factors @@ -46,6 +46,8 @@ For user modification of the workflow settings, the folloing *EXTRA* environment - `ARGS_ALL_EXTRA` : Extra command line options added to all workflows - `ALL_EXTRA_CONFIG` : Extra config key values added to all workflows - `GPU_EXTRA_CONFIG` : Extra options added to the configKeyValues of the GPU workflow +- `ARGS_EXTRA_PROCESS_[WORKFLOW_NAME]` : Extra command line arguments for the workflow binary `WORKFLOW_NAME`. Dashes `-` must be replaced by underscores `_` in the name! E.g. `ARGS_EXTRA_PROCESS_o2_tof_reco_workflow="--output-type clusters"` +- `CONFIG_EXTRA_PROCESS_[WORKFLOW_NAME]` : Extra `--configKeyValues` arguments for the workflow binary `WORKFLOW_NAME`. Dashes `-` must be replaced by underscores `_` in the name! E.g. `CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow="GPU_proc.debugLevel=1;GPU_proc.ompKernels=0;"` In case the CTF dictionaries were created from the data drastically different from the one being compressed, the default memory allocation for the CTF buffer might be insufficient. One can apply scaling factor to the buffer size estimate (default=1.5) of particular detector by defining variable e.g. `TPC_ENC_MEMFACT=3.5` diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index b6ccf05..d9f88b6 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -276,6 +276,23 @@ N_CTPRAWDEC=$(math_max $((1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_CTPRAWDEC: N_TRDRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_TRDRAWDEC:-1}) [ -z $N_TPCENTDEC ] && N_TPCENTDEC=1 +# --------------------------------------------------------------------------------------------------------------------- +# Helper to add binaries to workflow adding automatic and custom arguments +WORKFLOW= # Make sure we start with an empty workflow + +add_W() # Add binarry to workflow command USAGE: add_W [BINARY] [COMMAND_LINE_OPTIONS] [CONFIG_KEY_VALUES] [Add ARGS_ALL_CONFIG, optional, default = 1] +{ + local NAME_PROC_ARGS="ARGS_EXTRA_PROCESS_${1//-/_}" + local NAME_PROC_CONFIG="CONFIG_EXTRA_PROCESS_${1//-/_}" + local KEY_VALUES= + [[ "0$4" != "00" ]] && KEY_VALUES+="$ARGS_ALL_CONFIG;" + [[ ! -z "$3" ]] && KEY_VALUES+="$3;" + [[ ! -z ${!NAME_PROC_CONFIG} ]] && KEY_VALUES+="${!NAME_PROC_CONFIG};" + [[ ! -z "$KEY_VALUES" ]] && KEY_VALUES="--configKeyValues \"$KEY_VALUES\"" + WORKFLOW+="$1 $ARGS_ALL $2 ${!NAME_PROC_ARGS} $KEY_VALUES | " +} + + # --------------------------------------------------------------------------------------------------------------------- # Input workflow if [ $CTFINPUT == 1 ]; then @@ -285,13 +302,13 @@ if [ $CTFINPUT == 1 ]; then [[ -z $CTFName && $WORKFLOWMODE == "print" ]] && CTFName='$CTFName' [[ ! -z $INPUT_FILE_LIST ]] && CTFName=$INPUT_FILE_LIST if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi - WORKFLOW="o2-ctf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --ctf-input ${CTFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC | " + add_W o2-ctf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --ctf-input ${CTFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC" elif [ $RAWTFINPUT == 1 ]; then TFName=`ls -t $FILEWORKDIR/o2_*.tf 2> /dev/null | head -n1` [[ -z $TFName && $WORKFLOWMODE == "print" ]] && TFName='$TFName' [[ ! -z $INPUT_FILE_LIST ]] && TFName=$INPUT_FILE_LIST if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi - WORKFLOW="o2-raw-tf-reader-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --input-data ${TFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --onlyDet $WORKFLOW_DETECTORS | " + add_W o2-raw-tf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --input-data ${TFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --onlyDet $WORKFLOW_DETECTORS" elif [ $EXTINPUT == 1 ]; then PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0" PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" @@ -322,10 +339,10 @@ elif [ $EXTINPUT == 1 ]; then PROXY_INSPEC+=";$PROXY_INNAME:$i/$j" done done - WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"$PROXY_INSPEC\" --channel-config \"$PROXY_CHANNEL\" | " + add_W o2-dpl-raw-proxy "--dataspec \"$PROXY_INSPEC\" --channel-config \"$PROXY_CHANNEL\"" "" 0 else if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--loop $NTIMEFRAMES"; fi - WORKFLOW="o2-raw-file-reader-workflow --detect-tf0 $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY $NTIMEFRAMES_CMD --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg | " + add_W o2-raw-file-reader-workflow "--detect-tf0 --delay $TFDELAY $NTIMEFRAMES_CMD --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg" "HBFUtils.nHBFPerTF=$NHBPERTF" fi # --------------------------------------------------------------------------------------------------------------------- @@ -333,72 +350,72 @@ fi if [ $CTFINPUT == 0 ]; then if has_detector TPC && [ $EPNMODE == 1 ]; then GPU_INPUT=zsonthefly - WORKFLOW+="o2-tpc-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline $(get_N tpc-raw-to-digits-0 TPC RAW TPCRAWDEC) | " - WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type digitizer --output-type zsraw,disable-writer --pipeline $(get_N tpc-zsEncoder TPC RAW TPCRAWDEC) | " + add_W o2-tpc-raw-to-digits-workflow "--input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline $(get_N tpc-raw-to-digits-0 TPC RAW TPCRAWDEC)" + add_W o2-tpc-reco-workflow "--input-type digitizer --output-type zsraw,disable-writer --pipeline $(get_N tpc-zsEncoder TPC RAW TPCRAWDEC)" fi - has_detector ITS && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NITSDECTHREADS} --pipeline $(get_N its-stf-decoder ITS RAW ITSRAWDEC) | " - has_detector MFT && WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --configKeyValues \"${ARGS_ALL_CONFIG};$ITSMFT_FILES\" --nthreads ${NMFTDECTHREADS} --pipeline $(get_N mft-stf-decoder MFT RAW MFTRAWDEC) --runmft true | " - has_detector FT0 && ! has_detector_flp_processing FT0 && WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N ft0-datareader-dpl FT0 RAW) | " - has_detector FV0 && ! has_detector_flp_processing FV0 && WORKFLOW+="o2-fv0-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N fv0-datareader-dpl FV0 RAW) | " - has_detector MID && WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $MIDDEC_CONFIG --pipeline $(get_N MIDRawDecoder MID RAW),$(get_N MIDDecodedDataAggregator MID RAW) | " - has_detector MCH && WORKFLOW+="o2-mch-raw-to-digits-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N mch-data-decoder MCH RAW) | " - has_detector TOF && ! has_detector_flp_processing TOF && WORKFLOW+="o2-tof-compressor $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N tof-compressor TOF RAW)| " - has_detector FDD && ! has_detector_flp_processing FDD && WORKFLOW+="o2-fdd-flp-dpl-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N fdd-datareader-dpl FDD RAW) | " - has_detector TRD && WORKFLOW+="o2-trd-datareader $ARGS_ALL $TRD_DECODER_OPTIONS --pipeline $(get_N trd-datareader TRD RAW TRDRAWDEC) | " - has_detector ZDC && WORKFLOW+="o2-zdc-raw2digits $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N zdc-datareader-dpl ZDC RAW) | " - has_detector HMP && WORKFLOW+="o2-hmpid-raw-to-digits-stream-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --pipeline $(get_N HMP-RawStreamDecoder HMP RAW) | " - has_detector CTP && WORKFLOW+="o2-ctp-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT --pipeline $(get_N CTP-RawStreamDecoder CTP RAW) | " - has_detector PHS && ! has_detector_flp_processing PHS && WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N PHOSRawToCellConverterSpec PHS REST) $DISABLE_MC | " - has_detector CPV && WORKFLOW+="o2-cpv-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type $CPV_INPUT --output-type clusters --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N CPVRawToDigitConverterSpec CPV REST),$(get_N CPVClusterizerSpec CPV REST) $DISABLE_MC | " - has_detector EMC && ! has_detector_flp_processing EMC && WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type raw --output-type cells $EMCRAW2C_CONFIG $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST EMCREC) | " + has_detector ITS && add_W o2-itsmft-stf-decoder-workflow "--nthreads ${NITSDECTHREADS} --pipeline $(get_N its-stf-decoder ITS RAW ITSRAWDEC)" "$ITSMFT_FILES" + has_detector MFT && add_W o2-itsmft-stf-decoder-workflow "--nthreads ${NMFTDECTHREADS} --pipeline $(get_N mft-stf-decoder MFT RAW MFTRAWDEC) --runmft true" "$ITSMFT_FILES" + has_detector FT0 && ! has_detector_flp_processing FT0 && add_W o2-ft0-flp-dpl-workflow "$DISABLE_ROOT_OUTPUT --pipeline $(get_N ft0-datareader-dpl FT0 RAW)" + has_detector FV0 && ! has_detector_flp_processing FV0 && add_W o2-fv0-flp-dpl-workflow "$DISABLE_ROOT_OUTPUT --pipeline $(get_N fv0-datareader-dpl FV0 RAW)" + has_detector MID && add_W o2-mid-raw-to-digits-workflow "$MIDDEC_CONFIG --pipeline $(get_N MIDRawDecoder MID RAW),$(get_N MIDDecodedDataAggregator MID RAW)" + has_detector MCH && add_W o2-mch-raw-to-digits-workflow "--pipeline $(get_N mch-data-decoder MCH RAW)" + has_detector TOF && ! has_detector_flp_processing TOF && add_W o2-tof-compressor "--pipeline $(get_N tof-compressor TOF RAW)" + has_detector FDD && ! has_detector_flp_processing FDD && add_W o2-fdd-flp-dpl-workflow "$DISABLE_ROOT_OUTPUT --pipeline $(get_N fdd-datareader-dpl FDD RAW)" + has_detector TRD && add_W o2-trd-datareader "$TRD_DECODER_OPTIONS --pipeline $(get_N trd-datareader TRD RAW TRDRAWDEC)" "" 0 + has_detector ZDC && add_W o2-zdc-raw2digits "$DISABLE_ROOT_OUTPUT --pipeline $(get_N zdc-datareader-dpl ZDC RAW)" + has_detector HMP && add_W o2-hmpid-raw-to-digits-stream-workflow "--pipeline $(get_N HMP-RawStreamDecoder HMP RAW)" + has_detector CTP && add_W o2-ctp-reco-workflow "$DISABLE_ROOT_OUTPUT --pipeline $(get_N CTP-RawStreamDecoder CTP RAW)" + has_detector PHS && ! has_detector_flp_processing PHS && add_W o2-phos-reco-workflow "--input-type raw --output-type cells --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N PHOSRawToCellConverterSpec PHS REST) $DISABLE_MC" + has_detector CPV && add_W o2-cpv-reco-workflow "--input-type $CPV_INPUT --output-type clusters --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N CPVRawToDigitConverterSpec CPV REST),$(get_N CPVClusterizerSpec CPV REST) $DISABLE_MC" + has_detector EMC && ! has_detector_flp_processing EMC && add_W o2-emcal-reco-workflow "--input-type raw --output-type cells $EMCRAW2C_CONFIG $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST EMCREC)" fi # --------------------------------------------------------------------------------------------------------------------- # Common reconstruction workflows -(has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:${N_TPCTRK:-1} $GPU_CONFIG --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG\" | " -(has_detector_reco TOF || has_detector_ctf TOF) && WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $TOF_CONFIG --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST) | " -has_detector_reco ITS && WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $ITS_CONFIG $DISABLE_MC --clusters-from-upstream $DISABLE_ROOT_OUTPUT --configKeyValues \"$ARGS_ALL_CONFIG;$ITS_CONFIG_KEY;$ITSMFT_FILES\" --pipeline $(get_N its-tracker ITS REST ITSTRK) | " -has_detectors_reco ITS TPC && has_detector_matching ITSTPC && WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSTPC_EXTRA_CONFIG;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS) | " -has_detector_reco FT0 && WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST) | " -has_detector_reco TRD && WORKFLOW+="o2-trd-tracklet-transformer $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK) | " -has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && WORKFLOW+="o2-trd-global-tracking $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$TRD_CONFIG_KEY;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES | " -has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && WORKFLOW+="o2-tof-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH) | " +(has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:${N_TPCTRK:-1} $GPU_CONFIG $ARGS_EXTRA_PROCESS_o2_gpu_reco_workflow --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG;$CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow\" | " +(has_detector_reco TOF || has_detector_ctf TOF) && add_W o2-tof-reco-workflow "$TOF_CONFIG --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST)" +has_detector_reco ITS && add_W o2-its-reco-workflow "--trackerCA $ITS_CONFIG $DISABLE_MC --clusters-from-upstream $DISABLE_ROOT_OUTPUT --pipeline $(get_N its-tracker ITS REST ITSTRK)" "$ITS_CONFIG_KEY;$ITSMFT_FILES" +has_detectors_reco ITS TPC && has_detector_matching ITSTPC && add_W o2-tpcits-match-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS)" "$ITSTPC_EXTRA_CONFIG;$ITSMFT_FILES" +has_detector_reco FT0 && add_W o2-ft0-reco-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST)" +has_detector_reco TRD && add_W o2-trd-tracklet-transformer "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK)" +has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && add_W o2-trd-global-tracking "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES" "$TRD_CONFIG_KEY;$ITSMFT_FILES" +has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && add_W o2-tof-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH)" "$ITSMFT_FILES" # --------------------------------------------------------------------------------------------------------------------- # Reconstruction workflows normally active only in async mode in async mode ($LIST_OF_ASYNC_RECO_STEPS), but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS -has_detector MID && has_processing_step MID_RECO && WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST) | " -has_detector MCH && has_processing_step MCH_RECO && WORKFLOW+="o2-mch-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST) | " -has_detector MFT && has_processing_step MFT_RECO && WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --clusters-from-upstream $DISABLE_MC $DISABLE_ROOT_OUTPUT --pipeline $(get_N mft-tracker MFT REST MFTTRK) | " -has_detector FDD && has_processing_step FDD_RECO && WORKFLOW+="o2-fdd-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " -has_detector FV0 && has_processing_step FV0_RECO && WORKFLOW+="o2-fv0-reco-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " -has_detector ZDC && has_processing_step ZDC_RECO && WORKFLOW+="o2-zdc-digits-reco $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC | " -has_detectors_reco MFT MCH && has_detector_matching MFTMCH && WORKFLOW+="o2-globalfwd-matcher-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST) | " +has_detector MID && has_processing_step MID_RECO && add_W o2-mid-reco-workflow "$DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST)" +has_detector MCH && has_processing_step MCH_RECO && add_W o2-mch-reco-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST)" +has_detector MFT && has_processing_step MFT_RECO && add_W o2-mft-reco-workflow "--clusters-from-upstream $DISABLE_MC $DISABLE_ROOT_OUTPUT --pipeline $(get_N mft-tracker MFT REST MFTTRK)" "$ITSMFT_FILES" +has_detector FDD && has_processing_step FDD_RECO && add_W o2-fdd-reco-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC" +has_detector FV0 && has_processing_step FV0_RECO && add_W o2-fv0-reco-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC" +has_detector ZDC && has_processing_step ZDC_RECO && add_W o2-zdc-digits-reco "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC" +has_detectors_reco MFT MCH && has_detector_matching MFTMCH && add_W o2-globalfwd-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST)" if [ $BEAMTYPE != "cosmic" ]; then - has_detectors_reco ITS && has_detector_matching PRIMVTX && WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$PVERTEX_EXTRA_CONFIG\" $DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST) | " - has_detectors_reco ITS && has_detector_matching SECVTX && WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$SVERTEX_EXTRA_CONFIG\" --disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $TRACK_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST) | " + has_detectors_reco ITS && has_detector_matching PRIMVTX && add_W o2-primary-vertexing-workflow "$DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST)" "$PVERTEX_EXTRA_CONFIG" + has_detectors_reco ITS && has_detector_matching SECVTX && add_W o2-secondary-vertexing-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $TRACK_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST)" "$SVERTEX_EXTRA_CONFIG" fi # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ] && [ $WORKFLOW_DETECTORS_CTF != "NONE" ]; then # Entropy encoder workflows - has_detector_ctf MFT && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${MFT_ENC_MEMFACT:-1.5} --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF) | " - has_detector_ctf FT0 && WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${FT0_ENC_MEMFACT:-1.5} --pipeline $(get_N ft0-entropy-encoder FT0 CTF) | " - has_detector_ctf FV0 && WORKFLOW+="o2-fv0-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${FV0_ENC_MEMFACT:-1.5} --pipeline $(get_N fv0-entropy-encoder FV0 CTF) | " - has_detector_ctf MID && WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${MID_ENC_MEMFACT:-1.5} --pipeline $(get_N mid-entropy-encoder MID CTF) | " - has_detector_ctf MCH && WORKFLOW+="o2-mch-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${MCH_ENC_MEMFACT:-1.5} --pipeline $(get_N mch-entropy-encoder MCH CTF) | " - has_detector_ctf PHS && WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${PHS_ENC_MEMFACT:-1.5} --pipeline $(get_N phos-entropy-encoder PHS CTF) | " - has_detector_ctf CPV && WORKFLOW+="o2-cpv-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${CPV_ENC_MEMFACT:-1.5} --pipeline $(get_N cpv-entropy-encoder CPV CTF) | " - has_detector_ctf EMC && WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${EMC_ENC_MEMFACT:-1.5} --pipeline $(get_N emcal-entropy-encoder EMC CTF) | " - has_detector_ctf ZDC && WORKFLOW+="o2-zdc-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${ZDC_ENC_MEMFACT:-1.5} --pipeline $(get_N zdc-entropy-encoder ZDC CTF) | " - has_detector_ctf FDD && WORKFLOW+="o2-fdd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${FDD_ENC_MEMFACT:-1.5} --pipeline $(get_N fdd-entropy-encoder FDD CTF) | " - has_detector_ctf HMP && WORKFLOW+="o2-hmpid-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${HMP_ENC_MEMFACT:-1.5} --pipeline $(get_N hmpid-entropy-encoder HMP CTF) | " - has_detector_ctf TOF && WORKFLOW+="o2-tof-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${TOF_ENC_MEMFACT:-1.5} --pipeline $(get_N tof-entropy-encoder TOF CTF) | " - has_detector_ctf ITS && WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${ITS_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder ITS CTF) | " - has_detector_ctf TRD && WORKFLOW+="o2-trd-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${TRD_ENC_MEMFACT:-1.5} --pipeline $(get_N trd-entropy-encoder TRD CTF TRDENT) | " - has_detector_ctf TPC && WORKFLOW+="o2-tpc-reco-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --mem-factor ${TPC_ENC_MEMFACT:-1.5} --pipeline $(get_N tpc-entropy-encoder TPC CTF TPCENT) | " - has_detector_ctf CTP && WORKFLOW+="o2-ctp-entropy-encoder-workflow $ARGS_ALL --ctf-dict \"${CTF_DICT}\" --configKeyValues \"$ARGS_ALL_CONFIG\" --mem-factor ${CTP_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder CTP CTF)| " + has_detector_ctf MFT && add_W o2-itsmft-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MFT_ENC_MEMFACT:-1.5} --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF)" + has_detector_ctf FT0 && add_W o2-ft0-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FT0_ENC_MEMFACT:-1.5} --pipeline $(get_N ft0-entropy-encoder FT0 CTF)" + has_detector_ctf FV0 && add_W o2-fv0-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FV0_ENC_MEMFACT:-1.5} --pipeline $(get_N fv0-entropy-encoder FV0 CTF)" + has_detector_ctf MID && add_W o2-mid-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MID_ENC_MEMFACT:-1.5} --pipeline $(get_N mid-entropy-encoder MID CTF)" + has_detector_ctf MCH && add_W o2-mch-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MCH_ENC_MEMFACT:-1.5} --pipeline $(get_N mch-entropy-encoder MCH CTF)" + has_detector_ctf PHS && add_W o2-phos-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${PHS_ENC_MEMFACT:-1.5} --pipeline $(get_N phos-entropy-encoder PHS CTF)" + has_detector_ctf CPV && add_W o2-cpv-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${CPV_ENC_MEMFACT:-1.5} --pipeline $(get_N cpv-entropy-encoder CPV CTF)" + has_detector_ctf EMC && add_W o2-emcal-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${EMC_ENC_MEMFACT:-1.5} --pipeline $(get_N emcal-entropy-encoder EMC CTF)" + has_detector_ctf ZDC && add_W o2-zdc-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${ZDC_ENC_MEMFACT:-1.5} --pipeline $(get_N zdc-entropy-encoder ZDC CTF)" + has_detector_ctf FDD && add_W o2-fdd-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FDD_ENC_MEMFACT:-1.5} --pipeline $(get_N fdd-entropy-encoder FDD CTF)" + has_detector_ctf HMP && add_W o2-hmpid-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${HMP_ENC_MEMFACT:-1.5} --pipeline $(get_N hmpid-entropy-encoder HMP CTF)" + has_detector_ctf TOF && add_W o2-tof-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${TOF_ENC_MEMFACT:-1.5} --pipeline $(get_N tof-entropy-encoder TOF CTF)" + has_detector_ctf ITS && add_W o2-itsmft-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${ITS_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder ITS CTF)" + has_detector_ctf TRD && add_W o2-trd-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${TRD_ENC_MEMFACT:-1.5} --pipeline $(get_N trd-entropy-encoder TRD CTF TRDENT)" + has_detector_ctf TPC && add_W o2-tpc-reco-workflow "--ctf-dict \"${CTF_DICT}\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --mem-factor ${TPC_ENC_MEMFACT:-1.5} --pipeline $(get_N tpc-entropy-encoder TPC CTF TPCENT)" + has_detector_ctf CTP && add_W o2-ctp-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${CTP_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder CTP CTF)" # CTF / dictionary writer workflow if [ $SAVECTF == 1 ]; then @@ -412,21 +429,21 @@ if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ] && if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi - CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --max-ctf-per-file ${CTF_MAX_PER_FILE} --onlyDet $WORKFLOW_DETECTORS_CTF --append-det-to-period $CTF_MAXDETEXT --meta-output-dir $CTF_METAFILES_DIR " - if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CMD_CTF+=" --save-dict-after $SAVE_CTFDICT_NTIMEFRAMES"; fi - WORKFLOW+="$CMD_CTF | " + CONFIG_CTF="--output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --max-ctf-per-file ${CTF_MAX_PER_FILE} --onlyDet $WORKFLOW_DETECTORS_CTF --append-det-to-period $CTF_MAXDETEXT --meta-output-dir $CTF_METAFILES_DIR" + if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CONFIG_CTF+=" --save-dict-after $SAVE_CTFDICT_NTIMEFRAMES"; fi + add_W o2-ctf-writer-workflow "$CONFIG_CTF" fi # --------------------------------------------------------------------------------------------------------------------- # Calibration workflows -workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" $DISABLE_ROOT_OUTPUT --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST | " +workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && add_W o2-tpc-scdcalib-interpolation-workflow "$DISABLE_ROOT_OUTPUT --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST" "$ITSMFT_FILES" # --------------------------------------------------------------------------------------------------------------------- # Event display # RS this is a temporary setting [ -z "$ED_TRACKS" ] && ED_TRACKS=$TRACK_SOURCES [ -z "$ED_CLUSTERS" ] && ED_CLUSTERS=$TRACK_SOURCES -workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && WORKFLOW+="o2-eve-display $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG;$ITSMFT_FILES\" --display-tracks $ED_TRACKS --display-clusters $ED_CLUSTERS $EVE_CONFIG $DISABLE_MC | " +workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && add_W o2-eve-display "--display-tracks $ED_TRACKS --display-clusters $ED_CLUSTERS $EVE_CONFIG $DISABLE_MC" "$ITSMFT_FILES" # --------------------------------------------------------------------------------------------------------------------- # Quality Control diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 14fa6c9..e1a135b 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -64,5 +64,5 @@ if [ ! -z "$JSON_FILES" ]; then fi MERGED_JSON_FILENAME=`realpath $MERGED_JSON_FILENAME` - WORKFLOW+="o2-qc $ARGS_ALL --config json://$MERGED_JSON_FILENAME --local --host $QC_HOST | " + add_W o2-qc "--config json://$MERGED_JSON_FILENAME --local --host $QC_HOST" "" 0 fi From c0b446e760e9f258a03773e3dd629e52b4e639a6 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 27 Oct 2021 17:27:30 +0200 Subject: [PATCH 194/236] Make run.sh runnable at home --- README.md | 5 +++++ production/dpl-workflow.sh | 4 ++-- tools/epn/gen_topo.sh | 8 ++++++-- tools/epn/gen_topo_o2dataprocessing.sh | 4 ++-- tools/epn/run.sh | 13 +++++++++---- tools/parse | 2 +- 6 files changed, 25 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 1a6df30..9bf416d 100644 --- a/README.md +++ b/README.md @@ -290,3 +290,8 @@ New DDS topology successfully created and saved to a file "/home/drohr/gen_topo/ DDS topology "topology" successfully opened from file "/home/drohr/gen_topo/test/output.xml" Done ``` + +# Creating a script to run a workflow locally +- The workflow scripts should support the `WORKFLOWMODE=print` option, in which case they do not start the workflow, but print the command line to start the workflow. +- The parser also supports `WORKFLOWMODE=print` and will in that case write the command line to the output file, in case the full topology will be composed of multiple commands, it will write all command lines. +- Finally the `run.sh` wrapper to simulate the AliECS GUI does support the mode `WORKFLOWMODE=print`. In order to run it locally on your laptop at home, please also set `GEN_TOPO_RUN_HOME=1`. diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index d9f88b6..637c52d 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -418,10 +418,10 @@ if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ] && has_detector_ctf CTP && add_W o2-ctp-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${CTP_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder CTP CTF)" # CTF / dictionary writer workflow - if [ $SAVECTF == 1 ]; then + if [[ $SAVECTF == 1 && $WORKFLOWMODE == "run" ]]; then mkdir -p $CTF_DIR fi - if [ $CREATECTFDICT == 1 ] ; then + if [[ $CREATECTFDICT == 1 && $WORKFLOWMODE == "run" ]] ; then mkdir -p $CTF_DICT_DIR; rm -f $CTF_DICT fi diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh index 8ffdb85..26f4fc3 100755 --- a/tools/epn/gen_topo.sh +++ b/tools/epn/gen_topo.sh @@ -23,8 +23,12 @@ if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then echo \$MULTIPLICITY_FACTOR_REST miss [ -z "$GEN_TOPO_WORKDIR" ] && export GEN_TOPO_WORKDIR=$HOME/gen_topo/${GEN_TOPO_PARTITION}_${GEN_TOPO_ONTHEFLY} # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir [ -z "$GEN_TOPO_STDERR_LOGGING" ] && export GEN_TOPO_STDERR_LOGGING=1 -# Load required module and run gen_topo_o2dataprocessing (PDP part of this script) -module load ODC O2DataProcessing 1>&2 || { echo Error loading ODC / O2DataProcessing 1>&2; exit 1; } +if [[ "0$GEN_TOPO_RUN_HOME" == "01" ]]; then + [[ $WORKFLOWMODE != "print" ]] && { echo "ERROR: GEN_TOPO_RUN_HOME is only supported with WORKFLOWMODE=print!" 1>&2; exit 1; } +else + # Load required module and run gen_topo_o2dataprocessing (PDP part of this script) + module load ODC O2DataProcessing 1>&2 || { echo Error loading ODC / O2DataProcessing 1>&2; exit 1; } +fi $O2DATAPROCESSING_ROOT/tools/epn/gen_topo_o2dataprocessing.sh if [ $? != 0 ]; then echo topology generation failed 1>&2 diff --git a/tools/epn/gen_topo_o2dataprocessing.sh b/tools/epn/gen_topo_o2dataprocessing.sh index 4aadb52..dbedae5 100755 --- a/tools/epn/gen_topo_o2dataprocessing.sh +++ b/tools/epn/gen_topo_o2dataprocessing.sh @@ -1,8 +1,8 @@ #!/bin/bash mkdir -p $GEN_TOPO_WORKDIR/cache || { echo Error creating directory 1>&2; exit 1; } -cd $GEN_TOPO_WORKDIR || { echo Cannot enter work dir 1>&2; exit 1; } -if [ ! -d O2DataProcessing ]; then git clone https://github.com/AliceO2Group/O2DataProcessing.git 1>&2 || { echo O2DataProcessing checkout failed 1>&2; exit 1; }; fi if [ $GEN_TOPO_HASH == 1 ]; then + cd $GEN_TOPO_WORKDIR || { echo Cannot enter work dir 1>&2; exit 1; } + if [ ! -d O2DataProcessing ]; then git clone https://github.com/AliceO2Group/O2DataProcessing.git 1>&2 || { echo O2DataProcessing checkout failed 1>&2; exit 1; }; fi if [ "0$GEN_TOPO_ONTHEFLY" == "01" ]; then export GEN_TOPO_CACHEABLE=1 fi diff --git a/tools/epn/run.sh b/tools/epn/run.sh index 45ef175..0ef5638 100755 --- a/tools/epn/run.sh +++ b/tools/epn/run.sh @@ -25,9 +25,14 @@ export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with -export OUTPUT_FILE_NAME=$HOME/gen_topo_output.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then +export OUTPUT_FILE_NAME=gen_topo_output.xml +if [[ "0$GEN_TOPO_RUN_HOME" == "01" ]]; then + [[ -z $O2DATAPROCESSING_ROOT || -z $O2_ROOT ]] && { echo "ERROR: O2 and O2DataProcessing must be in the environment!"; exit 1; } + $O2DATAPROCESSING_ROOT/tools/epn/gen_topo.sh > $OUTPUT_FILE_NAME +else + [[ ! -f /home/epn/pdp/gen_topo.sh ]] && { echo "ERROR: EPN installation of gen_topo.sh missing. Are you trying to run at home? Then please set GEN_TOPO_RUN_HOME=1!"; exit 1; } + /home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME +fi +if [[ $? == 0 ]]; then echo Generated XML topology $OUTPUT_FILE_NAME fi diff --git a/tools/parse b/tools/parse index e09e3a1..a1641b3 100755 --- a/tools/parse +++ b/tools/parse @@ -63,7 +63,7 @@ for line in f: recoworkflows = [] calibworkflows = [] print("Found topology", sys.argv[2], "-", args) - if 'EPNMODE' in os.environ and int(os.environ['EPNMODE']): + if 'EPNMODE' in os.environ and int(os.environ['EPNMODE']) and (not 'GEN_TOPO_RUN_HOME' in os.environ or not int(os.environ['GEN_TOPO_RUN_HOME'])): for i in args[1].split(): if "GEN_TOPO_CACHEABLE" in os.environ and os.environ['GEN_TOPO_CACHEABLE'] == "1": if i.find("/") == -1 or i.find("/latest") != -1: From 5f20a9373969a1e034a8b4a925282a1562b142d9 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 27 Oct 2021 18:54:27 +0200 Subject: [PATCH 195/236] Enable readout-proxy rate logging on EPN --- production/dpl-workflow.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 637c52d..a2774a8 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -310,7 +310,9 @@ elif [ $RAWTFINPUT == 1 ]; then if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi add_W o2-raw-tf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --input-data ${TFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --onlyDet $WORKFLOW_DETECTORS" elif [ $EXTINPUT == 1 ]; then - PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0" + PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem" + [[ $EPNMODE == 1 ]] && PROXY_CHANNEL+=",rateLogging=0" + [[ $EPNMODE == 1 ]] && PROXY_CHANNEL+=",rateLogging=1" PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" PROXY_IN_N=0 for i in `echo "$WORKFLOW_DETECTORS" | sed "s/,/ /g"`; do From 1ec1567f8cba893d6ccaede34df7c6997b2c328d Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 27 Oct 2021 19:01:18 +0200 Subject: [PATCH 196/236] Fix typo and simplify --- production/dpl-workflow.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index a2774a8..8234bb3 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -310,9 +310,7 @@ elif [ $RAWTFINPUT == 1 ]; then if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi add_W o2-raw-tf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --input-data ${TFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --onlyDet $WORKFLOW_DETECTORS" elif [ $EXTINPUT == 1 ]; then - PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem" - [[ $EPNMODE == 1 ]] && PROXY_CHANNEL+=",rateLogging=0" - [[ $EPNMODE == 1 ]] && PROXY_CHANNEL+=",rateLogging=1" + PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=$EPNMODE" PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" PROXY_IN_N=0 for i in `echo "$WORKFLOW_DETECTORS" | sed "s/,/ /g"`; do From bc1a5df8186044c988b00bd2ba4b54e42ab02465 Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 27 Oct 2021 23:28:24 +0200 Subject: [PATCH 197/236] suppress ITS mult.selection in pp --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 8234bb3..eca1425 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -110,7 +110,7 @@ if [ $SYNCMODE == 1 ]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode sync" elif [ $BEAMTYPE == "pp" ]; then - ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" + ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=-1;fastMultConfig.cutMultClusHigh=-1;fastMultConfig.cutMultVtxHigh=-1;ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode sync" elif [ $BEAMTYPE == "cosmic" ]; then [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode cosmics" From 58354061f1806e736ea8cc10edd216366055a315 Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 27 Oct 2021 23:28:43 +0200 Subject: [PATCH 198/236] sync private directory --- testing/private/shahoian/runTF_PB.sh | 11 ++--- testing/private/shahoian/run_PB.sh | 8 ++-- testing/private/shahoian/workflows_PB.desc | 51 ++++++++++++---------- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/testing/private/shahoian/runTF_PB.sh b/testing/private/shahoian/runTF_PB.sh index 53c6f74..e6bf75c 100755 --- a/testing/private/shahoian/runTF_PB.sh +++ b/testing/private/shahoian/runTF_PB.sh @@ -28,8 +28,6 @@ export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additiona export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) export NHBPERTF=128 # Number of HBF per TF export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" -#export GPU_EXTRA_CONFIG="" -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" export GEN_TOPO_IGNORE_ERROR=1 @@ -37,7 +35,7 @@ export MULTIPLICITY_FACTOR_RAWDECODERS=1 export MULTIPLICITY_FACTOR_CTFENCODERS=1 export MULTIPLICITY_FACTOR_REST=1 -export GPU_EXTRA_CONFIG="GPU_proc.memoryScalingFactor=1.5" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=1.5" export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" export PVERTEX_EXTRA_CONFIG="pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 @@ -46,9 +44,12 @@ export MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=2 export MULTIPLICITY_FACTOR_PROCESS_itstpc_track_matcher=2 export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 export ITS_CONFIG=" --tracking-mode sync_misaligned " +#export ITS_CONFIG=" --tracking-mode cosmics " + +export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" +export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF,FT0,FV0,FDD" +#export WORKFLOW_DETECTORS_MATCHING= -export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO,MID_RECO" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" -export WORKFLOW_DETECTORS_FLP_PROCESSING="FT0,FV0" for wf in "$@" do diff --git a/testing/private/shahoian/run_PB.sh b/testing/private/shahoian/run_PB.sh index fc9186d..5b8e8d1 100755 --- a/testing/private/shahoian/run_PB.sh +++ b/testing/private/shahoian/run_PB.sh @@ -28,8 +28,6 @@ export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additiona export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) export NHBPERTF=128 # Number of HBF per TF export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" -#export GPU_EXTRA_CONFIG="" -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" export GEN_TOPO_IGNORE_ERROR=1 @@ -37,7 +35,7 @@ export MULTIPLICITY_FACTOR_RAWDECODERS=1 export MULTIPLICITY_FACTOR_CTFENCODERS=1 export MULTIPLICITY_FACTOR_REST=1 -export GPU_EXTRA_CONFIG="GPU_proc.memoryScalingFactor=1.5" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=1.5" export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" export PVERTEX_EXTRA_CONFIG="pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 @@ -47,8 +45,8 @@ export MULTIPLICITY_FACTOR_PROCESS_itstpc_track_matcher=2 export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 export ITS_CONFIG=" --tracking-mode sync_misaligned " -export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO,MID_RECO" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" -export WORKFLOW_DETECTORS_FLP_PROCESSING="FT0,FV0" +export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" +export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF,FT0,FV0" for wf in "$@" do diff --git a/testing/private/shahoian/workflows_PB.desc b/testing/private/shahoian/workflows_PB.desc index 4f3225a..6cd2154 100644 --- a/testing/private/shahoian/workflows_PB.desc +++ b/testing/private/shahoian/workflows_PB.desc @@ -5,29 +5,36 @@ #ctf_itsCOSM-tpcCPU-trd-tof_B: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" #ctf_itsCOSM-tpcCPU-trd-tof_C: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=0 CTFINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" -#async-ED-75: "O2PDPSuite" reco,75,75,"SYNCMODE=0 BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" +async-ED-75: "O2PDPSuite" reco,75,75,"EXTINPUT=0 SYNCMODE=0 CTFINPUT=1 BEAMTYPE=pp WORKFLOW_PARAMETERS=CTF,CPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=3 production/dpl-workflow.sh" mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" ft0-fv0-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0 WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +ft0-fv0-fdd-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" - - -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-midTR-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" + + +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" + From 344c5527a706703fa5d4d15f32ce3b677d3998f5 Mon Sep 17 00:00:00 2001 From: afurs Date: Thu, 28 Oct 2021 02:34:37 +0200 Subject: [PATCH 199/236] FIT: severity is changed to WARNING --- testing/detectors/FDD/fdd-ctf.sh | 2 +- testing/detectors/FDD/fdd-digits-ctf.sh | 2 +- testing/detectors/FDD/fdd-digits-qc-ctf.sh | 2 +- testing/detectors/FT0/ft0-ctf.sh | 2 +- testing/detectors/FT0/ft0-digits-ctf.sh | 2 +- testing/detectors/FT0/ft0-digits-qc-ctf.sh | 2 +- testing/detectors/FV0/fv0-ctf.sh | 2 +- testing/detectors/FV0/fv0-digits-ctf.sh | 2 +- testing/detectors/FV0/fv0-digits-qc-ctf.sh | 2 +- testing/private/afurs/fdd-ft0-fv0-ctf.sh | 2 +- testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh | 2 +- testing/private/afurs/ft0-fv0-ctf.sh | 2 +- testing/private/afurs/ft0-fv0-digits-qc-ctf.sh | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/testing/detectors/FDD/fdd-ctf.sh b/testing/detectors/FDD/fdd-ctf.sh index ba3b23e..1d09bcc 100755 --- a/testing/detectors/FDD/fdd-ctf.sh +++ b/testing/detectors/FDD/fdd-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files diff --git a/testing/detectors/FDD/fdd-digits-ctf.sh b/testing/detectors/FDD/fdd-digits-ctf.sh index 465f1e4..49e2856 100755 --- a/testing/detectors/FDD/fdd-digits-ctf.sh +++ b/testing/detectors/FDD/fdd-digits-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files diff --git a/testing/detectors/FDD/fdd-digits-qc-ctf.sh b/testing/detectors/FDD/fdd-digits-qc-ctf.sh index b2e094f..3ec1532 100755 --- a/testing/detectors/FDD/fdd-digits-qc-ctf.sh +++ b/testing/detectors/FDD/fdd-digits-qc-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files diff --git a/testing/detectors/FT0/ft0-ctf.sh b/testing/detectors/FT0/ft0-ctf.sh index c10489e..898a5bc 100755 --- a/testing/detectors/FT0/ft0-ctf.sh +++ b/testing/detectors/FT0/ft0-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files diff --git a/testing/detectors/FT0/ft0-digits-ctf.sh b/testing/detectors/FT0/ft0-digits-ctf.sh index 0889e7b..965c18a 100755 --- a/testing/detectors/FT0/ft0-digits-ctf.sh +++ b/testing/detectors/FT0/ft0-digits-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files diff --git a/testing/detectors/FT0/ft0-digits-qc-ctf.sh b/testing/detectors/FT0/ft0-digits-qc-ctf.sh index 110d1be..0429441 100755 --- a/testing/detectors/FT0/ft0-digits-qc-ctf.sh +++ b/testing/detectors/FT0/ft0-digits-qc-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files diff --git a/testing/detectors/FV0/fv0-ctf.sh b/testing/detectors/FV0/fv0-ctf.sh index 218da6a..cbe00d5 100755 --- a/testing/detectors/FV0/fv0-ctf.sh +++ b/testing/detectors/FV0/fv0-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files diff --git a/testing/detectors/FV0/fv0-digits-ctf.sh b/testing/detectors/FV0/fv0-digits-ctf.sh index 74890d7..7a7dd2d 100755 --- a/testing/detectors/FV0/fv0-digits-ctf.sh +++ b/testing/detectors/FV0/fv0-digits-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files diff --git a/testing/detectors/FV0/fv0-digits-qc-ctf.sh b/testing/detectors/FV0/fv0-digits-qc-ctf.sh index 1187d81..ab76ab5 100755 --- a/testing/detectors/FV0/fv0-digits-qc-ctf.sh +++ b/testing/detectors/FV0/fv0-digits-qc-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files diff --git a/testing/private/afurs/fdd-ft0-fv0-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-ctf.sh index b1b5cf4..18309a7 100755 --- a/testing/private/afurs/fdd-ft0-fv0-ctf.sh +++ b/testing/private/afurs/fdd-ft0-fv0-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" #CTFOUT="/home/afurs/public/out/" diff --git a/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh index 0476afc..4738f06 100755 --- a/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh +++ b/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" #CTFOUT="/home/afurs/public/out/" diff --git a/testing/private/afurs/ft0-fv0-ctf.sh b/testing/private/afurs/ft0-fv0-ctf.sh index 64a9233..d54659b 100755 --- a/testing/private/afurs/ft0-fv0-ctf.sh +++ b/testing/private/afurs/ft0-fv0-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" #CTFOUT="/home/afurs/public/out/" diff --git a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh index 7e4c713..d1e17ec 100755 --- a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh +++ b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh @@ -2,7 +2,7 @@ source common/setenv.sh -SEVERITY=INFO +SEVERITY=WARNING ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" ARGS_ALL+=" --infologger-severity $SEVERITY" #CTFOUT="/home/afurs/public/out/" From 5f094c4e952b64665fd2d86dd89d996f015e192c Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 29 Oct 2021 12:07:35 +0200 Subject: [PATCH 200/236] Throw error when QC script not found --- production/dpl-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index eca1425..96ce42a 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -447,7 +447,7 @@ workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && add_W o2-eve-display # --------------------------------------------------------------------------------------------------------------------- # Quality Control -workflow_has_parameter QC && source $MYDIR/qc-workflow.sh +workflow_has_parameter QC && { source $MYDIR/qc-workflow.sh; [[ $? != 0 ]] && exit 1; } # --------------------------------------------------------------------------------------------------------------------- # DPL run binary From 3ae1c89d1fa99e46cd4c2c253931f2cce229ab29 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 29 Oct 2021 12:45:28 +0200 Subject: [PATCH 201/236] Add option to run with QC locally, disabling sending of data to mergers --- production/README.md | 4 ++++ production/qc-workflow.sh | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/production/README.md b/production/README.md index 8e2cb27..0147225 100644 --- a/production/README.md +++ b/production/README.md @@ -93,3 +93,7 @@ An example command line is: ``` EPNMODE=1 WORKFLOW_DETECTORS=TPC XrdSecSSSKT=~/.eos/my.key TFDELAY=10 NTIMEFRAMES=10 SHMSIZE=32000000000 DDSHMSIZE=32000 ~/alice/O2/prodtests/full-system-test/run-workflow-on-inputlist.sh DD file_list.txt 500 1 ``` + +# Local QC testing +For testing a workflow with QC locally, the sending of data to QC mergers must be disabled. For this, the qc-workflow.sh supports the option `QC_REDIRECT_MERGER_TO_LOCALHOST=1` which redirects all messages to the remote machines to `localhost`. +Since the channels are `pub/sub` they are non-blocking. diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index e1a135b..bb31789 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -64,5 +64,9 @@ if [ ! -z "$JSON_FILES" ]; then fi MERGED_JSON_FILENAME=`realpath $MERGED_JSON_FILENAME` + if [[ "0$QC_REDIRECT_MERGER_TO_LOCALHOST" == "01" ]]; then + sed -i -E 's/( *)"remoteMachine" *: *".*"(,|) *$/\1"remoteMachine": "127.0.0.1"\2/' $MERGED_JSON_FILENAME + fi + add_W o2-qc "--config json://$MERGED_JSON_FILENAME --local --host $QC_HOST" "" 0 fi From 1030c8fe5cabd085427d43c4ca7f91ef5106d4eb Mon Sep 17 00:00:00 2001 From: Ole Schmidt Date: Fri, 29 Oct 2021 17:00:03 +0200 Subject: [PATCH 202/236] Update READMEs (fix typo and add note to run-workflow-on-inputlist) --- README.md | 6 +++--- production/README.md | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9bf416d..33bff5c 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ There are 3 ways foreseenm to configure the *full topology* in AliECS: (currentl - The **workflow name** inside the *description library file*. - **detector list**: Multiple comma-separated lists of detectors participating in the run (global list, list for qc, list for calibration, list of detectors to run reconstruction for, list of detectors to include in the CTF, list of detectors that have processing on the FLP), defaulting to `ALL` for all detectors. - **workflow parameters**: text field passed to workflow as environment variable for additional options. - - **number of nodes override**: Overrides the setting for the number of nodes required in the workflow (meant so quickly increase / decrease the EPN partition size). + - **number of nodes override**: Overrides the setting for the number of nodes required in the workflow (meant to quickly increase / decrease the EPN partition size). - **process multiplicity overrides**: Scaling factors for the process multiplicities for raw decoders, ctf encoders, and other processes. - **extra environment options**: Free text field where the operator can put additional environment variables, that will be forwarded to the workflow. - **wipe workflow cache**: Normally the XMLs are cached, when they are created from the same repository version / same workflow / same O2 version. This option clears the cache for the current partition. @@ -81,7 +81,7 @@ commit=xxxx|path=xxxx file=topologies.desc topology=demo-full-topology parameter # Calibration workflows with aggregator Calibration workflows can be different when they use an aggregator. In that case, there is processing running on each EPN, and the output is sent to an aggregator node. Communication happens via the `o2-dpl-raw-proxy` and the `o2-dpl-output-proxy`. To set up such a workflow, a couple of points must be followed: -- There are 2 different shell scripts, one for the "reco" part running on each EPN, and one for the calibration aggregator "reco" part on the calibration node. There may be more than one aggregator in the topology, in that case it is one *reco* script and multiple *calib* scripts. +- There are 2 different shell scripts, one for the "reco" part running on each EPN, and one for the calibration aggregator "calib" part on the calibration node. There may be more than one aggregator in the topology, in that case it is one *reco* script and multiple *calib* scripts. - The *reco* script must contain an `o2-dpl-output-proxy` to send the output and each calib script must contain an `o2-dpl-raw-proxy` for the input. - Each of the input "raw" proxies must be assigned a unique name via the `--proxy-name [NAME]` option. Note that the *reco* script also contains an input raw proxy, with the default name `readout-proxy`. - The channel-name of each input proxy must match the proxy name. The *calib* input proxies' channels must use `method=bind`. The output proxies must use `method=connect` and the channel name must match the name of the input proxy they are connecting to. @@ -92,7 +92,7 @@ To set up such a workflow, a couple of points must be followed: For an example, chek the calibration workflows [here](testing/examples) -*NOTE* For reference, to run a workflow with calib aggregator on the EPN with AliECS, currently a node from the `online-calib` zone must be requested, by setting `odc_resources` to `[ {"zone":"online", "n":10}, {"zone":"online-calib", "n":1 } ]` (adjust the `10` to the number of required reconstruction nodes). This will be improved later and then this extra setting will not be needed any more. +*NOTE* For reference, to run a workflow with calib aggregator on the EPN with AliECS, currently a node from the `online-calib` zone must be requested, by setting `odc_resources` to `[ {"zone":"online", "n":10}, {"zone":"online-calib", "n":1 } ]` (adjust the `10` to the number of required reconstruction nodes). This will be improved later and then this extra setting will not be needed anymore. # The parser script: The **parser** is a simple python script that parses a *topology description* and generates the DDS XML file with the *full topology*. To do so, it runs all the DPL workflows with the `--dds` option and then uses the `odc-topo-epn` tool to merge the *partial topology* into the final *full topology*. diff --git a/production/README.md b/production/README.md index 0147225..84d6fd5 100644 --- a/production/README.md +++ b/production/README.md @@ -76,6 +76,8 @@ The modes are: - TF: Read raw timeframes using o2-raw-tf-reader-workflow - CTF: Read CTFs using the o2-ctf-reader-workflow +> **NOTE:** The DD mode does not support a list of local files as input. For processing a few local files one should use the TF mode. + The second argument is the name of a list-files containing a list of files to be processed. In the CTF and TF modes, it can also be a comma-separated list, but this is not supported in the DD mode. - (The work `LOCAL` may be used to fetch files from the local folder.) From 7b9a4b28eb7548d1467094597ed0059f71b09b0f Mon Sep 17 00:00:00 2001 From: Markus Fasel Date: Wed, 27 Oct 2021 18:21:24 +0200 Subject: [PATCH 203/236] [EMCAL-724] Increase min. CTF file size to 500 MB and set min. number of ctf to 10000 --- testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh | 7 ++++++- .../EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh | 7 ++++++- .../EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh | 7 ++++++- .../EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh | 7 ++++++- .../mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh | 7 ++++++- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh index e426607..8584a1c 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh @@ -18,7 +18,8 @@ ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" # CTF compression dictionary CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" # min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="2000000"t +CTF_MINSIZE="500000000" +CTF_MAX_PER_FILE=10000 o2-dpl-raw-proxy $ARGS_ALL \ --dataspec "$PROXY_INSPEC" \ @@ -37,6 +38,9 @@ o2-dpl-raw-proxy $ARGS_ALL \ --pipeline EMCALRawToCellConverterSpec:8 \ | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ --ctf-dict "${CTF_DICT}" \ + --mem-factor 5 \ + --severity info \ + --infologger-severity warning \ | o2-ctf-writer-workflow $ARGS_ALL \ --configKeyValues "${CONFKEYVAL}" \ --no-grp \ @@ -45,4 +49,5 @@ o2-dpl-raw-proxy $ARGS_ALL \ --output-dir $CTF_DIR \ --meta-output-dir ${CTF_METAFILES_DIR} \ --min-file-size "${CTF_MINSIZE}" \ + --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh index 1c949fc..167877e 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh @@ -21,7 +21,8 @@ SEVERITY_QC=warning # CTF compression dictionary CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" # min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="2000000" +CTF_MINSIZE="500000000" +CTF_MAX_PER_FILE=10000 o2-dpl-raw-proxy $ARGS_ALL \ --dataspec "$PROXY_INSPEC" \ @@ -46,6 +47,9 @@ o2-dpl-raw-proxy $ARGS_ALL \ --infologger-severity $INFOLOGGER_SEVERITY_QC \ | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ --ctf-dict "${CTF_DICT}" \ + --mem-factor 5 \ + --severity info \ + --infologger-severity warning \ | o2-ctf-writer-workflow $ARGS_ALL \ --configKeyValues "${CONFKEYVAL}" \ --no-grp \ @@ -54,5 +58,6 @@ o2-dpl-raw-proxy $ARGS_ALL \ --output-dir $CTF_DIR \ --meta-output-dir ${CTF_METAFILES_DIR} \ --min-file-size "${CTF_MINSIZE}" \ + --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh index dfb9cce..5bcb14d 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh @@ -21,7 +21,8 @@ SEVERITY_QC=warning # CTF compression dictionary CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" # min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="2000000" +CTF_MINSIZE="500000000" +CTF_MAX_PER_FILE=10000 o2-dpl-raw-proxy $ARGS_ALL \ --dataspec "$PROXY_INSPEC" \ @@ -46,6 +47,9 @@ o2-dpl-raw-proxy $ARGS_ALL \ --infologger-severity $INFOLOGGER_SEVERITY_QC \ | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ --ctf-dict "${CTF_DICT}" \ + --mem-factor 5 \ + --severity info \ + --infologger-severity warning \ | o2-ctf-writer-workflow $ARGS_ALL \ --configKeyValues "${CONFKEYVAL}" \ --no-grp \ @@ -54,4 +58,5 @@ o2-dpl-raw-proxy $ARGS_ALL \ --output-dir $CTF_DIR \ --meta-output-dir ${CTF_METAFILES_DIR} \ --min-file-size "${CTF_MINSIZE}" \ + --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ | o2-dpl-run $ARGS_ALL --dds diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh index c31b105..f9a0dc7 100755 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh +++ b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh @@ -19,7 +19,8 @@ SEVERITY_QC=warning # CTF compression dictionary CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" # min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="2000000" +CTF_MINSIZE="500000000" +CTF_MAX_PER_FILE=10000 o2-dpl-raw-proxy $ARGS_ALL \ --dataspec "$PROXY_INSPEC" \ @@ -42,6 +43,9 @@ o2-dpl-raw-proxy $ARGS_ALL \ --infologger-severity $INFOLOGGER_SEVERITY_QC \ | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ --ctf-dict "${CTF_DICT}" \ + --mem-factor 5 \ + --severity info \ + --infologger-severity warning \ | o2-ctf-writer-workflow $ARGS_ALL \ --configKeyValues "${CONFKEYVAL}" \ --no-grp \ @@ -50,4 +54,5 @@ o2-dpl-raw-proxy $ARGS_ALL \ --output-dir $CTF_DIR \ --meta-output-dir ${CTF_METAFILES_DIR} \ --min-file-size "${CTF_MINSIZE}" \ + --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ | o2-dpl-run $ARGS_ALL --dds diff --git a/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh b/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh index 24310cd..e09fa91 100755 --- a/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh +++ b/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh @@ -21,7 +21,8 @@ SEVERITY_QC=warning # CTF compression dictionary CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" # min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="2000000" +CTF_MINSIZE="500000000" +CTF_MAX_PER_FILE=10000 o2-dpl-raw-proxy $ARGS_ALL \ --dataspec "$PROXY_INSPEC" \ @@ -46,6 +47,9 @@ o2-dpl-raw-proxy $ARGS_ALL \ --infologger-severity $INFOLOGGER_SEVERITY_QC \ | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ --ctf-dict "${CTF_DICT}" \ + --mem-factor 5 \ + --severity info \ + --infologger-severity warning \ | o2-ctf-writer-workflow $ARGS_ALL \ --configKeyValues "${CONFKEYVAL}" \ --no-grp \ @@ -54,5 +58,6 @@ o2-dpl-raw-proxy $ARGS_ALL \ --output-dir $CTF_DIR \ --meta-output-dir ${CTF_METAFILES_DIR} \ --min-file-size "${CTF_MINSIZE}" \ + --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file From b2ab051a775fc96eabb64e0a23555e471295cf52 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 29 Oct 2021 19:14:27 +0200 Subject: [PATCH 204/236] Use NGPUS as default for number of TPC trackers also in case of EPNPIPELINES=0 --- production/dpl-workflow.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 96ce42a..a682d4b 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -265,6 +265,8 @@ elif [ $EPNPIPELINES != 0 ]; then else N_TPCTRK=$NGPUS fi +else + N_TPCTRK=$NGPUS fi # Scale some multiplicities with the number of nodes RECO_NUM_NODES_WORKFLOW_CMP=$((($RECO_NUM_NODES_WORKFLOW > 15 ? $RECO_NUM_NODES_WORKFLOW : 15) * ($NUMAGPUIDS == 1 ? 2 : 1))) # Limit the lowert scaling factor, multiply by 2 if we have 2 NUMA domains From 295b0f68d0f895376d0bf3cf80eaf8bef89d6bf8 Mon Sep 17 00:00:00 2001 From: shahoian Date: Fri, 29 Oct 2021 23:24:21 +0200 Subject: [PATCH 205/236] Set min ctf size to 2GB --- production/dpl-workflow.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index a682d4b..93b089f 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -13,7 +13,7 @@ if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # D if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries if [ -z $CTF_METAFILES_DIR ]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers -if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="500000000"; fi # accumulate CTFs until file size reached +if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="2000000000"; fi # accumulate CTFs until file size reached if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="10000"; fi # but no more than given number of CTFs per file if [ -z $IS_SIMULATED_DATA ]; then IS_SIMULATED_DATA=1; fi # processing simulated data @@ -406,7 +406,7 @@ if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ] && has_detector_ctf FT0 && add_W o2-ft0-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FT0_ENC_MEMFACT:-1.5} --pipeline $(get_N ft0-entropy-encoder FT0 CTF)" has_detector_ctf FV0 && add_W o2-fv0-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FV0_ENC_MEMFACT:-1.5} --pipeline $(get_N fv0-entropy-encoder FV0 CTF)" has_detector_ctf MID && add_W o2-mid-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MID_ENC_MEMFACT:-1.5} --pipeline $(get_N mid-entropy-encoder MID CTF)" - has_detector_ctf MCH && add_W o2-mch-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MCH_ENC_MEMFACT:-1.5} --pipeline $(get_N mch-entropy-encoder MCH CTF)" + has_detector_ctf MCH && add_W o2-mch-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --pipeline $(get_N mch-entropy-encoder MCH CTF)" has_detector_ctf PHS && add_W o2-phos-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${PHS_ENC_MEMFACT:-1.5} --pipeline $(get_N phos-entropy-encoder PHS CTF)" has_detector_ctf CPV && add_W o2-cpv-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${CPV_ENC_MEMFACT:-1.5} --pipeline $(get_N cpv-entropy-encoder CPV CTF)" has_detector_ctf EMC && add_W o2-emcal-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${EMC_ENC_MEMFACT:-1.5} --pipeline $(get_N emcal-entropy-encoder EMC CTF)" From a1115e5b4458fc65337f2ad11937d48cebf0a906 Mon Sep 17 00:00:00 2001 From: shahoian Date: Fri, 29 Oct 2021 23:24:33 +0200 Subject: [PATCH 206/236] sync of private directory --- testing/private/shahoian/runTF_PB.sh | 10 ++++++---- testing/private/shahoian/run_PB.sh | 13 +++++++++---- testing/private/shahoian/workflows_PB.desc | 12 +++++++++++- tools/datadistribution_workflows/dd-disk.xml | 2 +- .../dd-processing-disk.xml | 2 +- 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/testing/private/shahoian/runTF_PB.sh b/testing/private/shahoian/runTF_PB.sh index e6bf75c..b652316 100755 --- a/testing/private/shahoian/runTF_PB.sh +++ b/testing/private/shahoian/runTF_PB.sh @@ -37,19 +37,21 @@ export MULTIPLICITY_FACTOR_REST=1 export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=1.5" export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" -export PVERTEX_EXTRA_CONFIG="pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" +export PVERTEX_EXTRA_CONFIG="pvertexer.nSigmaTimeCut=100;pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 export MULTIPLICITY_FACTOR_PROCESS_its_stf_decoder=4 export MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=2 export MULTIPLICITY_FACTOR_PROCESS_itstpc_track_matcher=2 -export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 +export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 +export MULTIPLICITY_FACTOR_PROCESS_mch_data_decoder=5 + export ITS_CONFIG=" --tracking-mode sync_misaligned " #export ITS_CONFIG=" --tracking-mode cosmics " -export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" +export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO,MATCH_TPCTRD,MATCH_TPCTOF" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF,FT0,FV0,FDD" #export WORKFLOW_DETECTORS_MATCHING= - +export ARGS_EXTRA_PROCESS_o2_tpcits_match_workflow=" --ignore-bc-check " for wf in "$@" do diff --git a/testing/private/shahoian/run_PB.sh b/testing/private/shahoian/run_PB.sh index 5b8e8d1..43994b4 100755 --- a/testing/private/shahoian/run_PB.sh +++ b/testing/private/shahoian/run_PB.sh @@ -37,16 +37,21 @@ export MULTIPLICITY_FACTOR_REST=1 export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=1.5" export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" -export PVERTEX_EXTRA_CONFIG="pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" +export PVERTEX_EXTRA_CONFIG="pvertexer.nSigmaTimeCut=100;pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 export MULTIPLICITY_FACTOR_PROCESS_its_stf_decoder=4 export MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=2 export MULTIPLICITY_FACTOR_PROCESS_itstpc_track_matcher=2 -export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 +export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 +export MULTIPLICITY_FACTOR_PROCESS_mch_data_decoder=5 + export ITS_CONFIG=" --tracking-mode sync_misaligned " +#export ITS_CONFIG=" --tracking-mode cosmics " -export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" -export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF,FT0,FV0" +export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO,MATCH_TPCTRD,MATCH_TPCTOF" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" +export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF,FT0,FV0,FDD" +#export WORKFLOW_DETECTORS_MATCHING= +export ARGS_EXTRA_PROCESS_o2_tpcits_match_workflow=" --ignore-bc-check " for wf in "$@" do diff --git a/testing/private/shahoian/workflows_PB.desc b/testing/private/shahoian/workflows_PB.desc index 6cd2154..23c98af 100644 --- a/testing/private/shahoian/workflows_PB.desc +++ b/testing/private/shahoian/workflows_PB.desc @@ -17,24 +17,34 @@ its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSu its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" - +its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140-NOQC: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" + +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" +its-mftTR-tpc-trd-tof-mid-mch-ft0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" + +mch-TF-CTF-QC-mch-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MCH WORKFLOW_DETECTORS_QC=MCH production/dpl-workflow.sh" + +its-mftTR-tpcCPU-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" diff --git a/tools/datadistribution_workflows/dd-disk.xml b/tools/datadistribution_workflows/dd-disk.xml index ad62cb9..902c82f 100644 --- a/tools/datadistribution_workflows/dd-disk.xml +++ b/tools/datadistribution_workflows/dd-disk.xml @@ -1,7 +1,7 @@ - /home/epn/odc/tfbuilder.sh disk + /home/epn/odc/tfbuilder.sh disk1G TfBuilderRequirement diff --git a/tools/datadistribution_workflows/dd-processing-disk.xml b/tools/datadistribution_workflows/dd-processing-disk.xml index ef376b3..b6e7c53 100644 --- a/tools/datadistribution_workflows/dd-processing-disk.xml +++ b/tools/datadistribution_workflows/dd-processing-disk.xml @@ -1,7 +1,7 @@ - /home/epn/odc/tfbuilder.sh disk_data + /home/epn/odc/tfbuilder.sh disk1G_data TfBuilderRequirement From dedcfe736be90bb6e6813d176a27361e61ed0ed3 Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 3 Nov 2021 00:10:50 +0100 Subject: [PATCH 207/236] enable AOD production --- common/setenv.sh | 2 +- production/dpl-workflow.sh | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 4d9a03c..01cbb67 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -9,7 +9,7 @@ fi LIST_OF_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH,CTP" -LIST_OF_GLORECO="ITSTPC,TPCTRD,ITSTPCTRD,TPCTOF,ITSTPCTOF,MFTMCH,PRIMVTX,SECVTX" +LIST_OF_GLORECO="ITSTPC,TPCTRD,ITSTPCTRD,TPCTOF,ITSTPCTOF,MFTMCH,PRIMVTX,SECVTX,AOD" # Detectors used in the workflow / enabled parameters if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS=$LIST_OF_DETECTORS; fi diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 93b089f..a520885 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -406,7 +406,7 @@ if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ] && has_detector_ctf FT0 && add_W o2-ft0-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FT0_ENC_MEMFACT:-1.5} --pipeline $(get_N ft0-entropy-encoder FT0 CTF)" has_detector_ctf FV0 && add_W o2-fv0-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FV0_ENC_MEMFACT:-1.5} --pipeline $(get_N fv0-entropy-encoder FV0 CTF)" has_detector_ctf MID && add_W o2-mid-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MID_ENC_MEMFACT:-1.5} --pipeline $(get_N mid-entropy-encoder MID CTF)" - has_detector_ctf MCH && add_W o2-mch-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --pipeline $(get_N mch-entropy-encoder MCH CTF)" + has_detector_ctf MCH && add_W o2-mch-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MCH_ENC_MEMFACT:-1.5} --pipeline $(get_N mch-entropy-encoder MCH CTF)" has_detector_ctf PHS && add_W o2-phos-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${PHS_ENC_MEMFACT:-1.5} --pipeline $(get_N phos-entropy-encoder PHS CTF)" has_detector_ctf CPV && add_W o2-cpv-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${CPV_ENC_MEMFACT:-1.5} --pipeline $(get_N cpv-entropy-encoder CPV CTF)" has_detector_ctf EMC && add_W o2-emcal-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${EMC_ENC_MEMFACT:-1.5} --pipeline $(get_N emcal-entropy-encoder EMC CTF)" @@ -447,6 +447,11 @@ workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS [ -z "$ED_CLUSTERS" ] && ED_CLUSTERS=$TRACK_SOURCES workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && add_W o2-eve-display "--display-tracks $ED_TRACKS --display-clusters $ED_CLUSTERS $EVE_CONFIG $DISABLE_MC" "$ITSMFT_FILES" +# --------------------------------------------------------------------------------------------------------------------- +# AOD +[ -z "$AOD_INPUT" ] && AOD_INPUT=$TRACK_SOURCES +has_detector_matching AOD && add_W o2-aod-producer-workflow "--info-sources $AOD_INPUT --disable-root-input --aod-writer-keep dangling --aod-writer-resfile "AO2D" --aod-writer-resmode UPDATE $DISABLE_MC" + # --------------------------------------------------------------------------------------------------------------------- # Quality Control workflow_has_parameter QC && { source $MYDIR/qc-workflow.sh; [[ $? != 0 ]] && exit 1; } From 71b5f61b8fd4fe0ac7b326f3df44c1de7103059b Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 3 Nov 2021 20:10:42 +0100 Subject: [PATCH 208/236] Rename EPNMODE to EPNSYNCMODE --- README.md | 8 ++++---- common/README.md | 2 +- common/setenv.sh | 4 ++-- production/README.md | 2 +- production/dpl-workflow.sh | 8 ++++---- testing/detectors/TPC/tpc-workflow.sh | 2 +- testing/examples/example-workflow.sh | 2 +- testing/private/shahoian/runTF_PB.sh | 2 +- testing/private/shahoian/runTF_ext_dpl.sh | 2 +- testing/private/shahoian/run_PB.sh | 2 +- testing/private/shahoian/run_ext_dpl.sh | 2 +- testing/private/shahoian/run_test.sh | 2 +- testing/private/zampolli/runTF_ext_dpl.sh | 2 +- testing/private/zampolli/run_ext_dpl.sh | 2 +- tools/epn/gen_topo_o2dataprocessing.sh | 2 +- tools/parse | 4 ++-- 16 files changed, 24 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 33bff5c..3b39e62 100644 --- a/README.md +++ b/README.md @@ -110,14 +110,14 @@ DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml WORKFLOW_DETECTORS ``` - The following environment variables steer the *Parser*: - `$FILEWORKDIR`: This variable must be set and is used by the workflows to specify where all required files (grp, geometry, dictionaries, etc) are located. - - `$EPNMODE`: If set the parser assumes it is running on the EPN. If so it will automatically load the modules specified in the topology description. This variable is further used by the workflows themselves, e.g. to activate the InfoLogger and the Metrics monitoring. + - `$EPNSYNCMODE`: If set the parser assumes it is running on the EPN for synchronous processing. If so it will automatically load the modules specified in the topology description. This variable is further used by the workflows themselves, e.g. to activate the InfoLogger and the Metrics monitoring. - `$INRAWCHANNAME`: Propagated to the workflow, defines the raw FMQ channel name used for the communication with DataDistribution. - `$RECO_NUM_NODES_OVERRIDE`: Overrides the number of nodes used for reconstruction (empty or 0 to disable) - `$DDMODE`: How to operate DataDistribution: **discard** (build TF and discard them), **disk** (build TF and store to disk), **processing** (build TF and run DPL workflow on TF data), **processing-disk** (both store TF to disk and run processing). - `$DDWORKFLOW`: (*alternative*): Explicit path to the XML file with the partial workflow for *DataDistribution*. - `$GEN_TOPO_IGNORE_ERROR`: Ignore ERROR messages during workflow creation. - `$WORKFLOWMODE`: Can be set to print. In that case the parser will not create the DDS topology output, but the list of shell commands to start to run the workflows locally. -- When run on the EPN farm (indicated by the `$EPNMODE=1` variable), the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. +- When run on the EPN farm for synchronous processing (indicated by the `$EPNSYNCMODE=1` variable), the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. - The parser exports the env variable `$RECO_NUM_NODES_WORKFLOW` that contains on how many nodes the workflow will be running when running the workflow script. This can be used to tune the process multiplicities. # Creating a full topology DDS XML file manually using the parser: @@ -127,9 +127,9 @@ DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml WORKFLOW_DETECTORS - Make sure the `odc-topo-epn` is in your path (e.g. `module load ODC` / `alienv enter ODC/latest`). - Set the required environment variables, e.g. ``` -FILEWORKDIR=/home/epn/odc/files EPNMODE=1 DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml INRAWCHANNAME=tf-builder-pipe-0 WORKFLOW_DETECTORS=TPC,ITS,TRD,TOF,FT0 +FILEWORKDIR=/home/epn/odc/files EPNSYNCMODE=1 DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml INRAWCHANNAME=tf-builder-pipe-0 WORKFLOW_DETECTORS=TPC,ITS,TRD,TOF,FT0 ``` -- If you are not on the EPN farm and have NOT set `EPNMODE=1`: Load the required modules for O2 / QC (`alienv load O2PDPSuite/latest`) +- If you are not on the EPN farm and have NOT set `EPNSYNCMODE=1`: Load the required modules for O2 / QC (`alienv load O2PDPSuite/latest`) - Run the parser, e.g.: ``` ./tools/parse production/production.desc synchronous-workflow /tmp/dds-topology.xml diff --git a/common/README.md b/common/README.md index 35cee7e..148fb67 100644 --- a/common/README.md +++ b/common/README.md @@ -46,4 +46,4 @@ The `setenv-sh` script sets the following environment options * `WORKFLOWMODE`: run (run the workflow (default)), print (print the command to stdout), dds (create partial DDS topology) * `FILEWORKDIR`: directory for all input / output files. E.g. grp / geometry / dictionaries etc. are read from here, and dictionaries / ctf / etc. are written to there. Some files have more fine grained control via other environment variables (e.g. to store the CTF to somewhere else). Such variables are initialized to `$FILEWORKDIR` by default but can be overridden. -* `EPNMODE`: Specify that this is a workflow running on the EPN, e.g. logging goes to InfoLogger, DPL metrics to to the AliECS monitoring, etc. \ No newline at end of file +* `EPNSYNCMODE`: Specify that this is a workflow running on the EPN for synchronous processing, e.g. logging goes to InfoLogger, DPL metrics to to the AliECS monitoring, etc. diff --git a/common/setenv.sh b/common/setenv.sh index 01cbb67..40a7fe2 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -43,10 +43,10 @@ if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw channel name used to communicate with DataDistribution if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflow mode, must be run, print, od dds if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. -if [ -z "$EPNMODE" ]; then export EPNMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... +if [ -z "$EPNSYNCMODE" ]; then export EPNSYNCMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... if [ -z "$BEAMTYPE" ]; then export BEAMTYPE=PbPb; fi # Beam type, must be PbPb, pp, pPb, cosmic, technical if [ -z "$EDJSONS_DIR" ]; then export EDJSONS_DIR="jsons"; fi # output directory for ED json files -if [ $EPNMODE == 0 ]; then +if [ $EPNSYNCMODE == 0 ]; then if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 8 << 30 )); fi # Size of shared memory for messages if [ -z "$NGPUS" ]; then export NGPUS=1; fi # Number of GPUs to use, data distributed round-robin if [ -z "$EXTINPUT" ]; then export EXTINPUT=0; fi # Receive input from raw FMQ channel instead of running o2-raw-file-reader diff --git a/production/README.md b/production/README.md index 84d6fd5..0bc72a9 100644 --- a/production/README.md +++ b/production/README.md @@ -93,7 +93,7 @@ The tool passes all env variables on to `dpl-workflow.sh` thus it can be used in An example command line is: ``` -EPNMODE=1 WORKFLOW_DETECTORS=TPC XrdSecSSSKT=~/.eos/my.key TFDELAY=10 NTIMEFRAMES=10 SHMSIZE=32000000000 DDSHMSIZE=32000 ~/alice/O2/prodtests/full-system-test/run-workflow-on-inputlist.sh DD file_list.txt 500 1 +EPNSYNCMODE=1 WORKFLOW_DETECTORS=TPC XrdSecSSSKT=~/.eos/my.key TFDELAY=10 NTIMEFRAMES=10 SHMSIZE=32000000000 DDSHMSIZE=32000 ~/alice/O2/prodtests/full-system-test/run-workflow-on-inputlist.sh DD file_list.txt 500 1 ``` # Local QC testing diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index a520885..c94d6b8 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -64,7 +64,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Set general arguments ARGS_ALL="--session ${OVERRIDE_SESSION:-default} --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA --early-forward-policy noraw" -if [ $EPNMODE == 1 ]; then +if [ $EPNSYNCMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 15" elif [ "0$ENABLE_METRICS" != "01" ]; then @@ -139,7 +139,7 @@ has_processing_step ENTROPY_ENCODER && has_detector_ctf TPC && GPU_OUTPUT+=",com has_detector_flp_processing CPV && CPV_INPUT=digits ! has_detector_flp_processing TOF && TOF_CONFIG+=" --ignore-dist-stf" -if [ $EPNMODE == 1 ]; then +if [ $EPNSYNCMODE == 1 ]; then EVE_CONFIG+=" --eve-dds-collection-index 0" ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE;ITSAlpideParam.roFrameLengthInBC=$ITS_STROBE;MFTAlpideParam.roFrameLengthInBC=$MFT_STROBE;" MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" @@ -312,7 +312,7 @@ elif [ $RAWTFINPUT == 1 ]; then if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi add_W o2-raw-tf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --input-data ${TFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --onlyDet $WORKFLOW_DETECTORS" elif [ $EXTINPUT == 1 ]; then - PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=$EPNMODE" + PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=$EPNSYNCMODE" PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" PROXY_IN_N=0 for i in `echo "$WORKFLOW_DETECTORS" | sed "s/,/ /g"`; do @@ -350,7 +350,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Raw decoder workflows - disabled in async mode if [ $CTFINPUT == 0 ]; then - if has_detector TPC && [ $EPNMODE == 1 ]; then + if has_detector TPC && [ $EPNSYNCMODE == 1 ]; then GPU_INPUT=zsonthefly add_W o2-tpc-raw-to-digits-workflow "--input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline $(get_N tpc-raw-to-digits-0 TPC RAW TPCRAWDEC)" add_W o2-tpc-reco-workflow "--input-type digitizer --output-type zsraw,disable-writer --pipeline $(get_N tpc-zsEncoder TPC RAW TPCRAWDEC)" diff --git a/testing/detectors/TPC/tpc-workflow.sh b/testing/detectors/TPC/tpc-workflow.sh index a421693..ff97cb0 100755 --- a/testing/detectors/TPC/tpc-workflow.sh +++ b/testing/detectors/TPC/tpc-workflow.sh @@ -3,7 +3,7 @@ source common/setenv.sh ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -if [ $EPNMODE == 1 ]; then +if [ $EPNSYNCMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" ARGS_ALL+=" --monitoring-backend no-op://" diff --git a/testing/examples/example-workflow.sh b/testing/examples/example-workflow.sh index 5debd53..263d8dc 100755 --- a/testing/examples/example-workflow.sh +++ b/testing/examples/example-workflow.sh @@ -4,7 +4,7 @@ source common/setenv.sh SEVERITY=warning ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE" -if [ $EPNMODE == 1 ]; then +if [ $EPNSYNCMODE == 1 ]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 15" elif [ "0$ENABLE_METRICS" != "01" ]; then diff --git a/testing/private/shahoian/runTF_PB.sh b/testing/private/shahoian/runTF_PB.sh index b652316..953ddcd 100755 --- a/testing/private/shahoian/runTF_PB.sh +++ b/testing/private/shahoian/runTF_PB.sh @@ -13,7 +13,7 @@ export GEN_TOPO_HASH=0 # Specify p export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository export EXTINPUT=1 -export EPNMODE=1 +export EPNSYNCMODE=1 export SYNCMODE=1 export SHMSIZE=128000000000 export INFOLOGGER_SEVERITY=warning diff --git a/testing/private/shahoian/runTF_ext_dpl.sh b/testing/private/shahoian/runTF_ext_dpl.sh index 64a33bc..8a49817 100755 --- a/testing/private/shahoian/runTF_ext_dpl.sh +++ b/testing/private/shahoian/runTF_ext_dpl.sh @@ -13,7 +13,7 @@ export GEN_TOPO_HASH=0 # Specify p export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository export EXTINPUT=1 -export EPNMODE=1 +export EPNSYNCMODE=1 export SYNCMODE=1 export SHMSIZE=128000000000 export INFOLOGGER_SEVERITY=warning diff --git a/testing/private/shahoian/run_PB.sh b/testing/private/shahoian/run_PB.sh index 43994b4..6694ec6 100755 --- a/testing/private/shahoian/run_PB.sh +++ b/testing/private/shahoian/run_PB.sh @@ -13,7 +13,7 @@ export GEN_TOPO_HASH=0 # Specify p export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository export EXTINPUT=1 -export EPNMODE=1 +export EPNSYNCMODE=1 export SYNCMODE=1 export SHMSIZE=128000000000 export INFOLOGGER_SEVERITY=warning diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh index d09fc07..9666f7e 100755 --- a/testing/private/shahoian/run_ext_dpl.sh +++ b/testing/private/shahoian/run_ext_dpl.sh @@ -13,7 +13,7 @@ export GEN_TOPO_HASH=0 # Specify p export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository export EXTINPUT=1 -export EPNMODE=1 +export EPNSYNCMODE=1 export SYNCMODE=1 export SHMSIZE=128000000000 export INFOLOGGER_SEVERITY=warning diff --git a/testing/private/shahoian/run_test.sh b/testing/private/shahoian/run_test.sh index 82f9bfc..5f93ab9 100755 --- a/testing/private/shahoian/run_test.sh +++ b/testing/private/shahoian/run_test.sh @@ -13,7 +13,7 @@ export GEN_TOPO_HASH=0 # Specify p export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository export EXTINPUT=1 -export EPNMODE=1 +export EPNSYNCMODE=1 export SYNCMODE=0 export CTFINPUT=0 export SHMSIZE=128000000000 diff --git a/testing/private/zampolli/runTF_ext_dpl.sh b/testing/private/zampolli/runTF_ext_dpl.sh index 517573d..543986b 100755 --- a/testing/private/zampolli/runTF_ext_dpl.sh +++ b/testing/private/zampolli/runTF_ext_dpl.sh @@ -13,7 +13,7 @@ export GEN_TOPO_HASH=0 # Specify p export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository export EXTINPUT=1 -export EPNMODE=1 +export EPNSYNCMODE=1 export SYNCMODE=1 export SHMSIZE=128000000000 export INFOLOGGER_SEVERITY=warning diff --git a/testing/private/zampolli/run_ext_dpl.sh b/testing/private/zampolli/run_ext_dpl.sh index ba30283..13d7e46 100755 --- a/testing/private/zampolli/run_ext_dpl.sh +++ b/testing/private/zampolli/run_ext_dpl.sh @@ -13,7 +13,7 @@ export GEN_TOPO_HASH=0 # Specify p export GEN_TOPO_SOURCE=/home/zampolli/alice/O2DataProcessing # Path to O2DataProcessing repository export EXTINPUT=1 -export EPNMODE=1 +export EPNSYNCMODE=1 export SYNCMODE=1 export SHMSIZE=128000000000 export INFOLOGGER_SEVERITY=warning diff --git a/tools/epn/gen_topo_o2dataprocessing.sh b/tools/epn/gen_topo_o2dataprocessing.sh index dbedae5..02c0d3b 100755 --- a/tools/epn/gen_topo_o2dataprocessing.sh +++ b/tools/epn/gen_topo_o2dataprocessing.sh @@ -25,7 +25,7 @@ if [ $GEN_TOPO_HASH == 1 ]; then else cd $GEN_TOPO_SOURCE || { echo Directory missing 1>&2; exit 1; } fi -export EPNMODE=1 +export EPNSYNCMODE=1 export O2DATAPROCESSING_ROOT=`pwd` echo Running topology generation to temporary file $GEN_TOPO_WORKDIR/output.xml 1>&2 ./tools/parse "$GEN_TOPO_LIBRARY_FILE" $GEN_TOPO_WORKFLOW_NAME $GEN_TOPO_WORKDIR/output.xml 1>&2 || { echo Error during workflow description parsing 1>&2; exit 1; } diff --git a/tools/parse b/tools/parse index a1641b3..6906e60 100755 --- a/tools/parse +++ b/tools/parse @@ -3,7 +3,7 @@ import os import sys import shlex import tempfile -if 'EPNMODE' in os.environ and int(os.environ['EPNMODE']): +if 'EPNSYNCMODE' in os.environ and int(os.environ['EPNSYNCMODE']): sys.path.insert(0, '/usr/share/Modules/init') import python as mod @@ -63,7 +63,7 @@ for line in f: recoworkflows = [] calibworkflows = [] print("Found topology", sys.argv[2], "-", args) - if 'EPNMODE' in os.environ and int(os.environ['EPNMODE']) and (not 'GEN_TOPO_RUN_HOME' in os.environ or not int(os.environ['GEN_TOPO_RUN_HOME'])): + if 'EPNSYNCMODE' in os.environ and int(os.environ['EPNSYNCMODE']) and (not 'GEN_TOPO_RUN_HOME' in os.environ or not int(os.environ['GEN_TOPO_RUN_HOME'])): for i in args[1].split(): if "GEN_TOPO_CACHEABLE" in os.environ and os.environ['GEN_TOPO_CACHEABLE'] == "1": if i.find("/") == -1 or i.find("/latest") != -1: From a3acb05743aaef266efcad429ce3932d55278b4e Mon Sep 17 00:00:00 2001 From: Ole Schmidt Date: Fri, 5 Nov 2021 17:39:33 +0100 Subject: [PATCH 209/236] Add missing quotation marks --- production/qc-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index bb31789..ded7e2f 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -46,7 +46,7 @@ for i in `echo $LIST_OF_GLORECO | sed "s/,/ /g"`; do done # arbitrary extra QC -if [ ! -z $QC_JSON_EXTRA ]; then +if [ ! -z "$QC_JSON_EXTRA" ]; then JSON_FILES+=" ${QC_JSON_EXTRA}" OUTPUT_SUFFIX+="-EXTRA" fi From 2b25e1e885fbf7a4d67a1cc40e746f90ebc27f5d Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 7 Nov 2021 23:03:59 +0100 Subject: [PATCH 210/236] Add timeframe rate limit options --- common/setenv.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 40a7fe2..637bd0b 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -43,7 +43,7 @@ if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw channel name used to communicate with DataDistribution if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflow mode, must be run, print, od dds if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. -if [ -z "$EPNSYNCMODE" ]; then export EPNSYNCMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... +if [ -z "$EPNSYNCMODE" ]; then export EPNSYNCMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... if [ -z "$BEAMTYPE" ]; then export BEAMTYPE=PbPb; fi # Beam type, must be PbPb, pp, pPb, cosmic, technical if [ -z "$EDJSONS_DIR" ]; then export EDJSONS_DIR="jsons"; fi # output directory for ED json files if [ $EPNSYNCMODE == 0 ]; then @@ -54,11 +54,13 @@ if [ $EPNSYNCMODE == 0 ]; then if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # Throw exception when running out of SHM if [ -z "${WORKFLOW_DETECTORS_FLP_PROCESSING+x}" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING=""; fi # No FLP processing by default when we do not run the sync EPN workflow, e.g. full system test will also run full FLP processing else # Defaults when running on the EPN - if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 256 << 30 )); fi - if [ -z "$NGPUS" ]; then export NGPUS=4; fi - if [ -z "$EXTINPUT" ]; then export EXTINPUT=1; fi - if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=1; fi - if [ -z "$SHMTHROW" ]; then export SHMTHROW=0; fi + if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 256 << 30 )); fi + if [ -z "$NGPUS" ]; then export NGPUS=4; fi + if [ -z "$EXTINPUT" ]; then export EXTINPUT=1; fi + if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=1; fi + if [ -z "$SHMTHROW" ]; then export SHMTHROW=0; fi + if [ -z "$TIMEFRAME_SHM_LIMIT" ]; then export TIMEFRAME_SHM_LIMIT=$(( 64 << 30 )); fi + if [ -z "$TIMEFRAME_RATE_LIMIT" ]; then export TIMEFRAME_RATE_LIMIT=10; fi if [ -z "${WORKFLOW_DETECTORS_FLP_PROCESSING+x}" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF"; fi # Current default in sync processing is that FLP processing is only enabled for TOF fi # Some more options for running on the EPN From a9a3938f3adcc03a6df97a26ff9ec78f1d0f7563 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 7 Nov 2021 23:06:17 +0100 Subject: [PATCH 211/236] Add documentation for the AliECS GUI --- aliecs_documentation/README.md | 83 ++++++++++++++++++++ aliecs_documentation/gui_expert_default.png | Bin 0 -> 133047 bytes aliecs_documentation/gui_expert_example.png | Bin 0 -> 139614 bytes aliecs_documentation/gui_manual.png | Bin 0 -> 23364 bytes aliecs_documentation/gui_path.png | Bin 0 -> 24301 bytes aliecs_documentation/gui_version.png | Bin 0 -> 20702 bytes 6 files changed, 83 insertions(+) create mode 100644 aliecs_documentation/README.md create mode 100644 aliecs_documentation/gui_expert_default.png create mode 100644 aliecs_documentation/gui_expert_example.png create mode 100644 aliecs_documentation/gui_manual.png create mode 100644 aliecs_documentation/gui_path.png create mode 100644 aliecs_documentation/gui_version.png diff --git a/aliecs_documentation/README.md b/aliecs_documentation/README.md new file mode 100644 index 0000000..38a6802 --- /dev/null +++ b/aliecs_documentation/README.md @@ -0,0 +1,83 @@ +# AliECS PDP Workflow configuration documentation. +Note that this documentation is only for the AliECS GUI, more detailed documentation for the PDP workflows themselves can be found [here](../README.md). The PDP Workflow GUI has 2 modes (selectable as *panel mode*): +- A **shifter mode** for the operator, which has 2 basic settings, for selecting the number of EPN nodes and the workflow or workflow version. +- An **expert mode** which enables detailed manipulation of the exectued workflow. ([details](#expert-panel)) + +The GUI can configure the workflow with 3 different methods: [Manual XML File](#manual-xml-file-configuration-method), [O2DataProcessing path](#o2dataprocessing-path-configuration-method), [O2DataProcessing hash / version](#o2dataprocessing-hash-configuration-method). The method can be selected in the [expert panel](#expert-panel). The 3 methods are detailed in the following: + +
+ +# Manual XML File configuration method +This configuration method is provided mostly for backward compatibility. Currently this mode is the default for compatibility reasons, since it is used by all old *saved configurations*. The workflow is not generated on the fly, but a pregenerated workflow stored on the EPN farm is used. The following screenshot shows an example of the panel: + +

+ +The panel provides the following settings: +- **Topology**: Absolute path to the topology XML file on the EPN's shared home folder. +- **# of EPNs** Number of EPN nodes to allocate from the *online* zone. Please note that this number must match the number specified in the provided XML file. + +
+ +# O2DataProcessing path configuration method +This method uses the [O2DataProcessing repository](../) to generate the topology on the fly. No pregenerated files are used. This is the "*new*" way to configure the workflow. This screenshot shows an example of the **shifter** mode, followed by a description of the 2 settings: + +

+ +- **O2 Data Processing Path**: Absolute path on the EPN farm to the O2DataProcessing repository to be used. +- **# of EPNs**: Number of EPN nodes to allocate from the *online* zone. Identical to the [manual XML file](#manual-xml-file-configuration-method) case. Since in this case the workflow is generated on the fly, a workflow for the specified number of EPNs is created automatically. + +For all other configuration options see the [expert panel](#expert-panel). + +
+ +# O2DataProcessing hash configuration method +This is mostly identical to the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) method. The only difference is that a repository version is specified instead of the path to the repository on the EPN farm. This ensures proper versioning and reproducibility. While the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) method can generate topologies from any privated O2DataProcessing fork on the EPN farm, the **O2DataProcessing hash** method only supports workflows that are checked in into the official [O2DataProcessing](../) repository. The referred version can be either a commit or a tag. Tags will be used for official tagged version of the production workflow, while detectors may use just commit hashes for standalone runs without the need to create / wait for an official tag. This method will become the default method when the workflows have stabilized and do no longer change on a daily basis. In the following screenshot, the *tag* `0.20` is selected: + +

+ +- **O2 Data Processing Hash**: Version (*commit hash* or *tag*) in the official O2DataProcessing repository. +- **# of EPNs**: Number of EPN nodes to allocate from the *online* zone. Identical to the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) case. + +For all other configuration options see the [expert panel](#expert-panel). + +
+ +# Expert panel +The expert panel provides plenty of additional configuration options for both O2DataProcessing repository configuration methods. Some options are also availble for the manual XML file method. This screenshot shows the expert panel and the default options. The individual options are described below. + +

+ +- **# of EPNs** (also available in shifter view): This option configures the number of EPNs used for the partition. To be more precise, it only sets the default of the number of EPNs. Other options (**Resources**, **# of compute nodes**) related to the number of EPN nodes may override the value specified here. If these other options are set to their * default*, this is the only configuration option for the number of EPN nodes. +- **Workflow configuraiton mode**: This option allows to switch between the *Manual XML file* mode, *O2DataProcessing path* mode, and *O2DataProcessing hash* mode. +- **O2DataProcessing Path** (also available in shifter few, since the workflow configuration mode is set to *O2DataProcessing path* in the example): Select the path of the O2DataProcessing repository. +- **Resources**: ODC resources to be used for the partition. If this field is set to the string `default`, which is the default setting, the ODC resources are requested automatically according to the setting in *# of EPNs*. Otherwise an ODC resource request may be inserted manually. E.g. `{"zone": "online", "n": "10"}` will request 10 nodes from the `online` zone, `[ {"zone": "online", "n": "10"}, {"zone": "online-calib", "n": "1"} ]` will request 1 node from the zone +- **Data Distribution mode**: By default physics should be used. Other modes are needed for special cases. Refer to the EPN experts for details. +- **TF Builder mode**: This specifies the DataDistribution TfBuilder mode. The following 4 modes are supported, the default is `processing` and for additional raw TF writing `processing-disk` should be used. Note in the cases `discard` and `disk` the *topology library file* `production/no-processing.desc` and the *workflow name* `no-processing` must be used. + - **discard**: TfBuilder builds the time frame on the EPN but discards it immediate without storing it or running any further processing. + - **disk**: The raw time frame is stored to disk, no processing. + - **processing**: Time frames are built and passed to DPL for processing. The raw time frame is not stored. The CTF may be stored depending on the DPL workflow configuration (see *Workflow parameters*). + - **processing-disk**: Combination of `disk` and `processing`: Time frames are built, raw TFs are stored to disk, DPL processing is active. +- **Topology description library file**: Selects the file in the O2DataProcessing repository with the topology description for the partition. +- **Workflow name**: Selects the *workflow name* to use inside the *topology library file*. See [here](../README.md) for details. +- **Detector list (Global)**: Comma-separated list of the detectors used for processing in the DPL workflow. If this field is set to the string `default`, which is the default setting, the list is auto-generated by AliECS from the detectors in the partition. If this list contains detectors not in the partition, the synchronous reconstruction processes for such detectors will be started, but they will only process empty dummy data, which can be used for tests. If the list contains less detectors than are in the partition, processing for missing detectors is disabled completely. In case the *TF Builder mode* is set to `disk` or `processing-disk`, raw TFs for such detectors would still be stored, but such detectors would miss in the CTF. The abbreviation `ALL` may be used for all ALICE detectors (not only those in the partition). +- **Detector list (QC)**: Comma-separated list of detectors to run QC for, if the workflow parameter `QC` is set (see below). They keywords `default` and `ALL` work in the same way as for *Detector list (Global)*. A detector not present in *Detector list (Global)* will not run any processing and thus also no EPN QC, even if present in this list. +- **Detector list (Calibration)**: Comma-separated list of detectors to run calibration for, if the workflow parameter `CALIB` is set (see below). Works in exactly the same way as *Detector list (QC)*. +- **Workflow parameters**: Comma-separated list of workflow parameters. Parameters are usually features to enable in the workflow, but can also be special options. Currently, the following parameters exist: + - `QC`: Enable EPN QC for the detectors in *Detector list (QC)*. + - `CALIB`: Enable calibration for detectors in *Detector list (Calibration)*. + - `GPU`: Perform the TPC reconstruction on the GPU. + - `CTF`: Store the CTF. Note that by default the reconstruction will always run the CTF encoding. (CTF encoding can be disabled using custom settings in the *EXTRA ENV variables* option (see below).) Thus CTF creation can be tested without storing the CTF, by removing this parameter. + - `EVENT_DISPLAY`: Export JSONs for the event display. +- **# of compute nodes**: Number of compute nodes on which DPL processing is enabled. In case of the default value `-1`, *# of EPNs* is used. In case of the value `0`, the default that is specified for the workflow in the topology library file is used. This is only needed for special tests. +- **Raw decoder multiplicity factor**: In case the processing on the EPN is to slow, and in case the EPN nodes still have space CPU capacity available, this option (and the following 2 options: *CTF encoder multiplicity factor* and *Reconstruction process multiplicity factor*) increases the number of parallel raw decoder processes running on the EPN. The default number is multiplied by the provided factor. Note that the workflows also support more fine-grained multiplicity settings (described [here](../production/README.md)) which can be provided via the *Extra ENV variables* option below. +- **CTF encoder multiplicity factor**: See *Raw decoder multiplicity factor*. This option affects all CTF encoders instead of all raw decoders. +- **Reconstruction process multiplicity factor**: See *Raw decoder multiplicity factor*. This option affects all other reconstruction processes instead of CTF encoders or raw decoders. +- **Extra ENV variables**: This free text field can be used to provide extra custom options to the DPL workflow. The syntax is `OPTION_NAME='OPTION_VALUE'` with optional single quotes if needed, multiple options can be provided in space separated way. For a full list of options, see [here](../production/README.md). An example would be `WORKFLOW_DETECTORS_MATCHING='ITS-TPC,ITS-TPC-TRD' WORKFLOW_DETECTORS_FLP_PROCESSING=TOF WORKFLOW_DETECTORS_CTF=NONE`. +- **Wipe workflow cache**: The O2DataProcessing workflow mechanisms will cash the XML files of auto-generated workflows in case the configuration mode is *O2DataProcessing hash*. It will then reuse the cached XML in case the same configuration options are provided. This speeds up the start of run. This is only possible in case the configuration is set to *O2DataProcessing hash* because then the topology is fully versioned, identified uniquely by the tripple [O2DataProcessing hash, Workflow name, Toplogy library file]. For an *O2DataProcessing path* the repository is not versioned and the topology is not cached. This option forces a wipe of the cache. In particularly, this is currently needed if the QC JSON files are changed, since they are not yet versioned in consul. +- **Beam type**: Beam type propagated to the reconstruction. Eventually this should be set automatically by AliECS, but for now this must be set here explicitly. +- **# of HBs per TF**: Number of heartbead frames per time frame. Must match the configuration of the detectors / CTP. Eventually this should be set automatically by AliECS, but for now this must be set here explicitly. +- **EPN partition cleanup**: Clean up stale EPN/ODC partitions. Refer to AliECS / ODC experts for details. + +The following example shows a screenshot of the expert panel with some custom options selected. + +

diff --git a/aliecs_documentation/gui_expert_default.png b/aliecs_documentation/gui_expert_default.png new file mode 100644 index 0000000000000000000000000000000000000000..1d143b8f985f96cafaf34af4d860c21c2e4e1dcb GIT binary patch literal 133047 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

&j6l?w`RGxO8?(u7 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 literal 0 HcmV?d00001 diff --git a/aliecs_documentation/gui_expert_example.png b/aliecs_documentation/gui_expert_example.png new file mode 100644 index 0000000000000000000000000000000000000000..67685f2c44414dc606662866db3ff3f090542b72 GIT binary patch literal 139614 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

r6&({}mcNGStld&mLtXD->Q-uA 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

h3C!d%ujsOt)<0L$ZE=ME{IK6!E_%wQNi zyn*K0ej2awMNmG!^sOK-sxCscU`D_>I+trGkqr1e$)eF>Kl5&PR~zdRbSJ=l;aX;a zpua%4s;bKH)br}zXwOK$gZX5A-*t@+URt9I8{ zn}qFalAg+s;e(bhv)8@#aK5hcD$nDSH|?8O*W9)HILsFJG8K;rgZ%wk zjpw=F0eix|WxAhJ?Wq*MCGwCN65u1fl+M4*ctitkB5`h6KdXseQO1$u0G~t!y4v2Z zA!PIt+dzMRXeMb6F9`At#R+{JY|j`)F3JfYpZS}9Bebb71BSJVE-XS|jbQH;jKlie zk5YZqdAP*v#^R6_s;T29O#&_WK<2!B`JnVJv$V7pwF}6{HkfKwV28vC-u;RTkMPqo z3k{Eai64)-Q|jI;{XP^_)sHkvB7sdcI3*{?%g~5{ycV9**AD? z5k^cy&0dhiEg2LXjEG4{b&-IRG$C|; z@!~s>oz_4!w+64GPan~ZSRB71l^Q6b)9OQhepH=%^gQm>R97$0%hgXybJKxPc#P;o z*R^{6Lsy@u6WO2WhTHw&Ij?88mA@Nf^gGNUqzn%A7TOie9>)!>w3LZ4^TQ%lBm1}5 z>R)0hxirJg4yY%VxP&~ehMaP#?AkRBt9=`|#@jRi2vwY37PgC67)=bGg7oxK z!R32L$5`&d;fUtV#iEjLS4P|L&UQ4{_gwOKwF_F~?JG@s!6$q0*;U55ieG^<&`4LE z)Qfd3qnBNuV%Nz(`EN0Ar9I{riwa~r)yoD1HC!1T3G!;^c+aW?7FQ$o>k*lGbo8YO z(F!uw6Mj;ALWAK`w0AW>e3u%g&#yA`_O>bz&Jx6d#xVLh`*cV>h!}eqT0|f6`QHrAPhqU5a=9e?edU@1pL_r^Lc_ zI?OvJ=?xB65pBL!W*S)o*=1q%;8vOXfk0nhOqUrZNP|5>d{g&Pm=!>Yi!kD6b)IYX zntLCL-ea7V#f80k_1@O;A95U{hYyvhDVT&__(d$Z_$D78OIVaY7a3Rsf1ZCX@)GDE z_k^LO!YN~Am5p-h|BL$SFF)1vJ9i|OWh^)q_L+uK@ufJG9)Eu1&GPl1S#v*2%kCQ%0qFeKp4}S_>hs#fSsJym~)jA1XDD`hIebKHB@>pgxyv>;31R zR{2=-Kr!v?OKvuG@8@xrzfJvKw0|H6*rLiv6H>&*gan$`GbLgN(3!XtasaHDq(tk)Iw_ZQFt4T>6_oLI= zdTx#jV%7PwyyTD+ES|hk&@V+or&U0f@RqiYygS+5yu}^l7>mUp_%O6TezRuTv&t9 z-Y7ap_;_y91-AxUEC7`va^k$BEu@gNSRWnrQjKN$?qIos=cZN#bewudm{0Fix@c|B zzI~scH5}qy;{Kkbf~&U5x3CneDj#~VLfijl7X3w9p6dz{BE+9(+`V@%!8S)X(ROls zIoGE0aYwy%O$L?M%evH_eTnhP12QHDAcZL#-?neMO5rTc2GwLkevpk_`d{i}N6A4| zbLcn8>PbHd)`JjY$&Ir7Jlvsm)}wi#>u8|Z4S@C77)vdBFi#svb!m()q%YDs9E6rZ zCFqLQTFM5PMj+KiB_%5nsxq&QY=_blB4n4|<4#c%LHT{Xt@bfYjFHF4WV7fE@!!d0 z98f-Ua|M%$CRMj7=w2T*zeFm%q2FbQ@DfJG#iqbq>ePGOo{}qwEaNo!kTfd%TiL!h z7*IBl%#BM6s$d6+%R9RE&q zoXC^#eKVr?@kuA}95+4%t$nTnQxH!$^74kx&JFBiG?b*?r$%&@%lw(L&6Nt{dQf!4 z*p%-A3>v5zW2{USFratuZ?9V*8dM2x1*A9M5PfJlOnGy_1B^@*ju$F@75KiOKkN`% z8MHOn^YA@lxR;~(_^-f+Nufvw3Wl6IbB3WCmu#M`Au|OaK@$2NI_2Eq)Y64?copR3 zv4Ilb&h1xG{$od2Fg=`2;822$nHerd=2B8oBReo^6Z@_V6_uG3)NE9|yBJ8DM{NhH zC~pXAO%}-~6=FCPyqO`vsEP!)-sivTh$c)r z=1#eH0jGFCSLDGh!h(PzPr#Vlzh^BoA(3K7jIy{crhu~-#Jp?4oyX6B*6@1jr0qXV zksFMwS6@I^FG064YN{O+J_PL*=0AL(-GUNOJ0 zUJsfn6|-Rmi*e@?K@-ZTrR*3QE_Ac!#3N~KWAsnZuwtaF)_(GNIYYWm*-T%JYlq_7 zazCd)3i>>*=rHe9Uas$i5*G_*$-R7OZe8jU(#c7-KV%uH6s)SU8a#y5=H9*GW5@b{ z(QKsU#){KgeIk*EX)s)ZB^?t@dgx%k_ESf`AH-s)1i%gey@!XF7q;TVhYzPCsgWTD zSC?F&V5PAe*BK%Z{Gd#F?+xRwM*$TpWa1~e2vs+GV^BB=Wk)%DJ@#){x3wcW*}>sh zT!|R^Jy^pv;QOZ*oq>nTzI|SH3QX@*m~X`Chzl*ddVcSB{Y}{<{rjtMpu|Y=Zri&A z6{NO{A8IAh-6p#cEuq_Wvw7_FP=rm}Rh@J>Kl&O}t+YDx#Oc%aWY!uL9n#cCp zXIm?_TrkU|q$HrDO4dbdgCLV-06?hT4(KRv$a!`betKF1G13s==zcV6<3XxqpD)R8 zRjxKp|ME%W{ORv4zcn;ne6ilqD7ssr>mt}qL@X)(+SNV>ay=qLr=_bb@thPVC2Eqq>=cgui^kugPAhM^7lw2|D6p|UsoX7ADc_`mSBO~MJ_%raXVwlr8gN|nY%BWk0H9&iU!;!yDTha$829SZidtLEl zuJIY5DqevUbbr1;rt>DWxc;|sy)W(S;JOXQVuX>|Jew_oy7;-S&bUj^(W9U*kc7aE z4%Qzu5qy_PlfE)uIdN&R)0BB}khu5n-&2v|8=U(5`E$BR zxtF{?*VkWU&I*2R!5DJHozshM?SAz4-_(N|rg>_r z8_VW5UfmSfXJSHDcGh|V9yjb_>P)s0b&!WOC?x;uJ9b4IIg_h@cZlAVofo}oQR#9F zemqU@Df>Naxz5;hd>4?Ox0rAar9Oa<+C$~Pc=k)fp`t!!Yj3mOuA;+&Nt0aJk8ZeD zd6z`(D2bU>MeA_EGRPNxBW{-j_4AL6`~W&j#U|#7gNK0PF31(0c3F7L5EaMZ_nbN{Y-p#xoIxuZFM9OfG}C%^fl#j--VOs)wq zvw}8pJP&s5!t2SppwA@7n5e6~u%8!U1SjA;Xp^Gi`_fA$&oVP*+qb{MU9}|G2X6g2 zJVW8f;3iC@XrcKKX~p&10Gofy`=>>*k2<73ct9RtdC(;!RNY~PnOOl$kwwxlgHsU^ zva5|y4w8`MuiV$^RJUtC+IH@D7HK7UhH0-0i!ChZRURQI8&4l}p%26+T2G`h6w9h& zXx4xM)M}3wcIrQ7`A!UNNYCLVnC%8xMiMHUQC)cQ;iE@OVdjz|?=?rvvzU~IQ#P22 zkt+M(2;(hgX8IM*=5r?YKBOZh#{qL#V{U|~8k4UdIrs0hz>4VXQY^EU$ zx{^iyMD9gCd^jM0w`|(1&D@4xaHQiaRm_>}xyX^wr4ksNU3$&i_SM=E*&FSCxmT_? zRr0x}1{KL%_81MpYcP}XV(rmGWZFT0-&;j@($CiyYJq=H5C*W@S$S54{3+1n2#=@d zsHMFoZ+y#PM^L){#g&>I(`78d(U*qJ`fK^4;7Zii3bzH^#n1{@KEJHrYmLyMb5~^1 zmgd88D*up`HDlo#Kf&i=ZQyT`aK;=KoKwJIh(j=wFZ0%%6x_k&Y}c-hu3EH-mOO>p zQTm3nXQz_SVwTRho3A_vG5*E678gqVGGAt8ZRDCK7=W>_Rv7Yo&Om=CAo|mrCy?k9 z3NXZi$aM$RGQOf$hT(E1=EUxohA&CEF}r_kg}eKma?4+VE3ld2D)PV;&0zn_tDE+} zbn4DEnt^-v*T}g$_C}Nr^vddJ+cbxoea`043$}0HHQ(s0{kG82_>M)Zx(<9G-F8AA zKnh=PLZcpbo^)XMKmO^!ev72(NMAi?wf?hAkWBJF&Eozs^7Y;CoXC=d<%(;w4tdDI0xN$_!COX>zj-snRC%#p6j?Liy!>a8^Z0>9~}Xw z49+Z{@lU_Ie+(+E5tBf~m$il%cPhU6boq}TfxkNOzvbJW$*~~#-SLh|$aQo))cMub zPjn)T_~3l3`Pb*Qu1g7UG2t3vB4vdGAL7k%6~@s&c!19YS8?%+CA)tSV#5LwO=gw# zooKt~npmUuC=1#A^e@ryxNoxmIRV9vLJ=R&enM`Sg!v#;vVSh}xl^awG&{01?Vtr; zPuF=Pe!uvdFhERC5nl)Pi)G|%MoH`75dQ0_^OabTF}}V>PuqTMWapfah|;8_z2^Q; z1)##$e_pR@`%DfZ)W+6lonxe&o{$it?7zBL+JATJQ|b;Cej}BbLpOeSvF>WKZQFir ziY&=7KcJfg%i+8{D}hldvR9xP&n?dT>Dq&+Q*qq&*fNatrQ{0iMt23rN6^02y}b?` zSRG8JhG4&ELS;9^NU}cVtTTSCU#`4s!bFCKJ!O9fAIjpC&+}C9l_dDkZ$%LVxvqHg zM=*+EfLSbCCun?FF<>sMD*V2WH6PPm>-TD@%;!8hSTgVuor(y-a)ZCm{ zIBb0<$0aZkTE5s%h7L-m(FC(J)uT_x&YkCLYlA}&Kv07hZyrhZJW^d93W32f8JT%b z&{3iOlFDtzIkuQe?`E{Dg1=2q?}r*CQBy1HpL!}OR4yMsELKed80_G-l6jeFc^^r zaanMPaW+$D>r~sSsV(f(=g6eBU(%kAY1eLvhjdP)s_9yj{n;yKtnnwW7%H#BsKu_F z1b!DLNauh|fC-Kte`yN7hOLS)$QqR9z>TC;0!ey9zdRtL!M^w>ojW(p`stv-5)h{- zmbbj3LZzE0ygK)1Qtp#-XyRZ;Ot+zBiF3bMfu7rGSce=|N)f779`U$wM#)w0arYu} ztI>|Zm~G?6AgH>W<-%9oX4p7e-Q{v&X?g5{0-l!kHS_SRD;Zt6-5O?xh)CjH(tAP1^*RwY%g%F zR^JF};$4#6#ed$f%m7o6JR*xgNy*iNo>tu(P5!CCvh;XUyolHqcva-&I^xbZZkEB!5ZO<`=K%<2 zn5O%RbXU|JM~GprT9y? z=K4JFu|_(&2;an1y_%35QhxgNspvL|U8oysU%6I!ECJMm6oj7-In(<$Z{pBK0BgOZ znXjR-^u>8!*pdez(Xw+;7hu}OYSRc7E;1w4H92K)1WB`mqYJacpFBCwTL+nP4Fw+`an_fO+u5wO`1|;?spZh13dchp+E?oH7-iP zSh5b{qT0E|Gxo3UDhs=U^PTM)dG;)=u2*nS4jkwtC-?`cs4HhlsgQES6p+1pX)Hhx1Akmq zz&pU5zN=8VncdCH3v|b3;f@+GOM#XT@nMY*fKv43G8Y2=K6mQzG&QrbV68Akiu^)% zYMG<%M9;;G`*q>81Z7;h0yTlfi1PFnb#`f=c?gdEes2yuHS_He_ z2fHh(&qcqQXtv zF4H$|ww~?SLAB7GiY(}UkE44~TgyatMzUya*f3@-ov%bhj|*pyfl3C@Q-{a6s5AWi zC$6KNv{5DH=>!W(U?wiA}m-1&mkyuTDt*gAs(G%qn6)- z@k>Ze2nz-qxdu@YG1ZwfBhqz;`ck69(@etemo-sQ!O+m~cES&SIXqb&l-*ei#@rAy zvNdp?G+bfhoPqzZP zH`83(vj$=U_n(4VYi|CdM`Eu-kp_zSji1>KbOgG0?~Z&~*aTzC@bn%Ln}Eq*(#WMb zjz6y+)Ixej0CLKb@>j`C#Fmnhk|f6ph7rhyl);g?4rsox5EmhmJiq!2CQhwFX!41z zPhY-l1}dzqp%(X0R8i4$n=()iTb^8n)R0>!{--_XqJYyPpGgktq22H*0~_Ig;*Xhatwd~HvGWK+qP9Ne)?Z_e3*C`)`qG;;IuMo4n! zC?C=u%H37&Gf6x7{18d*l2pxmw#MINX*fyUYE9I=`{EQvVCL??B$3867Y!tg^_+n9 zi~T{E;~%&J!?F(aN^XchuS|QNnrK=YFKd-DF4to7w74B-mMfheenwtIzX?>|A9PnA z)vC$boP@AZ$-mTb(>3#vx=CbfvXiE3&zlExSV$#EZL=xA@q!onxo6Lwd1&kFR}rVM zqFveFOPWo)geQ3~ElnYl_Sxe{kI?fJ09(`dkGy{U*h_;Z6NQiYi~6YTTyR2ja>%*u zJ*ZN8_WU}>t0xd^{`g+KdwXn>N|^z!Z?d{T<2*Kemy)b)k4YtCCrns%u;7;$*BpgC zQ~A1Hm!=M>G&=C`;s+=iv$6Nq|PjH z;VeD_9`ww)zc%IN^ndsQlzC{gUBV1tBpr6#wcz8yk<+IyBi-428ub&r)a)uZQ@;gx zn@|^){R=!ZDmcP?WZP9yYsnnpIzr+SLaO+~(u-sy1W?=@>=^L}a7;c;T9f^lL7ta6 z4;skn!6b2>d!sI(1j0S|g2u+T?#ao?81HU%#gSn|IBm6g)6U*#7#iKU=jsv(9_SOh zp3^q7uz1pVW6@(VxV~OBSy2{FZvHO}4~Vkj6YU+bDq~=`ZbP@P3n_DX_5Aq~x3o!K zCF)x|%GjAU1|zt?aMNX_>|lIhdns^L@bWssGa-pCc_8 zt5WuUwmF0QD&Ku^jWEso{vgZSU9;iMZXzD2IqOnXF>Xn(mGEjv+F7luLYEDm+vYGh)JMa$(PbAVmYC8;Uzw(wwi~S%c}eyjU&+68xJ}-Th90p%~914 znxM06SqrhDeCF2Fv2EJ5`)Q~FM7)i`Vs@5ULHQS~^c@^($N_y zrNR?UlPMv}vHO9AqKu>HCNG=Tx{56tKap57$DRX2Zy1pjeVXtz8HL3T(kk7EgdmF`@(3CbFxMbw z2G54T7_Rvxf$IqF5uot$-=-eLxKg;*>8$u!q|(H(TQ^HW{~p0`k@}PL^k{nFFswkC zx+l;W;>oamsg|UWOOv^RmLWbThQ~0#%%jm$iR*^bkj#?=Yu)<>I6yE)S=FE}zkgTg z*5P+KS-pKI-Hj(J8Z)ODyHJC9R)w4%!Lu4r)~X^mhjDqX=VEk=Ge|H&=;HkK+!d!y zb7R{eA*yVj6JHY%?m2197z2sV+z^ec&_frV9ILX-6@;~dy6pq8u({xjZrU9S66z1P zU76@uK(P04H)n1l^=HQLf8x4{L2FHqa+XP?Z~-G@%z?^G8wXMnbq?ZPVToM&nSjoY zrC=ljIr1{`m^-0<%9c;t5THVDEYe&~bxPD6H(|oIoS+`9iVxhdNfAi;uaTUSo;+a!Mv7EnbG8w{AH)6%OOQ(wMx!`P&97}l~IIX1$RS}1z)_5uY#4*F#4 zqa*YwL^d5deY&RRE5Q{LD@cc_oS644MB|J^tg5vIKZ7K_gDH4`N_B)SLFZ$S##DKm zyT(pys&wY^6P`Kb3ES&3=b(uTrf)^{quEqBp3TEE(_n?MQY_bt`*r8(F=NLX4%|e# zVW1Fm4S2^teO~!S^Eo@>^Ss@;$|ln^C-G!zy0J3yObpG|tXx@(r392YhA%q9<-z}2 zK`y>!9OUm2617b4+4);mGfK6*-5WQ?e(^*uGcb+R3IZpMDaymJS2v$MtEDx`xquih znhpFcZYNt9DPH7MM1+HcR>=}UKaooJkj}Cf_gc(>EJ4!9(5;VIrWw zo0Z3ob)bNyaKpETp-l%49yDF{@)Xb+b??AQ>z4v&NTqiHAplc>%L^~tkG|;A7p@3l zp!nT8F|P^g#y4DS)6$~zj!6jk0yrR%nf+Vm-yy-#P}kPg#mxlLkqNpCL4!XKHO?k$ z=)xoGh}kSQE<*xO=&0w3sUsJ0K*<##2HE<_a;?)9>k0>G$ze%=`WUJJpZ_ttPD#lI zS5^8yhtf;6zOJmd+JWoet5>h^kDUxPD!OgihBYGU%L&c0dYJ(-2GS$6R{Dmc30{U-oSGx_<#pTdPGHFE%zF>dlA#{*nn?sDIQOb5C4^&d|zigk<~k z-#|Z5g51r#+*Ux^)@n!RG9DllZ?_wuyJv^+qsY9`)nJFH{xx^`Pi7+!GyPvOZ3Gm- zt*D%UsIl+dVwNW-VBrR8q?OnqlL!9&(1|@SsC!WK&#(W4G&C* zKA8HCMZVP=8u9P*uATo|biL@t&;CPo?3V_IOX|k10RdH?dN`SA z{TtT4^Jhclp9^s_Wi}ZtJA1Hr*2a2~s_756Mi~cqC^-Jn`jku&Z$IRix3<)5mHb!N z)W}wz@iyI(sPd7rUEMB!40FtJe7Cc!EGmj8KzMp~2pEYSnuX97iJV@+p?ELex787W zG0(qLz0Po0N*q!*Omh~pF;gR>+iDDD4j8>`)GDkT?>M{=T^MPU14H(_OHPA^tF66J z1*k{eGI`^vuCRI1Yr40Y}bk7tR(84LO^>p3CRD6$`Zj#x&el6CL2 zjlVW(#E6WnER7K(VtMZq%?Doy4_^U&3KLL`3=mwR3$}7-95e?Hw&Z;Sy3uB4&Mw@L zZcZ-HC@3(%@sJ%Uw*igXn?}99cyV!I0=Z{+`|A!g>4b?1bFtNHI^!7L*w6qPcA9*= zcxfjASy7tPHs&6uiAVKa+#``{;Ue-1{Q2kzOnAXd&^LecpQlm`@z}QM3~=93smThH(Sk>f|~Co8ag3hVlUr5ep5H z&GO@8D8{S6j!3I4aw6&Ou(?wWotuyd$K1F|7C~quM z>knDck!H3rYf9TO_3HH5bw`Pm_bC0qBJmVq;Or{f#z~{~;HCB%I=05wAWzO`_wJE$ ztcwzVJX4ldoa;D)Mhw?`M(`w_#b;6`Qa`O141ndm;!H*sh}z1YX^q)VzaD@mC+VEC z=m);k^ka763{VuE4H)7H^0A_1Y|*kcE@Pv01ABR7=w z^5tE-c0F;aqKdY5tC_=Xtd2=X3AWf)Z33f)F@eF*r4sI^4J3<}Ju{7`NU%CBRezF^ zq3=FMknhqQ_&`tY-+!Y%iWzPeA*0hY?_r;T*B&J*oj&f-1L!>2wenZ zM5=F*fqrjr=wTYVb`maS^rhv6kX79qWQ1XW35ki_&1cWr_eYWX`OkxNSOu^dc|n-N zA5zn8iky=FLyjb9dM?YuiadEDOp5TYKicRWJEe(ao6RsHoUE!ty%n?!jw{qxw@71K ztPCqEn!w-M>pKF_d6&Qh!4lGdWP_gco;_^_ca(A59~|6wieP{1V>@FKThVK6#lD!P z^PQs%W6kaCROP-kG`K5BrFFF4J!jdcfqD!3DAMjaVh2iTh&ZobPe%|2z^xSwHijgU zIFJhx1n5Y90wKvARbTe2%;r z_IL0<5X>8k;pG$u3cY$M`aNKzkGY{?4f$SPw5h(cjd)IuTej$fk5pH`e|9DV_?2XR z6EBETnk?;t8n=;fPAj|^33@tFp(9x%+4>kP+erGs#xpQ5q5g!eM4%CtRivk!aOj6* zv(x@7U_R<43DBA7Xq-W`nB_{(5T1BB9vMJ@#ZLaJNNV9hKn3Ra0!UNGy$5Cmkg!gy z0ndSth|KOP!3>NKHUw`OGp`b27mw#=A#~iIsC-mL&MMq=f+7Cl;lu9U*7)I!-JT6N zkb^CX$7TP;3H2>Xv@o2 zF56{_MXQ7?uxH_T+`pv4XYbO3hsafyht1^Bj2t4tp@O?n!q~RKlB-K;PCk|(A{`b^ zwHyB!koK@U8Dhckj9SWasTdlf+?QMyD^6|e7dXmGR)oqo^)k~Bdb%9aZND`0>&`yH z^;s$j8n;@v)J<%0AMJkq`w!G`z9|UF5XsnRN(_t<4rl0T;<9OQx?9t7w)1oR!~iqj zb)Pj-7+^11e05_)SHmp`IVC|D{Xb`B>mPFD`W-q^IzR!MC#7jqwrtB6mk`<~ih@ob zUkO*v<1Cg`{6Tdihni-*f`T77CX;Eqg#0_qp7alxec;J|0ki*Ay*Fj}#*MZ4`uX9* zEWHA?1y;}J%U`e zZjIXV`69OtO>Fjp6lb9b{-tf3HqJK|-CH2>VLppB$Csx`>z!Cn|6-$~<7zXAy4BSi zD8ST=tGLDZmzHlCJNAT-WSjvkO-PfXN1-$?@wiH`0KKw*2$qP4Jib+k{X`xC~G7q$(fMu9N* zEc>yG`!Xo@kc${QLt2C;t>-Sg0mrw_w6?b&tub73bnc&0w6E?Ep0uRIiSkZUoGS14 zc#Sk|h@9-}rrxav&;KSPkAF$Y6aDHYRBz{PED7u$%sx0c(G$ZU*tSvv4`Z+8HuyL! z?X#24(uF@>eZ;M@yrSvC){~#-rc9a*%pJ~Nm6xk{8ZCgxdF6{F#p>(fLL)9mx>s9M zg9#^GHSq*sGhVSVK>z?KWMOFN!<0|H3&|ONykHSs*(Bkn{em}qnQg30S1XUCeb3?` zl!om)c3i2Sn*G*Tl!-fsU)waoJW_RmqD9d9uhm6EA`-5zpMN>p(5CFo8+@Hyh+bVZ z8)h6E0tN69xd2g9z2?t&|HpzND=SgEw=XhbtxuWD*33uTj>m?F_cU2is#-A=dcvwC zui<%-`j4&VIMa6_!EDYf{=I(pgb5Rj(~aj{(b;+8;pHy@?g0te2y}CEfzcLpS-7xy z#P`K86!|Rl7Led&a2vxXUSb=uPu!mLG#7rW`0&B4p=dvWJ7!L>t&1H64;0W%X@yp%4Y)y?$~wK6YRt=(zyI`aIDe)E3V8v%#%ES^5g{~BNq^m zEEjhDs9fcP^VFLp^tJk>nQR*C-g+}sXOz6l1)4tMzo{<#JfYWVQ&VzQ^jcfv!uqP$ z%Q*7p*AS1K2^S_I`38UP*s;T~{PBwPE>W-LkGpeW{evI-COXb=FIb3a7hVlU1y|6M zf`X&&`L_N311JoSyK5%9Ij3)&W%%E~@dP?-7apcByY?(~%WF4U4A=9VT$;PvZ9Cn# zZU9DkE!w8Hb#K|mB^tG%G?PgF*C65Bc6ahtcqQ0zmmftVv483N4?V?qVIfSX`3g)tn_PL&PYjdK}$t(s}Sc1wT z!vbtD2;Jbwb-;BFO>q@2+Lh6@&&Sik<#I%rlR^Mm>BEU7OI9^Ykh;aJoCu2vi!SI) zdy@Rf2SI~3^uybZ-o+%aKaN)iGk;w)FIQ--1K>-L2ruC1NkHiHp@^w zW7I1A`&hXSw?LTZ(L!aT`_K8BJhQ{zU4qw_zXsU2{`gtSD|U6x=F`H`Nbv|oHH^pe z*huAeJohI>~V+bE`rw1XRCTv0o>m*;OEGaGM`Guih z`Tq*n#(i!s{hg1(D`QGGkGn40)W6&P(v9$hIWv%dMV}>Q#}3B3#a@#Qxq0i>U_Kwo zvG{!T^@OcgL<>;Cg8qY~Oa}507cI9eB^1go2^r6i0;^DDkW6c%A zq2NHQMz0Cac=`*@-y6mzt^Kw(LvyO|J;pq^oNAK1@?X=9VYX&Q|F-i_;9AR<4Lr1o zX;DeXjxD|V;?yYd*es?>{vYbz1ght~@AqyS_BK=@hPM1W;jzmavy((ak@zKmD6p6;Kyxz#s(Oh(wS#K^n04#cFs}|M#$K@7S-V>RE<8o#Qwg%18QIRv4VUU z>lzdDI;)GA(HuUN3$vrZxLw{&tj|5Zh`!%WM{=&8<9s^aL@jmyVqG=57_XP)8d zfOptfvZ~h0tFlah4=2wdI=KyM4WF${Y-JmoS+k4 zjtRmfZaXa|b#ep|JuFbZCxCO^Yr%Gjdd|31-$Q_K+oq5dv8`>0Ad_8ma~Do@;m?1o z(f!|ojsGF#{eS*t=f()aV7rriVggt|Jq2~_s|ZAkT)1#q?%|#Hz3m4u=yZU=qVR(7+pn(Gs9Mu*9`WULxJrDlq9X6ma6zDb zvI2=du6|7f-A&st`_pIt&zrnbU%%&1V1<+Y7=+*+7Ib6Dzd_LX-2Z}8qh>CB`;QiY ze|z%NCab@N&)-eG+BDG&%``07wyk%D(y4z*;s3J?TDW(wUPg1OfdO^C%ok&fLv3wm zE>|kJ?Kiy>bZ=8$aBT7$SpF&jE>8*0Px}77+t+2eu^Gcd+z86DkmoYlj;Wsw7cLys zXms@-QTJ;=)T5#%xIKFWlL$#VLpW*4VNynPSe|^)A*p*joSX%?{BrQ?yB`0H!@Gl3xn9! z%=Fkh5Bg&(206Ys66x(QJb`SJtY}i~FGpTX9!Z{ezw7pQ?%ZKGvFTxEVma8CMDO3b zZSj^heg2Eqxg_g-*}ON(=Tb>C7}VA+vCgG zN3XaK;1?Ugri_))W(iXeVE4@P|3jwxn4G8qMfCmC{AVyF8%i66BCn zE-SBR02C4=t+3Zqtpf`RopE(3rx7F1=ZM&u8C?JqYizH*{NKQY74+l&)xtC_GMdXP zE0JT28@Qi0<&)NgE8-MUL>MwOB#B!A-*?gMo8#jQ>ciq8l zFW@KKXB?n3^pq(VvmIp_1B=oe4H~EzJR3Lk{c}wY_`fCJ@~!VEVDt0a-$lX*9mSzT z=Z5`;O@?!wYR&QJAfoF2Pj%Uu`OE5ji7iXZe|RN-$X>gw6MlaBVDZ$sFsAY$27(UO zzW9u3OTzLR#))WNd_<-8__b6s!KV_WshSe zOUOt}oTTiIh%gNmFSQ6&y#|x|&Yam(>p@5!tSX=l)ysAo42noJkH{1N+p9cw!kYk6 zh}1yZNDd`(%VZ=#8WC{K4Hb`{J`Jz^@ekVOGla>_GSR@jy#fTxcL~nZEJPuK5a#`R zKBADCCNFP`m{^2fU{su0VioAAR$=(DW5h)q{6K*2dm-4nmyb2tOCClE6-7x2n2(NQ z0`_-VQUED`$#Xn>@F329d2v;%EDQIo!f)f1hQHZJ*F{6~f)<}jBrWX+^|V=6B$njH zI5_+yi6!w5g)AAI9Ftus{PqP|HDk{FQ<~r(75Qdn5 z+Vn1u8nFm-n^9=uSqL1_CoZggC)uUCe1; z{1FcTmXsUWmL{di+3jP5`FW0Q^9_zfM5y+=zGBgak*z&fUXeo@tYcoe+}N1uZ={+#PTG&M#=^4u<$d-Nley?y+jgQSGh|bTB zuW$;g{XzRGQ3M=>%zw_DlI*@rDjQHFbir@wQ~VTFRS!8Q6)!qvG;r|XUKyFGSJ-h! zJRNxPBwbG@s`z(^i^coxgBFd1na?^Ik&*02ai)$Mv*Eej=qPr##sPh zsV^5ugO&6ibNu)Z7dwXj z2#fDq6oQ^+Gw805?oD*%h4=42DJ}hogHK*V#s`}-Yn_Ra1qFaLzISS>DFTvo=rmz|LJ z^FaBvsgbpQ???x+A{3;6rO?dzKuai5X^I)i>`UGf(e2+)sS;KSp(TWsOeOpR(D|Z9 zY%vD~Vl`pnT7aGzwAUM=;vYVEVA~=yW%UiQ3&!~)lQ(w6uR6a;0It_E_^9q&6eAma zcZ95A1DDkTl_kLzbwqG%tnvX6DhAz?{GJs329+2GS)U#~nwpz!`pQY<5h4WLy~@PI z4fPo(U^5p$*_^Za;qj@4rl#AtFT&f-$D#8%ucj<3p*{IbQ{ASjc6ryK{UJ^_rlf#sZ8Fde85?zU_EqoSb8at~0u2wb)N2fs)oq zz>aTZEID9nj9PI-MhGd7_;8jinMB?nXB%io4`*~0dLjT0MA*7V7CxtLP>80t9w0uV zO<{mRztBNh-KHQv(A^JSQdIP#`kw9NVUVo`!v4I))s-YuZB%J!P?7kt<}S8HUR^M*&e8D3U)|ITcy2ET$cZS(67F~L5Hab9WPhk6@Wr_oJRG%Ka_?Kvc~YY|fC~vxKUUn(o`zuY<38buWzwXD~P=A|M5GwiV>$1Q=g7 znpc577&{s8@|rMgtw_YI%8gCmOkMV)>@g$kzOV1i0}*?$wRTbZQuDJ$nQG6OemdX4 z*5mn!4Wua`u@Vc~@J>Xrdn(|I|*FC;JpW3vzO`X5=*D>p{!qn>V;}@M6 zqtxj^L)Sq9L<2vU%~DB^VeH+I{ERtmqJ1Z zOBi=d$}-^%#@Gl*J9xZ>Ksm6%?_{>!RPQogL5c&$lTTQgatCgd@y_GM`Ta_I^0nOI zd%gM7mx331S31L8|J#rbMD5R&y+&LV!l98)Q&~{aMNQvo;G5h}ZB0&Kx}fLlD>CdI z8XTMuAISq;cEK26>b*JXEaY^oTX%M(a2JH24F==6^93Nt1OcDu^f$u9WN&eO1 zG% z+SB9>lR^irTjQ5->I^R(+Zq{W`SdjukFOY{fT07SBxQHmx{mbxu>lTl{+4sE>#gH1 z%LeFOyiosc(2&fgNm;C`QZh&wiVgpZN^y~_#P2%Up@es1eSn)K{R!XMC#n+^vkAve zEC|V+7vCQI;$Hk%;Rc@FwApd3we|h{X`V~Ujb9yYBZ8Uq+ z$=&A__un&eX)H=tx}5H?+@fUqMdy~-D=E=&k}IDo`KK%SD~*@Bvf)%OrBa{eQuiWd z@_w~{fAU4E+iBV3?Usf6yf-x#wvLyX?Y~XCpfbO(@uflIsxSLvD3u(ZyrUp5b4X#4 z4{V=K0Mu{dNSO9d0e@6SvzmHk<_I;$+t|AZjzta{Y&bLndP1mpRVjS@oY<12t=+8@ z)z#h5!h#8pl|}A>W0lV8B6A;dE{>>5TpzRMIs3o?1YDk#3lN#Kyt>)-)5&GB4p3vL z?+d@!YVBe8a&vR0OZ7a$12rG!ubr8lTMJ+q=wu9FIEe%KML=L=>r(u1=#9}AKPQ|v zt?>yhEc+4Si7(GIR-7&ZEU~5d6K#P>K#W1-yidsT-PdPW5)?XOC&~(3J24F=pQc)w z=V?qrVteqIyKSc9eSyMSYfTV};NrYg(c3LnrPX%e9~XjaZ#blZ*9#0Hzy_sX$hu%* z0yv=^WG?)o2*yTa-hyms!Q%956^n)j*78!E<+%9EAhK|?_d3h>*`3e&w}66$y1FZp z-s7E>ymYyDPy2CU^)vQd+|AIw`J!cK7uX}HCTDC+pC?in0RsXAWrf+MRNCvEfz;*rcT`owe95H zU4cp(%kiB%KGI1yo#ee%-!9i)o0DZjD=v(}(EKw_ZW^h&hu*&Y)l29j>Wbx4#my`F zLo{48i6vJ_?ozZk&4#%68e7{E0Fm{ZtsYW#kRecBM(vDDxREW`{&Y2rui1sAG3qjFFl71P}n6_XDmb)%?#jc~F2Nj$q! zvPonuqBkDt1gX!9)wPbIsVMw{5yB~NKE(%nIjQMqSw}#kIhS3W@>(&UC$_{_y!``x z&VW@y=nm&Kf6ICsuH~M9Sco@YdHF@T2KkeZ>&%9|ee*`x@!?}gQ|A6bn10rZFS3K0 z#^v3s7t*$_9SvQ+F_K1Av;=)Q9W)XSE6TSwpJ~*Rx~bc2K$X&PWKHa@{bQ`1Qu=&V zME!*S0UO7I2Op>xRsM9|c_URpvf;&blDZ4td`6Rqy6Rxuw7SN|2@UTyAs4|v?ch*J z$wfz!WUc>w5+v7hC1L11itq60Ta}(l#8Lg{{KaM&;0xozJFJ5wJk=ndr`K#BvieOG zYC0diJfC)t$ZakzYoyO<6*{U7H!0MxFSZe+Sdo!%cXWoz&R@Fb^`Dpbpg)Xyjq9|h zzK4GuE!~3q>9z$#1d$7t; zEe}`j)_nw@_wNr^v%BHSz^)sE&)JjYPLWscc@9!^^~*BWjy?sslAPQgXUoqy9g&ol zXwGwFX5DeG*ct=OFK6)4W_0_u+K0cg+tXe7N8rLL@8ScWwK_g)Tqvt(JNd+6_N9Zx z{@zIkT(}iJhbpn0VLebrllgU{@rQ>p`2F;CRQH#NRb>*V-u@Fw zhBG2-0TgKIEtxsV&31NXg3mrw4L$NW$pr>iaUkSBda**)5AKl+`Z+=`y!65qh7U}0 z5Udc!k= z5G5f7J@ZSsa+n+AOn4RX`B24irZV*B&m&FGiU~LtJO_<0p5MJY@05|dr{~^%`wU-P zV2+G{#FdwGc)ELd{34aCs+1xGuu>QsgqECkz7Jz~bk5H^ZO+DxFbEmwv18^mDd;JD zR-A7z@iSHAl6ZGL!8Xj6mqJ_tYav<;HL29!Inf~0jcQ+qZ3z_*kQKX?UtJA1-@L{BZk@f_{rBH{1=K42IL<5ueAA4x(Z66^dU3fU)gVT29#C~;!^K<@ zy}RCGwtzy=atJM~K!BM!gK#9>u)M)hk*HVEF>^`f&6S^$wk>1>@eABqsoWN1Nkm{+ zw*K`+_PJ!&t$sxzm`E8U=<$8xs^OjGi#F02rHhT zx=T%x7kS(2q{Qb|ednpTw`8nl1R z()?*FH?N%^a=++eRj5 zwd#U-!GG-ZZ5b0|XN`4M+&J_Il;rQ@>MR4UUG_3N|18{T%j=Q*^0>E6ZZ1+&U8`o4 zlrA?Jn9yT!@Rs;{g{yuzSx@V{9eZnchR)OK_vL=qFWBW6&M2c7)BUlW zkBwff@t}Ow38PBCjg}j`mR9dYk;1kH_v@f8n&IGpMM& zt3VFl$T(Zo*cqn8%@^zQuP`G;!#mrw(dBpEa{m3le_h%%RLv50RbS(*GZ+#1j+vyn zF068SS?1-ahrdf>UU~UAwvB*PmlFmt7t!kQhR&P!yCLG~bhSEja8tQxkZ}DGku)KT zMMxt+@F9ett~#_^#)4$6LxS4S01~!VmK4Okxh??G5)vQ_xh~nvP<*^O^5|5@!MQH1 zmeAXbHlox&Pm>rcxN8r9<1C~n0T2mP+kq4ir|M(oGXcO88xOn(g0X1f!jQM(;!A+n z;P5fDvT-4S4GoE~TAkkVIQoK4vM| z(o+#FGsw&3;pPd-IL`KIde8{dr7@EyxZn*5MmPm9i678>?F0C#>7RV{>R4H-S^sKe zggM7AGV#vk#Jtlo(NvIzk$xgGv!k0H4AEA`>_mXXs&q9V5C3WbhuYA6*S5i_Du0OW z>NtyJnOeY+(gjFJ)zrGXFJc@)XHCL12G1V9ckk}EH1Z*{ z2%i1{?$IO8Atl|rqn&S~R7*%s_VQfOlM_*Y!2)JigsE%AUc2TFCBg5Kk!2z<+L_4O z4s3|1rb!eLCWM2g7H>A##++qpL0la0HeT-TSlxf2zT>Js@Hs%#8^E4zsPh=mJ$m}| zjI}N(>X5J6xP(+ zJ-e3Jblpzv__b@AFgSv^zh};2i@Dm$V(0BLN8*B>QD-kpjaDpaAjnA&&Mg|gLx{u+ z);_gfi14w+N+nSQN)mNltniC4GQ-afz*Vd8sv|y1E?C1}g57}fRmt?S(}oR^LKMB% z6l@dR$T5dPt+959t`N;&e@l`gZgliZ?~YZKtW+a6`I;Ub4k|Sz4k?Sy1u1;mj-AK% z9dBdt?~zulAMpprrtFhudKt+#IzgYbcu^FhDSDPkWN&ML?+PFxnsP#~EW$mD$7AwaSU-G+U- ze)tEGp?>!Y3Ye6>OxNh#<2Z;47}bIMLCt%A8uFf@OkO@5z~*PppSOFF=^--CaC43` zDcC(d;xgc;NC=5y0M&_|2=l0yBn3`NZTO)9SCf+o`W@8o4)w?^5y;t^eG^*NA&NU% ztx4)4xgf98$jv)AeCmE*O54%hDr~8>$De4m01X<$yZDW*r{_%odKRHH2py zHMezs%ue_CqTuN2=B5x$_2i;m_~p_ZVZR8}jQ^Hw?E`-`*-M`XW+*!Ia?~NQ(U0o3 zun6wvtp8|Ud`1F^Ow6fbTbp%>-mk4D^y=^|GVF5?japyNNC0kwWl^>C9vJMOGmiGk zDJ?Tt%BWJwhB1q8;(Y-JyDjbqh9p_UHW1TSB-(=7k#6Q|-Q!xHs2v=9D^2glH)G24 zuQto6k6jv*Pxm}e1b28OHDn)sld5H=+36w%gPO&eNEXqz@a8>(x`LH9OpfA?)R0t! z5}Yd9@Tq7K{%?3VkW*YA2yJ?~_*WAVI+Q)p%!{J_RJd!(!C^3&?0XdF z6u#Q1;(Kpk04EzAR%3u4-u26yd|0nIPBZ9wQ6Uv~xU?+!{Giw&MKIEM?BvHFsLBc` z%J!B90lQ?DC_8at6R}*CFn*i5??}*bfBP_^AYbn+bQZ9mLNwPZW2R1@z;Z3EHKFjw zIe=~6KJZ2Jb`v4mJ$mBF5z7f^M`}D1(iwaQ>4x%6VNDIgNA<)NkQG5GIlQNHfT`{a6 z=0YKpbJ~~&#o$;C>)XB*#(6e{*)7TAFF`c{KpH&tg*I@d*oK_5pK}Z$539Lm*h6w{ zz;-xC8a9D-h?>d53~if7Zle%@08h_unlL{9v#dul{07Ulm=6;8l8`qxYFqp*0P$z^ zN6D{m7PvI>sjdmBu=5TM{p6It3|xVIp8b#eD5|NeJ9gqk+fVO7nN8++2)IL~w{Pz` zG=Uk}FQ!z8HC^^>Z~WFF%&~|w$>2@m9Xp^CIFQis#_Qi+AZ5RXc?XJg@iT%-Iw+$P zUl_Wy9lFR=b2W;SpOZ8+paQ=MWOdEG0Bl+^SpZ@Yi%hek9w#myT5%&)!v-LfZl;5s z7#1k#`0;cGv&blp__7b>M;B`9B9 z{6}+wYRN2HOs_+7##eemTrjLO#RVl()YaQ-f)?*lLqUklulGI)C)c+SI_8D7K%sI4 zS29&*MwPJaz=`yPNwG8GR_gC>?Y3)wbNZ;Z9*A@r(EqTXM(IrGhR^+`%QHb?Odn_* zYjP;E&#pCws;mzLJ2e@NSycZiiHU3K4>S9k#2wNA7(K$-$8YC;A60E@`AMv6n2LGy z<2s({O_N~H@#@;^Im`mxscoSDiLc!}c9<}~zWN$SwM!FXE2-Q=n9ikP6Hq{$WbYv6 z4r~0xiJQ2ix~>o`sGG@Pef#kv;W?#OH(Ck&{g9Vw1zBB|nVD$YIiL+((3XZEmq zs!mmX#am#MswygUdIxBJ^`H83lTYv}oSxS=#6aHJYdQ5sQ%j4Wo8??YlgrEd`GLku zIeB@%%@mtwAJ^r79B3^)UvSr}XJ!_^xa8gbW1nyNt2r|Xhg$S=Z+9;D58l2odAfLf zT}jujeJ4Pj^5QFViYS0Uz~qv7mvnb3ONakj!d_MCSPSQe<52sTZQYMc^qb|fmk~pc z9zE+>H?hVf*ZLF?hm~2|g>sSW*n#$yLB3>5#hWMJWl}je>|Z%qtg7c=k*FG86X+>9 z7Sx{oZd*tDj<5DYW&&^6>-zc`+rKyQH(0h1VX0_qxAUciS}$UYYl95cMeF%3?1mt> zx|t1r!$xgyy2<{5;AvgzfZn&>-=ffw5K>456%LNR=6A1Oz1l=+mip)m%N$Os;4>eW z+zE5$q;Q4?ejB>u@+=Vn8Y+s4Lnp4D#js6|Ik;**=~-cG+7jbUfFtji93V6o$Q!Q3 zKueecj^mL`_`d5!2+1^>1=6oc3PgKE6~Mk2K~eYMY-U%n%vL5sQ z-A7oR=kkP1ea3+5Ald~#(pv%jq9>A{vHtd|i2K0pEhn6rxz+&EGFW`(whQ{dt!$g3s=Bc9QgS$(TG$eB zjY+f3BGLf^flPb;q6o*5?|C{bU2J|w*{ zv*f~3`P5m*+a-W>gZT01c5yo*j;B}K(31r^&m^< z>=UVMGr1wGjaywV6RxrI-6I*7hlX)Sz*t|hnL|w^_LEPufF8EIdwgAdwywf53yX&O z`T`fJ@P3@@+WI-0P45ldAiE+i^pF=L+WK}hTyNyv71ezFIR3;vqnb6)1Y5T)fx&OZ04*d&Wmou8JUYTsyrd!B5m zD~83JeHQp}BqLJpE2Vj4;W(z{bU7es4mQ{2Tl%*SGPxJ5_`y8n_KO|%1I6-2Feosuv^2D(Gu6+|bA$cZumT@l-`XG0@i>;rC|Tm$w7AroLhGQW zqN3NAuAgrCZQSToOvKB?87k(LLWd-J5@R?-CW-gSGj)KfV96HAJxPZ-mrK7R+60MHqo-9O=jW%Scu__Kp857rW731I6Z<>l3i;F7r(LjQ`M%O>My@F_rsszHgs z4wGDK^pLgTJ>ajl!!Bcx<&wLK+ox2XI~QV9xx9-d4avon;`ayPPTmNxh=O4jZberFhybGKhdk+P@!J#D zN;bKPtN0XBKFsNK0Udcc%#Do&7YlD-u)5>VLBdE;S=lOnt8i7#?*gu*wIPB5_z~&_ zx^ri66O_KJgH>Pa&b2eE=G?+?^vgG=U+X3%^f?RTOg2^|&6V=D6&N_(Q{;LbmfL`G zj+x=IOtzK~uP86?)~y>hidt%tzy)t1$vEoBMRbO!Jy8Di=@%_;j;-|sP(f|Z73KW? zMn2^0x~=aX{pm|Ce5=~>zpd_8TAyC~Ag>BGhynD!@+VTj(;OKq;=a<}h?T^HG(JIAt4`e6^|LH}grnz@rXIf7%HDwC?eP`gz{UfyS+^xG&6 zm6{N?4&;Bwj~-os^!t$RIKL0lx3z~|C*dEV3?K2%vPJ_kYOzH9;0R%-ojUvhKYzH! z1{Iavg4q+-I*Wdsrlt^HixqcWY#+m{l)!kuS%u1a3ab-bX2_RSuUn2E{eEpBkhdb- zFmcY&l&j;-lg@DYENnWrZ=XLq@N!km81tK0=3lyV=CEW?klix~D_*xS`#8U@9IHDb|Kw+}1Sry!lTg`&gw!$J*O7iJHy%#p^wJ#Z#)*i28gTo($* zwT}Ds>{2RGeb`^w;-nOjP?BP1V9?92)O%e?9WfJ#(r(*}&OELY5(5V7NbYu8V4t_@ zEpRzQLi(dFR&PpDE8LOHYvoXOc}LT$n>1txT>X62hA(t?*Ax#)b$hq@7?piS##lKy z-?C6iJ*gP${#GD%G`+rs7S_7=`2hhYu^%3tx&)QOB)~c3 z`w60so;|_yc3v2v#XiWo(!rEMoyQ{Kv@XW$d;F6p+x&7RqMx>Sw0PP% zR5~@0iZ8`skoX~Tu4(oQZNl=NJW)f;Qmv^zYt8^19?;35p>M0Jlh@q({p)X|#0fNM ztV}5=ENrC6g?)1xcYMfuP{xdmR^BwSUX@ga>x=kQ4eO9_=F19f4LufqLb3>yEw6t8 zZX)pjdCo?dQ~GkH+cYv*`$3;LH6QByun`J81QOJ7J^J=lb*|Q)ou^R%Wu^M~Ih-;r zf3L8GhK9ZS_NA4fYsxJs{Q!dc)+38zTcBwNzZtKhLc&ZtM>lW0g}>Ldca6`tn}``% zS~k@;+6qoUu%^xI7C@!L1`bpsA^{LBwK7n9j+O90gds>(znsgZdcOYVG>!JOlu{B& zR54(t{Rm-N7jHCXapo$f;d@tCTyor4m%OGUA+&@dNk~3 zX>)cC>xUnwAeGd=mY+UJ{hB-x>f1Al?bKLIz>?(J+^586A>2|p$>=!2LD7o33r2FZTQ+BR#rylgaJZC}bv78gydpgpPAmVhk$^;dsw4JGwxD;J1D~d;Xv$-bsKW7h73gu7&0f z$V^0@=NbB&UU}SKP6Cc0$|p8CATA*j7WeMd;k2mE96qBjj}>ZN9uV6xo9k0lY0S}} z*Pk}cJhnugbkQ1rarv3w9w3OTW?$9$`R+8memoU5_XI6z8|5LO1@$_j&5E&+yV0wM zq$bn?M?iP*rXD|XB*7*xkb{VH+>Erex-IGKv_h!ig{8LK=ixr6a+7e8@9*cHgBf&i(+1N;8`X*lZNh!z`9BxIJ+R zR>J|tLrq+5`~A7-+}dRkWauf_D|rnInJlDF%F7GVG=73`K0fw{gc4Z)R}+12L4D%E z{i8vlA*Y)&y{xRQtN0RnZ5nN6JBNp_r0r)}%iI6F$CDvznecFCac$%a-@Pk`7A+pX zl{bJuiEC+TY{mlO&F)4cvE!rbIITj&F7aF*pfFf#%GImiT3S{m+33S@YSs>VaR~~W zIJ_htCA$?(KQB1njoekDHgl8BS@%^z=qUm0ZJKq$F>QBmG>43h_Iia#avz5de547a$6dzZ0JoGY7=F0lvoXN-lRp)k{;Vuoq* zx`nBC^}$u>A_1vnBGsLF7#lZwBg5N){#ASu{*(}d60{(!8k~OjqjZFjR9KPqUOlPg znjV8@QS?^?f8ycM@F$}90h8qT_B(u7XVWXOr>}6d|LIGVgfIe=4xQrx=^*DNU&hEU zd!oQ|rgRfK@1D`&Io;d6t#PpF*g*_1+p%{atl#R6wB{eD#l^Y_s*~f>UmjQa@Vz;* zB<5!C)JNnvJo0`wf1QbXtM%5J;j+K9ca8HJ*h^fRY4r?F6oA7ECb2$}6=H_G&0jA( z<+y~jaB^@!ci5-h<2uuuam!654D;EuOqzH=V;~t#udga0S$l%DM|mXOH~n4{So?$O z_EGW<+X==-MkkkE;7zXCoCU>)@NxRIX}Ij!Y#8vQIBi-QZz|dr+F|b{@e$gltFOE9 zb%K`NAcj%kRDVJO{+?JruMbE6)?0)*OB%xEZ=ry=b`hzf2*ZthdvX81lek4}Sd2?+hoBz06*?*%nPFTy|tX^Mtdz0BY;koT9 zZuq?)4z4&35)yo(U0}C|cMgkj?@9S>{q%kCUD9@#F+TPq= ze$Vgl^)-9aX2JU|dhMb8b?=ffq@axb^q_uWC#AbLxAd9W_w;4X&p$7_>vYR?31WpC zD{py#b5b}`Ot&wG>*udLiFGxq2=zsc?8hc~{tJSFGu z8-9UFoqPMetsh%;4qcCJ3K`U0_t}z`bqC@#ykMPoY1}L_Shs#do95zze&N$=(#*!0 zMou1{a;wLxZGZFfW%v9V-<}#&w$<(JU4N5}soy=5O(D`Bd`qs2NPB!Qt#{nea6WMPf+e}e&nU4wf7~F?M$l{bKi2#+AL;)UMaBPxKEtM%%edj4^XJp| zK^KlI*HyN9q<85%!MQYi>D_6^M|hME*NB&Otd|W_=Z<8K5Tpb*ydR{W$vI@YfARs# z>n9|YA2n$tU*SL5FO4T?n?8DZYm3oLA2q}jubew&2_4dT!z!B|{|I}WQoPqS(EN71 zp5npl%d{SpT}nNacx4!0_@PtY(jk7X(NTM5H%ML%YYw zj_6*NxOe-)83p~{9~*4KF;P*hWT_3L+YKgxHfF#Dvk4zRbw{Bs2PYv zqdb)VC|Nep?mHh?kOJ+x+D&kS56#@F@AGCx_GK5_ilL23r3S;Q>>5=OKNEvXOGA`f60vo7YJ2=KBDGl~u0lvou zaYSzD5lFbm>T6Ves4vK=?bV~lMCypER|&A%L6N5EudJfhFw?)Px_X*_D->=FqL@ax z`Co>-EU+{PeNpe6bl=rmFnh$my0h&xb%S^j{r$LpXV0Bu-p7l3_uf&7AiJ$P3pPAp z37_Wn&5n!2LGpjy-Q9@|fm2*n*@ulWa$j85vg+n7$}3;mE-_n|CS1%e(~}$Rw+XYZ znm`(%f&qg8Z|QzJf1u*PUK}w(IFohA3-9I3tf3)+;pD3r&o|cjcebB+k3lXb>ne!@a8)O-h%#o#g zDuD?z=!%nVJEyhXHD(L z9^3E@`r##t9aO8nP%;SKw^NpvHs|=c@%Hb;@yN7BeyiVklrcadk}FKfFQ-p|TgarR z5iF&Q3I#ID`uRTgTJg;yWi{Fx-avSv+o4M(9*w$^gn(`sYpnYxWOxC031H4rU#4|{}KYxBM$W&ylFhMS?fO6c8M;l5U{v)DHc?Zv&ksB<& zHs&quaDG4YIOdIsOG(|Ag%XyHrn;mHUH*dwdvc5qe|3?|EaiS`MGI z3iF=>_VxV1o`?KOw1qZhNMz?MAK7Tkmx-keroh+cUo8l>zho{t_ob<6qPn^^4>G&| zjW3t3ts;1Q0F#FGOdn5;^M26$^vDv+j?mm8dZXspcx<0tZ#57i&qQ$u(&=KO zy2+E1%d?x}hxmA3*NeBDLEI^yq~~=va3W%eh}j<|p0eTj@#0bGB2;J_yBq*Yccy(eZ3=LdRw+5 z*ePd&0Py97=QS5`Q?+HSuUi5YO%eCmw{OPu=}B$$w~6gH;Nk-2`s$4j>o28gq-n!= z^^693JpB8k?NuMpZP03@<1$ZcdpT_=(*f83iS@HtZpV)%OOl;tkqBuxf*3fF{(kR} zX{bcCd> zjw2ezRK2(C#$es~Ll5bTE;Z`i`1yeL@Daa;23%ZVaLGvBvxn|W)_RPpJkh^`%o<9T z*+__nfnxvo{r8_g1b6*MAV8ob-Y}w$t&?9#NJ#h+@2$7JyUB+Hg|iSGy7CI&@!BKW zfS)O4#Ekwjd!8ir7|ipqH@80lSz!?Q>We7;_{23iEN*lU?lt$sJLgcPBkwS&l$Vnu zizHO4HZMV0ue3&rw1w7a_DtBjg8DEeP zPdqffd`73I%3`)G1K9?6wo!FO#-DbY>pS;*U0Xrj&ySWysV(|*Ye(66mQ8lHymNcr zP1}K=$1Xc?b(M0J#|m-lKZOyXFUE0Zb3TJQY15shq-@28cWq~H;4_x-WvlFmcYh0A zRoOFQ-NB_7!L`be(h(y@B+G<#0jL7OvXmAD-XMM>p2ijLz5oXo&QqR)2BPqbQiy@Xdg;Ih zabbiH^m=Liy>uz;*kBsqp0P!Cw^#YgCk{DN)6yNOoxmW?O=2n}H32WH`M2?PF4Jdv zILejRHAL*E@bL2sST_JyOi~MFwvwgui0V<5D=!-=J#&vyT-F$oTX3Y=EWBCMO7n{P zo1b1st#?u@Xa3bZ{D}Tylcm#W%2$5)EACWI!itYD%)SQ>Y~Hl#$R%yrn-?{2vQPT@ zIv=^Q?l_ppLam*_0Sy<&+HroO{{;ijn`Kil7+Z~j3 z-3=WU7%H0^ak+$CukJeT81q($u|0BR6Z9FR&;CW8{_J5vAJ#ogxVg`%(h~3&&`)~A zh?T%VGOv+tu)rMvgDLHNPToNGz_dEmw`&|73nG_q+SDY-dX^C0PZu1Rm~VI9}PGpS%iHVg(K^34MLkZdco~;H+%{iNUF?d^egQ?elAx}-3zgD6MVR6CW%bkkwILqsmaJtTKIW$Le z=t9FS(0lZcJ8+48*U5h8(T4JhvxY8}9f)kmx$01&#G_T8b5NkKMItaB>w4b-MHmWk z%jt^b%NBZEX3?TG`N8%A>>rjobFrP>`4w@IYW9H%Pgk;+VMBss0G~6H)6^`#fB#_I zHVG-I1tJQpt(!KPrEj^gB5rW8!GCxYeKw9|nu3zjMaWRz2SgUlHsxcJS=QXq0pebh zxlJdQ3$Uu-py51ndZH*fa%2_~y!!&41fHPGFhijlV-IpyQ;?L9aBX?N+_OkDLn!(H z?1l;U)uPiClSjhjcMb1{mLhTW&D~F)7?asesZEYa%$i$!*}m&}q~LHdLp+7BEx|LH zV=%^Z=@{aD{l;FL>Rh>n*c8Fe`RL?L6e;r#k9kzB+4Q9FQ9PoFq(f@x=dzHpX)=fUTQxymD{gLAg%+~QFtZ<1CO z6lnkQDK}aSqegWrydg-e?8`1c$Moq?dP$fxZjdbWyJ9E1=&d&h!Oy<$(n@IBxy82) zq#;Q3Gi$QkC{VcFWJo2ZrhcS(L0uU+^Dm*>Vb!q@p+*BIC%SOYj@OZfc;;fv>2-ZZ zAArHK48He8OE@fno*7%m=q=7Sr~%)V6=U{~$;ool-Q%pu0Kgq7D^_8Y)G8b@crZG? zY$`U_v`h?LY+KrbROWud!Y*FSo)9rXV0Ph01JmO|?Y41W+zSufzNg0V;_&F8^XPC0 z#au~((9;TGVBGfCb(d1Pn8^o=uxSna9g2 z%KWQ;xSGvcfO%D%Ci@u!0WgZ4aqj#Av5rQ;eU!RbdCouht>=Y*hLSXG(EZn>@Bd`> z$lM?PuQ}CXwl^$*Hu$rvqwK#ro`iq-f9f6jzd*YF|M5$Ysc|<}@1o0xjfeafAQQ1c z#LoOZ?9KjGc;~S7K9-)Ip2)(8HzKO}Zz~sGF~Wq-mpEX4uzxzDb8`9Wa()ut)e{jB zO9Z#hj2uK@L}rm9tD#|9`StGKz*J~NgflGTA+VTCX99;RDk_TKjp)o%?6Y#s8W|z# z@0BzY?@R*zBkJ#OzuN!B)9bLpwH)dd%KD0lvBh!twlK=d$mm9KCt$?IbCRz|8$8!_ z95Pi>#ss?qfQufR)E~JnTzK>{*6@oSoj0v1Y8~xHU0q(*TMuoxMusy{0x|b=8jMD+ zOX1nDJGr^JbWb~=6;A{PCee~od3<=Dp&=(%Q(?iIsbLsznZe0rs2xuJIqZOtQMP1B zfLg0`0_&3P5)qczuJbgwiHoK1WJW(N)3)YTrFb(b(i>fnD#J~8hBfv_QIZ5 z12s1(yjxy5iT#}fUjDEXpy%ftgy^R2eC`n$b~bA{3^Kg=gMxw}phq#S!vv?&jQiO^ zJr$>hA@AkvBiWm5)@4hVo_WC6Y%DemcB7lN8MT1Jy$ucgPi#eyhQcfrx^=x}FE7$& z7|h{oZFv{QL{t78_=__coFG;A6k+r2oabAoM_g-3qryjn@~*-VGUObaCWIU>gCNMJ zY>kTKM;I-#jJ^_-aP_J%@K2n^QeS{A`{Yx`3sG$5z6=!fU^p<16NlIRf`V}Ne1slR zkw*KG7c%2o7RW?mH;k8|p5D-zo?Ga)DRdBcm{C;^4aMI|c!l0+k!T=W(1;PrhfFS+ zPWa%frw}9#c^@*MsBQ~JC8n|l;K&72;=E!=^kYfiCk{f7&+rSp(n!o=W9!jfs%*cK zH&}ipWh8%xd*rl{BCX{o%0tPbzp*0L10W(Zyv!=+pTn*rOhxrQ&tXe-#;vN={0Ost z0%sN4$vao!d8& zrhpc40(F|V`wgAA%a=N1Dub$N2UnPz!-O#@R^}AVv#6%No(uwYraRN9iU(w8>o{Wn z?IO-?A=9l6Qhwc-HNNLj9WsUxO+CtimX;RzXnN`;*Upwxjs9wD^R?q|sMb#}I>#wa zMl-%0NmnzCYTjgzNUKcuN#f9^gcb?&cn*UZ_UWUhu1@x4?2&9l68_aRgOsZ3INA|a z$P)85guD1kHGSu=bT#Asyz2u3A|j;2r;kM9GGM@s4Qe7aD!kCU8|GzYWmRpan%5U0 zDp|LWgI__GAcogV8OciO=>6x-_OPFPaev*0|ESKuA9Q%1xj z`fW5Fq3$#~8jY#YHr+!If=Ha@W@%w@U+2OFo{7Q@6 z8vK=?>_cNj8mR+5_D$k`f)+7glMl7)L0|Y_CR-w97X>puLucFvLB057C%Q^HcDF5C z?iUu;dbFc~p?=``v3_lP;#(1%c zMfgl^*CzQrlaY~WI1=J!O$asQk8-C*0vFqu3a@zlJ zlB*%$eZ7N2zAW|KQ09NZBaEmri!lh{twSRCDoW{ zP`Cp_Pju8hWyIDxKenVDeM8P5R;^J&O2n`@lU5!JohqkD@x6D)yrSKcq{Q(DN-QBG zM^iB?02CI@*h_k8U5(MFmtNR&z42(RC3I*XU2KEMGs&#Lyz>*zy|482Cy>7C>Z#Og z#ZP*DlUNx_3%}^-mC(+BD@_D5Tr^K^zr39{CbN3sfAoFFQ{*6=iC;er0Nz>q36<&>jU$) zzMDF}J2cL2*62KuhCG*LB0)q!63$$oF$kDh)co}7aS6D=Sv$$ z)A$DpXcAXjiRR5ily^8ppALWy#f6a}&;50i9{s6+Z!|z;X+S`fg~c<@25o>gWI+fJ z=(!F^N=ZxK*>@@Oety1eH1xOZ3Se^0KgF|9#e8pEGiqV4@-9joKUF8SG1|}^Ja7}O z77Q|B1w@t3HK)4L!yKh6Vv6MBBQkT!%Nlow4LxEWsC&weLuJvqR>UKI_h3KR+=m{Q zO=SjAy+1tna6eevp8LrwQ2)M7cteb6K%A;X3!_uY0xNsk?;hail+@nt{=Uv#_TbcG&A-w;BOD_e ze?{b-XilH}>;A82-y%ZYcv0w#aEp1Vz^%Y6oXF}Eo#*NW?7=z_|_;8qYq%b#ura%iD%>Zkd6kT7` zb?oZr==q8(dKOn`clS(oi`R=;I!0{!#mOWR0ZkwiI<^eL~?>ii$dD4HKdOESvY)}zk|sm0CB^t^!c-d zE>})?Mh%ne14d9;;lG;1}vcn?!rAlEPDGuW9VXGt) zt?uK;7if}Xuy~hqqGj{&2;l4`Lp+Z#^oC!z<7>rwVocEA^S*3#btOj3f4jqv*r1)* zA0wFX1TGw7%_EK3G4+o=Lyf+VJjzvLeCGfqS&We?^Liu#gxfDo1it0il|qjxd|0Mk z)zn;}<>xWHY`$&8U=BbWofGTG4pQfwwrpTDzLAZI<=u8OrfYgCk%HqZ1YCo5q5M+v_mjIc}uWbSs zY~pAqpc^;3o6Mf(?D#uypUkA&#Kx(FjRrcN#K5;`w2MRlb)S=lPmh@P0k;{EIA z)?atr`6BjWVVYHO%mK>@VmIsrt`2@7Ur9_%{>FiwdisB)j*Fe^ek4$7rdg)V1@}|t zGft;cE`gcDJ0vtIC<{M)b%W*VxQKw^(_CvH9=4M#3nj&oue?uyCT@HWX*bW{bo>U_ zOaTsDO5ttVPk?-OeQF&M2lx|gFd_XQ0*I?`=jxm>`@7fnb`*7X+7mtb=PnmChDgqZ zPj*Lj%otLa6k|8`De5P-`Wb~5q1_?N#l-fn#DYODne_ASfDd9~cTwLN#Fj9Xb_!V{ ziZawA96=a)D8OAC4vqW8FaR-wnRpqfF7XMlxRi2vy!Cjh7oGD8Pg^AXl$gJm328i)h9Jh*o2itxApBjF4fABHM zcS4SOgPoF+j&V4bI^)5D)fx}l=q9}%g=#=FdxHgvo;7o9$ zkPlw_uiK431%5tQxZMOXu7W)O=XR?qDA}bsSo*6lDo(Ae<%KL{^>$$ z4evm93Zipm!wC;7eteK#^Ue5vX9oYSqA~yJpY7wBsa#iEdrpz=crh7bEUDp#=AC=| zt9n#NIrj1Bu}Vt$NEXSHAkl(3O6&;B03i$#8yZeLy&9C1yg9h5yzs&_T_xZ6TFx<5 z9i5KThqYM|fqs5@I!yHNQMk z)`gIW2)4i3bx{(LA1y~$KF`{*lKsXaZE3po4!hQWv;b0!38nc7Qk}4lU6Ku<%uWpq zb-91fMD|AJ;ouy7vugm31)~eb*ounZfb=b2j7gk=vz>qjIH=~R?>}mzl&80lWml&W zCIygdnpHLyLvk+}w#XQ%M|9jn-_&=x@p2CSOLh_3pg5@k*7T=<55&0ZaH2rY{5_0g zQk=;QB&2Lz`ZFmCQxg(2DQju<*o!ui1;L;XHhCuZ%=}?3wyStv{?@#_am>`>zvZ=_ zU%%1s7`w5qFO^e%80dm~boE@yAnfxMckiC%+5i&rUk@>*8>B_+DFZ7^5CBo@Qp1O* z1N!ml;X3NKF{$e5i}rC(%Z?sDu4E`bhf|O<^GyNeHO3+`zHU<&U4(&LJ~AaW^)e$h zw~wP0TNWzzYU3**a|7$RAfiA|K;1WP-mP1=dh;ePmGYWV8Y~dX5YUaS~x*$R-RmKdVa{N;Tr9)-j`e(Gk;M-#pXx3=Z>ZQ zi0Y8GjLw{OMUbunF$|32oLqcDa}ohlwm~!8jqLw-h@K}_X!um929xrWu8wrzZ2hGpLjl}9nN7?d=Py&|!+k+hLE zL`9?sP1%KZ^D0AwXd_aJN=OnVX-6@XO^PPFLL;MMO3EnJdVV+Whxfzt?fLRL<~Yn4 z)%ySM`@Zh$I?wYuudL?cv>h9_5YZP7n6c2`U)Y8Np{#)Y256(L1osfv`zr+He#(X` z5&w=;i_(wVr7*7(|HT8x*P$*a6DOn+X36mn{H-`Z`r6v~EC7@UNT2kCuWL^r?J2wD z^=D!Drc$Qw_;C0@N{Yk1aXv&elP0=1gbZk}8ZX74qOLsaS4p7tnR$^R6{j^TC)u8C zIy=eFzPr9+=WW#EoxA}Lb#5EYe+zHQBnj6R3J zhBBY@2qcABA?(F{)!?EUt9lwu|C}EZplD)zf&f7(!|?Vo@ho}0vt|%ym~QJp{P7WF zsZCz`DNA&73&K9>wg1wNp@$f>NOTv&S8z zA`igkk5daxq-Ds~xk>l$-_PBF`)(tvKGJy4NvmUp)V|ez|2WD-+czRFEL)mbX~EiV z3�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 SIVXB6B&J3dhG*r={^#E~TGCAb literal 0 HcmV?d00001 diff --git a/aliecs_documentation/gui_manual.png b/aliecs_documentation/gui_manual.png new file mode 100644 index 0000000000000000000000000000000000000000..57bac23e6ddd76a186836a0f5abb9015fdfb381b GIT binary patch literal 23364 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 literal 0 HcmV?d00001 From 2608fe514fdf69245e49da99a240adea0b13705b Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 8 Nov 2021 00:46:16 +0100 Subject: [PATCH 212/236] Sync dpl-workflow.sh from O2 --- production/dpl-workflow.sh | 45 +++++++++++++++----------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index c94d6b8..4241fb2 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -226,6 +226,7 @@ math_max() echo $(($1 > $2 ? $1 : $2)) } +N_TPCTRK=$NGPUS if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then # Tuned multiplicities for async Pb-Pb processing if [ $SYNCMODE == "1" ]; then echo "Must not use OPTIMIZED_PARALLEL_ASYNC with GPU or SYNCMODE" 1>&2; exit 1; fi @@ -247,7 +248,6 @@ if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then N_TPCITS=$(math_max $((4 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) N_MCHTRK=$(math_max $((2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) N_TOFMATCH=$(math_max $((20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) - N_TPCTRK=$NGPUS fi elif [ $EPNPIPELINES != 0 ]; then # Tuned multiplicities for sync Pb-Pb processing @@ -262,25 +262,21 @@ elif [ $EPNPIPELINES != 0 ]; then if [ $GPUTYPE == "CPU" ]; then N_TPCTRK=8 GPU_CONFIG_KEY+="GPU_proc.ompThreads=4;" - else - N_TPCTRK=$NGPUS fi -else - N_TPCTRK=$NGPUS + # Scale some multiplicities with the number of nodes + RECO_NUM_NODES_WORKFLOW_CMP=$((($RECO_NUM_NODES_WORKFLOW > 15 ? $RECO_NUM_NODES_WORKFLOW : 15) * ($NUMAGPUIDS == 1 ? 2 : 1))) # Limit the lower scaling factor, multiply by 2 if we have 2 NUMA domains + N_ITSRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSRAWDEC:-1}) # This means, if we have 60 EPN nodes, we need at least 3 ITS RAW decoders + N_MFTRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTRAWDEC:-1}) + N_ITSTRK=$(math_max $((1 * 200 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSTRK:-1}) + N_MFTTRK=$(math_max $((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTTRK:-1}) + N_CTPRAWDEC=$(math_max $((1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_CTPRAWDEC:-1}) + N_TRDRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_TRDRAWDEC:-1}) fi -# Scale some multiplicities with the number of nodes -RECO_NUM_NODES_WORKFLOW_CMP=$((($RECO_NUM_NODES_WORKFLOW > 15 ? $RECO_NUM_NODES_WORKFLOW : 15) * ($NUMAGPUIDS == 1 ? 2 : 1))) # Limit the lowert scaling factor, multiply by 2 if we have 2 NUMA domains -N_ITSRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSRAWDEC:-1}) # This means, if we have 60 EPN nodes, we need at least 3 ITS RAW decoders -N_MFTRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTRAWDEC:-1}) -N_ITSTRK=$(math_max $((1 * 200 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSTRK:-1}) -N_MFTTRK=$(math_max $((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTTRK:-1}) -N_CTPRAWDEC=$(math_max $((1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_CTPRAWDEC:-1}) -N_TRDRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_TRDRAWDEC:-1}) -[ -z $N_TPCENTDEC ] && N_TPCENTDEC=1 # --------------------------------------------------------------------------------------------------------------------- # Helper to add binaries to workflow adding automatic and custom arguments WORKFLOW= # Make sure we start with an empty workflow +[[ "0$GEN_TOPO_ONTHEFLY" == "01" ]] && WORKFLOW="echo '{}' | " add_W() # Add binarry to workflow command USAGE: add_W [BINARY] [COMMAND_LINE_OPTIONS] [CONFIG_KEY_VALUES] [Add ARGS_ALL_CONFIG, optional, default = 1] { @@ -304,7 +300,7 @@ if [ $CTFINPUT == 1 ]; then [[ -z $CTFName && $WORKFLOWMODE == "print" ]] && CTFName='$CTFName' [[ ! -z $INPUT_FILE_LIST ]] && CTFName=$INPUT_FILE_LIST if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi - add_W o2-ctf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --ctf-input ${CTFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline tpc-entropy-decoder:$N_TPCENTDEC" + add_W o2-ctf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --ctf-input ${CTFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline $(get_N tpc-entropy-decoder TPC REST TPCENTDEC)" elif [ $RAWTFINPUT == 1 ]; then TFName=`ls -t $FILEWORKDIR/o2_*.tf 2> /dev/null | head -n1` [[ -z $TFName && $WORKFLOWMODE == "print" ]] && TFName='$TFName' @@ -313,7 +309,7 @@ elif [ $RAWTFINPUT == 1 ]; then add_W o2-raw-tf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --input-data ${TFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --onlyDet $WORKFLOW_DETECTORS" elif [ $EXTINPUT == 1 ]; then PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=$EPNSYNCMODE" - PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" + PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0" PROXY_IN_N=0 for i in `echo "$WORKFLOW_DETECTORS" | sed "s/,/ /g"`; do if has_detector_flp_processing $i; then @@ -366,7 +362,7 @@ if [ $CTFINPUT == 0 ]; then has_detector TRD && add_W o2-trd-datareader "$TRD_DECODER_OPTIONS --pipeline $(get_N trd-datareader TRD RAW TRDRAWDEC)" "" 0 has_detector ZDC && add_W o2-zdc-raw2digits "$DISABLE_ROOT_OUTPUT --pipeline $(get_N zdc-datareader-dpl ZDC RAW)" has_detector HMP && add_W o2-hmpid-raw-to-digits-stream-workflow "--pipeline $(get_N HMP-RawStreamDecoder HMP RAW)" - has_detector CTP && add_W o2-ctp-reco-workflow "$DISABLE_ROOT_OUTPUT --pipeline $(get_N CTP-RawStreamDecoder CTP RAW)" + has_detector CTP && add_W o2-ctp-reco-workflow "--pipeline $(get_N CTP-RawStreamDecoder CTP RAW)" has_detector PHS && ! has_detector_flp_processing PHS && add_W o2-phos-reco-workflow "--input-type raw --output-type cells --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N PHOSRawToCellConverterSpec PHS REST) $DISABLE_MC" has_detector CPV && add_W o2-cpv-reco-workflow "--input-type $CPV_INPUT --output-type clusters --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N CPVRawToDigitConverterSpec CPV REST),$(get_N CPVClusterizerSpec CPV REST) $DISABLE_MC" has_detector EMC && ! has_detector_flp_processing EMC && add_W o2-emcal-reco-workflow "--input-type raw --output-type cells $EMCRAW2C_CONFIG $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST EMCREC)" @@ -438,7 +434,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Calibration workflows -workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && add_W o2-tpc-scdcalib-interpolation-workflow "$DISABLE_ROOT_OUTPUT --disable-root-input --pipeline tpc-track-interpolation:$N_F_REST" "$ITSMFT_FILES" +workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && add_W o2-tpc-scdcalib-interpolation-workflow "$DISABLE_ROOT_OUTPUT --disable-root-input --pipeline $(get_N tpc-track-interpolation TPC REST)" "$ITSMFT_FILES" # --------------------------------------------------------------------------------------------------------------------- # Event display @@ -450,7 +446,7 @@ workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && add_W o2-eve-display # --------------------------------------------------------------------------------------------------------------------- # AOD [ -z "$AOD_INPUT" ] && AOD_INPUT=$TRACK_SOURCES -has_detector_matching AOD && add_W o2-aod-producer-workflow "--info-sources $AOD_INPUT --disable-root-input --aod-writer-keep dangling --aod-writer-resfile "AO2D" --aod-writer-resmode UPDATE $DISABLE_MC" +workflow_has_parameter AOD && add_W o2-aod-producer-workflow "--info-sources $AOD_INPUT --disable-root-input --aod-writer-keep dangling --aod-writer-resfile "AO2D" --aod-writer-resmode UPDATE $DISABLE_MC" # --------------------------------------------------------------------------------------------------------------------- # Quality Control @@ -462,13 +458,8 @@ WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" # --------------------------------------------------------------------------------------------------------------------- # Run / create / print workflow -if [ $WORKFLOWMODE == "print" ]; then - echo "#Workflow command:" - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi +[[ $WORKFLOWMODE != "print" ]] && WORKFLOW+=" --${WORKFLOWMODE}" +[[ $WORKFLOWMODE == "print" || "0$PRINT_WORKFLOW" == "01" ]] && echo "#Workflow command:\n\n${WORKFLOW}\n" | sed -e "s/\\\\n/\n/g" -e"s/| */| \\\\\n/g" | eval cat $( [[ $WORKFLOWMODE == "dds" ]] && echo '1>&2') +[[ $WORKFLOWMODE != "print" ]] && eval $WORKFLOW # --------------------------------------------------------------------------------------------------------------------- From 432e43e995909035b3cf2326dc90e4d99afe6a85 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 8 Nov 2021 11:23:29 +0100 Subject: [PATCH 213/236] Improve AliECS GUI documentation (#123) * Improve AliECS GUI documentation * Update README.md --- aliecs_documentation/README.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/aliecs_documentation/README.md b/aliecs_documentation/README.md index 38a6802..151120f 100644 --- a/aliecs_documentation/README.md +++ b/aliecs_documentation/README.md @@ -7,6 +7,11 @@ The GUI can configure the workflow with 3 different methods: [Manual XML File](#


+# Default workflow and detector standalone tests. +The shifter panel is very simple, and doesn't provide many options to select a workflow. Only the XML file or the path / version of O2DataProcessing can be configured. It will by default always use the production workflow of the `production/production.desc` topology library file. For using a different library file / workflow name in the file, the expert panel must be used. In particular, this means that detectors must currently use the expert panel for runs that do not use the default workflow. + +
+ # Manual XML File configuration method This configuration method is provided mostly for backward compatibility. Currently this mode is the default for compatibility reasons, since it is used by all old *saved configurations*. The workflow is not generated on the fly, but a pregenerated workflow stored on the EPN farm is used. The following screenshot shows an example of the panel: @@ -50,15 +55,17 @@ The expert panel provides plenty of additional configuration options for both O2 - **# of EPNs** (also available in shifter view): This option configures the number of EPNs used for the partition. To be more precise, it only sets the default of the number of EPNs. Other options (**Resources**, **# of compute nodes**) related to the number of EPN nodes may override the value specified here. If these other options are set to their * default*, this is the only configuration option for the number of EPN nodes. - **Workflow configuraiton mode**: This option allows to switch between the *Manual XML file* mode, *O2DataProcessing path* mode, and *O2DataProcessing hash* mode. - **O2DataProcessing Path** (also available in shifter few, since the workflow configuration mode is set to *O2DataProcessing path* in the example): Select the path of the O2DataProcessing repository. -- **Resources**: ODC resources to be used for the partition. If this field is set to the string `default`, which is the default setting, the ODC resources are requested automatically according to the setting in *# of EPNs*. Otherwise an ODC resource request may be inserted manually. E.g. `{"zone": "online", "n": "10"}` will request 10 nodes from the `online` zone, `[ {"zone": "online", "n": "10"}, {"zone": "online-calib", "n": "1"} ]` will request 1 node from the zone -- **Data Distribution mode**: By default physics should be used. Other modes are needed for special cases. Refer to the EPN experts for details. -- **TF Builder mode**: This specifies the DataDistribution TfBuilder mode. The following 4 modes are supported, the default is `processing` and for additional raw TF writing `processing-disk` should be used. Note in the cases `discard` and `disk` the *topology library file* `production/no-processing.desc` and the *workflow name* `no-processing` must be used. +- **Resources** (default: `default`): ODC resources to be used for the partition. If this field is set to the string `default`, which is the default setting, the ODC resources are requested automatically according to the setting in *# of EPNs*. Otherwise an ODC resource request may be inserted manually. E.g. `{"zone": "online", "n": "10"}` will request 10 nodes from the `online` zone, `[ {"zone": "online", "n": "10"}, {"zone": "online-calib", "n": "1"} ]` will request 1 node from the zone +- **Data Distribution mode** (default: `physics`): By default physics should be used. Other modes are needed for special cases. Refer to the EPN experts for details. +- **TF Builder mode** (default: `processing`): This specifies the DataDistribution TfBuilder mode. The following 4 modes are supported, the default is `processing` and for additional raw TF writing `processing-disk` should be used. Note in the cases `discard` and `disk` the *topology library file* `production/no-processing.desc` and the *workflow name* `no-processing` must be used. - **discard**: TfBuilder builds the time frame on the EPN but discards it immediate without storing it or running any further processing. - **disk**: The raw time frame is stored to disk, no processing. - **processing**: Time frames are built and passed to DPL for processing. The raw time frame is not stored. The CTF may be stored depending on the DPL workflow configuration (see *Workflow parameters*). - **processing-disk**: Combination of `disk` and `processing`: Time frames are built, raw TFs are stored to disk, DPL processing is active. -- **Topology description library file**: Selects the file in the O2DataProcessing repository with the topology description for the partition. -- **Workflow name**: Selects the *workflow name* to use inside the *topology library file*. See [here](../README.md) for details. +- **Topology description library file** (default: `production/production.desc`): Selects the file in the O2DataProcessing repository with the topology description for the partition. By default the GUI uses the default production workflow. +- **Workflow name** (default: `synchronous-workflow-1numa`): Selects the *workflow name* to use inside the *topology library file*. See [here](../README.md) for details. There are 2 default workflows: + - `synchronous-workflow-1numa`: Default production workflow using 4 GPUs and only 1 NUMA domain on the EPN. This provides less processing power, but the startup is faster, so it is currently used as default. + - `synchronous-workflow`: Production workflow using all 8 GPUs and both NUMA domains of the EPN. Provides the full processing power but has significantly longer start of run time, thus it is currently not used by default. Will be needed for Pb-Pb. - **Detector list (Global)**: Comma-separated list of the detectors used for processing in the DPL workflow. If this field is set to the string `default`, which is the default setting, the list is auto-generated by AliECS from the detectors in the partition. If this list contains detectors not in the partition, the synchronous reconstruction processes for such detectors will be started, but they will only process empty dummy data, which can be used for tests. If the list contains less detectors than are in the partition, processing for missing detectors is disabled completely. In case the *TF Builder mode* is set to `disk` or `processing-disk`, raw TFs for such detectors would still be stored, but such detectors would miss in the CTF. The abbreviation `ALL` may be used for all ALICE detectors (not only those in the partition). - **Detector list (QC)**: Comma-separated list of detectors to run QC for, if the workflow parameter `QC` is set (see below). They keywords `default` and `ALL` work in the same way as for *Detector list (Global)*. A detector not present in *Detector list (Global)* will not run any processing and thus also no EPN QC, even if present in this list. - **Detector list (Calibration)**: Comma-separated list of detectors to run calibration for, if the workflow parameter `CALIB` is set (see below). Works in exactly the same way as *Detector list (QC)*. From 1c1744435f571e12068b236face8dab250ee9549 Mon Sep 17 00:00:00 2001 From: shahoian Date: Fri, 12 Nov 2021 17:41:56 +0100 Subject: [PATCH 214/236] sync dpl-workflow.sh --- production/dpl-workflow.sh | 178 ++++++++++++++++++------------------- 1 file changed, 88 insertions(+), 90 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 4241fb2..4dc0a88 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -8,30 +8,30 @@ source $MYDIR/setenv.sh # --------------------------------------------------------------------------------------------------------------------- #Some additional settings used in this workflow -if [ -z $OPTIMIZED_PARALLEL_ASYNC ]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs -if [ -z $CTF_DICT_DIR ]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries -if [ -z $CTF_METAFILES_DIR ]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing -if [ -z $RECO_NUM_NODES_WORKFLOW ]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers -if [ -z $CTF_MINSIZE ]; then CTF_MINSIZE="2000000000"; fi # accumulate CTFs until file size reached -if [ -z $CTF_MAX_PER_FILE ]; then CTF_MAX_PER_FILE="10000"; fi # but no more than given number of CTFs per file -if [ -z $IS_SIMULATED_DATA ]; then IS_SIMULATED_DATA=1; fi # processing simulated data - -if [ $SYNCMODE == 1 ]; then - if [ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]; then export WORKFLOW_DETECTORS_MATCHING="ITSTPC,ITSTPCTRD,ITSTPCTOF"; fi # Select matchings that are enabled in sync mode +if [[ -z $OPTIMIZED_PARALLEL_ASYNC ]]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN +if [[ -z $CTF_DIR ]]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs +if [[ -z $CTF_DICT_DIR ]]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries +if [[ -z $CTF_METAFILES_DIR ]]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing +if [[ -z $RECO_NUM_NODES_WORKFLOW ]]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers +if [[ -z $CTF_MINSIZE ]]; then CTF_MINSIZE="2000000000"; fi # accumulate CTFs until file size reached +if [[ -z $CTF_MAX_PER_FILE ]]; then CTF_MAX_PER_FILE="10000"; fi # but no more than given number of CTFs per file +if [[ -z $IS_SIMULATED_DATA ]]; then IS_SIMULATED_DATA=1; fi # processing simulated data + +if [[ $SYNCMODE == 1 ]]; then + if [[ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]]; then export WORKFLOW_DETECTORS_MATCHING="ITSTPC,ITSTPCTRD,ITSTPCTOF"; fi # Select matchings that are enabled in sync mode else - if [ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]; then export WORKFLOW_DETECTORS_MATCHING="ALL"; fi # All matching / vertexing enabled in async mode + if [[ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]]; then export WORKFLOW_DETECTORS_MATCHING="ALL"; fi # All matching / vertexing enabled in async mode fi workflow_has_parameter CTF && export SAVECTF=1 workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } -[ -z $ITSCLUSDICT ] && ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" -[ -z $MFTCLUSDICT ] && MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" -[ -z $ITS_NOISE ] && ITS_NOISE="${FILEWORKDIR}" -[ -z $MFT_NOISE ] && MFT_NOISE="${FILEWORKDIR}" -[ -z $ITS_STROBE ] && ITS_STROBE="891" -[ -z $MFT_STROBE ] && MFT_STROBE="198" +[[ -z $ITSCLUSDICT ]] && ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" +[[ -z $MFTCLUSDICT ]] && MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" +[[ -z $ITS_NOISE ]] && ITS_NOISE="${FILEWORKDIR}" +[[ -z $MFT_NOISE ]] && MFT_NOISE="${FILEWORKDIR}" +[[ -z $ITS_STROBE ]] && ITS_STROBE="891" +[[ -z $MFT_STROBE ]] && MFT_STROBE="198" MID_FEEID_MAP="$FILEWORKDIR/mid-feeId_mapper.txt" NITSDECTHREADS=2 @@ -53,7 +53,7 @@ has_processing_step() for i in `echo $LIST_OF_GLORECO | sed "s/,/ /g"`; do has_processing_step MATCH_$i && add_comma_separated WORKFLOW_DETECTORS_MATCHING $i # Enable extra matchings requested via WORKFLOW_EXTRA_PROCESSING_STEPS done -if [ $SYNCMODE == 1 ]; then # Add default steps for synchronous mode +if [[ $SYNCMODE == 1 ]]; then # Add default steps for synchronous mode add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ENTROPY_ENCODER else # Add default steps for async mode for i in $LIST_OF_ASYNC_RECO_STEPS; do @@ -64,27 +64,19 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Set general arguments ARGS_ALL="--session ${OVERRIDE_SESSION:-default} --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA --early-forward-policy noraw" -if [ $EPNSYNCMODE == 1 ]; then +if [[ $EPNSYNCMODE == 1 ]]; then ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 15" -elif [ "0$ENABLE_METRICS" != "01" ]; then +elif [[ "0$ENABLE_METRICS" != "01" ]]; then ARGS_ALL+=" --monitoring-backend no-op://" fi -if [ $EXTINPUT == 1 ] || [ $NUMAGPUIDS == 1 ]; then - ARGS_ALL+=" --no-cleanup" -fi -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -if [ $NUMAGPUIDS != 0 ]; then - ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" -fi -if [ $GPUTYPE != "CPU" ] || [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then - ARGS_ALL+=" --shm-mlock-segment-on-creation 1" -fi +( [[ $EXTINPUT == 1 ]] || [[ $NUMAGPUIDS == 1 ]] ) && ARGS_ALL+=" --no-cleanup" +( [[ $GPUTYPE != "CPU" ]] || [[ $OPTIMIZED_PARALLEL_ASYNC != 0 ]] ) && ARGS_ALL+=" --shm-mlock-segment-on-creation 1" +[[ $SHMTHROW == 0 ]] && ARGS_ALL+=" --shm-throw-bad-alloc 0" +[[ $NORATELOG == 1 ]] && ARGS_ALL+=" --fairmq-rate-logging 0" +[[ $NUMAGPUIDS != 0 ]] && ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" +[[ ! -z $TIMEFRAME_RATE_LIMIT ]] && [[ $TIMEFRAME_RATE_LIMIT != 0 ]] && ARGS_ALL+=" --timeframes-rate-limit $TIMEFRAME_RATE_LIMIT --timeframes-rate-limit-ipcid $NUMAID" + ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" # --------------------------------------------------------------------------------------------------------------------- @@ -105,32 +97,32 @@ EVE_CONFIG=" --jsons-folder $EDJSONS_DIR" MIDDEC_CONFIG= EMCRAW2C_CONFIG= -if [ $SYNCMODE == 1 ]; then - if [ $BEAMTYPE == "PbPb" ]; then +if [[ $SYNCMODE == 1 ]]; then + if [[ $BEAMTYPE == "PbPb" ]]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" - [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode sync" - elif [ $BEAMTYPE == "pp" ]; then + [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode sync" + elif [[ $BEAMTYPE == "pp" ]]; then ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=-1;fastMultConfig.cutMultClusHigh=-1;fastMultConfig.cutMultVtxHigh=-1;ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" - [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode sync" - elif [ $BEAMTYPE == "cosmic" ]; then - [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode cosmics" + [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode sync" + elif [[ $BEAMTYPE == "cosmic" ]]; then + [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode cosmics" else - [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode sync" + [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode sync" fi GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" TRD_CONFIG+=" --filter-trigrec" TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" else - if [ $BEAMTYPE == "PbPb" ]; then - [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode async" - elif [ $BEAMTYPE == "pp" ]; then - ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=1;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" - [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode async" - elif [ $BEAMTYPE == "cosmic" ]; then - [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode cosmics" + if [[ $BEAMTYPE == "PbPb" ]]; then + [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode async" + elif [[ $BEAMTYPE == "pp" ]]; then + ITS_CONFIG_KEY+="ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" + [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode async" + elif [[ $BEAMTYPE == "cosmic" ]]; then + [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode cosmics" else - [ -z ${ITS_CONFIG+x} ] && ITS_CONFIG=" --tracking-mode async" + [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode async" fi fi @@ -139,18 +131,18 @@ has_processing_step ENTROPY_ENCODER && has_detector_ctf TPC && GPU_OUTPUT+=",com has_detector_flp_processing CPV && CPV_INPUT=digits ! has_detector_flp_processing TOF && TOF_CONFIG+=" --ignore-dist-stf" -if [ $EPNSYNCMODE == 1 ]; then +if [[ $EPNSYNCMODE == 1 ]]; then EVE_CONFIG+=" --eve-dds-collection-index 0" ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE;ITSAlpideParam.roFrameLengthInBC=$ITS_STROBE;MFTAlpideParam.roFrameLengthInBC=$MFT_STROBE;" MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" GPU_CONFIG_KEY+="GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;" # Options for decoding current TRD real raw data (not needed for data converted from MC) - if [ -z $TRD_DECODER_OPTIONS ]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 "; fi - if [ $EXTINPUT == 1 ] && [ $GPUTYPE != "CPU" ] && [ -z "$GPU_NUM_MEM_REG_CALLBACKS" ]; then GPU_NUM_MEM_REG_CALLBACKS=4; fi + if [[ -z $TRD_DECODER_OPTIONS ]]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 "; fi + if [[ $EXTINPUT == 1 ]] && [[ $GPUTYPE != "CPU" ]] && [[ -z "$GPU_NUM_MEM_REG_CALLBACKS" ]]; then GPU_NUM_MEM_REG_CALLBACKS=4; fi fi -if [ $GPUTYPE == "HIP" ]; then - if [ $NUMAID == 0 ] || [ $NUMAGPUIDS == 0 ]; then +if [[ $GPUTYPE == "HIP" ]]; then + if [[ $NUMAID == 0 ]] || [[ $NUMAGPUIDS == 0 ]]; then export TIMESLICEOFFSET=0 else export TIMESLICEOFFSET=$NGPUS @@ -163,18 +155,18 @@ else GPU_CONFIG_KEY+="GPU_proc.deviceNum=-2;" fi -if [ ! -z $GPU_NUM_MEM_REG_CALLBACKS ]; then +if [[ ! -z $GPU_NUM_MEM_REG_CALLBACKS ]]; then GPU_CONFIG+=" --expected-region-callbacks $GPU_NUM_MEM_REG_CALLBACKS" fi -if [ $GPUTYPE != "CPU" ]; then +if [[ $GPUTYPE != "CPU" ]]; then GPU_CONFIG_KEY+="GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;" - if [ $HOSTMEMSIZE == "0" ]; then + if [[ $HOSTMEMSIZE == "0" ]]; then HOSTMEMSIZE=$(( 1 << 30 )) fi fi -if [ $HOSTMEMSIZE != "0" ]; then +if [[ $HOSTMEMSIZE != "0" ]]; then GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" fi @@ -182,7 +174,7 @@ if ! has_detector_reco TOF; then TOF_OUTPUT=digits fi -[ $IS_SIMULATED_DATA == "1" ] && EMCRAW2C_CONFIG+=" --no-mergeHGLG" +[[ $IS_SIMULATED_DATA == "1" ]] && EMCRAW2C_CONFIG+=" --no-mergeHGLG" # --------------------------------------------------------------------------------------------------------------------- # Assemble matching sources @@ -203,7 +195,9 @@ for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do fi done PVERTEX_CONFIG="--vertexing-sources $TRACK_SOURCES --vertex-track-matching-sources $TRACK_SOURCES" -has_detector_reco FT0 && PVERTEX_CONFIG+=" --validate-with-ft0" + +# this option requires well calibrated timing beween different detectors, at the moment suppress it +#has_detector_reco FT0 && PVERTEX_CONFIG+=" --validate-with-ft0" # --------------------------------------------------------------------------------------------------------------------- # Process multiplicities @@ -227,13 +221,13 @@ math_max() } N_TPCTRK=$NGPUS -if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then +if [[ $OPTIMIZED_PARALLEL_ASYNC != 0 ]]; then # Tuned multiplicities for async Pb-Pb processing - if [ $SYNCMODE == "1" ]; then echo "Must not use OPTIMIZED_PARALLEL_ASYNC with GPU or SYNCMODE" 1>&2; exit 1; fi - if [ $NUMAGPUIDS == 1 ]; then N_NUMAFACTOR=1; else N_NUMAFACTOR=2; fi + if [[ $SYNCMODE == "1" ]]; then echo "Must not use OPTIMIZED_PARALLEL_ASYNC with GPU or SYNCMODE" 1>&2; exit 1; fi + if [[ $NUMAGPUIDS == 1 ]]; then N_NUMAFACTOR=1; else N_NUMAFACTOR=2; fi GPU_CONFIG_KEY+="GPU_proc.ompThreads=6;" TRD_CONFIG_KEY+="GPU_proc.ompThreads=2;" - if [ $GPUTYPE == "CPU" ]; then + if [[ $GPUTYPE == "CPU" ]]; then N_TPCENTDEC=$((2 * $N_NUMAFACTOR)) N_MFTTRK=$((3 * $N_NUMAFACTOR)) N_ITSTRK=$((3 * $N_NUMAFACTOR)) @@ -249,7 +243,7 @@ if [ $OPTIMIZED_PARALLEL_ASYNC != 0 ]; then N_MCHTRK=$(math_max $((2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) N_TOFMATCH=$(math_max $((20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) fi -elif [ $EPNPIPELINES != 0 ]; then +elif [[ $EPNPIPELINES != 0 ]]; then # Tuned multiplicities for sync Pb-Pb processing N_TPCENT=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) N_TPCITS=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) @@ -259,7 +253,7 @@ elif [ $EPNPIPELINES != 0 ]; then N_TRDENT=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) N_TRDTRK=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) N_TPCRAWDEC=$(math_max $((12 * $EPNPIPELINES * $NGPUS / 4)) 1) - if [ $GPUTYPE == "CPU" ]; then + if [[ $GPUTYPE == "CPU" ]]; then N_TPCTRK=8 GPU_CONFIG_KEY+="GPU_proc.ompThreads=4;" fi @@ -293,21 +287,21 @@ add_W() # Add binarry to workflow command USAGE: add_W [BINARY] [COMMAND_LINE_OP # --------------------------------------------------------------------------------------------------------------------- # Input workflow -if [ $CTFINPUT == 1 ]; then +if [[ $CTFINPUT == 1 ]]; then GPU_INPUT=compressed-clusters-ctf TOF_INPUT=digits CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root 2> /dev/null | head -n1` [[ -z $CTFName && $WORKFLOWMODE == "print" ]] && CTFName='$CTFName' [[ ! -z $INPUT_FILE_LIST ]] && CTFName=$INPUT_FILE_LIST - if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi + if [[ $NTIMEFRAMES == -1 ]]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi add_W o2-ctf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --ctf-input ${CTFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline $(get_N tpc-entropy-decoder TPC REST TPCENTDEC)" -elif [ $RAWTFINPUT == 1 ]; then +elif [[ $RAWTFINPUT == 1 ]]; then TFName=`ls -t $FILEWORKDIR/o2_*.tf 2> /dev/null | head -n1` [[ -z $TFName && $WORKFLOWMODE == "print" ]] && TFName='$TFName' [[ ! -z $INPUT_FILE_LIST ]] && TFName=$INPUT_FILE_LIST - if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi + if [[ $NTIMEFRAMES == -1 ]]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi add_W o2-raw-tf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --input-data ${TFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --onlyDet $WORKFLOW_DETECTORS" -elif [ $EXTINPUT == 1 ]; then +elif [[ $EXTINPUT == 1 ]]; then PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=$EPNSYNCMODE" PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0" PROXY_IN_N=0 @@ -337,16 +331,20 @@ elif [ $EXTINPUT == 1 ]; then PROXY_INSPEC+=";$PROXY_INNAME:$i/$j" done done - add_W o2-dpl-raw-proxy "--dataspec \"$PROXY_INSPEC\" --channel-config \"$PROXY_CHANNEL\"" "" 0 + [[ ! -z $TIMEFRAME_RATE_LIMIT ]] && [[ $TIMEFRAME_RATE_LIMIT != 0 ]] && PROXY_CHANNEL+=";name=metric-feedback,type=pull,method=connect,address=ipc://@metric-feedback-$NUMAID,transport=shmem,rateLogging=0" + add_W o2-dpl-raw-proxy "--dataspec \"$PROXY_INSPEC\" --readout-proxy \"--channel-config \\\"$PROXY_CHANNEL\\\"\" ${TIMEFRAME_SHM_LIMIT+--timeframes-shm-limit} $TIMEFRAME_SHM_LIMIT" "" 0 else - if [ $NTIMEFRAMES == -1 ]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--loop $NTIMEFRAMES"; fi + if [[ $NTIMEFRAMES == -1 ]]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--loop $NTIMEFRAMES"; fi add_W o2-raw-file-reader-workflow "--detect-tf0 --delay $TFDELAY $NTIMEFRAMES_CMD --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg" "HBFUtils.nHBFPerTF=$NHBPERTF" fi +# if root output is requested, record info of processed TFs DataHeader for replay of root files +[[ -z "$DISABLE_ROOT_OUTPUT" ]] && add_W o2-tfidinfo-writer-workflow + # --------------------------------------------------------------------------------------------------------------------- # Raw decoder workflows - disabled in async mode -if [ $CTFINPUT == 0 ]; then - if has_detector TPC && [ $EPNSYNCMODE == 1 ]; then +if [[ $CTFINPUT == 0 ]]; then + if has_detector TPC && [[ $EPNSYNCMODE == 1 ]]; then GPU_INPUT=zsonthefly add_W o2-tpc-raw-to-digits-workflow "--input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline $(get_N tpc-raw-to-digits-0 TPC RAW TPCRAWDEC)" add_W o2-tpc-reco-workflow "--input-type digitizer --output-type zsraw,disable-writer --pipeline $(get_N tpc-zsEncoder TPC RAW TPCRAWDEC)" @@ -376,8 +374,8 @@ has_detector_reco ITS && add_W o2-its-reco-workflow "--trackerCA $ITS_CONFIG $DI has_detectors_reco ITS TPC && has_detector_matching ITSTPC && add_W o2-tpcits-match-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS)" "$ITSTPC_EXTRA_CONFIG;$ITSMFT_FILES" has_detector_reco FT0 && add_W o2-ft0-reco-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST)" has_detector_reco TRD && add_W o2-trd-tracklet-transformer "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK)" -has_detectors_reco TRD TPC ITS && [ ! -z "$TRD_SOURCES" ] && add_W o2-trd-global-tracking "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES" "$TRD_CONFIG_KEY;$ITSMFT_FILES" -has_detectors_reco TOF TRD TPC ITS && [ ! -z "$TOF_SOURCES" ] && add_W o2-tof-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH)" "$ITSMFT_FILES" +has_detectors_reco TRD TPC ITS && [[ ! -z "$TRD_SOURCES" ]] && add_W o2-trd-global-tracking "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES" "$TRD_CONFIG_KEY;$ITSMFT_FILES" +has_detectors_reco TOF TRD TPC ITS && [[ ! -z "$TOF_SOURCES" ]] && add_W o2-tof-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH)" "$ITSMFT_FILES" # --------------------------------------------------------------------------------------------------------------------- # Reconstruction workflows normally active only in async mode in async mode ($LIST_OF_ASYNC_RECO_STEPS), but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS @@ -389,14 +387,14 @@ has_detector FV0 && has_processing_step FV0_RECO && add_W o2-fv0-reco-workflow " has_detector ZDC && has_processing_step ZDC_RECO && add_W o2-zdc-digits-reco "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC" has_detectors_reco MFT MCH && has_detector_matching MFTMCH && add_W o2-globalfwd-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST)" -if [ $BEAMTYPE != "cosmic" ]; then +if [[ $BEAMTYPE != "cosmic" ]]; then has_detectors_reco ITS && has_detector_matching PRIMVTX && add_W o2-primary-vertexing-workflow "$DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST)" "$PVERTEX_EXTRA_CONFIG" has_detectors_reco ITS && has_detector_matching SECVTX && add_W o2-secondary-vertexing-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $TRACK_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST)" "$SVERTEX_EXTRA_CONFIG" fi # --------------------------------------------------------------------------------------------------------------------- # Entropy encoding / ctf creation workflows - disabled in async mode -if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ] && [ $WORKFLOW_DETECTORS_CTF != "NONE" ]; then +if has_processing_step ENTROPY_ENCODER && [[ ! -z "$WORKFLOW_DETECTORS_CTF" ]] && [[ $WORKFLOW_DETECTORS_CTF != "NONE" ]]; then # Entropy encoder workflows has_detector_ctf MFT && add_W o2-itsmft-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MFT_ENC_MEMFACT:-1.5} --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF)" has_detector_ctf FT0 && add_W o2-ft0-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FT0_ENC_MEMFACT:-1.5} --pipeline $(get_N ft0-entropy-encoder FT0 CTF)" @@ -424,11 +422,11 @@ if has_processing_step ENTROPY_ENCODER && [ ! -z "$WORKFLOW_DETECTORS_CTF" ] && rm -f $CTF_DICT fi CTF_OUTPUT_TYPE="none" - if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi - if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi - if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi + if [[ $CREATECTFDICT == 1 ]] && [[ $SAVECTF == 1 ]]; then CTF_OUTPUT_TYPE="both"; fi + if [[ $CREATECTFDICT == 1 ]] && [[ $SAVECTF == 0 ]]; then CTF_OUTPUT_TYPE="dict"; fi + if [[ $CREATECTFDICT == 0 ]] && [[ $SAVECTF == 1 ]]; then CTF_OUTPUT_TYPE="ctf"; fi CONFIG_CTF="--output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --max-ctf-per-file ${CTF_MAX_PER_FILE} --onlyDet $WORKFLOW_DETECTORS_CTF --append-det-to-period $CTF_MAXDETEXT --meta-output-dir $CTF_METAFILES_DIR" - if [ $CREATECTFDICT == 1 ] && [ $EXTINPUT == 1 ]; then CONFIG_CTF+=" --save-dict-after $SAVE_CTFDICT_NTIMEFRAMES"; fi + if [[ $CREATECTFDICT == 1 ]] && [[ $EXTINPUT == 1 ]]; then CONFIG_CTF+=" --save-dict-after $SAVE_CTFDICT_NTIMEFRAMES"; fi add_W o2-ctf-writer-workflow "$CONFIG_CTF" fi @@ -439,13 +437,13 @@ workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS # --------------------------------------------------------------------------------------------------------------------- # Event display # RS this is a temporary setting -[ -z "$ED_TRACKS" ] && ED_TRACKS=$TRACK_SOURCES -[ -z "$ED_CLUSTERS" ] && ED_CLUSTERS=$TRACK_SOURCES -workflow_has_parameter EVENT_DISPLAY && [ $NUMAID == 0 ] && add_W o2-eve-display "--display-tracks $ED_TRACKS --display-clusters $ED_CLUSTERS $EVE_CONFIG $DISABLE_MC" "$ITSMFT_FILES" +[[ -z "$ED_TRACKS" ]] && ED_TRACKS=$TRACK_SOURCES +[[ -z "$ED_CLUSTERS" ]] && ED_CLUSTERS=$TRACK_SOURCES +workflow_has_parameter EVENT_DISPLAY && [[ $NUMAID == 0 ]] && add_W o2-eve-display "--display-tracks $ED_TRACKS --display-clusters $ED_CLUSTERS $EVE_CONFIG $DISABLE_MC" "$ITSMFT_FILES" # --------------------------------------------------------------------------------------------------------------------- # AOD -[ -z "$AOD_INPUT" ] && AOD_INPUT=$TRACK_SOURCES +[[ -z "$AOD_INPUT" ]] && AOD_INPUT=$TRACK_SOURCES workflow_has_parameter AOD && add_W o2-aod-producer-workflow "--info-sources $AOD_INPUT --disable-root-input --aod-writer-keep dangling --aod-writer-resfile "AO2D" --aod-writer-resmode UPDATE $DISABLE_MC" # --------------------------------------------------------------------------------------------------------------------- From 5bbc14792a867d1ae5eb422d8a9e1b1dc119e0de Mon Sep 17 00:00:00 2001 From: shahoian Date: Fri, 12 Nov 2021 17:38:55 +0100 Subject: [PATCH 215/236] sync private directory --- testing/private/shahoian/runTF_PB.sh | 5 ++++- testing/private/shahoian/workflows_PB.desc | 8 ++++--- testing/private/shahoian/workflows_dpl.desc | 21 +++++++++++++++++-- tools/datadistribution_workflows/dd-disk.xml | 2 +- .../dd-processing-disk.xml | 2 +- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/testing/private/shahoian/runTF_PB.sh b/testing/private/shahoian/runTF_PB.sh index 953ddcd..dcd495f 100755 --- a/testing/private/shahoian/runTF_PB.sh +++ b/testing/private/shahoian/runTF_PB.sh @@ -35,7 +35,7 @@ export MULTIPLICITY_FACTOR_RAWDECODERS=1 export MULTIPLICITY_FACTOR_CTFENCODERS=1 export MULTIPLICITY_FACTOR_REST=1 -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=1.5" +export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=1.5;GPU_global.synchronousProcessing=0" export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" export PVERTEX_EXTRA_CONFIG="pvertexer.nSigmaTimeCut=100;pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 @@ -53,6 +53,9 @@ export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF,FT0,FV0,FDD" #export WORKFLOW_DETECTORS_MATCHING= export ARGS_EXTRA_PROCESS_o2_tpcits_match_workflow=" --ignore-bc-check " +export ED_TRACKS="ITS,TPC,ITS-TPC,ITS-TPC-TOF,TPC-TOF,MFT" +export ED_CLUSTERS="ITS,TPC,TOF,MFT" + for wf in "$@" do export GEN_TOPO_WORKFLOW_NAME=$wf diff --git a/testing/private/shahoian/workflows_PB.desc b/testing/private/shahoian/workflows_PB.desc index 23c98af..a92a31e 100644 --- a/testing/private/shahoian/workflows_PB.desc +++ b/testing/private/shahoian/workflows_PB.desc @@ -7,9 +7,9 @@ async-ED-75: "O2PDPSuite" reco,75,75,"EXTINPUT=0 SYNCMODE=0 CTFINPUT=1 BEAMTYPE=pp WORKFLOW_PARAMETERS=CTF,CPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=3 production/dpl-workflow.sh" -mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -ft0-fv0-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0 WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -ft0-fv0-fdd-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" +mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=MFT ED_CLUSTERS=MFT production/dpl-workflow.sh" +ft0-fv0-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0 WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=MFT ED_CLUSTERS=MFT production/dpl-workflow.sh" +ft0-fv0-fdd-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=MFT ED_CLUSTERS=MFT production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" @@ -48,3 +48,5 @@ its-mftTR-tpc-trd-tof-mid-mch-ft0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: mch-TF-CTF-QC-mch-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MCH WORKFLOW_DETECTORS_QC=MCH production/dpl-workflow.sh" its-mftTR-tpcCPU-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" + +its-mftTR-tpcCPU-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc index e2b18d0..e0e4804 100644 --- a/testing/private/shahoian/workflows_dpl.desc +++ b/testing/private/shahoian/workflows_dpl.desc @@ -3,11 +3,21 @@ tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" tof-ctf-qcTOF-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh" its-ctf-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS production/dpl-workflow.sh" -mft-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" + + its-ctf-qcITSMRG-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS QC_HOST=epn QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json production/dpl-workflow.sh" -mftHR-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" +mftHR891bc-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=891 WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" +mftHR198bc-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=198 WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" +mftHR891bcNM-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=891 CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow=\"MFTClustererParam.maxBCDiffToMaskBias=-100;\" WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" +mftHR198bcNM-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=198 CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow=\"MFTClustererParam.maxBCDiffToMaskBias=-100;\" WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" + +mft891bc-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=891 WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" +mft198bc-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=198 WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" +mft891bcNM-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=891 CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow=\"MFTClustererParam.maxBCDiffToMaskBias=-100;\" WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" +mft198bcNM-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=198 CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow=\"MFTClustererParam.maxBCDiffToMaskBias=-100;\" WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" + its-mft-tpc-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" mft-tpc-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" @@ -223,6 +233,7 @@ ctf_itsCOSM-mftTR-tpcCPU-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmi #--------------- itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" its-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" @@ -232,3 +243,9 @@ its-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-20: "O2PD its-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-110: "O2PDPSuite" reco,110,110,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-110: "O2PDPSuite" reco,110,110,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-mft-tpc-tof-mid-mch-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" + +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-mft-tpc-tof-mid-mch-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" +itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-mft-tpc-tof-mid-mch-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" diff --git a/tools/datadistribution_workflows/dd-disk.xml b/tools/datadistribution_workflows/dd-disk.xml index 902c82f..b7d427a 100644 --- a/tools/datadistribution_workflows/dd-disk.xml +++ b/tools/datadistribution_workflows/dd-disk.xml @@ -1,7 +1,7 @@ - /home/epn/odc/tfbuilder.sh disk1G + /home/epn/odc/tfbuilder.sh disk2G TfBuilderRequirement diff --git a/tools/datadistribution_workflows/dd-processing-disk.xml b/tools/datadistribution_workflows/dd-processing-disk.xml index b6e7c53..0f0ddd5 100644 --- a/tools/datadistribution_workflows/dd-processing-disk.xml +++ b/tools/datadistribution_workflows/dd-processing-disk.xml @@ -1,7 +1,7 @@ - /home/epn/odc/tfbuilder.sh disk1G_data + /home/epn/odc/tfbuilder.sh disk2G_data TfBuilderRequirement From 79be7b40377396a11f451774e71cf8adbf6a4d56 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 14 Nov 2021 10:07:38 +0100 Subject: [PATCH 216/236] Add QC_JSON_FROM_OUTSIDE option to qc-workflow.sh, and some cleanup --- production/qc-workflow.sh | 113 +++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index ded7e2f..f9f37ba 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -1,72 +1,73 @@ #!/bin/bash -[ -z "$QC_JSON_TPC" ] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json -[ -z "$QC_JSON_ITS" ] && QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json -[ -z "$QC_JSON_MFT" ] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-cluster.json -[ -z "$QC_JSON_TOF" ] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json -[ -z "$QC_JSON_FDD" ] && QC_JSON_FDD=/home/afurs/O2DataProcessing/testing/detectors/FDD/fdd-digits-ds.json -[ -z "$QC_JSON_FT0" ] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json -[ -z "$QC_JSON_FV0" ] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json -[ -z "$QC_JSON_EMC" ] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json -[ -z "$QC_JSON_MCH" ] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json -[ -z "$QC_JSON_MID" ] && QC_JSON_MID=/home/dstocco/config/mid-qcmn-epn-digits.json - -[ -z "$QC_JSON_PRIMVTX" ] && QC_JSON_PRIMVTX=/home/shahoian/jsons/vertexing-qc.json - - -[ -z "$QC_HOST" ] && QC_HOST=localhost - -if [ -z "$WORKFLOW" ] || [ -z "$MYDIR" ]; then +if [[ -z "$WORKFLOW" ]] || [[ -z "$MYDIR" ]]; then echo This script must be called from the dpl-workflow.sh and not standalone 1>&2 exit 1 fi -if [ -z "$GEN_TOPO_WORKDIR" ]; then - echo This script must be run via the gen_topo scripts, or a GEN_TOPO_WORKDIR must be provided where merged JSONS are stored 1>&2 - exit 1 -fi +if [[ -z $QC_JSON_FROM_OUTSIDE ]]; then + [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json + [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json + [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-cluster.json + [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json + [[ -z "$QC_JSON_FDD" ]] && QC_JSON_FDD=/home/afurs/O2DataProcessing/testing/detectors/FDD/fdd-digits-ds.json + [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json + [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json + [[ -z "$QC_JSON_EMC" ]] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json + [[ -z "$QC_JSON_MCH" ]] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json + [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=/home/dstocco/config/mid-qcmn-epn-digits.json + [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=/home/shahoian/jsons/vertexing-qc.json -JSON_FILES= -OUTPUT_SUFFIX= -for i in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do - DET_JSON_FILE="QC_JSON_$i" - if has_detector_qc $i && [ ! -z "${!DET_JSON_FILE}" ]; then - JSON_FILES+=" ${!DET_JSON_FILE}" - OUTPUT_SUFFIX+="-$i" + if [[ -z "$GEN_TOPO_WORKDIR" ]]; then + echo This script must be run via the gen_topo scripts, or a GEN_TOPO_WORKDIR must be provided where merged JSONS are stored 1>&2 + exit 1 fi -done -# matching / vertexing QC -for i in `echo $LIST_OF_GLORECO | sed "s/,/ /g"`; do - GLO_JSON_FILE="QC_JSON_$i" - if has_detector_matching $i && has_matching_qc $i && [ ! -z "${!GLO_JSON_FILE}" ]; then - JSON_FILES+=" ${!GLO_JSON_FILE}" - OUTPUT_SUFFIX+="-$i" - fi -done + JSON_FILES= + OUTPUT_SUFFIX= + for i in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do + DET_JSON_FILE="QC_JSON_$i" + if has_detector_qc $i && [ ! -z "${!DET_JSON_FILE}" ]; then + JSON_FILES+=" ${!DET_JSON_FILE}" + OUTPUT_SUFFIX+="-$i" + fi + done -# arbitrary extra QC -if [ ! -z "$QC_JSON_EXTRA" ]; then - JSON_FILES+=" ${QC_JSON_EXTRA}" - OUTPUT_SUFFIX+="-EXTRA" -fi + # matching / vertexing QC + for i in `echo $LIST_OF_GLORECO | sed "s/,/ /g"`; do + GLO_JSON_FILE="QC_JSON_$i" + if has_detector_matching $i && has_matching_qc $i && [ ! -z "${!GLO_JSON_FILE}" ]; then + JSON_FILES+=" ${!GLO_JSON_FILE}" + OUTPUT_SUFFIX+="-$i" + fi + done -if [ ! -z "$JSON_FILES" ]; then - mkdir -p $GEN_TOPO_WORKDIR/json_cache - if [ "0$GEN_TOPO_ONTHEFLY" == "01" ]; then - find $GEN_TOPO_WORKDIR/json_cache/ -maxdepth 1 -type f -mtime +30 | xargs rm -f - fi - MERGED_JSON_FILENAME=$GEN_TOPO_WORKDIR/json_cache/`date +%Y%m%d-%H%M%S`-$$-$RANDOM-$OUTPUT_SUFFIX.json - jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' $MYDIR/qc_global.json $JSON_FILES > $MERGED_JSON_FILENAME - if [ $? != 0 ]; then - echo Merging QC workflow with JSON files $JSON_FILES failed 1>&2 - exit 1 + # arbitrary extra QC + if [[ ! -z "$QC_JSON_EXTRA" ]]; then + JSON_FILES+=" ${QC_JSON_EXTRA}" + OUTPUT_SUFFIX+="-EXTRA" fi - MERGED_JSON_FILENAME=`realpath $MERGED_JSON_FILENAME` - if [[ "0$QC_REDIRECT_MERGER_TO_LOCALHOST" == "01" ]]; then - sed -i -E 's/( *)"remoteMachine" *: *".*"(,|) *$/\1"remoteMachine": "127.0.0.1"\2/' $MERGED_JSON_FILENAME + if [[ ! -z "$JSON_FILES" ]]; then + mkdir -p $GEN_TOPO_WORKDIR/json_cache + if [[ "0$GEN_TOPO_ONTHEFLY" == "01" ]]; then + find $GEN_TOPO_WORKDIR/json_cache/ -maxdepth 1 -type f -mtime +30 | xargs rm -f + fi + MERGED_JSON_FILENAME=$GEN_TOPO_WORKDIR/json_cache/`date +%Y%m%d-%H%M%S`-$$-$RANDOM-$OUTPUT_SUFFIX.json + jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' $MYDIR/qc_global.json $JSON_FILES > $MERGED_JSON_FILENAME + if [[ $? != 0 ]]; then + echo Merging QC workflow with JSON files $JSON_FILES failed 1>&2 + exit 1 + fi + MERGED_JSON_FILENAME=`realpath $MERGED_JSON_FILENAME` + + if [[ "0$QC_REDIRECT_MERGER_TO_LOCALHOST" == "01" ]]; then + sed -i -E 's/( *)"remoteMachine" *: *".*"(,|) *$/\1"remoteMachine": "127.0.0.1"\2/' $MERGED_JSON_FILENAME + fi + QC_JSON_FROM_OUTSIDE="$MERGED_JSON_FILENAME" fi +fi - add_W o2-qc "--config json://$MERGED_JSON_FILENAME --local --host $QC_HOST" "" 0 +if [[ ! -z "$QC_JSON_FROM_OUTSIDE" ]]; then + add_W o2-qc "--config json://$QC_JSON_FROM_OUTSIDE ${QC_CONFIG_PARAM:---local --host ${QC_HOST:-localhost}}" "" 0 fi From 85f613f78790c392c810d5ead3920c6aafb3ea8c Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 14 Nov 2021 10:28:06 +0100 Subject: [PATCH 217/236] Add DIGITINPUT default, to be used later in dpl-workflow.sh --- common/setenv.sh | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 637bd0b..a897ae0 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -36,6 +36,7 @@ if [ -z "$NUMAID" ]; then export NUMAID=0; fi # SHM seg if [ -z "$NUMAGPUIDS" ]; then export NUMAGPUIDS=0; fi # NUMAID-aware GPU id selection if [ -z "$CTFINPUT" ]; then export CTFINPUT=0; fi # Read input from CTF using o2-ctf-reader (incompatible to EXTINPUT=1 and RAWTFINPUT) if [ -z "$RAWTFINPUT" ]; then export RAWTFINPUT=0; fi # Read input from raw TFs using o2-raw-tf-reader (incompatible to EXTINPUT=1 and CTFINPUT=1) +if [ -z "$DIGITINPUT" ]; then export DIGITINPUT=0; fi # Read input from digit files (incompatible to EXTINPUT / CTFINPUT / RAWTFINPUT) if [ -z "$NHBPERTF" ]; then export NHBPERTF=128; fi # Time frame length (in HBF) if [ -z "$GLOBALDPLOPT" ]; then export GLOBALDPLOPT=; fi # Global DPL workflow options appended at the end if [ -z "$SEVERITY" ]; then export SEVERITY="info"; fi # Log verbosity @@ -73,16 +74,8 @@ if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then export MULTIPLICITY_FACTOR_REST=1; f [ -z "${DISABLE_MC+x}" ] && DISABLE_MC="--disable-mc" [ -z "${DISABLE_ROOT_OUTPUT+x}" ] && DISABLE_ROOT_OUTPUT="--disable-root-output" -if [ $EXTINPUT == 1 ] && [ $CTFINPUT == 1 ]; then - echo EXTINPUT and CTFINPUT are incompatible - exit 1 -fi -if [ $EXTINPUT == 1 ] && [ $RAWTFINPUT == 1 ]; then - echo EXTINPUT and RAWTFINPUT are incompatible - exit 1 -fi -if [ $CTFINPUT == 1 ] && [ $RAWTFINPUT == 1 ]; then - echo CTFINPUT and RAWTFINPUT are incompatible +if [[ $(( $EXTINPUT + $CTFINPUT + $RAWTFINPUT + $DIGITINPUT )) -ge 2 ]]; then + echo Only one of EXTINPUT / CTFINPUT / RAWTFINPUT / DIGITINPUT must be set exit 1 fi if [ $SAVECTF == 1 ] && [ $CTFINPUT == 1 ]; then From 4031af9173a22df5207cd90ce2aaaa14e91eabe2 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 14 Nov 2021 10:29:23 +0100 Subject: [PATCH 218/236] Fix error messages in parser --- tools/parse | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/parse b/tools/parse index 6906e60..41d6f39 100755 --- a/tools/parse +++ b/tools/parse @@ -12,11 +12,11 @@ if len(sys.argv) != 4: exit(1) if not "FILEWORKDIR" in os.environ: - print("\$FILEWORKDIR env variable missing") + print("$FILEWORKDIR env variable missing") exit(1) if not "DDWORKFLOW" in os.environ and not "DDMODE" in os.environ: - print("Need either \$DDWORKFLOW or \$DDMODE env variable") + print("Need either $DDWORKFLOW or $DDMODE env variable") exit(1) NO_PROCESSING_MODE=0 From 7bad1174d44fa925bd1ba967070fcca1ae235d22 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sun, 14 Nov 2021 10:46:18 +0100 Subject: [PATCH 219/236] Update documentation --- aliecs_documentation/README.md | 187 +++++++++++++++++---------------- 1 file changed, 97 insertions(+), 90 deletions(-) diff --git a/aliecs_documentation/README.md b/aliecs_documentation/README.md index 151120f..106a25b 100644 --- a/aliecs_documentation/README.md +++ b/aliecs_documentation/README.md @@ -1,90 +1,97 @@ -# AliECS PDP Workflow configuration documentation. -Note that this documentation is only for the AliECS GUI, more detailed documentation for the PDP workflows themselves can be found [here](../README.md). The PDP Workflow GUI has 2 modes (selectable as *panel mode*): -- A **shifter mode** for the operator, which has 2 basic settings, for selecting the number of EPN nodes and the workflow or workflow version. -- An **expert mode** which enables detailed manipulation of the exectued workflow. ([details](#expert-panel)) - -The GUI can configure the workflow with 3 different methods: [Manual XML File](#manual-xml-file-configuration-method), [O2DataProcessing path](#o2dataprocessing-path-configuration-method), [O2DataProcessing hash / version](#o2dataprocessing-hash-configuration-method). The method can be selected in the [expert panel](#expert-panel). The 3 methods are detailed in the following: - -
- -# Default workflow and detector standalone tests. -The shifter panel is very simple, and doesn't provide many options to select a workflow. Only the XML file or the path / version of O2DataProcessing can be configured. It will by default always use the production workflow of the `production/production.desc` topology library file. For using a different library file / workflow name in the file, the expert panel must be used. In particular, this means that detectors must currently use the expert panel for runs that do not use the default workflow. - -
- -# Manual XML File configuration method -This configuration method is provided mostly for backward compatibility. Currently this mode is the default for compatibility reasons, since it is used by all old *saved configurations*. The workflow is not generated on the fly, but a pregenerated workflow stored on the EPN farm is used. The following screenshot shows an example of the panel: - -

- -The panel provides the following settings: -- **Topology**: Absolute path to the topology XML file on the EPN's shared home folder. -- **# of EPNs** Number of EPN nodes to allocate from the *online* zone. Please note that this number must match the number specified in the provided XML file. - -
- -# O2DataProcessing path configuration method -This method uses the [O2DataProcessing repository](../) to generate the topology on the fly. No pregenerated files are used. This is the "*new*" way to configure the workflow. This screenshot shows an example of the **shifter** mode, followed by a description of the 2 settings: - -

- -- **O2 Data Processing Path**: Absolute path on the EPN farm to the O2DataProcessing repository to be used. -- **# of EPNs**: Number of EPN nodes to allocate from the *online* zone. Identical to the [manual XML file](#manual-xml-file-configuration-method) case. Since in this case the workflow is generated on the fly, a workflow for the specified number of EPNs is created automatically. - -For all other configuration options see the [expert panel](#expert-panel). - -
- -# O2DataProcessing hash configuration method -This is mostly identical to the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) method. The only difference is that a repository version is specified instead of the path to the repository on the EPN farm. This ensures proper versioning and reproducibility. While the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) method can generate topologies from any privated O2DataProcessing fork on the EPN farm, the **O2DataProcessing hash** method only supports workflows that are checked in into the official [O2DataProcessing](../) repository. The referred version can be either a commit or a tag. Tags will be used for official tagged version of the production workflow, while detectors may use just commit hashes for standalone runs without the need to create / wait for an official tag. This method will become the default method when the workflows have stabilized and do no longer change on a daily basis. In the following screenshot, the *tag* `0.20` is selected: - -

- -- **O2 Data Processing Hash**: Version (*commit hash* or *tag*) in the official O2DataProcessing repository. -- **# of EPNs**: Number of EPN nodes to allocate from the *online* zone. Identical to the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) case. - -For all other configuration options see the [expert panel](#expert-panel). - -
- -# Expert panel -The expert panel provides plenty of additional configuration options for both O2DataProcessing repository configuration methods. Some options are also availble for the manual XML file method. This screenshot shows the expert panel and the default options. The individual options are described below. - -

- -- **# of EPNs** (also available in shifter view): This option configures the number of EPNs used for the partition. To be more precise, it only sets the default of the number of EPNs. Other options (**Resources**, **# of compute nodes**) related to the number of EPN nodes may override the value specified here. If these other options are set to their * default*, this is the only configuration option for the number of EPN nodes. -- **Workflow configuraiton mode**: This option allows to switch between the *Manual XML file* mode, *O2DataProcessing path* mode, and *O2DataProcessing hash* mode. -- **O2DataProcessing Path** (also available in shifter few, since the workflow configuration mode is set to *O2DataProcessing path* in the example): Select the path of the O2DataProcessing repository. -- **Resources** (default: `default`): ODC resources to be used for the partition. If this field is set to the string `default`, which is the default setting, the ODC resources are requested automatically according to the setting in *# of EPNs*. Otherwise an ODC resource request may be inserted manually. E.g. `{"zone": "online", "n": "10"}` will request 10 nodes from the `online` zone, `[ {"zone": "online", "n": "10"}, {"zone": "online-calib", "n": "1"} ]` will request 1 node from the zone -- **Data Distribution mode** (default: `physics`): By default physics should be used. Other modes are needed for special cases. Refer to the EPN experts for details. -- **TF Builder mode** (default: `processing`): This specifies the DataDistribution TfBuilder mode. The following 4 modes are supported, the default is `processing` and for additional raw TF writing `processing-disk` should be used. Note in the cases `discard` and `disk` the *topology library file* `production/no-processing.desc` and the *workflow name* `no-processing` must be used. - - **discard**: TfBuilder builds the time frame on the EPN but discards it immediate without storing it or running any further processing. - - **disk**: The raw time frame is stored to disk, no processing. - - **processing**: Time frames are built and passed to DPL for processing. The raw time frame is not stored. The CTF may be stored depending on the DPL workflow configuration (see *Workflow parameters*). - - **processing-disk**: Combination of `disk` and `processing`: Time frames are built, raw TFs are stored to disk, DPL processing is active. -- **Topology description library file** (default: `production/production.desc`): Selects the file in the O2DataProcessing repository with the topology description for the partition. By default the GUI uses the default production workflow. -- **Workflow name** (default: `synchronous-workflow-1numa`): Selects the *workflow name* to use inside the *topology library file*. See [here](../README.md) for details. There are 2 default workflows: - - `synchronous-workflow-1numa`: Default production workflow using 4 GPUs and only 1 NUMA domain on the EPN. This provides less processing power, but the startup is faster, so it is currently used as default. - - `synchronous-workflow`: Production workflow using all 8 GPUs and both NUMA domains of the EPN. Provides the full processing power but has significantly longer start of run time, thus it is currently not used by default. Will be needed for Pb-Pb. -- **Detector list (Global)**: Comma-separated list of the detectors used for processing in the DPL workflow. If this field is set to the string `default`, which is the default setting, the list is auto-generated by AliECS from the detectors in the partition. If this list contains detectors not in the partition, the synchronous reconstruction processes for such detectors will be started, but they will only process empty dummy data, which can be used for tests. If the list contains less detectors than are in the partition, processing for missing detectors is disabled completely. In case the *TF Builder mode* is set to `disk` or `processing-disk`, raw TFs for such detectors would still be stored, but such detectors would miss in the CTF. The abbreviation `ALL` may be used for all ALICE detectors (not only those in the partition). -- **Detector list (QC)**: Comma-separated list of detectors to run QC for, if the workflow parameter `QC` is set (see below). They keywords `default` and `ALL` work in the same way as for *Detector list (Global)*. A detector not present in *Detector list (Global)* will not run any processing and thus also no EPN QC, even if present in this list. -- **Detector list (Calibration)**: Comma-separated list of detectors to run calibration for, if the workflow parameter `CALIB` is set (see below). Works in exactly the same way as *Detector list (QC)*. -- **Workflow parameters**: Comma-separated list of workflow parameters. Parameters are usually features to enable in the workflow, but can also be special options. Currently, the following parameters exist: - - `QC`: Enable EPN QC for the detectors in *Detector list (QC)*. - - `CALIB`: Enable calibration for detectors in *Detector list (Calibration)*. - - `GPU`: Perform the TPC reconstruction on the GPU. - - `CTF`: Store the CTF. Note that by default the reconstruction will always run the CTF encoding. (CTF encoding can be disabled using custom settings in the *EXTRA ENV variables* option (see below).) Thus CTF creation can be tested without storing the CTF, by removing this parameter. - - `EVENT_DISPLAY`: Export JSONs for the event display. -- **# of compute nodes**: Number of compute nodes on which DPL processing is enabled. In case of the default value `-1`, *# of EPNs* is used. In case of the value `0`, the default that is specified for the workflow in the topology library file is used. This is only needed for special tests. -- **Raw decoder multiplicity factor**: In case the processing on the EPN is to slow, and in case the EPN nodes still have space CPU capacity available, this option (and the following 2 options: *CTF encoder multiplicity factor* and *Reconstruction process multiplicity factor*) increases the number of parallel raw decoder processes running on the EPN. The default number is multiplied by the provided factor. Note that the workflows also support more fine-grained multiplicity settings (described [here](../production/README.md)) which can be provided via the *Extra ENV variables* option below. -- **CTF encoder multiplicity factor**: See *Raw decoder multiplicity factor*. This option affects all CTF encoders instead of all raw decoders. -- **Reconstruction process multiplicity factor**: See *Raw decoder multiplicity factor*. This option affects all other reconstruction processes instead of CTF encoders or raw decoders. -- **Extra ENV variables**: This free text field can be used to provide extra custom options to the DPL workflow. The syntax is `OPTION_NAME='OPTION_VALUE'` with optional single quotes if needed, multiple options can be provided in space separated way. For a full list of options, see [here](../production/README.md). An example would be `WORKFLOW_DETECTORS_MATCHING='ITS-TPC,ITS-TPC-TRD' WORKFLOW_DETECTORS_FLP_PROCESSING=TOF WORKFLOW_DETECTORS_CTF=NONE`. -- **Wipe workflow cache**: The O2DataProcessing workflow mechanisms will cash the XML files of auto-generated workflows in case the configuration mode is *O2DataProcessing hash*. It will then reuse the cached XML in case the same configuration options are provided. This speeds up the start of run. This is only possible in case the configuration is set to *O2DataProcessing hash* because then the topology is fully versioned, identified uniquely by the tripple [O2DataProcessing hash, Workflow name, Toplogy library file]. For an *O2DataProcessing path* the repository is not versioned and the topology is not cached. This option forces a wipe of the cache. In particularly, this is currently needed if the QC JSON files are changed, since they are not yet versioned in consul. -- **Beam type**: Beam type propagated to the reconstruction. Eventually this should be set automatically by AliECS, but for now this must be set here explicitly. -- **# of HBs per TF**: Number of heartbead frames per time frame. Must match the configuration of the detectors / CTP. Eventually this should be set automatically by AliECS, but for now this must be set here explicitly. -- **EPN partition cleanup**: Clean up stale EPN/ODC partitions. Refer to AliECS / ODC experts for details. - -The following example shows a screenshot of the expert panel with some custom options selected. - -

+# AliECS PDP Workflow configuration documentation. +Note that this documentation is only for the AliECS GUI, more detailed documentation for the PDP workflows themselves can be found [here](../README.md). The PDP Workflow GUI has 2 modes (selectable as *panel mode*): +- A **shifter mode** for the operator, which has 2 basic settings, for selecting the number of EPN nodes and the workflow or workflow version. +- An **expert mode** which enables detailed manipulation of the exectued workflow. ([details](#expert-panel)) + +The GUI can configure the workflow with 3 different methods: [Manual XML File](#manual-xml-file-configuration-method), [O2DataProcessing path](#o2dataprocessing-path-configuration-method), [O2DataProcessing hash / version](#o2dataprocessing-hash-configuration-method). The method can be selected in the [expert panel](#expert-panel). The 3 methods are detailed in the following: + +
+ +# Default workflow and detector standalone tests. +The shifter panel is very simple, and doesn't provide many options to select a workflow. Only the XML file or the path / version of O2DataProcessing can be configured. It will by default always use the production workflow of the `production/production.desc` topology library file. For using a different library file / workflow name in the file, the expert panel must be used. In particular, this means that detectors must currently use the expert panel for runs that do not use the default workflow. + +
+ +# Manual XML File configuration method +This configuration method is provided mostly for backward compatibility. Currently this mode is the default for compatibility reasons, since it is used by all old *saved configurations*. The workflow is not generated on the fly, but a pregenerated workflow stored on the EPN farm is used. The following screenshot shows an example of the panel: + +

+ +The panel provides the following settings: +- **Topology**: Absolute path to the topology XML file on the EPN's shared home folder. +- **# of EPNs** Number of EPN nodes to allocate from the *online* zone. Please note that this number must match the number specified in the provided XML file. + +
+ +# O2DataProcessing path configuration method +This method uses the [O2DataProcessing repository](../) to generate the topology on the fly. No pregenerated files are used. This is the "*new*" way to configure the workflow. This screenshot shows an example of the **shifter** mode, followed by a description of the 2 settings: + +

+ +- **O2 Data Processing Path**: Absolute path on the EPN farm to the O2DataProcessing repository to be used. +- **# of EPNs**: Number of EPN nodes to allocate from the *online* zone. Identical to the [manual XML file](#manual-xml-file-configuration-method) case. In this case the workflow is generated on the fly, so a workflow for the specified number of EPNs is created automatically. + +For all other configuration options see the [expert panel](#expert-panel). + +
+ +# O2DataProcessing hash configuration method +This is mostly identical to the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) method. +The only difference is that a repository version is specified instead of the path to the repository on the EPN farm. +This ensures proper versioning and reproducibility. +While the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) method can generate topologies from any private O2DataProcessing fork on the EPN farm, the **O2DataProcessing hash** method only supports workflows that are checked in into the official [O2DataProcessing](../) repository. +The referred version can be either a commit or a tag. +Tags will be used for official tagged versions of the production workflow, while detectors may use just commit hashes for standalone runs without the need to create / wait for an official tag. +This method will become the default method when the workflows have stabilized and do no longer change on a daily basis. +In the following screenshot, the *tag* `v0.20` is selected: + +

+ +- **O2 Data Processing Hash**: Version (*commit hash* or *tag*) in the official O2DataProcessing repository. +- **# of EPNs**: Number of EPN nodes to allocate from the *online* zone. Identical to the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) case. + +For all other configuration options see the [expert panel](#expert-panel). + +
+ +# Expert panel +The expert panel provides plenty of additional configuration options for both O2DataProcessing repository configuration methods. Some options are also availble for the manual XML file method. This screenshot shows the expert panel and the default options. The individual options are described below. + +

+ +- **# of EPNs** (also available in shifter view): This option configures the number of EPNs used for the partition. To be more precise, it only sets the default of the number of EPNs. Other options (**Resources**, **# of compute nodes**) related to the number of EPN nodes may override the value specified here. If these other options are set to their *default*, **# of EPNs** controls how many EPNs are used exclusively. +- **Workflow configuraiton mode**: This option allows to switch between the *Manual XML file* mode, *O2DataProcessing path* mode, and *O2DataProcessing hash* mode. +- **O2DataProcessing Path** (also available in shifter few. Since in the example above the workflow configuration mode is set to *O2DataProcessing path* in the example, this setting is visible instead of e.g. the field to enter the manual XML file): Select the path of the O2DataProcessing repository. +- **Resources** (default: `default`): ODC resources to be used for the partition. If this field is set to the string `default`, which is the default setting, the ODC resources are requested automatically according to the setting in *# of EPNs*. Otherwise an ODC resource request may be inserted manually. E.g. `{"zone": "online", "n": "10"}` will request 10 nodes from the `online` zone, `[ {"zone": "online", "n": "10"}, {"zone": "online-calib", "n": "1"} ]` will request 1 node from the zone online-calib in addition. +- **Data Distribution mode** (default: `physics`): By default physics should be used. Other modes are needed for special cases. Refer to the EPN experts for details. +- **TF Builder mode** (default: `processing`): This specifies the DataDistribution TfBuilder mode. The following 4 modes are supported, the default is `processing`, and for additional raw TF writing `processing-disk` should be used. Note that in the cases `discard` and `disk` the *topology library file* `production/no-processing.desc` and the *workflow name* `no-processing` must be used. + - **discard**: TfBuilder builds the time frame on the EPN but discards it immediate without storing it or running any further processing. + - **disk**: The raw time frame is stored to disk, no processing. + - **processing**: Time frames are built and passed to DPL for processing. The raw time frame is not stored. The CTF may be stored depending on the DPL workflow configuration (see *Workflow parameters*). + - **processing-disk**: Combination of `disk` and `processing`: Time frames are built, raw TFs are stored to disk, DPL processing is active. +- **Topology description library file** (default: `production/production.desc`): Selects the file in the O2DataProcessing repository with the topology description for the partition. By default the GUI uses the default production workflow. In case of detector standalone tests, the detectors can either use their own library files here, or stick to the default global workflow if that provides all the processes they need. +- **Workflow name** (default: `synchronous-workflow-1numa`): Selects the *workflow name* to use inside the *topology library file*. See [here](../README.md) for details. There are 2 default global workflows: + - `synchronous-workflow-1numa`: Default production workflow using 4 GPUs and only 1 NUMA domain on the EPN. This provides less processing power, but the startup is faster, so it is currently used as default. + - `synchronous-workflow`: Production workflow using all 8 GPUs and both NUMA domains of the EPN. Provides the full processing power but has significantly longer start of run time, thus it is currently not used by default. Will be needed for Pb-Pb. +- **Detector list (Global)**: Comma-separated list of the detectors used for processing in the DPL workflow. If this field is set to the string `default`, which is the default setting, the list is auto-generated by AliECS from the detectors in the partition. If this list contains detectors not in the partition, the synchronous reconstruction processes for such detectors will be started, but they will only process empty dummy data, which can be used for tests. If the list contains less detectors than are in the partition, processing for missing detectors is disabled completely. In case the *TF Builder mode* is set to `disk` or `processing-disk`, raw TFs for such detectors would still be stored, but such detectors would miss in the CTF. The abbreviation `ALL` may be used for all ALICE detectors (not only those in the partition). +- **Detector list (QC)**: Comma-separated list of detectors to run QC for, if the workflow parameter `QC` is set (see below). They keywords `default` and `ALL` work in the same way as for *Detector list (Global)*. A detector not present in *Detector list (Global)* will not run any processing and thus also no EPN QC, even if present in this list. +- **Detector list (Calibration)**: Comma-separated list of detectors to run calibration for, if the workflow parameter `CALIB` is set (see below). Works in exactly the same way as *Detector list (QC)*. +- **Workflow parameters**: Comma-separated list of workflow parameters. Parameters are usually features to enable in the workflow, but can also be special options. Currently, the following parameters exist: + - `QC`: Enable EPN QC for the detectors in *Detector list (QC)*. + - `CALIB`: Enable calibration for detectors in *Detector list (Calibration)*. + - `GPU`: Perform the TPC reconstruction on the GPU. + - `CTF`: Store the CTF. Note that by default the reconstruction will always run the CTF encoding. (CTF encoding can be disabled using custom settings in the *EXTRA ENV variables* option (see below).) Thus CTF creation can be tested without storing the CTF, by removing this parameter. + - `EVENT_DISPLAY`: Export JSONs for the event display. +- **# of compute nodes**: Number of compute nodes on which DPL processing is enabled. In case of the default value `-1`, *# of EPNs* is used. In case of the value `0`, the default that is specified for the workflow in the topology library file is used. This is only needed for special tests. +- **Raw decoder multiplicity factor**: In case the processing on the EPN is to slow, and in case the EPN nodes still have space CPU capacity available, this option (and the following 2 options: *CTF encoder multiplicity factor* and *Reconstruction process multiplicity factor*) increases the number of parallel raw decoder processes running on the EPN. The default number is multiplied by the provided factor. Note that the workflows also support more fine-grained multiplicity settings (described [here](../production/README.md)) which can be provided via the *Extra ENV variables* option below. +- **CTF encoder multiplicity factor**: See *Raw decoder multiplicity factor*. This option affects all CTF encoders instead of all raw decoders. +- **Reconstruction process multiplicity factor**: See *Raw decoder multiplicity factor*. This option affects all other reconstruction processes instead of CTF encoders or raw decoders. +- **Extra ENV variables**: This free text field can be used to provide extra custom options to the DPL workflow. The syntax is `OPTION_NAME='OPTION_VALUE'` with optional single quotes if needed, multiple options can be provided in space separated way. For a full list of options, see [here](../production/README.md). An example would be `WORKFLOW_DETECTORS_MATCHING='ITS-TPC,ITS-TPC-TRD' WORKFLOW_DETECTORS_FLP_PROCESSING=TOF WORKFLOW_DETECTORS_CTF=NONE`. +- **Wipe workflow cache**: The O2DataProcessing workflow mechanisms will cash the XML files of auto-generated workflows in case the configuration mode is *O2DataProcessing hash*. It will then reuse the cached XML in case the same configuration options are provided. This speeds up the start of run. This is only possible in case the configuration is set to *O2DataProcessing hash* because then the topology is fully versioned, identified uniquely by the tripple [O2DataProcessing hash, Workflow name, Toplogy library file]. For an *O2DataProcessing path* the repository is not versioned and the topology is not cached. This option forces a wipe of the cache. In particularly, this is currently needed if the QC JSON files are changed, since they are not yet versioned in consul. +- **Beam type**: Beam type propagated to the reconstruction. Eventually this should be set automatically by AliECS, but for now this must be set here explicitly. +- **# of HBs per TF**: Number of heartbead frames per time frame. Must match the configuration of the detectors / CTP. Eventually this should be set automatically by AliECS, but for now this must be set here explicitly. +- **EPN partition cleanup**: Clean up stale EPN/ODC partitions. Refer to AliECS / ODC experts for details. + +The following example shows a screenshot of the expert panel with some custom options selected. + +

From dc2527c98c28634c7f5c2b8e0edf9050958507bf Mon Sep 17 00:00:00 2001 From: David Rohr Date: Tue, 16 Nov 2021 10:23:51 +0100 Subject: [PATCH 220/236] Sync dpl-workflow.sh --- production/dpl-workflow.sh | 55 +++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index 4dc0a88..ceb7595 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -6,6 +6,8 @@ command -v zsh > /dev/null 2>&1 && MYDIR=$(dirname $(zsh -c 'echo ${0:A}' "$0")) test -z ${MYDIR+x} && MYDIR="$(dirname $(readlink -f $0))" source $MYDIR/setenv.sh +if [ -z $FILEWORKDIRRUN ]; then FILEWORKDIRRUN=$FILEWORKDIR; fi # directory where to find the run-related files (grp, collision context) + # --------------------------------------------------------------------------------------------------------------------- #Some additional settings used in this workflow if [[ -z $OPTIMIZED_PARALLEL_ASYNC ]]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN @@ -42,6 +44,9 @@ ITSMFT_FILES="ITSClustererParam.dictFilePath=$ITSCLUSDICT;MFTClustererParam.dict LIST_OF_ASYNC_RECO_STEPS="MID MCH MFT FDD FV0 ZDC" +DISABLE_DIGIT_ROOT_INPUT="--disable-root-input" +DISABLE_DIGIT_CLUSTER_INPUT="--clusters-from-upstream" + # --------------------------------------------------------------------------------------------------------------------- # Set active reconstruction steps (defaults added according to SYNCMODE) @@ -77,7 +82,7 @@ fi [[ $NUMAGPUIDS != 0 ]] && ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" [[ ! -z $TIMEFRAME_RATE_LIMIT ]] && [[ $TIMEFRAME_RATE_LIMIT != 0 ]] && ARGS_ALL+=" --timeframes-rate-limit $TIMEFRAME_RATE_LIMIT --timeframes-rate-limit-ipcid $NUMAID" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" +ARGS_ALL_CONFIG="NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIRRUN;NameConf.mDirGRP=$FILEWORKDIRRUN;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" # --------------------------------------------------------------------------------------------------------------------- # Set some individual workflow arguments depending on configuration @@ -91,7 +96,7 @@ TOF_OUTPUT=clusters ITS_CONFIG_KEY= TRD_CONFIG= TRD_CONFIG_KEY= -TRD_TRANSFORMER_CONFIG= +TRD_FILTER_CONFIG= CPV_INPUT=raw EVE_CONFIG=" --jsons-folder $EDJSONS_DIR" MIDDEC_CONFIG= @@ -110,9 +115,8 @@ if [[ $SYNCMODE == 1 ]]; then [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode sync" fi GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" - TRD_CONFIG+=" --filter-trigrec" TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" - TRD_TRANSFORMER_CONFIG+=" --filter-trigrec" + has_detector ITS && TRD_FILTER_CONFIG+=" --filter-trigrec" else if [[ $BEAMTYPE == "PbPb" ]]; then [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode async" @@ -128,6 +132,11 @@ fi has_processing_step ENTROPY_ENCODER && has_detector_ctf TPC && GPU_OUTPUT+=",compressed-clusters-ctf" +if [[ -z $DISABLE_ROOT_OUTPUT ]]; then + # enable only if root output is written, because it slows down the processing + GPU_OUTPUT+=",send-clusters-per-sector" +fi + has_detector_flp_processing CPV && CPV_INPUT=digits ! has_detector_flp_processing TOF && TOF_CONFIG+=" --ignore-dist-stf" @@ -194,7 +203,8 @@ for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do has_detector_reco $det && add_comma_separated TRACK_SOURCES "$det" fi done -PVERTEX_CONFIG="--vertexing-sources $TRACK_SOURCES --vertex-track-matching-sources $TRACK_SOURCES" +[[ -z $VERTEXING_SOURCES ]] && VERTEXING_SOURCES="$TRACK_SOURCES" +PVERTEX_CONFIG="--vertexing-sources $VERTEXING_SOURCES --vertex-track-matching-sources $VERTEXING_SOURCES" # this option requires well calibrated timing beween different detectors, at the moment suppress it #has_detector_reco FT0 && PVERTEX_CONFIG+=" --validate-with-ft0" @@ -333,6 +343,14 @@ elif [[ $EXTINPUT == 1 ]]; then done [[ ! -z $TIMEFRAME_RATE_LIMIT ]] && [[ $TIMEFRAME_RATE_LIMIT != 0 ]] && PROXY_CHANNEL+=";name=metric-feedback,type=pull,method=connect,address=ipc://@metric-feedback-$NUMAID,transport=shmem,rateLogging=0" add_W o2-dpl-raw-proxy "--dataspec \"$PROXY_INSPEC\" --readout-proxy \"--channel-config \\\"$PROXY_CHANNEL\\\"\" ${TIMEFRAME_SHM_LIMIT+--timeframes-shm-limit} $TIMEFRAME_SHM_LIMIT" "" 0 +elif [[ $DIGITINPUT == 1 ]]; then + [[ $NTIMEFRAMES != 1 ]] && { echo "Digit input works only with NTIMEFRAMES=1"; exit 1; } + DISABLE_DIGIT_ROOT_INPUT= + DISABLE_DIGIT_CLUSTER_INPUT= + TOF_INPUT=digits + GPU_INPUT=zsonthefly + has_detector TPC && add_W o2-tpc-reco-workflow "--input-type digits --output-type zsraw,disable-writer $DISABLE_MC --pipeline $(get_N tpc-zsEncoder TPC RAW TPCRAWDEC)" + has_detector MID && add_W o2-mid-digits-reader-workflow "$DISABLE_MC" "" else if [[ $NTIMEFRAMES == -1 ]]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--loop $NTIMEFRAMES"; fi add_W o2-raw-file-reader-workflow "--detect-tf0 --delay $TFDELAY $NTIMEFRAMES_CMD --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg" "HBFUtils.nHBFPerTF=$NHBPERTF" @@ -343,7 +361,7 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Raw decoder workflows - disabled in async mode -if [[ $CTFINPUT == 0 ]]; then +if [[ $CTFINPUT == 0 && $DIGITINPUT == 0 ]]; then if has_detector TPC && [[ $EPNSYNCMODE == 1 ]]; then GPU_INPUT=zsonthefly add_W o2-tpc-raw-to-digits-workflow "--input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline $(get_N tpc-raw-to-digits-0 TPC RAW TPCRAWDEC)" @@ -369,27 +387,28 @@ fi # --------------------------------------------------------------------------------------------------------------------- # Common reconstruction workflows (has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:${N_TPCTRK:-1} $GPU_CONFIG $ARGS_EXTRA_PROCESS_o2_gpu_reco_workflow --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG;$CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow\" | " -(has_detector_reco TOF || has_detector_ctf TOF) && add_W o2-tof-reco-workflow "$TOF_CONFIG --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST)" -has_detector_reco ITS && add_W o2-its-reco-workflow "--trackerCA $ITS_CONFIG $DISABLE_MC --clusters-from-upstream $DISABLE_ROOT_OUTPUT --pipeline $(get_N its-tracker ITS REST ITSTRK)" "$ITS_CONFIG_KEY;$ITSMFT_FILES" +(has_detector_reco TOF || has_detector_ctf TOF) && add_W o2-tof-reco-workflow "$TOF_CONFIG --input-type $TOF_INPUT --output-type $TOF_OUTPUT $DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST)" +has_detector_reco ITS && add_W o2-its-reco-workflow "--trackerCA $ITS_CONFIG $DISABLE_MC $DISABLE_DIGIT_CLUSTER_INPUT $DISABLE_ROOT_OUTPUT --pipeline $(get_N its-tracker ITS REST ITSTRK)" "$ITS_CONFIG_KEY;$ITSMFT_FILES" has_detectors_reco ITS TPC && has_detector_matching ITSTPC && add_W o2-tpcits-match-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS)" "$ITSTPC_EXTRA_CONFIG;$ITSMFT_FILES" -has_detector_reco FT0 && add_W o2-ft0-reco-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST)" -has_detector_reco TRD && add_W o2-trd-tracklet-transformer "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_TRANSFORMER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK)" -has_detectors_reco TRD TPC ITS && [[ ! -z "$TRD_SOURCES" ]] && add_W o2-trd-global-tracking "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG --track-sources $TRD_SOURCES" "$TRD_CONFIG_KEY;$ITSMFT_FILES" +has_detector_reco FT0 && add_W o2-ft0-reco-workflow "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST)" +has_detector_reco TRD && add_W o2-trd-tracklet-transformer "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_FILTER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK)" +has_detectors_reco TRD TPC ITS && [[ ! -z "$TRD_SOURCES" ]] && add_W o2-trd-global-tracking "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG $TRD_FILTER_CONFIG --track-sources $TRD_SOURCES" "$TRD_CONFIG_KEY;$ITSMFT_FILES" has_detectors_reco TOF TRD TPC ITS && [[ ! -z "$TOF_SOURCES" ]] && add_W o2-tof-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH)" "$ITSMFT_FILES" +has_detectors TPC && [ -z "$DISABLE_ROOT_OUTPUT" ] && add_W o2-tpc-reco-workflow "--input-type pass-through --output-type clusters,tracks,send-clusters-per-sector $DISABLE_MC" # --------------------------------------------------------------------------------------------------------------------- # Reconstruction workflows normally active only in async mode in async mode ($LIST_OF_ASYNC_RECO_STEPS), but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS has_detector MID && has_processing_step MID_RECO && add_W o2-mid-reco-workflow "$DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST)" -has_detector MCH && has_processing_step MCH_RECO && add_W o2-mch-reco-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST)" -has_detector MFT && has_processing_step MFT_RECO && add_W o2-mft-reco-workflow "--clusters-from-upstream $DISABLE_MC $DISABLE_ROOT_OUTPUT --pipeline $(get_N mft-tracker MFT REST MFTTRK)" "$ITSMFT_FILES" -has_detector FDD && has_processing_step FDD_RECO && add_W o2-fdd-reco-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC" -has_detector FV0 && has_processing_step FV0_RECO && add_W o2-fv0-reco-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC" -has_detector ZDC && has_processing_step ZDC_RECO && add_W o2-zdc-digits-reco "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC" +has_detector MCH && has_processing_step MCH_RECO && add_W o2-mch-reco-workflow "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST)" +has_detector MFT && has_processing_step MFT_RECO && add_W o2-mft-reco-workflow "$DISABLE_DIGIT_CLUSTER_INPUT $DISABLE_MC $DISABLE_ROOT_OUTPUT --pipeline $(get_N mft-tracker MFT REST MFTTRK)" "$ITSMFT_FILES" +has_detector FDD && has_processing_step FDD_RECO && add_W o2-fdd-reco-workflow "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC" +has_detector FV0 && has_processing_step FV0_RECO && add_W o2-fv0-reco-workflow "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC" +has_detector ZDC && has_processing_step ZDC_RECO && add_W o2-zdc-digits-reco "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC" has_detectors_reco MFT MCH && has_detector_matching MFTMCH && add_W o2-globalfwd-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST)" if [[ $BEAMTYPE != "cosmic" ]]; then has_detectors_reco ITS && has_detector_matching PRIMVTX && add_W o2-primary-vertexing-workflow "$DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST)" "$PVERTEX_EXTRA_CONFIG" - has_detectors_reco ITS && has_detector_matching SECVTX && add_W o2-secondary-vertexing-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $TRACK_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST)" "$SVERTEX_EXTRA_CONFIG" + has_detectors_reco ITS && has_detector_matching SECVTX && add_W o2-secondary-vertexing-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $VERTEXING_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST)" "$SVERTEX_EXTRA_CONFIG" fi # --------------------------------------------------------------------------------------------------------------------- @@ -448,7 +467,7 @@ workflow_has_parameter AOD && add_W o2-aod-producer-workflow "--info-sources $AO # --------------------------------------------------------------------------------------------------------------------- # Quality Control -workflow_has_parameter QC && { source $MYDIR/qc-workflow.sh; [[ $? != 0 ]] && exit 1; } +workflow_has_parameter QC && { source $O2DATAPROCESSING_ROOT/production/qc-workflow.sh; [[ $? != 0 ]] && exit 1; } # --------------------------------------------------------------------------------------------------------------------- # DPL run binary From 28bc914671dbbee3cc7ea89cbc9b46f3d61b7ae8 Mon Sep 17 00:00:00 2001 From: Piotr Konopka Date: Wed, 17 Nov 2021 13:02:35 +0100 Subject: [PATCH 221/236] Update the common QC parameters It includes the new QCDB address, getting rid of the test consul instance (which should not be used here) and the correct CCDB endpoint --- production/qc_global.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/production/qc_global.json b/production/qc_global.json index cf33c3f..6f5b448 100644 --- a/production/qc_global.json +++ b/production/qc_global.json @@ -3,7 +3,7 @@ "config": { "database": { "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", + "host": "ali-qcdb.cern.ch:8083", "username": "not_applicable", "password": "not_applicable", "name": "not_applicable" @@ -16,10 +16,10 @@ "url": "infologger:///debug?qc" }, "consul": { - "url": "http://consul-test.cern.ch:8500" + "url": "" }, "conditionDB": { - "url": "ccdb-test.cern.ch:8080" + "url": "http://localhost:8084" }, "infologger": { "filterDiscardDebug": "true", From 7cf6cccc671d2b8bbe2881e66fcd26f28a40a857 Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 17 Nov 2021 16:06:02 +0100 Subject: [PATCH 222/236] Update MFT default QC name --- production/qc-workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index f9f37ba..622cf5a 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -8,7 +8,7 @@ fi if [[ -z $QC_JSON_FROM_OUTSIDE ]]; then [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json - [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-cluster.json + [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-digit-cluster.json [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json [[ -z "$QC_JSON_FDD" ]] && QC_JSON_FDD=/home/afurs/O2DataProcessing/testing/detectors/FDD/fdd-digits-ds.json [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json From 8e74fd886f9eaf72db1eabf736b8dbb4f006b320 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 18 Nov 2021 11:28:56 +0100 Subject: [PATCH 223/236] Not yet working correctly with QC --- common/setenv.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/setenv.sh b/common/setenv.sh index a897ae0..94e6eef 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -61,7 +61,7 @@ else # Defaults when running on the EPN if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=1; fi if [ -z "$SHMTHROW" ]; then export SHMTHROW=0; fi if [ -z "$TIMEFRAME_SHM_LIMIT" ]; then export TIMEFRAME_SHM_LIMIT=$(( 64 << 30 )); fi - if [ -z "$TIMEFRAME_RATE_LIMIT" ]; then export TIMEFRAME_RATE_LIMIT=10; fi + if [ -z "$TIMEFRAME_RATE_LIMIT" ]; then export TIMEFRAME_RATE_LIMIT=0; fi if [ -z "${WORKFLOW_DETECTORS_FLP_PROCESSING+x}" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF"; fi # Current default in sync processing is that FLP processing is only enabled for TOF fi # Some more options for running on the EPN From 59ca21c102fe57a5ce0ae3245dfcf234c22cbb13 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 18 Nov 2021 15:23:54 +0100 Subject: [PATCH 224/236] Comment on relevant Extra ENV Variables to be used in AliECS GUI --- aliecs_documentation/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/aliecs_documentation/README.md b/aliecs_documentation/README.md index 106a25b..45157d1 100644 --- a/aliecs_documentation/README.md +++ b/aliecs_documentation/README.md @@ -95,3 +95,7 @@ The expert panel provides plenty of additional configuration options for both O2 The following example shows a screenshot of the expert panel with some custom options selected.

+ +# Extra ENV Variables +This section contains a list of relevant `Extra ENV Variables` setting to be used in the AliECS GUI: + - `ARGS_EXTRA_PROCESS_o2_gpu_reco_workflow=‘GPU_proc.debugLevel=1;’` : Enable the GPU serialization workaround that avoids the random crash. From 336ed55265374bd9b1b522d46e9e6baaf862f338 Mon Sep 17 00:00:00 2001 From: shahoian Date: Thu, 18 Nov 2021 22:24:37 +0100 Subject: [PATCH 225/236] add extra options to documentation --- aliecs_documentation/README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/aliecs_documentation/README.md b/aliecs_documentation/README.md index 45157d1..5fa966c 100644 --- a/aliecs_documentation/README.md +++ b/aliecs_documentation/README.md @@ -97,5 +97,14 @@ The following example shows a screenshot of the expert panel with some custom op

# Extra ENV Variables -This section contains a list of relevant `Extra ENV Variables` setting to be used in the AliECS GUI: - - `ARGS_EXTRA_PROCESS_o2_gpu_reco_workflow=‘GPU_proc.debugLevel=1;’` : Enable the GPU serialization workaround that avoids the random crash. +This section contains a list of relevant `Extra ENV Variables` setting to be used in the AliECS GUI. In case multiple settings are needed for the `CONFIG_EXTRA_PROCESS_XXX` or `ARGS_EXTRA_PROCESS_XXX` of the same workflow `XXX`, they should be concatenated: +with `;` or with space respectively. + + - `CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow=GPU_proc.debugLevel=1;` : Enable the GPU serialization workaround that avoids the random crash. + - `CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow=TPCGasParam.DriftV=2.69;` : To pass non-default TPC VDrift to TPC tracking + If DriftV is modified, it should be set also in `CONFIG_EXTRA_PROCESS_o2_primary_vertexing_workflow`, `CONFIG_EXTRA_PROCESS_o2_tpcits_match_workflow`, `CONFIG_EXTRA_PROCESS_o2_tof_matcher_workflow` and `CONFIG_EXTRA_PROCESS_o2_trd_global_tracking`. + - `CONFIG_EXTRA_PROCESS_o2_its_reco_workflow=ITSCATrackerParam.sysErrY2[0]=9e-4;ITSCATrackerParam.sysErrZ2[0]=9e-4;ITSCATrackerParam.sysErrY2[1]=9e-4;ITSCATrackerParam.sysErrZ2[1]=9e-4;ITSCATrackerParam.sysErrY2[2]=9e-4;ITSCATrackerParam.sysErrZ2[2]=9e-4;ITSCATrackerParam.sysErrY2[3]=1e-2;ITSCATrackerParam.sysErrZ2[3]=1e-2;ITSCATrackerParam.sysErrY2[4]=1e-2;ITSCATrackerParam.sysErrZ2[4]=1e-2;ITSCATrackerParam.sysErrY2[5]=1e-2;ITSCATrackerParam.sysErrZ2[5]=1e-2;ITSCATrackerParam.sysErrY2[6]=1e-2;ITSCATrackerParam.sysErrZ2[6]=1e-2;` : add extra systematic errors to ITS clusters to account for misalignment + If these error are applied, it is advised to apply them also in `CONFIG_EXTRA_PROCESS_o2_tof_matcher_workflow`, `CONFIG_EXTRA_PROCESS_o2_tpcits_match_workflow` and `CONFIG_EXTRA_PROCESS_o2_trd_global_tracking` which do ITS refit + - `CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow="ITSTAlpideParam.roFrameLengthInBC=891;MFTAlpideParam.roFrameLengthInBC=198` : ITS and MFT readout frame lengths in bunches (defaults are shown). If these settings + - `ARGS_EXTRA_PROCESS_o2_tpcits_match_workflow=" --ignore-bc-check "` : Do not validate time of matched tracks by interacting BC's (useful if the timings are not well calibrated). + - `ITS_STROBE="891"`, `MFT_STROBE="198"` : ITS and MFT readout frame lenghts in number of bunches (current default are shown) From 54d3db9d9fe164845588b5fdde81e076e8402dce Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 19 Nov 2021 13:00:15 +0100 Subject: [PATCH 226/236] Add minimal DPL no-processing workflow --- production/no-processing.desc | 1 + 1 file changed, 1 insertion(+) diff --git a/production/no-processing.desc b/production/no-processing.desc index 78382cf..836bb6f 100644 --- a/production/no-processing.desc +++ b/production/no-processing.desc @@ -1,2 +1,3 @@ # Empty workflow for no processing at all no-processing: "O2PDPSuite" +minimal-dpl: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=NONE WORKFLOW_PARAMETERS=NONE SYNCMODE=1 SHMSIZE=2000000000 SYNCMODE=1 production/dpl-workflow.sh" From 244220b5e2bfa041dab871831219512bc4a18430 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 19 Nov 2021 14:05:49 +0100 Subject: [PATCH 227/236] Do not use calib nodes for reco workflows --- tools/parse | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/parse b/tools/parse index 41d6f39..77f2983 100755 --- a/tools/parse +++ b/tools/parse @@ -114,7 +114,7 @@ for line in f: if reconodes: odccommand += " --dd " + os.environ['DDWORKFLOW'] if len(recoworkflows): - odccommand += " --reco " + " ".join(recoworkflows) + odccommand += " --recown 'wn_(?!online-calib).*_.*' --reco " + " ".join(recoworkflows) odccommand += " --n " + str(reconodes) if len(calibworkflows): odccommand += " --calibwn 'wn_online-calib_.*' --calib " + " ".join(calibworkflows) From 7e0850540396d402db187355b2c984ffd14e0ec2 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Fri, 19 Nov 2021 16:07:56 +0100 Subject: [PATCH 228/236] Sync dpl-workflow --- production/dpl-workflow.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index ceb7595..dcb1942 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -407,8 +407,8 @@ has_detector ZDC && has_processing_step ZDC_RECO && add_W o2-zdc-digits-reco "$D has_detectors_reco MFT MCH && has_detector_matching MFTMCH && add_W o2-globalfwd-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST)" if [[ $BEAMTYPE != "cosmic" ]]; then - has_detectors_reco ITS && has_detector_matching PRIMVTX && add_W o2-primary-vertexing-workflow "$DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST)" "$PVERTEX_EXTRA_CONFIG" - has_detectors_reco ITS && has_detector_matching SECVTX && add_W o2-secondary-vertexing-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $VERTEXING_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST)" "$SVERTEX_EXTRA_CONFIG" + has_detectors_reco ITS && has_detector_matching PRIMVTX && [[ ! -z "$VERTEXING_SOURCES" ]] && add_W o2-primary-vertexing-workflow "$DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST)" "$PVERTEX_EXTRA_CONFIG" + has_detectors_reco ITS && has_detector_matching SECVTX && [[ ! -z "$VERTEXING_SOURCES" ]] && add_W o2-secondary-vertexing-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $VERTEXING_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST)" "$SVERTEX_EXTRA_CONFIG" fi # --------------------------------------------------------------------------------------------------------------------- @@ -458,12 +458,12 @@ workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS # RS this is a temporary setting [[ -z "$ED_TRACKS" ]] && ED_TRACKS=$TRACK_SOURCES [[ -z "$ED_CLUSTERS" ]] && ED_CLUSTERS=$TRACK_SOURCES -workflow_has_parameter EVENT_DISPLAY && [[ $NUMAID == 0 ]] && add_W o2-eve-display "--display-tracks $ED_TRACKS --display-clusters $ED_CLUSTERS $EVE_CONFIG $DISABLE_MC" "$ITSMFT_FILES" +workflow_has_parameter EVENT_DISPLAY && [[ $NUMAID == 0 ]] && [[ ! -z "$ED_TRACKS" ]] && [[ ! -z "$ED_CLUSTERS" ]] && add_W o2-eve-display "--display-tracks $ED_TRACKS --display-clusters $ED_CLUSTERS $EVE_CONFIG $DISABLE_MC" "$ITSMFT_FILES" # --------------------------------------------------------------------------------------------------------------------- # AOD [[ -z "$AOD_INPUT" ]] && AOD_INPUT=$TRACK_SOURCES -workflow_has_parameter AOD && add_W o2-aod-producer-workflow "--info-sources $AOD_INPUT --disable-root-input --aod-writer-keep dangling --aod-writer-resfile "AO2D" --aod-writer-resmode UPDATE $DISABLE_MC" +workflow_has_parameter AOD && [[ ! -z "$AOD_INPUT" ]] && add_W o2-aod-producer-workflow "--info-sources $AOD_INPUT --disable-root-input --aod-writer-keep dangling --aod-writer-resfile "AO2D" --aod-writer-resmode UPDATE $DISABLE_MC" # --------------------------------------------------------------------------------------------------------------------- # Quality Control From db64a8adad02946ae9975300ecb77f2f178eb361 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 24 Nov 2021 14:08:17 +0100 Subject: [PATCH 229/236] Add RAWINPUTDIR variable --- common/setenv.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/setenv.sh b/common/setenv.sh index 94e6eef..7f75621 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -44,7 +44,8 @@ if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw channel name used to communicate with DataDistribution if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflow mode, must be run, print, od dds if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. -if [ -z "$EPNSYNCMODE" ]; then export EPNSYNCMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... +if [ -z "$RAWINPUTDIR" ]; then export RAWINPUTDIR=$FILEWORKDIR; fi # Directory where to find input files (raw files / raw tf files / ctf files) +if [ -z "$EPNSYNCMODE" ]; then export EPNSYNCMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... if [ -z "$BEAMTYPE" ]; then export BEAMTYPE=PbPb; fi # Beam type, must be PbPb, pp, pPb, cosmic, technical if [ -z "$EDJSONS_DIR" ]; then export EDJSONS_DIR="jsons"; fi # output directory for ED json files if [ $EPNSYNCMODE == 0 ]; then From 343277e8c56de14a7f8061d4e3eda1216618342a Mon Sep 17 00:00:00 2001 From: Piotr Konopka Date: Fri, 3 Dec 2021 14:46:40 +0100 Subject: [PATCH 230/236] QC config files for asynchronous reco (#138) * QC config files for asynchronous reco * Join the two QC workflow scripts back into one --- production/qc-async/ft0.json | 45 ++++++++++ production/qc-async/fv0.json | 45 ++++++++++ production/qc-async/its.json | 131 +++++++++++++++++++++++++++++ production/qc-async/itstpc.json | 62 ++++++++++++++ production/qc-async/itstpctof.json | 71 ++++++++++++++++ production/qc-async/mft.json | 66 +++++++++++++++ production/qc-async/mid.json | 42 +++++++++ production/qc-async/primvtx.json | 51 +++++++++++ production/qc-async/tof.json | 79 +++++++++++++++++ production/qc-async/tpc.json | 100 ++++++++++++++++++++++ production/qc-workflow.sh | 36 +++++--- 11 files changed, 717 insertions(+), 11 deletions(-) create mode 100644 production/qc-async/ft0.json create mode 100644 production/qc-async/fv0.json create mode 100644 production/qc-async/its.json create mode 100644 production/qc-async/itstpc.json create mode 100644 production/qc-async/itstpctof.json create mode 100644 production/qc-async/mft.json create mode 100644 production/qc-async/mid.json create mode 100644 production/qc-async/primvtx.json create mode 100644 production/qc-async/tof.json create mode 100644 production/qc-async/tpc.json diff --git a/production/qc-async/ft0.json b/production/qc-async/ft0.json new file mode 100644 index 0000000..fe92796 --- /dev/null +++ b/production/qc-async/ft0.json @@ -0,0 +1,45 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFT0": { + "active": "true", + "className": "o2::quality_control_modules::ft0::DigitQcTask", + "moduleName": "QcFT0", + "detectorName": "FT0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + } + } + } + }, + "dataSamplingPolicies": [ + ] +} diff --git a/production/qc-async/fv0.json b/production/qc-async/fv0.json new file mode 100644 index 0000000..433a90e --- /dev/null +++ b/production/qc-async/fv0.json @@ -0,0 +1,45 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFV0": { + "active": "true", + "className": "o2::quality_control_modules::fv0::DigitQcTask", + "moduleName": "QcFV0", + "detectorName": "FV0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + } + } + } + }, + "dataSamplingPolicies": [ + ] +} diff --git a/production/qc-async/its.json b/production/qc-async/its.json new file mode 100644 index 0000000..7e00031 --- /dev/null +++ b/production/qc-async/its.json @@ -0,0 +1,131 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs:8500" + }, + "conditionDB": { + "url": "alio2-cr1-hv-qcdb1.cern.ch:8083" + } + }, + "tasks": { + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + } + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "taskParameters" : { + "runNumberPath" : "/home/its/QC/workdir/infiles/RunNumber.dat", + "vertexXYsize" : "0.1", + "vertexZsize": "15", + "vertexRsize": "0.1" + } + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query" : "Vertices:ITS/VERTICES/0;tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + } + ] +} diff --git a/production/qc-async/itstpc.json b/production/qc-async/itstpc.json new file mode 100644 index 0000000..087da7d --- /dev/null +++ b/production/qc-async/itstpc.json @@ -0,0 +1,62 @@ +{ + "qc" : { + "config" : { + "database" : { + "implementation" : "CCDB", + "host" : "ali-qcdb.cern.ch:8083", + "username" : "not_applicable", + "password" : "not_applicable", + "name" : "not_applicable" + }, + "Activity" : { + "number" : "42", + "type" : "2" + }, + "monitoring" : { + "url" : "influxdb-unix:///tmp/telegraf.sock" + }, + "consul" : { + "url" : "" + }, + "conditionDB" : { + "url" : "ali-qcdb.cern.ch:8083" + }, + "infologger" : { "" : "Configuration of the Infologger (optional).", + "filterDiscardDebug" : "1", + "" : "Set to true to discard debug and trace messages (default: false)", + "filterDiscardLevel" : "21", + "" : "Message at this level or above are discarded (default: 21 - Trace)" } + }, + "tasks" : { + "MatchedTracksITSTPC" : { + "active" : "true", + "className" : "o2::quality_control_modules::glo::ITSTPCMatchingTask", + "moduleName" : "QcGLO", + "detectorName" : "GLO", + "cycleDurationSeconds" : "3600", + "maxNumberCycles" : "-1", + "dataSource" : { + "type" : "direct", + "query_comment" : "checking every matched track", + "query" : "trackITSTPC:GLO/TPCITS/0;trackITSTPCABREFS:GLO/TPCITSAB_REFS/0;trackITSTPCABCLID:GLO/TPCITSAB_CLID/0;trackTPC:TPC/TRACKS;trackTPCClRefs:TPC/CLUSREFS" + }, + "taskParameters" : { + "GID" : "ITS-TPC,ITS", + "verbose" : "false", + "minPtCut" : "0.1f", + "etaCut" : "1.4f", + "minNTPCClustersCut" : "40", + "minDCACut" : "100.f", + "minDCACutY" : "10.f", + "grpFileName" : "o2sim_grp.root", + "geomFileName" : "o2sim_geometry.root" + }, + "saveObjectsToFile" : "ITSTPCmatched.root", + "" : "For debugging, path to the file where to save. If empty or missing it won't save." + } + } + }, + "dataSamplingPolicies" : [ + ] +} + diff --git a/production/qc-async/itstpctof.json b/production/qc-async/itstpctof.json new file mode 100644 index 0000000..3cfc016 --- /dev/null +++ b/production/qc-async/itstpctof.json @@ -0,0 +1,71 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "MatchingTOF": { + "active": "true", + "className": "o2::quality_control_modules::tof::TOFMatchedTracks", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query_comment": "checking every matched track", + "query": "matchITSTPCTOF:TOF/MTC_ITSTPC/0;matchTPCTOF:TOF/MTC_TPC/0;trackTPCTOF:TOF/TOFTRACKS_TPC/0;trackITSTPC:GLO/TPCITS/0;trackITSTPCABREFS:GLO/TPCITSAB_REFS/0;trackITSTPCABCLID:GLO/TPCITSAB_CLID/0;trackTPC:TPC/TRACKS/0;trackTPCClRefs:TPC/CLUSREFS/0;tofcluster:TOF/CLUSTERS/0" + }, + "taskParameters": { + "GID": "ITS-TPC,TPC,ITS-TPC-TOF,TPC-TOF", + "verbose": "false", + "minPtCut": "0.1f", + "etaCut": "1.4f", + "minNTPCClustersCut": "40", + "minDCACut": "100.f", + "minDCACutY": "10.f", + "grpFileName": "o2sim_grp.root", + "geomFileName": "o2sim_geometry.root" + }, + "saveObjectsToFile": "TOFmatchedITSTPCTOF_TPCTOF.root", + "": "For debugging, path to the file where to save. If empty or missing it won't save." + } + } + }, + "dataSamplingPolicies": [ + { + "id": "digi-local", + "active": "true", + "machines": [], + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} + diff --git a/production/qc-async/mft.json b/production/qc-async/mft.json new file mode 100644 index 0000000..5895293 --- /dev/null +++ b/production/qc-async/mft.json @@ -0,0 +1,66 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "QcMFTAsync": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTAsyncTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-async" + }, + "taskParameters": { + "ROFLengthInBC": "198", + "MaxTrackROFSize": "1000", + "MaxClusterROFSize": "5000", + "MaxDuration": "60000", + "TimeBinSize": "0.1", + "RefOrbit": "0" + } + } + }, + "checks": {} + }, + "dataSamplingPolicies": [ + { + "id": "mft-async", + "active": "true", + "machines": [], + "query": "tracks:MFT/TRACKS/0;tracksrofs:MFT/MFTTrackROF/0;clusters:MFT/COMPCLUSTERS/0;clustersrofs:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.05", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/production/qc-async/mid.json b/production/qc-async/mid.json new file mode 100644 index 0000000..56a9fca --- /dev/null +++ b/production/qc-async/mid.json @@ -0,0 +1,42 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ali-qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "null:8500" + }, + "conditionDB": { + "url": "null:8083" + } + }, + "tasks": { + "QcTaskMIDDigits": { + "active": "true", + "className": "o2::quality_control_modules::mid::DigitsQcTask", + "moduleName": "QcMID", + "detectorName": "MID", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "digits:MID/DATA/0;digitrofs:MID/DATAROF/0;calib:MID/DATA/1;calibrofs:MID/DATAROF/1;fet:MID/DATA/2;fetrofs:MID/DATAROF/2" + } + } + } + }, + "dataSamplingPolicies": [ + ] +} diff --git a/production/qc-async/primvtx.json b/production/qc-async/primvtx.json new file mode 100644 index 0000000..5a88f2e --- /dev/null +++ b/production/qc-async/primvtx.json @@ -0,0 +1,51 @@ +{ + "qc" : { + "config" : { + "database" : { + "implementation" : "CCDB", + "host" : "ali-qcdb.cern.ch:8083", + "username" : "not_applicable", + "password" : "not_applicable", + "name" : "not_applicable" + }, + "Activity" : { + "number" : "42", + "type" : "2" + }, + "monitoring" : { + "url" : "influxdb-unix:///tmp/telegraf.sock" + }, + "consul" : { + "url" : "" + }, + "conditionDB" : { + "url" : "ali-qcdb.cern.ch:8083" + }, + "infologger" : { "" : "Configuration of the Infologger (optional).", + "filterDiscardDebug" : "1", + "" : "Set to true to discard debug and trace messages (default: false)", + "filterDiscardLevel" : "21", + "" : "Message at this level or above are discarded (default: 21 - Trace)" } + }, + "tasks" : { + "Vertexing" : { + "active" : "true", + "className" : "o2::quality_control_modules::glo::VertexingQcTask", + "moduleName" : "QcGLO", + "detectorName" : "GLO", + "cycleDurationSeconds" : "60", + "maxNumberCycles" : "-1", + "dataSource" : { + "type" : "direct", + "query": "pvtx:GLO/PVTX/0" + }, + "taskParameters" : { + "isMC": "false" + } + } + } + }, + "dataSamplingPolicies" : [ + ] +} + diff --git a/production/qc-async/tof.json b/production/qc-async/tof.json new file mode 100644 index 0000000..87e1717 --- /dev/null +++ b/production/qc-async/tof.json @@ -0,0 +1,79 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "TaskDigits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskDigits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "digi-local" + } + } + }, + "checks": { + "CheckRawMultiplicity": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", + "moduleName": "QcTOF", + "policy": "OnAny", + "detectorName": "TOF", + "dataSource": [ + { + "type": "Task", + "name": "TaskDigits", + "MOs": [ + "TOFRawsMulti" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + { + "id": "digi-local", + "active": "true", + "machines": [ + "epn", + "localhost" + ], + "port": "30333", + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} + diff --git a/production/qc-async/tpc.json b/production/qc-async/tpc.json new file mode 100644 index 0000000..fe550a8 --- /dev/null +++ b/production/qc-async/tpc.json @@ -0,0 +1,100 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "aaa", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "infologger": { + "filterDiscardDebug": "true", + "filterDiscardLevel": "1" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "Clusters": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "60", + "resetAfterCycles": "1", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", "NClustersXMin": "0", "NClustersXMax": "100", + "QmaxNBins": "200", "QmaxXMin": "0", "QmaxXMax": "200", + "QtotNBins": "600", "QtotXMin": "10", "QtotXMax": "600", + "SigmaPadNBins": "200", "SigmaPadXMin": "0", "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", "SigmaTimeXMin": "0", "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", "TimeBinXMin": "0", "TimeBinXMax": "100000" + } + }, + "PID": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "60", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query" : "inputTracks:TPC/TRACKS/0" + } + }, + "Tracks": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "60", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query" : "inputTracks:TPC/TRACKS/0" + } + } + } + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + } + ] +} diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 622cf5a..5eef2cd 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -6,17 +6,31 @@ if [[ -z "$WORKFLOW" ]] || [[ -z "$MYDIR" ]]; then fi if [[ -z $QC_JSON_FROM_OUTSIDE ]]; then - [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json - [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json - [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-digit-cluster.json - [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json - [[ -z "$QC_JSON_FDD" ]] && QC_JSON_FDD=/home/afurs/O2DataProcessing/testing/detectors/FDD/fdd-digits-ds.json - [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json - [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json - [[ -z "$QC_JSON_EMC" ]] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json - [[ -z "$QC_JSON_MCH" ]] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json - [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=/home/dstocco/config/mid-qcmn-epn-digits.json - [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=/home/shahoian/jsons/vertexing-qc.json + if [[ $SYNCMODE == 1 ]]; then + [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json + [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json + [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-digit-cluster.json + [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json + [[ -z "$QC_JSON_FDD" ]] && QC_JSON_FDD=/home/afurs/O2DataProcessing/testing/detectors/FDD/fdd-digits-ds.json + [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json + [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json + [[ -z "$QC_JSON_EMC" ]] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json + [[ -z "$QC_JSON_MCH" ]] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json + [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=/home/dstocco/config/mid-qcmn-epn-digits.json + [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=/home/shahoian/jsons/vertexing-qc.json + else + [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=~/qc-async/tpc.json + [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=~/qc-async/its.json + [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=~/qc-async/mft.json + [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=~/qc-async/tof.json + [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=~/qc-async/ft0.json + [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=~/qc-async/fv0.json + [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=~/qc-async/mid.json + [[ -z "$QC_JSON_GLO" ]] && QC_JSON_GLO=~/qc-async/glo.json + [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=~/qc-async/primvtx.json + [[ -z "$QC_JSON_ITSTPC" ]] && QC_JSON_ITSTPC=~/qc-async/itstpc.json + [[ -z "$QC_JSON_ITSTPCTOF" ]] && QC_JSON_ITSTPCTOF=~/qc-async/itstpctof.json + fi if [[ -z "$GEN_TOPO_WORKDIR" ]]; then echo This script must be run via the gen_topo scripts, or a GEN_TOPO_WORKDIR must be provided where merged JSONS are stored 1>&2 From caecacde7af8aeeb0fec9f6c88574418e9432f6d Mon Sep 17 00:00:00 2001 From: Piotr Jan Konopka Date: Fri, 3 Dec 2021 14:46:34 +0100 Subject: [PATCH 231/236] fix json paths --- production/qc-workflow.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 5eef2cd..6e564b6 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -19,17 +19,17 @@ if [[ -z $QC_JSON_FROM_OUTSIDE ]]; then [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=/home/dstocco/config/mid-qcmn-epn-digits.json [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=/home/shahoian/jsons/vertexing-qc.json else - [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=~/qc-async/tpc.json - [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=~/qc-async/its.json - [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=~/qc-async/mft.json - [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=~/qc-async/tof.json - [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=~/qc-async/ft0.json - [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=~/qc-async/fv0.json - [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=~/qc-async/mid.json - [[ -z "$QC_JSON_GLO" ]] && QC_JSON_GLO=~/qc-async/glo.json - [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=~/qc-async/primvtx.json - [[ -z "$QC_JSON_ITSTPC" ]] && QC_JSON_ITSTPC=~/qc-async/itstpc.json - [[ -z "$QC_JSON_ITSTPCTOF" ]] && QC_JSON_ITSTPCTOF=~/qc-async/itstpctof.json + [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=$O2DATAPROCESSING_ROOT/production/qc-async/tpc.json + [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=$O2DATAPROCESSING_ROOT/production/qc-async/its.json + [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=$O2DATAPROCESSING_ROOT/production/qc-async/mft.json + [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=$O2DATAPROCESSING_ROOT/production/qc-async/tof.json + [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=$O2DATAPROCESSING_ROOT/production/qc-async/ft0.json + [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=$O2DATAPROCESSING_ROOT/production/qc-async/fv0.json + [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=$O2DATAPROCESSING_ROOT/production/qc-async/mid.json + [[ -z "$QC_JSON_GLO" ]] && QC_JSON_GLO=$O2DATAPROCESSING_ROOT/production/qc-async/glo.json + [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=$O2DATAPROCESSING_ROOT/production/qc-async/primvtx.json + [[ -z "$QC_JSON_ITSTPC" ]] && QC_JSON_ITSTPC=$O2DATAPROCESSING_ROOT/production/qc-async/itstpc.json + [[ -z "$QC_JSON_ITSTPCTOF" ]] && QC_JSON_ITSTPCTOF=$O2DATAPROCESSING_ROOT/production/qc-async/itstpctof.json fi if [[ -z "$GEN_TOPO_WORKDIR" ]]; then From 7021f8aae37a72c4ad6082d5eabb3ed5ba5f5022 Mon Sep 17 00:00:00 2001 From: Stefan Heckel Date: Fri, 3 Dec 2021 17:37:44 +0100 Subject: [PATCH 232/236] TPC-QC: update Clusters task in json for async QC --- production/qc-async/tpc.json | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/production/qc-async/tpc.json b/production/qc-async/tpc.json index fe550a8..b391e10 100644 --- a/production/qc-async/tpc.json +++ b/production/qc-async/tpc.json @@ -36,11 +36,11 @@ "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" + "type": "direct", + "query": "inputClus:TPC/CLUSTERNATIVE" }, "taskParameters": { - "myOwnKey": "myOwnValue", + "mergeableOutput": "true", "NClustersNBins": "100", "NClustersXMin": "0", "NClustersXMax": "100", "QmaxNBins": "200", "QmaxXMin": "0", "QmaxXMax": "200", "QtotNBins": "600", "QtotXMin": "10", "QtotXMax": "600", @@ -55,7 +55,7 @@ "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "60", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "direct", @@ -68,7 +68,7 @@ "moduleName": "QcTPC", "detectorName": "TPC", "cycleDurationSeconds": "60", - "resetAfterCycles": "10", + "resetAfterCycles": "1", "maxNumberCycles": "-1", "dataSource": { "type": "direct", @@ -78,23 +78,5 @@ } }, "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - } ] } From 58bad79317471bb6f11614e4ccfa9cc6a4d31282 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 6 Dec 2021 14:50:43 +0100 Subject: [PATCH 233/236] Make setenv set soft ulimits and add option not to set ulimits --- common/setenv.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/common/setenv.sh b/common/setenv.sh index 7f75621..1bf61f1 100755 --- a/common/setenv.sh +++ b/common/setenv.sh @@ -1,10 +1,12 @@ #!/bin/bash # Make sure we can open sufficiently many files / allocate enough memory -ulimit -n 4096 && ulimit -m unlimited && ulimit -v unlimited && [ -z "$GPUTYPE" ] || [ "$GPUTYPE" == "CPU" ] || ulimit -l unlimited -if [ $? != 0 ]; then - echo Error setting ulimits - exit 1 +if [ "0$SETENV_NO_ULIMIT" != "01" ]; then + ulimit -S -n 4096 && ulimit -S -m unlimited && ulimit -S -v unlimited && [ -z "$GPUTYPE" ] || [ "$GPUTYPE" == "CPU" ] || ulimit -S -l unlimited + if [ $? != 0 ]; then + echo Error setting ulimits + exit 1 + fi fi LIST_OF_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH,CTP" From 2b5211bdcdeed754ac89ce47b0ed95b529bd6ce1 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 6 Dec 2021 14:57:03 +0100 Subject: [PATCH 234/236] Use dpl-workflow.sh of O2 (not many changes any more in O2DataProcessing so this is simpler to keep things in sync) --- production/dpl-workflow.sh | 482 +------------------- production/full-system-test/dpl-workflow.sh | 8 - production/setenv.sh | 2 +- 3 files changed, 5 insertions(+), 487 deletions(-) delete mode 100755 production/full-system-test/dpl-workflow.sh diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh index dcb1942..24922ff 100755 --- a/production/dpl-workflow.sh +++ b/production/dpl-workflow.sh @@ -1,482 +1,8 @@ #!/bin/bash -# --------------------------------------------------------------------------------------------------------------------- -# Get this script's directory and load common settings (use zsh first (e.g. on Mac) and fallback on `readlink -f` if zsh is not there) -command -v zsh > /dev/null 2>&1 && MYDIR=$(dirname $(zsh -c 'echo ${0:A}' "$0")) -test -z ${MYDIR+x} && MYDIR="$(dirname $(readlink -f $0))" -source $MYDIR/setenv.sh - -if [ -z $FILEWORKDIRRUN ]; then FILEWORKDIRRUN=$FILEWORKDIR; fi # directory where to find the run-related files (grp, collision context) - -# --------------------------------------------------------------------------------------------------------------------- -#Some additional settings used in this workflow -if [[ -z $OPTIMIZED_PARALLEL_ASYNC ]]; then OPTIMIZED_PARALLEL_ASYNC=0; fi # Enable tuned process multiplicities for async processing on the EPN -if [[ -z $CTF_DIR ]]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store CTFs -if [[ -z $CTF_DICT_DIR ]]; then CTF_DICT_DIR=$FILEWORKDIR; fi # Directory of CTF dictionaries -if [[ -z $CTF_METAFILES_DIR ]]; then CTF_METAFILES_DIR="/dev/null"; fi # Directory where to store CTF files metada, /dev/null : skip their writing -if [[ -z $RECO_NUM_NODES_WORKFLOW ]]; then RECO_NUM_NODES_WORKFLOW=250; fi # Number of EPNs running this workflow in parallel, to increase multiplicities if necessary, by default assume we are 1 out of 250 servers -if [[ -z $CTF_MINSIZE ]]; then CTF_MINSIZE="2000000000"; fi # accumulate CTFs until file size reached -if [[ -z $CTF_MAX_PER_FILE ]]; then CTF_MAX_PER_FILE="10000"; fi # but no more than given number of CTFs per file -if [[ -z $IS_SIMULATED_DATA ]]; then IS_SIMULATED_DATA=1; fi # processing simulated data - -if [[ $SYNCMODE == 1 ]]; then - if [[ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]]; then export WORKFLOW_DETECTORS_MATCHING="ITSTPC,ITSTPCTRD,ITSTPCTOF"; fi # Select matchings that are enabled in sync mode -else - if [[ -z "${WORKFLOW_DETECTORS_MATCHING+x}" ]]; then export WORKFLOW_DETECTORS_MATCHING="ALL"; fi # All matching / vertexing enabled in async mode -fi - -workflow_has_parameter CTF && export SAVECTF=1 -workflow_has_parameter GPU && { export GPUTYPE=HIP; export NGPUS=4; } - -[[ -z $ITSCLUSDICT ]] && ITSCLUSDICT="${FILEWORKDIR}/ITSdictionary.bin" -[[ -z $MFTCLUSDICT ]] && MFTCLUSDICT="${FILEWORKDIR}/MFTdictionary.bin" -[[ -z $ITS_NOISE ]] && ITS_NOISE="${FILEWORKDIR}" -[[ -z $MFT_NOISE ]] && MFT_NOISE="${FILEWORKDIR}" -[[ -z $ITS_STROBE ]] && ITS_STROBE="891" -[[ -z $MFT_STROBE ]] && MFT_STROBE="198" - -MID_FEEID_MAP="$FILEWORKDIR/mid-feeId_mapper.txt" -NITSDECTHREADS=2 -NMFTDECTHREADS=2 -CTF_DICT=${CTF_DICT_DIR}/ctf_dictionary.root - -ITSMFT_FILES="ITSClustererParam.dictFilePath=$ITSCLUSDICT;MFTClustererParam.dictFilePath=$MFTCLUSDICT"; - -LIST_OF_ASYNC_RECO_STEPS="MID MCH MFT FDD FV0 ZDC" - -DISABLE_DIGIT_ROOT_INPUT="--disable-root-input" -DISABLE_DIGIT_CLUSTER_INPUT="--clusters-from-upstream" - -# --------------------------------------------------------------------------------------------------------------------- -# Set active reconstruction steps (defaults added according to SYNCMODE) - -has_processing_step() -{ - [[ $WORKFLOW_EXTRA_PROCESSING_STEPS =~ (^|,)"$1"(,|$) ]] -} - -for i in `echo $LIST_OF_GLORECO | sed "s/,/ /g"`; do - has_processing_step MATCH_$i && add_comma_separated WORKFLOW_DETECTORS_MATCHING $i # Enable extra matchings requested via WORKFLOW_EXTRA_PROCESSING_STEPS -done -if [[ $SYNCMODE == 1 ]]; then # Add default steps for synchronous mode - add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ENTROPY_ENCODER -else # Add default steps for async mode - for i in $LIST_OF_ASYNC_RECO_STEPS; do - has_detector_reco $i && add_comma_separated WORKFLOW_EXTRA_PROCESSING_STEPS ${i}_RECO - done -fi - -# --------------------------------------------------------------------------------------------------------------------- -# Set general arguments -ARGS_ALL="--session ${OVERRIDE_SESSION:-default} --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA --early-forward-policy noraw" -if [[ $EPNSYNCMODE == 1 ]]; then - ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" - ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 15" -elif [[ "0$ENABLE_METRICS" != "01" ]]; then - ARGS_ALL+=" --monitoring-backend no-op://" -fi -( [[ $EXTINPUT == 1 ]] || [[ $NUMAGPUIDS == 1 ]] ) && ARGS_ALL+=" --no-cleanup" -( [[ $GPUTYPE != "CPU" ]] || [[ $OPTIMIZED_PARALLEL_ASYNC != 0 ]] ) && ARGS_ALL+=" --shm-mlock-segment-on-creation 1" -[[ $SHMTHROW == 0 ]] && ARGS_ALL+=" --shm-throw-bad-alloc 0" -[[ $NORATELOG == 1 ]] && ARGS_ALL+=" --fairmq-rate-logging 0" -[[ $NUMAGPUIDS != 0 ]] && ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" -[[ ! -z $TIMEFRAME_RATE_LIMIT ]] && [[ $TIMEFRAME_RATE_LIMIT != 0 ]] && ARGS_ALL+=" --timeframes-rate-limit $TIMEFRAME_RATE_LIMIT --timeframes-rate-limit-ipcid $NUMAID" - -ARGS_ALL_CONFIG="NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIRRUN;NameConf.mDirGRP=$FILEWORKDIRRUN;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" - -# --------------------------------------------------------------------------------------------------------------------- -# Set some individual workflow arguments depending on configuration -GPU_INPUT=zsraw -GPU_OUTPUT=tracks,clusters -GPU_CONFIG= -GPU_CONFIG_KEY= -TOF_CONFIG= -TOF_INPUT=raw -TOF_OUTPUT=clusters -ITS_CONFIG_KEY= -TRD_CONFIG= -TRD_CONFIG_KEY= -TRD_FILTER_CONFIG= -CPV_INPUT=raw -EVE_CONFIG=" --jsons-folder $EDJSONS_DIR" -MIDDEC_CONFIG= -EMCRAW2C_CONFIG= - -if [[ $SYNCMODE == 1 ]]; then - if [[ $BEAMTYPE == "PbPb" ]]; then - ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500;" - [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode sync" - elif [[ $BEAMTYPE == "pp" ]]; then - ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=-1;fastMultConfig.cutMultClusHigh=-1;fastMultConfig.cutMultVtxHigh=-1;ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" - [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode sync" - elif [[ $BEAMTYPE == "cosmic" ]]; then - [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode cosmics" - else - [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode sync" - fi - GPU_CONFIG_KEY+="GPU_global.synchronousProcessing=1;GPU_proc.clearO2OutputFromGPU=1;" - TRD_CONFIG_KEY+="GPU_proc.ompThreads=1;" - has_detector ITS && TRD_FILTER_CONFIG+=" --filter-trigrec" -else - if [[ $BEAMTYPE == "PbPb" ]]; then - [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode async" - elif [[ $BEAMTYPE == "pp" ]]; then - ITS_CONFIG_KEY+="ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2" - [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode async" - elif [[ $BEAMTYPE == "cosmic" ]]; then - [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode cosmics" - else - [[ -z ${ITS_CONFIG+x} ]] && ITS_CONFIG=" --tracking-mode async" - fi -fi - -has_processing_step ENTROPY_ENCODER && has_detector_ctf TPC && GPU_OUTPUT+=",compressed-clusters-ctf" - -if [[ -z $DISABLE_ROOT_OUTPUT ]]; then - # enable only if root output is written, because it slows down the processing - GPU_OUTPUT+=",send-clusters-per-sector" -fi - -has_detector_flp_processing CPV && CPV_INPUT=digits -! has_detector_flp_processing TOF && TOF_CONFIG+=" --ignore-dist-stf" - -if [[ $EPNSYNCMODE == 1 ]]; then - EVE_CONFIG+=" --eve-dds-collection-index 0" - ITSMFT_FILES+=";ITSClustererParam.noiseFilePath=$ITS_NOISE;MFTClustererParam.noiseFilePath=$MFT_NOISE;ITSAlpideParam.roFrameLengthInBC=$ITS_STROBE;MFTAlpideParam.roFrameLengthInBC=$MFT_STROBE;" - MIDDEC_CONFIG+=" --feeId-config-file \"$MID_FEEID_MAP\"" - GPU_CONFIG_KEY+="GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;" - # Options for decoding current TRD real raw data (not needed for data converted from MC) - if [[ -z $TRD_DECODER_OPTIONS ]]; then TRD_DECODER_OPTIONS=" --tracklethcheader 2 "; fi - if [[ $EXTINPUT == 1 ]] && [[ $GPUTYPE != "CPU" ]] && [[ -z "$GPU_NUM_MEM_REG_CALLBACKS" ]]; then GPU_NUM_MEM_REG_CALLBACKS=4; fi -fi - -if [[ $GPUTYPE == "HIP" ]]; then - if [[ $NUMAID == 0 ]] || [[ $NUMAGPUIDS == 0 ]]; then - export TIMESLICEOFFSET=0 - else - export TIMESLICEOFFSET=$NGPUS - fi - GPU_CONFIG_KEY+="GPU_proc.deviceNum=0;GPU_global.mutexMemReg=true;" - GPU_CONFIG+=" --environment \"ROCR_VISIBLE_DEVICES={timeslice${TIMESLICEOFFSET}}\"" - export HSA_NO_SCRATCH_RECLAIM=1 - #export HSA_TOOLS_LIB=/opt/rocm/lib/librocm-debug-agent.so.2 -else - GPU_CONFIG_KEY+="GPU_proc.deviceNum=-2;" -fi - -if [[ ! -z $GPU_NUM_MEM_REG_CALLBACKS ]]; then - GPU_CONFIG+=" --expected-region-callbacks $GPU_NUM_MEM_REG_CALLBACKS" -fi - -if [[ $GPUTYPE != "CPU" ]]; then - GPU_CONFIG_KEY+="GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;" - if [[ $HOSTMEMSIZE == "0" ]]; then - HOSTMEMSIZE=$(( 1 << 30 )) - fi -fi - -if [[ $HOSTMEMSIZE != "0" ]]; then - GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" -fi - -if ! has_detector_reco TOF; then - TOF_OUTPUT=digits -fi - -[[ $IS_SIMULATED_DATA == "1" ]] && EMCRAW2C_CONFIG+=" --no-mergeHGLG" - -# --------------------------------------------------------------------------------------------------------------------- -# Assemble matching sources -TRD_SOURCES= -TOF_SOURCES= -TRACK_SOURCES= -has_detectors_reco ITS TPC && has_detector_matching ITSTPC && add_comma_separated TRACK_SOURCES "ITS-TPC" -has_detectors_reco TPC TRD && has_detector_matching TPCTRD && { add_comma_separated TRD_SOURCES TPC; add_comma_separated TRACK_SOURCES "TPC-TRD"; } -has_detectors_reco ITS TPC TRD && has_detector_matching ITSTPCTRD && { add_comma_separated TRD_SOURCES ITS-TPC; add_comma_separated TRACK_SOURCES "ITS-TPC-TRD"; } -has_detectors_reco TPC TOF && has_detector_matching TPCTOF && { add_comma_separated TOF_SOURCES TPC; add_comma_separated TRACK_SOURCES "TPC-TOF"; } -has_detectors_reco ITS TPC TOF && has_detector_matching ITSTPCTOF && { add_comma_separated TOF_SOURCES ITS-TPC; add_comma_separated TRACK_SOURCES "ITS-TPC-TOF"; } -has_detectors_reco MFT MCH && has_detector_matching MFTMCH && add_comma_separated TRACK_SOURCES "MFT-MCH" -for det in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do - if [[ $LIST_OF_ASYNC_RECO_STEPS =~ (^| )${det}( |$) ]]; then - has_detector ${det} && has_processing_step ${det}_RECO && add_comma_separated TRACK_SOURCES "$det" - else - has_detector_reco $det && add_comma_separated TRACK_SOURCES "$det" - fi -done -[[ -z $VERTEXING_SOURCES ]] && VERTEXING_SOURCES="$TRACK_SOURCES" -PVERTEX_CONFIG="--vertexing-sources $VERTEXING_SOURCES --vertex-track-matching-sources $VERTEXING_SOURCES" - -# this option requires well calibrated timing beween different detectors, at the moment suppress it -#has_detector_reco FT0 && PVERTEX_CONFIG+=" --validate-with-ft0" - -# --------------------------------------------------------------------------------------------------------------------- -# Process multiplicities - -# Helper function to apply scaling factors for process type (RAW/CTF/REST) and detector, or override multiplicity set for individual process externally. -N_F_REST=$MULTIPLICITY_FACTOR_REST -N_F_RAW=$MULTIPLICITY_FACTOR_RAWDECODERS -N_F_CTF=$MULTIPLICITY_FACTOR_CTFENCODERS -get_N() # USAGE: get_N [processor-name] [DETECTOR_NAME] [RAW|CTF|REST] [optional name [FOO] of variable "$N_[FOO]" with default, default = 1] -{ - local NAME_FACTOR="N_F_$3" - local NAME_DET="MULTIPLICITY_FACTOR_DETECTOR_$2" - local NAME_PROC="MULTIPLICITY_FACTOR_PROCESS_${1//-/_}" - local NAME_DEFAULT="N_$4" - echo $1:${!NAME_PROC:-$((${!NAME_FACTOR} * ${!NAME_DET:-1} * ${!NAME_DEFAULT:-1}))} -} - -math_max() -{ - echo $(($1 > $2 ? $1 : $2)) -} - -N_TPCTRK=$NGPUS -if [[ $OPTIMIZED_PARALLEL_ASYNC != 0 ]]; then - # Tuned multiplicities for async Pb-Pb processing - if [[ $SYNCMODE == "1" ]]; then echo "Must not use OPTIMIZED_PARALLEL_ASYNC with GPU or SYNCMODE" 1>&2; exit 1; fi - if [[ $NUMAGPUIDS == 1 ]]; then N_NUMAFACTOR=1; else N_NUMAFACTOR=2; fi - GPU_CONFIG_KEY+="GPU_proc.ompThreads=6;" - TRD_CONFIG_KEY+="GPU_proc.ompThreads=2;" - if [[ $GPUTYPE == "CPU" ]]; then - N_TPCENTDEC=$((2 * $N_NUMAFACTOR)) - N_MFTTRK=$((3 * $N_NUMAFACTOR)) - N_ITSTRK=$((3 * $N_NUMAFACTOR)) - N_TPCITS=$((2 * $N_NUMAFACTOR)) - N_MCHTRK=$((1 * $N_NUMAFACTOR)) - N_TOFMATCH=$((9 * $N_NUMAFACTOR)) - N_TPCTRK=$((6 * $N_NUMAFACTOR)) - else - N_TPCENTDEC=$(math_max $((3 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) - N_MFTTRK=$(math_max $((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) - N_ITSTRK=$(math_max $((6 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) - N_TPCITS=$(math_max $((4 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) - N_MCHTRK=$(math_max $((2 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) - N_TOFMATCH=$(math_max $((20 * $NGPUS * $OPTIMIZED_PARALLEL_ASYNC * $N_NUMAFACTOR / 4)) 1) - fi -elif [[ $EPNPIPELINES != 0 ]]; then - # Tuned multiplicities for sync Pb-Pb processing - N_TPCENT=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) - N_TPCITS=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) - N_ITSTRK=$(math_max $((2 * $EPNPIPELINES * $NGPUS / 4)) 1) - N_ITSRAWDEC=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) - N_EMCREC=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) - N_TRDENT=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) - N_TRDTRK=$(math_max $((3 * $EPNPIPELINES * $NGPUS / 4)) 1) - N_TPCRAWDEC=$(math_max $((12 * $EPNPIPELINES * $NGPUS / 4)) 1) - if [[ $GPUTYPE == "CPU" ]]; then - N_TPCTRK=8 - GPU_CONFIG_KEY+="GPU_proc.ompThreads=4;" - fi - # Scale some multiplicities with the number of nodes - RECO_NUM_NODES_WORKFLOW_CMP=$((($RECO_NUM_NODES_WORKFLOW > 15 ? $RECO_NUM_NODES_WORKFLOW : 15) * ($NUMAGPUIDS == 1 ? 2 : 1))) # Limit the lower scaling factor, multiply by 2 if we have 2 NUMA domains - N_ITSRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSRAWDEC:-1}) # This means, if we have 60 EPN nodes, we need at least 3 ITS RAW decoders - N_MFTRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTRAWDEC:-1}) - N_ITSTRK=$(math_max $((1 * 200 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_ITSTRK:-1}) - N_MFTTRK=$(math_max $((1 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_MFTTRK:-1}) - N_CTPRAWDEC=$(math_max $((1 * 30 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_CTPRAWDEC:-1}) - N_TRDRAWDEC=$(math_max $((3 * 60 / $RECO_NUM_NODES_WORKFLOW_CMP)) ${N_TRDRAWDEC:-1}) -fi - -# --------------------------------------------------------------------------------------------------------------------- -# Helper to add binaries to workflow adding automatic and custom arguments -WORKFLOW= # Make sure we start with an empty workflow -[[ "0$GEN_TOPO_ONTHEFLY" == "01" ]] && WORKFLOW="echo '{}' | " - -add_W() # Add binarry to workflow command USAGE: add_W [BINARY] [COMMAND_LINE_OPTIONS] [CONFIG_KEY_VALUES] [Add ARGS_ALL_CONFIG, optional, default = 1] -{ - local NAME_PROC_ARGS="ARGS_EXTRA_PROCESS_${1//-/_}" - local NAME_PROC_CONFIG="CONFIG_EXTRA_PROCESS_${1//-/_}" - local KEY_VALUES= - [[ "0$4" != "00" ]] && KEY_VALUES+="$ARGS_ALL_CONFIG;" - [[ ! -z "$3" ]] && KEY_VALUES+="$3;" - [[ ! -z ${!NAME_PROC_CONFIG} ]] && KEY_VALUES+="${!NAME_PROC_CONFIG};" - [[ ! -z "$KEY_VALUES" ]] && KEY_VALUES="--configKeyValues \"$KEY_VALUES\"" - WORKFLOW+="$1 $ARGS_ALL $2 ${!NAME_PROC_ARGS} $KEY_VALUES | " -} - - -# --------------------------------------------------------------------------------------------------------------------- -# Input workflow -if [[ $CTFINPUT == 1 ]]; then - GPU_INPUT=compressed-clusters-ctf - TOF_INPUT=digits - CTFName=`ls -t $FILEWORKDIR/o2_ctf_*.root 2> /dev/null | head -n1` - [[ -z $CTFName && $WORKFLOWMODE == "print" ]] && CTFName='$CTFName' - [[ ! -z $INPUT_FILE_LIST ]] && CTFName=$INPUT_FILE_LIST - if [[ $NTIMEFRAMES == -1 ]]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi - add_W o2-ctf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --ctf-input ${CTFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --ctf-dict ${CTF_DICT} --onlyDet $WORKFLOW_DETECTORS --pipeline $(get_N tpc-entropy-decoder TPC REST TPCENTDEC)" -elif [[ $RAWTFINPUT == 1 ]]; then - TFName=`ls -t $FILEWORKDIR/o2_*.tf 2> /dev/null | head -n1` - [[ -z $TFName && $WORKFLOWMODE == "print" ]] && TFName='$TFName' - [[ ! -z $INPUT_FILE_LIST ]] && TFName=$INPUT_FILE_LIST - if [[ $NTIMEFRAMES == -1 ]]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--max-tf $NTIMEFRAMES"; fi - add_W o2-raw-tf-reader-workflow "--delay $TFDELAY --loop $TFLOOP $NTIMEFRAMES_CMD --input-data ${TFName} ${INPUT_FILE_COPY_CMD+--copy-cmd} ${INPUT_FILE_COPY_CMD} --onlyDet $WORKFLOW_DETECTORS" -elif [[ $EXTINPUT == 1 ]]; then - PROXY_CHANNEL="name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=$EPNSYNCMODE" - PROXY_INSPEC="dd:FLP/DISTSUBTIMEFRAME/0" - PROXY_IN_N=0 - for i in `echo "$WORKFLOW_DETECTORS" | sed "s/,/ /g"`; do - if has_detector_flp_processing $i; then - case $i in - TOF) - PROXY_INTYPE="CRAWDATA";; - FT0 | FV0 | FDD) - PROXY_INTYPE="DIGITSBC/0 DIGITSCH/0";; - PHS) - PROXY_INTYPE="CELLS CELLTRIGREC";; - CPV) - PROXY_INTYPE="DIGITS/0 DIGITTRIGREC/0 RAWHWERRORS";; - EMC) - PROXY_INTYPE="CELLS/0 CELLSTRGR/0 DECODERERR";; - *) - echo Input type for detector $i with FLP processing not defined 1>&2 - exit 1;; - esac - else - PROXY_INTYPE=RAWDATA - fi - for j in $PROXY_INTYPE; do - PROXY_INNAME="RAWIN$PROXY_IN_N" - let PROXY_IN_N=$PROXY_IN_N+1 - PROXY_INSPEC+=";$PROXY_INNAME:$i/$j" - done - done - [[ ! -z $TIMEFRAME_RATE_LIMIT ]] && [[ $TIMEFRAME_RATE_LIMIT != 0 ]] && PROXY_CHANNEL+=";name=metric-feedback,type=pull,method=connect,address=ipc://@metric-feedback-$NUMAID,transport=shmem,rateLogging=0" - add_W o2-dpl-raw-proxy "--dataspec \"$PROXY_INSPEC\" --readout-proxy \"--channel-config \\\"$PROXY_CHANNEL\\\"\" ${TIMEFRAME_SHM_LIMIT+--timeframes-shm-limit} $TIMEFRAME_SHM_LIMIT" "" 0 -elif [[ $DIGITINPUT == 1 ]]; then - [[ $NTIMEFRAMES != 1 ]] && { echo "Digit input works only with NTIMEFRAMES=1"; exit 1; } - DISABLE_DIGIT_ROOT_INPUT= - DISABLE_DIGIT_CLUSTER_INPUT= - TOF_INPUT=digits - GPU_INPUT=zsonthefly - has_detector TPC && add_W o2-tpc-reco-workflow "--input-type digits --output-type zsraw,disable-writer $DISABLE_MC --pipeline $(get_N tpc-zsEncoder TPC RAW TPCRAWDEC)" - has_detector MID && add_W o2-mid-digits-reader-workflow "$DISABLE_MC" "" -else - if [[ $NTIMEFRAMES == -1 ]]; then NTIMEFRAMES_CMD= ; else NTIMEFRAMES_CMD="--loop $NTIMEFRAMES"; fi - add_W o2-raw-file-reader-workflow "--detect-tf0 --delay $TFDELAY $NTIMEFRAMES_CMD --max-tf 0 --input-conf $FILEWORKDIR/rawAll.cfg" "HBFUtils.nHBFPerTF=$NHBPERTF" +if [ "0$O2_ROOT" == "0" ]; then + echo O2 environment not loaded 1>&2 + exit 1 fi -# if root output is requested, record info of processed TFs DataHeader for replay of root files -[[ -z "$DISABLE_ROOT_OUTPUT" ]] && add_W o2-tfidinfo-writer-workflow - -# --------------------------------------------------------------------------------------------------------------------- -# Raw decoder workflows - disabled in async mode -if [[ $CTFINPUT == 0 && $DIGITINPUT == 0 ]]; then - if has_detector TPC && [[ $EPNSYNCMODE == 1 ]]; then - GPU_INPUT=zsonthefly - add_W o2-tpc-raw-to-digits-workflow "--input-spec \"A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0\" --remove-duplicates --pipeline $(get_N tpc-raw-to-digits-0 TPC RAW TPCRAWDEC)" - add_W o2-tpc-reco-workflow "--input-type digitizer --output-type zsraw,disable-writer --pipeline $(get_N tpc-zsEncoder TPC RAW TPCRAWDEC)" - fi - has_detector ITS && add_W o2-itsmft-stf-decoder-workflow "--nthreads ${NITSDECTHREADS} --pipeline $(get_N its-stf-decoder ITS RAW ITSRAWDEC)" "$ITSMFT_FILES" - has_detector MFT && add_W o2-itsmft-stf-decoder-workflow "--nthreads ${NMFTDECTHREADS} --pipeline $(get_N mft-stf-decoder MFT RAW MFTRAWDEC) --runmft true" "$ITSMFT_FILES" - has_detector FT0 && ! has_detector_flp_processing FT0 && add_W o2-ft0-flp-dpl-workflow "$DISABLE_ROOT_OUTPUT --pipeline $(get_N ft0-datareader-dpl FT0 RAW)" - has_detector FV0 && ! has_detector_flp_processing FV0 && add_W o2-fv0-flp-dpl-workflow "$DISABLE_ROOT_OUTPUT --pipeline $(get_N fv0-datareader-dpl FV0 RAW)" - has_detector MID && add_W o2-mid-raw-to-digits-workflow "$MIDDEC_CONFIG --pipeline $(get_N MIDRawDecoder MID RAW),$(get_N MIDDecodedDataAggregator MID RAW)" - has_detector MCH && add_W o2-mch-raw-to-digits-workflow "--pipeline $(get_N mch-data-decoder MCH RAW)" - has_detector TOF && ! has_detector_flp_processing TOF && add_W o2-tof-compressor "--pipeline $(get_N tof-compressor TOF RAW)" - has_detector FDD && ! has_detector_flp_processing FDD && add_W o2-fdd-flp-dpl-workflow "$DISABLE_ROOT_OUTPUT --pipeline $(get_N fdd-datareader-dpl FDD RAW)" - has_detector TRD && add_W o2-trd-datareader "$TRD_DECODER_OPTIONS --pipeline $(get_N trd-datareader TRD RAW TRDRAWDEC)" "" 0 - has_detector ZDC && add_W o2-zdc-raw2digits "$DISABLE_ROOT_OUTPUT --pipeline $(get_N zdc-datareader-dpl ZDC RAW)" - has_detector HMP && add_W o2-hmpid-raw-to-digits-stream-workflow "--pipeline $(get_N HMP-RawStreamDecoder HMP RAW)" - has_detector CTP && add_W o2-ctp-reco-workflow "--pipeline $(get_N CTP-RawStreamDecoder CTP RAW)" - has_detector PHS && ! has_detector_flp_processing PHS && add_W o2-phos-reco-workflow "--input-type raw --output-type cells --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N PHOSRawToCellConverterSpec PHS REST) $DISABLE_MC" - has_detector CPV && add_W o2-cpv-reco-workflow "--input-type $CPV_INPUT --output-type clusters --disable-root-input $DISABLE_ROOT_OUTPUT --pipeline $(get_N CPVRawToDigitConverterSpec CPV REST),$(get_N CPVClusterizerSpec CPV REST) $DISABLE_MC" - has_detector EMC && ! has_detector_flp_processing EMC && add_W o2-emcal-reco-workflow "--input-type raw --output-type cells $EMCRAW2C_CONFIG $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N EMCALRawToCellConverterSpec EMC REST EMCREC)" -fi - -# --------------------------------------------------------------------------------------------------------------------- -# Common reconstruction workflows -(has_detector_reco TPC || has_detector_ctf TPC) && WORKFLOW+="o2-gpu-reco-workflow ${ARGS_ALL//-severity $SEVERITY/-severity $SEVERITY_TPC} --input-type=$GPU_INPUT $DISABLE_MC --output-type $GPU_OUTPUT --pipeline gpu-reconstruction:${N_TPCTRK:-1} $GPU_CONFIG $ARGS_EXTRA_PROCESS_o2_gpu_reco_workflow --configKeyValues \"$ARGS_ALL_CONFIG;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$GPU_CONFIG_KEY;$GPU_EXTRA_CONFIG;$CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow\" | " -(has_detector_reco TOF || has_detector_ctf TOF) && add_W o2-tof-reco-workflow "$TOF_CONFIG --input-type $TOF_INPUT --output-type $TOF_OUTPUT $DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N tof-compressed-decoder TOF RAW),$(get_N TOFClusterer TOF REST)" -has_detector_reco ITS && add_W o2-its-reco-workflow "--trackerCA $ITS_CONFIG $DISABLE_MC $DISABLE_DIGIT_CLUSTER_INPUT $DISABLE_ROOT_OUTPUT --pipeline $(get_N its-tracker ITS REST ITSTRK)" "$ITS_CONFIG_KEY;$ITSMFT_FILES" -has_detectors_reco ITS TPC && has_detector_matching ITSTPC && add_W o2-tpcits-match-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N itstpc-track-matcher MATCH REST TPCITS)" "$ITSTPC_EXTRA_CONFIG;$ITSMFT_FILES" -has_detector_reco FT0 && add_W o2-ft0-reco-workflow "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N ft0-reconstructor FT0 REST)" -has_detector_reco TRD && add_W o2-trd-tracklet-transformer "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_FILTER_CONFIG --pipeline $(get_N TRDTRACKLETTRANSFORMER TRD REST TRDTRK)" -has_detectors_reco TRD TPC ITS && [[ ! -z "$TRD_SOURCES" ]] && add_W o2-trd-global-tracking "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC $TRD_CONFIG $TRD_FILTER_CONFIG --track-sources $TRD_SOURCES" "$TRD_CONFIG_KEY;$ITSMFT_FILES" -has_detectors_reco TOF TRD TPC ITS && [[ ! -z "$TOF_SOURCES" ]] && add_W o2-tof-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --track-sources $TOF_SOURCES --pipeline $(get_N tof-matcher TOF REST TOFMATCH)" "$ITSMFT_FILES" -has_detectors TPC && [ -z "$DISABLE_ROOT_OUTPUT" ] && add_W o2-tpc-reco-workflow "--input-type pass-through --output-type clusters,tracks,send-clusters-per-sector $DISABLE_MC" - -# --------------------------------------------------------------------------------------------------------------------- -# Reconstruction workflows normally active only in async mode in async mode ($LIST_OF_ASYNC_RECO_STEPS), but can be forced via $WORKFLOW_EXTRA_PROCESSING_STEPS -has_detector MID && has_processing_step MID_RECO && add_W o2-mid-reco-workflow "$DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N MIDClusterizer MID REST),$(get_N MIDTracker MID REST)" -has_detector MCH && has_processing_step MCH_RECO && add_W o2-mch-reco-workflow "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N mch-track-finder MCH REST MCHTRK),$(get_N mch-cluster-finder MCH REST),$(get_N mch-cluster-transformer MCH REST)" -has_detector MFT && has_processing_step MFT_RECO && add_W o2-mft-reco-workflow "$DISABLE_DIGIT_CLUSTER_INPUT $DISABLE_MC $DISABLE_ROOT_OUTPUT --pipeline $(get_N mft-tracker MFT REST MFTTRK)" "$ITSMFT_FILES" -has_detector FDD && has_processing_step FDD_RECO && add_W o2-fdd-reco-workflow "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC" -has_detector FV0 && has_processing_step FV0_RECO && add_W o2-fv0-reco-workflow "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC" -has_detector ZDC && has_processing_step ZDC_RECO && add_W o2-zdc-digits-reco "$DISABLE_DIGIT_ROOT_INPUT $DISABLE_ROOT_OUTPUT $DISABLE_MC" -has_detectors_reco MFT MCH && has_detector_matching MFTMCH && add_W o2-globalfwd-matcher-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT $DISABLE_MC --pipeline $(get_N globalfwd-track-matcher MATCH REST)" - -if [[ $BEAMTYPE != "cosmic" ]]; then - has_detectors_reco ITS && has_detector_matching PRIMVTX && [[ ! -z "$VERTEXING_SOURCES" ]] && add_W o2-primary-vertexing-workflow "$DISABLE_MC --disable-root-input $DISABLE_ROOT_OUTPUT $PVERTEX_CONFIG --pipeline $(get_N primary-vertexing MATCH REST)" "$PVERTEX_EXTRA_CONFIG" - has_detectors_reco ITS && has_detector_matching SECVTX && [[ ! -z "$VERTEXING_SOURCES" ]] && add_W o2-secondary-vertexing-workflow "--disable-root-input $DISABLE_ROOT_OUTPUT --vertexing-sources $VERTEXING_SOURCES --pipeline $(get_N secondary-vertexing MATCH REST)" "$SVERTEX_EXTRA_CONFIG" -fi - -# --------------------------------------------------------------------------------------------------------------------- -# Entropy encoding / ctf creation workflows - disabled in async mode -if has_processing_step ENTROPY_ENCODER && [[ ! -z "$WORKFLOW_DETECTORS_CTF" ]] && [[ $WORKFLOW_DETECTORS_CTF != "NONE" ]]; then - # Entropy encoder workflows - has_detector_ctf MFT && add_W o2-itsmft-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MFT_ENC_MEMFACT:-1.5} --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF)" - has_detector_ctf FT0 && add_W o2-ft0-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FT0_ENC_MEMFACT:-1.5} --pipeline $(get_N ft0-entropy-encoder FT0 CTF)" - has_detector_ctf FV0 && add_W o2-fv0-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FV0_ENC_MEMFACT:-1.5} --pipeline $(get_N fv0-entropy-encoder FV0 CTF)" - has_detector_ctf MID && add_W o2-mid-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MID_ENC_MEMFACT:-1.5} --pipeline $(get_N mid-entropy-encoder MID CTF)" - has_detector_ctf MCH && add_W o2-mch-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${MCH_ENC_MEMFACT:-1.5} --pipeline $(get_N mch-entropy-encoder MCH CTF)" - has_detector_ctf PHS && add_W o2-phos-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${PHS_ENC_MEMFACT:-1.5} --pipeline $(get_N phos-entropy-encoder PHS CTF)" - has_detector_ctf CPV && add_W o2-cpv-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${CPV_ENC_MEMFACT:-1.5} --pipeline $(get_N cpv-entropy-encoder CPV CTF)" - has_detector_ctf EMC && add_W o2-emcal-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${EMC_ENC_MEMFACT:-1.5} --pipeline $(get_N emcal-entropy-encoder EMC CTF)" - has_detector_ctf ZDC && add_W o2-zdc-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${ZDC_ENC_MEMFACT:-1.5} --pipeline $(get_N zdc-entropy-encoder ZDC CTF)" - has_detector_ctf FDD && add_W o2-fdd-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${FDD_ENC_MEMFACT:-1.5} --pipeline $(get_N fdd-entropy-encoder FDD CTF)" - has_detector_ctf HMP && add_W o2-hmpid-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${HMP_ENC_MEMFACT:-1.5} --pipeline $(get_N hmpid-entropy-encoder HMP CTF)" - has_detector_ctf TOF && add_W o2-tof-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${TOF_ENC_MEMFACT:-1.5} --pipeline $(get_N tof-entropy-encoder TOF CTF)" - has_detector_ctf ITS && add_W o2-itsmft-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${ITS_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder ITS CTF)" - has_detector_ctf TRD && add_W o2-trd-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${TRD_ENC_MEMFACT:-1.5} --pipeline $(get_N trd-entropy-encoder TRD CTF TRDENT)" - has_detector_ctf TPC && add_W o2-tpc-reco-workflow "--ctf-dict \"${CTF_DICT}\" --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --mem-factor ${TPC_ENC_MEMFACT:-1.5} --pipeline $(get_N tpc-entropy-encoder TPC CTF TPCENT)" - has_detector_ctf CTP && add_W o2-ctp-entropy-encoder-workflow "--ctf-dict \"${CTF_DICT}\" --mem-factor ${CTP_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder CTP CTF)" - - # CTF / dictionary writer workflow - if [[ $SAVECTF == 1 && $WORKFLOWMODE == "run" ]]; then - mkdir -p $CTF_DIR - fi - if [[ $CREATECTFDICT == 1 && $WORKFLOWMODE == "run" ]] ; then - mkdir -p $CTF_DICT_DIR; - rm -f $CTF_DICT - fi - CTF_OUTPUT_TYPE="none" - if [[ $CREATECTFDICT == 1 ]] && [[ $SAVECTF == 1 ]]; then CTF_OUTPUT_TYPE="both"; fi - if [[ $CREATECTFDICT == 1 ]] && [[ $SAVECTF == 0 ]]; then CTF_OUTPUT_TYPE="dict"; fi - if [[ $CREATECTFDICT == 0 ]] && [[ $SAVECTF == 1 ]]; then CTF_OUTPUT_TYPE="ctf"; fi - CONFIG_CTF="--output-dir \"$CTF_DIR\" --ctf-dict-dir \"$CTF_DICT_DIR\" --output-type $CTF_OUTPUT_TYPE --min-file-size ${CTF_MINSIZE} --max-ctf-per-file ${CTF_MAX_PER_FILE} --onlyDet $WORKFLOW_DETECTORS_CTF --append-det-to-period $CTF_MAXDETEXT --meta-output-dir $CTF_METAFILES_DIR" - if [[ $CREATECTFDICT == 1 ]] && [[ $EXTINPUT == 1 ]]; then CONFIG_CTF+=" --save-dict-after $SAVE_CTFDICT_NTIMEFRAMES"; fi - add_W o2-ctf-writer-workflow "$CONFIG_CTF" -fi - -# --------------------------------------------------------------------------------------------------------------------- -# Calibration workflows -workflow_has_parameter CALIB && has_detector_calib TPC && has_detectors TPC ITS TRD TOF && add_W o2-tpc-scdcalib-interpolation-workflow "$DISABLE_ROOT_OUTPUT --disable-root-input --pipeline $(get_N tpc-track-interpolation TPC REST)" "$ITSMFT_FILES" - -# --------------------------------------------------------------------------------------------------------------------- -# Event display -# RS this is a temporary setting -[[ -z "$ED_TRACKS" ]] && ED_TRACKS=$TRACK_SOURCES -[[ -z "$ED_CLUSTERS" ]] && ED_CLUSTERS=$TRACK_SOURCES -workflow_has_parameter EVENT_DISPLAY && [[ $NUMAID == 0 ]] && [[ ! -z "$ED_TRACKS" ]] && [[ ! -z "$ED_CLUSTERS" ]] && add_W o2-eve-display "--display-tracks $ED_TRACKS --display-clusters $ED_CLUSTERS $EVE_CONFIG $DISABLE_MC" "$ITSMFT_FILES" - -# --------------------------------------------------------------------------------------------------------------------- -# AOD -[[ -z "$AOD_INPUT" ]] && AOD_INPUT=$TRACK_SOURCES -workflow_has_parameter AOD && [[ ! -z "$AOD_INPUT" ]] && add_W o2-aod-producer-workflow "--info-sources $AOD_INPUT --disable-root-input --aod-writer-keep dangling --aod-writer-resfile "AO2D" --aod-writer-resmode UPDATE $DISABLE_MC" - -# --------------------------------------------------------------------------------------------------------------------- -# Quality Control -workflow_has_parameter QC && { source $O2DATAPROCESSING_ROOT/production/qc-workflow.sh; [[ $? != 0 ]] && exit 1; } - -# --------------------------------------------------------------------------------------------------------------------- -# DPL run binary -WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" - -# --------------------------------------------------------------------------------------------------------------------- -# Run / create / print workflow -[[ $WORKFLOWMODE != "print" ]] && WORKFLOW+=" --${WORKFLOWMODE}" -[[ $WORKFLOWMODE == "print" || "0$PRINT_WORKFLOW" == "01" ]] && echo "#Workflow command:\n\n${WORKFLOW}\n" | sed -e "s/\\\\n/\n/g" -e"s/| */| \\\\\n/g" | eval cat $( [[ $WORKFLOWMODE == "dds" ]] && echo '1>&2') -[[ $WORKFLOWMODE != "print" ]] && eval $WORKFLOW - -# --------------------------------------------------------------------------------------------------------------------- +source $O2_ROOT/prodtests/full-system-test/dpl-workflow.sh diff --git a/production/full-system-test/dpl-workflow.sh b/production/full-system-test/dpl-workflow.sh deleted file mode 100755 index 27f659e..0000000 --- a/production/full-system-test/dpl-workflow.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -if [ "0$O2_ROOT" == "0" ]; then - echo O2 environment not loaded - exit 1 -fi - -source $O2_ROOT/prodtests/full-system-test/dpl-workflow.sh diff --git a/production/setenv.sh b/production/setenv.sh index a3f9dc9..e25923b 120000 --- a/production/setenv.sh +++ b/production/setenv.sh @@ -1 +1 @@ -full-system-test/setenv.sh \ No newline at end of file +../common/setenv.sh \ No newline at end of file From a3836ebfdecf6e82dd85fe4f0ff491418aa31a83 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Mon, 6 Dec 2021 15:04:50 +0100 Subject: [PATCH 235/236] Add local copies of sync QC JSON files for EPNMODE=0 --- production/qc-sync/emc.json | 157 +++++++++++++++++++++++++++ production/qc-sync/fdd.json | 72 +++++++++++++ production/qc-sync/ft0.json | 72 +++++++++++++ production/qc-sync/fv0.json | 71 +++++++++++++ production/qc-sync/its.json | 146 +++++++++++++++++++++++++ production/qc-sync/mch.json | 81 ++++++++++++++ production/qc-sync/mft.json | 154 +++++++++++++++++++++++++++ production/qc-sync/mid.json | 65 ++++++++++++ production/qc-sync/pvtx.json | 83 +++++++++++++++ production/qc-sync/tof.json | 200 +++++++++++++++++++++++++++++++++++ production/qc-sync/tpc.json | 188 ++++++++++++++++++++++++++++++++ production/qc-workflow.sh | 14 ++- 12 files changed, 1302 insertions(+), 1 deletion(-) create mode 100644 production/qc-sync/emc.json create mode 100644 production/qc-sync/fdd.json create mode 100644 production/qc-sync/ft0.json create mode 100644 production/qc-sync/fv0.json create mode 100644 production/qc-sync/its.json create mode 100644 production/qc-sync/mch.json create mode 100644 production/qc-sync/mft.json create mode 100644 production/qc-sync/mid.json create mode 100644 production/qc-sync/pvtx.json create mode 100644 production/qc-sync/tof.json create mode 100644 production/qc-sync/tpc.json diff --git a/production/qc-sync/emc.json b/production/qc-sync/emc.json new file mode 100644 index 0000000..b0bf738 --- /dev/null +++ b/production/qc-sync/emc.json @@ -0,0 +1,157 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "infologger": { + "filterDiscardDebug": "true", + "filterDiscardLevel": "1" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawTask": { + "active": "true", + "className": "o2::quality_control_modules::emcal::RawTask", + "moduleName": "QcEMCAL", + "detectorName": "EMC", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "emcrawdata" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "alio2-cr1-qc02.cern.ch", + "remotePort": "47701", + "mergingMode": "delta", + "localControl": "odc" + }, + "DigitsTask": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitsQcTask", + "moduleName": "QcEMCAL", + "detectorName": "EMC", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "emccells" + }, + "taskParameters": { + "nothing": "rien" + }, + "location": "local", + "localMachines": [ + "epn" + ], + "remoteMachine": "alio2-cr1-qc02.cern.ch", + "remotePort": "47702", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "checks": { + "RawBunchMinAmplitude": { + "active": "true", + "className": "o2::quality_control_modules::emcal::RawCheck", + "moduleName": "QcEMCAL", + "policy": "OnEachSeparately", + "dataSource": [ + { + "type": "Task", + "name": "RawTask", + "MOs": ["BunchMinRawAmplitudeFull_PHYS", "BunchMinRawAmplitudeEMCAL_PHYS", "BunchMinRawAmplitudeDCAL_PHYS", + "BunchMinRawAmplitude_SM0_PHYS", "BunchMinRawAmplitude_SM1_PHYS", "BunchMinRawAmplitude_SM2_PHYS", + "BunchMinRawAmplitude_SM3_PHYS", "BunchMinRawAmplitude_SM4_PHYS", "BunchMinRawAmplitude_SM5_PHYS", + "BunchMinRawAmplitude_SM6_PHYS", "BunchMinRawAmplitude_SM7_PHYS", "BunchMinRawAmplitude_SM8_PHYS", + "BunchMinRawAmplitude_SM9_PHYS", "BunchMinRawAmplitude_SM10_PHYS", "BunchMinRawAmplitude_SM11_PHYS", + "BunchMinRawAmplitude_SM12_PHYS", "BunchMinRawAmplitude_SM13_PHYS", "BunchMinRawAmplitude_SM14_PHYS", + "BunchMinRawAmplitude_SM15_PHYS", "BunchMinRawAmplitude_SM16_PHYS", "BunchMinRawAmplitude_SM17_PHYS", + "BunchMinRawAmplitude_SM18_PHYS", "BunchMinRawAmplitude_SM19_PHYS" + ] + } + ] + }, + "RawErrorCheck": { + "active": "true", + "className": "o2::quality_control_modules::emcal::RawCheck", + "moduleName": "QcEMCAL", + "policy": "OnEachSeparately", + "dataSource": [ + { + "type": "Task", + "name": "RawTask", + "MOs": ["ErrorTypePerSM"] + } + ] + }, + "DigitsCheckAmplitude": { + "active": "true", + "className": "o2::quality_control_modules::emcal::DigitCheck", + "moduleName": "QcEMCAL", + "policy": "OnEachSeparately", + "detectorName": "EMC", + "dataSource": [ + { + "type": "Task", + "name": "DigitsTask", + "MOs": ["digitAmplitudeEMCAL_CAL", "digitAmplitudeEMCAL_PHYS", "digitAmplitudeDCAL_CAL", "digitAmplitudeDCAL_PHYS", + "digitAmplitude_CAL", "digitAmplitude_PHYS" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + { + "id": "emcrawdata", + "active": "true", + "machines": ["epn"], + "query": "readout:EMC/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1248" + } + ], + "blocking": "false" + }, + { + "id": "emccells", + "active": "true", + "machines": ["epn"], + "query": "emcal-digits:EMC/CELLS;emcal-triggerecords:EMC/CELLSTRGR", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1248" + } + ], + "blocking": "false" + } + ] + } \ No newline at end of file diff --git a/production/qc-sync/fdd.json b/production/qc-sync/fdd.json new file mode 100644 index 0000000..5855c29 --- /dev/null +++ b/production/qc-sync/fdd.json @@ -0,0 +1,72 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFDD": { + "active": "true", + "className": "o2::quality_control_modules::fdd::DigitQcTask", + "moduleName": "QcFDD", + "detectorName": "FDD", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "mergerCycleMultiplier": "2", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "fdd-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47720", + "mergingMode": "delta", + "localControl": "odc" + + } + } + }, + "dataSamplingPolicies": [ + { + "id": "fdd-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "1.", + "seed": "4533" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/production/qc-sync/ft0.json b/production/qc-sync/ft0.json new file mode 100644 index 0000000..088321f --- /dev/null +++ b/production/qc-sync/ft0.json @@ -0,0 +1,72 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFT0": { + "active": "true", + "className": "o2::quality_control_modules::ft0::DigitQcTask", + "moduleName": "QcFT0", + "detectorName": "FT0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "ft0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47721", + "mergingMode": "delta", + "mergerCycleMultiplier": "2", + "localControl": "odc" + + } + } + }, + "dataSamplingPolicies": [ + { + "id": "ft0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "1.", + "seed": "4533" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/production/qc-sync/fv0.json b/production/qc-sync/fv0.json new file mode 100644 index 0000000..8020f8d --- /dev/null +++ b/production/qc-sync/fv0.json @@ -0,0 +1,71 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs.cern.ch:8500" + }, + "conditionDB": { + "url": "qcdb.cern.ch:8083" + } + }, + "tasks": { + "DigitQcTaskFV0": { + "active": "true", + "className": "o2::quality_control_modules::fv0::DigitQcTask", + "moduleName": "QcFV0", + "detectorName": "FV0", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "resetAfterCycles": "1", + "mergerCycleMultiplier": "2", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "fv0-digits" + }, + "taskParameters": { + "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "alio2-cr1-qme02.cern.ch", + "remotePort": "47722", + "mergingMode": "delta", + "localControl": "odc" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "fv0-digits", + "active": "true", + "machines": [], + "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", + "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "1.", + "seed": "4533" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/production/qc-sync/its.json b/production/qc-sync/its.json new file mode 100644 index 0000000..055cc99 --- /dev/null +++ b/production/qc-sync/its.json @@ -0,0 +1,146 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-aliecs:8500" + }, + "conditionDB": { + "url": "alio2-cr1-hv-qcdb1.cern.ch:8083" + } + }, + "tasks": { + "ITSClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "180", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "compclus" + }, + "location": "local", + "taskParameters": { + "layer": "1111111", + "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", + "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", + "geomPath": "/home/epn/odc/files/o2sim_geometry.root", + "nThreads": "4" + }, + "localMachines": [ + "localhost", "epn" + ], + "localControl": "odc", + "remotePort": "47705", + "remoteMachine": "alio2-cr1-qme04.cern.ch" + }, + "ITSTrackTask": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackTask", + "moduleName": "QcITS", + "detectorName": "ITS", + "cycleDurationSeconds": "30", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "tracks" + }, + "location": "local", + "taskParameters" : { + "runNumberPath" : "/home/its/QC/workdir/infiles/RunNumber.dat", + "vertexXYsize" : "0.1", + "vertexZsize": "15", + "vertexRsize": "0.1" + }, + "localMachines": [ + "localhost", "epn" + ], + "localControl": "odc", + "remotePort": "47706", + "remoteMachine": "alio2-cr1-qme04.cern.ch" + } + }, + "checks": { + "ITSClusterCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSClusterCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSClusterTask", + "MOs": [ + "Layer0/AverageClusterSize" + ] + } + ] + }, + "ITSTrackCheck": { + "active": "true", + "className": "o2::quality_control_modules::its::ITSTrackCheck", + "moduleName": "QcITS", + "policy": "OnAny", + "detectorName": "ITS", + "dataSource": [ + { + "type": "Task", + "name": "ITSTrackTask", + "MOs": [ + "NClusters" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + { + "id": "compclus", + "active": "true", + "machines": [], + "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + }, + { + "id": "tracks", + "active": "true", + "machines": [], + "query" : "Vertices:ITS/VERTICES/0;tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.3", + "seed": "1441" + } + ], + "blocking": "false" + } + ] +} + diff --git a/production/qc-sync/mch.json b/production/qc-sync/mch.json new file mode 100644 index 0000000..51bc1a4 --- /dev/null +++ b/production/qc-sync/mch.json @@ -0,0 +1,81 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "null:8500" + }, + "conditionDB": { + "url": "null:8083" + } + }, + "tasks": { + "Digits": { + "active": "true", + "className": "o2::quality_control_modules::muonchambers::PhysicsTaskDigits", + "moduleName": "QcMuonChambers", + "detectorName": "MCH", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mch-digits" + }, + "location": "local", + "mergingMode": "delta", + "localControl": "odc", + "localMachines": [ + "epn", + "localhost" + ], + "remotePort": "47790", + "remoteMachine": "alio2-cr1-qc01.cern.ch" + } + }, + "checks": { + "QcCheckMCHPhysics": { + "active": "true", + "className": "o2::quality_control_modules::muonchambers::PhysicsOccupancyCheck", + "moduleName": "QcMuonChambers", + "policy": "OnAll", + "detectorName": "MCH", + "dataSource": [ + { + "type": "Task", + "name": "Digits", + "MOs": "all" + } + ] + } + } + }, + "dataSamplingPolicies": [ + { + "id": "mch-digits", + "active": "true", + "machines": [], + "query": "digits:MCH/DIGITS/0;orbits:MCH/ORBITS/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.5", + "seed": "1441" + } + ], + "blocking": "false" + } + ] +} diff --git a/production/qc-sync/mft.json b/production/qc-sync/mft.json new file mode 100644 index 0000000..c4b7f64 --- /dev/null +++ b/production/qc-sync/mft.json @@ -0,0 +1,154 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ali-qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "alio2-cr1-hv-head01:8500" + }, + "conditionDB": { + "url": "http://localhost:8084" + } + }, + "tasks": { + "QcMFTReadoutTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTReadoutTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "filter:MFT/RAWDATA" + }, + "location": "local", + "localMachines": [ + "flp" + ], + "remoteMachine": "any", + "remotePort": "47798" + }, + "QcMFTDigitTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTDigitTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query": "randomdigit:MFT/DIGITS/0" + }, + "taskParameters": { + "FLP": "0", + "TaskLevel": "1" + }, + "location": "local", + "localMachines": [ + "flp" + ], + "remoteMachine": "any", + "remotePort": "47799" + }, + "QcMFTClusterTask": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTClusterTask", + "moduleName": "QcMFT", + "detectorName": "MFT", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "mft-clusters" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "alio2-cr1-qme05.cern.ch", + "remotePort": "47797", + "localControl": "odc" + } + }, + "checks": { + "QcMFTReadoutCheck": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTReadoutCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnEachSeparately", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTReadoutTask", + "MOs": [ + "mMFTSummaryLaneStatus" + ] + } + ] + }, + "QcMFTDigitCheck": { + "active": "true", + "className": "o2::quality_control_modules::mft::QcMFTDigitCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnEachSeparately", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTDigitTask" + } + ] + }, + "QcMFTClusterCheck": { + "active": "true", + "dataSource": [ + { + "type": "Task", + "name": "QcMFTClusterTask", + "MOs": [ + "mMFTClusterSensorIndex" + ] + } + ], + "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", + "moduleName": "QcMFT", + "detectorName": "MFT", + "policy": "OnAny" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "mft-clusters", + "active": "true", + "machines": [ + "epn", + "localhost" + ], + "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/production/qc-sync/mid.json b/production/qc-sync/mid.json new file mode 100644 index 0000000..d270a68 --- /dev/null +++ b/production/qc-sync/mid.json @@ -0,0 +1,65 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ali-qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "influxdb-unix:///tmp/telegraf.sock" + }, + "consul": { + "url": "null:8500" + }, + "conditionDB": { + "url": "null:8083" + } + }, + "tasks": { + "QcTaskMIDDigits": { + "active": "true", + "className": "o2::quality_control_modules::mid::DigitsQcTask", + "moduleName": "QcMID", + "detectorName": "MID", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "middigits" + }, + "location": "local", + "mergingMode": "delta", + "localControl": "odc", + "localMachines": [ + "epn", + "localhost" + ], + "remotePort": "47780", + "remoteMachine": "alio2-cr1-qme02.cern.ch" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "middigits", + "active": "true", + "machines": [], + "query": "digits:MID/DATA/0;digitrofs:MID/DATAROF/0;calib:MID/DATA/1;calibrofs:MID/DATAROF/1;fet:MID/DATA/2;fetrofs:MID/DATAROF/2", + "samplingConditions": [ + { + "condition": "random", + "fraction": "1", + "seed": "1441" + } + ], + "blocking": "false" + } + ] +} \ No newline at end of file diff --git a/production/qc-sync/pvtx.json b/production/qc-sync/pvtx.json new file mode 100644 index 0000000..1d31a86 --- /dev/null +++ b/production/qc-sync/pvtx.json @@ -0,0 +1,83 @@ +{ + "qc" : { + "config" : { + "database" : { + "implementation" : "CCDB", + "host" : "ali-qcdb.cern.ch:8083", + "username" : "not_applicable", + "password" : "not_applicable", + "name" : "not_applicable" + }, + "Activity" : { + "number" : "42", + "type" : "2" + }, + "monitoring" : { + "url" : "influxdb-unix:///tmp/telegraf.sock" + }, + "consul" : { + "url" : "" + }, + "conditionDB" : { + "url" : "ali-qcdb.cern.ch:8083" + }, + "infologger" : { "" : "Configuration of the Infologger (optional).", + "filterDiscardDebug" : "1", + "" : "Set to true to discard debug and trace messages (default: false)", + "filterDiscardLevel" : "21", + "" : "Message at this level or above are discarded (default: 21 - Trace)" } + }, + "tasks" : { + "Vertexing" : { + "active" : "true", + "className" : "o2::quality_control_modules::glo::VertexingQcTask", + "moduleName" : "QcGLO", + "detectorName" : "GLO", + "cycleDurationSeconds" : "10", + "maxNumberCycles" : "-1", + "" : "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource" : { + "type" : "dataSamplingPolicy", + "name" : "tst-raw" + }, + "taskParameters" : { + "myOwnKey" : "myOwnValue" + }, + "location" : "local", + "localMachines": [ "localhost", "epn" ], + "remoteMachine": "alio2-cr1-qme04.cern.ch", + "remotePort": "47706" + } + }, + "checks" : { + "QcCheck" : { + "active" : "false", + "className" : "o2::quality_control_modules::skeleton::SkeletonCheck", + "moduleName" : "QcSkeleton", + "policy" : "OnAny", + "detectorName" : "GLO", + "dataSource" : [ { + "type" : "Task", + "name" : "Vertexing", + "MOs" : ["example"] + } ] + } + } + }, + "dataSamplingPolicies" : [ + { + "id" : "tst-raw", + "active" : "true", + "machines" : [], + "query" : "pvtx:GLO/PVTX/0", + "samplingConditions" : [ + { + "condition" : "random", + "fraction" : "0.1", + "seed" : "1234" + } + ], + "blocking" : "false" + } + ] +} diff --git a/production/qc-sync/tof.json b/production/qc-sync/tof.json new file mode 100644 index 0000000..08b5d68 --- /dev/null +++ b/production/qc-sync/tof.json @@ -0,0 +1,200 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "ccdb-test.cern.ch:8080", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "TaskRaw": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskRaw", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "raw-local" + }, + "location": "local", + "localMachines": [ + "alio2-cr1-flp178", + "alio2-cr1-flp179" + ], + "remoteMachine": "localhost", + "remotePort": "30132", + "mergingMode": "delta" + }, + "TaskDigits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TaskDigits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "cycleDurationSeconds": "60", + "maxNumberCycles": "-1", + "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "digi-local" + }, + "location": "local", + "localMachines": [ + "epn", + "localhost" + ], + "remoteMachine": "alio2-cr1-qc03.cern.ch", + "remotePort": "47708", + "mergingMode": "delta", + "localControl": "odc" + } + }, + "postprocessing": { + "TOFTrendingHits": { + "active": "true", + "className": "o2::quality_control_modules::tof::TrendingHits", + "moduleName": "QcTOF", + "detectorName": "TOF", + "dataSources": [ + { + "type": "repository", + "path": "qc/TOF/MO/TaskDigits", + "names": [ + "TOFRawsMulti" + ], + "reductorName": "o2::quality_control_modules::common::TH1Reductor", + "moduleName": "QcCommon" + } + ], + "plots": [ + { + "name": "mean_of_hits", + "title": "Mean trend of TOF hits", + "varexp": "TOFRawsMulti.mean:time", + "selection": "", + "option": "*L" + } + ], + "initTrigger": [ + "userorcontrol" + ], + "updateTrigger": [ + "newobject:qcdb:qc/TOF/MO/TaskDigits/TOFRawsMulti" + ], + "stopTrigger": [ + "userorcontrol" + ] + } + }, + "checks": { + "CheckDiagnostics": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckDiagnostics", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "RDHCounterCrate0" + ] + } + ] + }, + "CheckCompressedData": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckCompressedData", + "moduleName": "QcTOF", + "detectorName": "TOF", + "policy": "OnAny", + "checkParameters": { + "DiagnosticThresholdPerSlot": "10" + }, + "dataSource": [ + { + "type": "Task", + "name": "TaskRaw", + "MOs": [ + "hDiagnostic" + ] + } + ] + }, + "CheckRawMultiplicity": { + "active": "true", + "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", + "moduleName": "QcTOF", + "policy": "OnAny", + "detectorName": "TOF", + "dataSource": [ + { + "type": "Task", + "name": "TaskDigits", + "MOs": [ + "TOFRawsMulti" + ] + } + ] + } + } + }, + "dataSamplingPolicies": [ + { + "id": "raw-local", + "active": "true", + "machines": [ + "alio2-cr1-flp178", + "alio2-cr1-flp179" + ], + "query": "dataframe:TOF/CRAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ], + "dataSamplingPolicies": [ + { + "id": "digi-local", + "active": "true", + "machines": [ + "epn", + "localhost" + ], + "port": "30333", + "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.1", + "seed": "1234" + } + ], + "blocking": "false" + } + ] +} diff --git a/production/qc-sync/tpc.json b/production/qc-sync/tpc.json new file mode 100644 index 0000000..694e6c6 --- /dev/null +++ b/production/qc-sync/tpc.json @@ -0,0 +1,188 @@ +{ + "qc": { + "config": { + "database": { + "implementation": "CCDB", + "host": "al-qcdb.cern.ch:8083", + "username": "not_applicable", + "password": "not_applicable", + "name": "not_applicable" + }, + "Activity": { + "number": "42", + "type": "2" + }, + "infologger": { + "filterDiscardDebug": "true", + "filterDiscardLevel": "1" + }, + "monitoring": { + "url": "infologger:///debug?qc" + }, + "consul": { + "url": "http://consul-test.cern.ch:8500" + }, + "conditionDB": { + "url": "ccdb-test.cern.ch:8080" + } + }, + "tasks": { + "RawDigits": { + "active": "true", + "className": "o2::quality_control_modules::tpc::RawDigits", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "60", + "resetAfterCycles": "1", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata" + }, + "taskParameters": { + "NRawDigitsNBins": "100", "NRawDigitsXMin": "0", "NRawDigitsXMax": "100", + "QmaxNBins": "200", "QmaxXMin": "0", "QmaxXMax": "200", + "TimeBinNBins": "600", "TimeBinXMin": "0", "TimeBinXMax": "600" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "DummyTask": { + "active": "true", + "className": "o2::quality_control_modules::skeleton::SkeletonTask", + "moduleName": "Dummy", + "detectorName": "TST", + "cycleDurationSeconds": "10000000", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-rawdata-om" + }, + "location": "remote", + "remoteMachine": "tpc-login-ib" + }, + "Clusters": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Clusters", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "60", + "resetAfterCycles": "1", + "maxNumberCycles": "-1", + "dataSource": { + "type": "dataSamplingPolicy", + "name": "random-cluster" + }, + "taskParameters": { + "myOwnKey": "myOwnValue", + "NClustersNBins": "100", "NClustersXMin": "0", "NClustersXMax": "100", + "QmaxNBins": "200", "QmaxXMin": "0", "QmaxXMax": "200", + "QtotNBins": "600", "QtotXMin": "10", "QtotXMax": "600", + "SigmaPadNBins": "200", "SigmaPadXMin": "0", "SigmaPadXMax": "2", + "SigmaTimeNBins": "200", "SigmaTimeXMin": "0", "SigmaTimeXMax": "2", + "TimeBinNBins": "1000", "TimeBinXMin": "0", "TimeBinXMax": "100000" + }, + "location": "remote", + "remoteMachine": "epn102-ib" + }, + "PID": { + "active": "true", + "className": "o2::quality_control_modules::tpc::PID", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "60", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query" : "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32625", + "mergingMode": "delta" + }, + "Tracks": { + "active": "true", + "className": "o2::quality_control_modules::tpc::Tracks", + "moduleName": "QcTPC", + "detectorName": "TPC", + "cycleDurationSeconds": "60", + "resetAfterCycles": "10", + "maxNumberCycles": "-1", + "dataSource": { + "type": "direct", + "query" : "inputTracks:TPC/TRACKS/0" + }, + "taskParameters": {}, + "location": "local", + "localMachines": [ + "localhost" + ], + "remoteMachine": "epn102-ib", + "remotePort": "32626", + "mergingMode": "delta" + } + } + }, + "dataSamplingPolicies": [ + { + "id": "random-cluster", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32627", + "query": "inputClus:TPC/CLUSTERNATIVE", + "outputs": "sampled-clusters:DS/CLUSTERNATIVE", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.01", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32628", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.001", + "seed": "0" + } + ], + "blocking": "false" + }, + { + "id": "random-rawdata-om", + "active": "true", + "machines": [ + "localhost" + ], + "port": "32629", + "query": "inputRaw:TPC/RAWDATA", + "outputs": "sampled-rawdata:DS2/RAWDATA", + "samplingConditions": [ + { + "condition": "random", + "fraction": "0.0005", + "seed": "0" + } + ], + "blocking": "false" + } + ] +} diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh index 6e564b6..d2f952c 100644 --- a/production/qc-workflow.sh +++ b/production/qc-workflow.sh @@ -6,7 +6,7 @@ if [[ -z "$WORKFLOW" ]] || [[ -z "$MYDIR" ]]; then fi if [[ -z $QC_JSON_FROM_OUTSIDE ]]; then - if [[ $SYNCMODE == 1 ]]; then + if [[ $SYNCMODE == 1 ]] && [[ $EPNMODE == 1 ]]; then [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-digit-cluster.json @@ -18,6 +18,18 @@ if [[ -z $QC_JSON_FROM_OUTSIDE ]]; then [[ -z "$QC_JSON_MCH" ]] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=/home/dstocco/config/mid-qcmn-epn-digits.json [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=/home/shahoian/jsons/vertexing-qc.json + elif [[ $SYNCMODE == 1 ]]; then + [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=$O2DATAPROCESSING_ROOT/production/qc-sync/tpc.json + [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=$O2DATAPROCESSING_ROOT/production/qc-sync/its.json + [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=$O2DATAPROCESSING_ROOT/production/qc-sync/mft.json + [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=$O2DATAPROCESSING_ROOT/production/qc-sync/tof.json + [[ -z "$QC_JSON_FDD" ]] && QC_JSON_FDD=$O2DATAPROCESSING_ROOT/production/qc-sync/fdd.json + [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=$O2DATAPROCESSING_ROOT/production/qc-sync/ft0.json + [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=$O2DATAPROCESSING_ROOT/production/qc-sync/fv0.json + [[ -z "$QC_JSON_EMC" ]] && QC_JSON_EMC=$O2DATAPROCESSING_ROOT/production/qc-sync/emc.json + [[ -z "$QC_JSON_MCH" ]] && QC_JSON_MCH=$O2DATAPROCESSING_ROOT/production/qc-sync/mch.json + [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=$O2DATAPROCESSING_ROOT/production/qc-sync/mid.json + [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=$O2DATAPROCESSING_ROOT/production/qc-sync/pvtx.json else [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=$O2DATAPROCESSING_ROOT/production/qc-async/tpc.json [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=$O2DATAPROCESSING_ROOT/production/qc-async/its.json From d564b5f60d67d0a321c575d1ac7c27f1bf48a906 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Wed, 8 Dec 2021 21:31:53 +0100 Subject: [PATCH 236/236] Wipe repository after move, and leave READMEs with new location --- CODEOWNERS | 17 - README.md | 298 +----------- aliecs_documentation/README.md | 111 +---- aliecs_documentation/gui_expert_default.png | Bin 133047 -> 0 bytes aliecs_documentation/gui_expert_example.png | Bin 139614 -> 0 bytes aliecs_documentation/gui_manual.png | Bin 23364 -> 0 bytes aliecs_documentation/gui_path.png | Bin 24301 -> 0 bytes aliecs_documentation/gui_version.png | Bin 20702 -> 0 bytes common/README.md | 50 +- common/setenv.sh | 205 -------- production/README.md | 102 +--- production/calib/its-noise-aggregator.sh | 32 -- production/calib/its-noise-processing.sh | 33 -- production/calib/tof-diagn-aggregator.sh | 32 -- .../tof-standalone-cosmic-reco-time-calib.sh | 36 -- production/calib/tof-standalone-reco.sh | 36 -- production/calib/tof-time-calib-aggregator.sh | 32 -- production/dpl-workflow.sh | 8 - production/full-system-test.desc | 3 - production/full-system-test/setenv.sh | 1 - production/no-processing.desc | 3 - production/production.desc | 2 - production/qc-async/ft0.json | 45 -- production/qc-async/fv0.json | 45 -- production/qc-async/its.json | 131 ------ production/qc-async/itstpc.json | 62 --- production/qc-async/itstpctof.json | 71 --- production/qc-async/mft.json | 66 --- production/qc-async/mid.json | 42 -- production/qc-async/primvtx.json | 51 -- production/qc-async/tof.json | 79 ---- production/qc-async/tpc.json | 82 ---- production/qc-sync/emc.json | 157 ------- production/qc-sync/fdd.json | 72 --- production/qc-sync/ft0.json | 72 --- production/qc-sync/fv0.json | 71 --- production/qc-sync/its.json | 146 ------ production/qc-sync/mch.json | 81 ---- production/qc-sync/mft.json | 154 ------ production/qc-sync/mid.json | 65 --- production/qc-sync/pvtx.json | 83 ---- production/qc-sync/tof.json | 200 -------- production/qc-sync/tpc.json | 188 -------- production/qc-workflow.sh | 99 ---- production/qc_global.json | 30 -- production/setenv.sh | 1 - production/standalone-calibration.desc | 5 - testing/detectors/CPV/workflows.desc | 0 .../EMC/qc/emcQCTasksAll_multinode.json | 157 ------- .../EMC/qc/emcQCTasks_multinode.json | 75 --- .../EMC/qc/emcQCTasks_singlenode.json | 68 --- .../EMC/runEMCRawToDigitsRecoPileline.sh | 29 -- .../EMC/runEMCRawToDigitsRecoPilelineCTF.sh | 53 --- ...EMCRawToDigitsRecoPilelineQCAlllocalCTF.sh | 63 --- .../runEMCRawToDigitsRecoPilelineQClocal.sh | 35 -- ...runEMCRawToDigitsRecoPilelineQClocalCTF.sh | 62 --- ...RawToDigitsRecoPilelineQClocalCTFSingle.sh | 58 --- testing/detectors/EMC/workflows.desc | 8 - testing/detectors/FDD/fdd-ctf.sh | 24 - testing/detectors/FDD/fdd-digits-ctf.sh | 25 - testing/detectors/FDD/fdd-digits-ds.json | 72 --- testing/detectors/FDD/fdd-digits-qc-ctf.sh | 26 - testing/detectors/FDD/run_fdd_ctf.sh | 34 -- testing/detectors/FDD/run_fdd_digits_ctf.sh | 34 -- .../detectors/FDD/run_fdd_digits_qc_ctf.sh | 34 -- testing/detectors/FDD/workflows.desc | 3 - testing/detectors/FT0/ft0-ctf.sh | 25 - testing/detectors/FT0/ft0-digits-ctf.sh | 25 - testing/detectors/FT0/ft0-digits-ds.json | 72 --- testing/detectors/FT0/ft0-digits-qc-ctf.sh | 26 - testing/detectors/FT0/run_ft0_ctf.sh | 34 -- testing/detectors/FT0/run_ft0_digits_ctf.sh | 34 -- .../detectors/FT0/run_ft0_digits_qc_ctf.sh | 34 -- testing/detectors/FT0/workflows.desc | 3 - testing/detectors/FV0/fv0-ctf.sh | 24 - testing/detectors/FV0/fv0-digits-ctf.sh | 25 - testing/detectors/FV0/fv0-digits-ds.json | 71 --- testing/detectors/FV0/fv0-digits-qc-ctf.sh | 26 - testing/detectors/FV0/run_fv0_ctf.sh | 34 -- testing/detectors/FV0/run_fv0_digits_ctf.sh | 34 -- .../detectors/FV0/run_fv0_digits_qc_ctf.sh | 34 -- testing/detectors/FV0/workflows.desc | 3 - testing/detectors/HMP/workflows.desc | 0 testing/detectors/ITS/workflows.desc | 0 testing/detectors/MCH/workflows.desc | 0 testing/detectors/MFT/workflows.desc | 0 testing/detectors/MID/workflows.desc | 0 testing/detectors/PHS/workflows.desc | 0 testing/detectors/TOF/qc-full.json | 142 ------ testing/detectors/TOF/tof-epn-cosmics-dig.sh | 30 -- .../detectors/TOF/tof-epn-cosmics-digNoQC.sh | 29 -- testing/detectors/TOF/tof-epn-cosmics.sh | 31 -- testing/detectors/TOF/tof-epn-cosmicsNoQC.sh | 30 -- testing/detectors/TOF/workflows.desc | 4 - testing/detectors/TPC/tpc-workflow.sh | 75 --- testing/detectors/TPC/workflows.desc | 2 - testing/detectors/TRD/workflows.desc | 0 testing/detectors/ZDC/workflows.desc | 0 testing/examples/calib-workflows.desc | 1 - testing/examples/example-calib-aggregator.sh | 30 -- testing/examples/example-calib-processing.sh | 33 -- testing/examples/example-workflow.sh | 26 - testing/examples/workflows.desc | 1 - testing/private/README.md | 1 - testing/private/afurs/fdd-ft0-fv0-ctf.sh | 32 -- .../private/afurs/fdd-ft0-fv0-digits-ds.json | 153 ------ .../afurs/fdd-ft0-fv0-digits-qc-ctf.sh | 38 -- testing/private/afurs/ft0-fv0-ctf.sh | 31 -- testing/private/afurs/ft0-fv0-digits-ds.json | 113 ----- .../private/afurs/ft0-fv0-digits-qc-ctf.sh | 36 -- testing/private/afurs/run_fdd_ft0_fv0_ctf.sh | 34 -- .../afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh | 31 -- testing/private/afurs/run_ft0_fv0_ctf.sh | 34 -- .../afurs/run_ft0_fv0_digits_qc_ctf.sh | 31 -- testing/private/afurs/workflows.desc | 5 - ...EMCRawToDigitsRecoPilelineQCAlllocalCTF.sh | 63 --- testing/private/mfasel/workflows.desc | 8 - .../shahoian/qc/qc-itsEPNv2-mftClus.json | 192 -------- .../shahoian/qc/qc-itsEPNv2-tofglobalrun.json | 251 ---------- ...pcMNAll-itsEPNv2-mftClus-tofglobalrun.json | 444 ------------------ .../qc/qc-tpcMNAll-itsEPNv2-mftClus.json | 332 ------------- .../qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json | 391 --------------- .../shahoian/qc/qc-tpcMNAll-itsEPNv2.json | 279 ----------- .../qc/qc-tpcMNAll-mftClus-tofglobalrun.json | 339 ------------- .../shahoian/qc/qc-tpcMNAll-mftClus.json | 227 --------- .../shahoian/qc/qc-tpcMNAll-tofglobalrun.json | 286 ----------- testing/private/shahoian/qc/qc_ITS_MFT.json | 203 -------- testing/private/shahoian/qc/qc_its_tpc.json | 251 ---------- .../private/shahoian/qc/qc_its_tpcNoClus.json | 232 --------- .../private/shahoian/qc/qc_its_tpcNoDigi.json | 232 --------- .../private/shahoian/qc/qc_tpc_its_mft.json | 286 ----------- testing/private/shahoian/qc/qc_tpc_mft.json | 191 -------- testing/private/shahoian/reproc_CTF | 1 - testing/private/shahoian/reproc_TF_CTF | 1 - testing/private/shahoian/runTF_PB.sh | 65 --- testing/private/shahoian/runTF_ext_dpl.sh | 46 -- testing/private/shahoian/run_PB.sh | 62 --- testing/private/shahoian/run_ext.sh | 38 -- testing/private/shahoian/run_ext_dpl.sh | 48 -- testing/private/shahoian/run_test.sh | 49 -- testing/private/shahoian/workflows_PB.desc | 52 -- testing/private/shahoian/workflows_dpl.desc | 251 ---------- testing/private/zampolli/calib/run.sh | 39 -- testing/private/zampolli/reproc_CTF | 1 - testing/private/zampolli/reproc_TF_CTF | 1 - testing/private/zampolli/runTF_ext_dpl.sh | 48 -- testing/private/zampolli/run_ext_dpl.sh | 53 --- testing/private/zampolli/workflows.desc | 1 - testing/private/zampolli/zampolli-workflow.sh | 20 - .../datadistribution_workflows/dd-discard.xml | 14 - tools/datadistribution_workflows/dd-disk.xml | 14 - .../dd-processing-disk.xml | 14 - .../dd-processing.xml | 14 - tools/epn/gen_topo.sh | 36 -- tools/epn/gen_topo_o2dataprocessing.sh | 41 -- tools/epn/run.sh | 38 -- tools/monitoring_workflows/epnstderrlog.xml | 14 - tools/parse | 139 ------ 158 files changed, 4 insertions(+), 10739 deletions(-) delete mode 100644 CODEOWNERS delete mode 100644 aliecs_documentation/gui_expert_default.png delete mode 100644 aliecs_documentation/gui_expert_example.png delete mode 100644 aliecs_documentation/gui_manual.png delete mode 100644 aliecs_documentation/gui_path.png delete mode 100644 aliecs_documentation/gui_version.png delete mode 100755 common/setenv.sh delete mode 100755 production/calib/its-noise-aggregator.sh delete mode 100755 production/calib/its-noise-processing.sh delete mode 100755 production/calib/tof-diagn-aggregator.sh delete mode 100755 production/calib/tof-standalone-cosmic-reco-time-calib.sh delete mode 100755 production/calib/tof-standalone-reco.sh delete mode 100755 production/calib/tof-time-calib-aggregator.sh delete mode 100755 production/dpl-workflow.sh delete mode 100644 production/full-system-test.desc delete mode 120000 production/full-system-test/setenv.sh delete mode 100644 production/no-processing.desc delete mode 100644 production/production.desc delete mode 100644 production/qc-async/ft0.json delete mode 100644 production/qc-async/fv0.json delete mode 100644 production/qc-async/its.json delete mode 100644 production/qc-async/itstpc.json delete mode 100644 production/qc-async/itstpctof.json delete mode 100644 production/qc-async/mft.json delete mode 100644 production/qc-async/mid.json delete mode 100644 production/qc-async/primvtx.json delete mode 100644 production/qc-async/tof.json delete mode 100644 production/qc-async/tpc.json delete mode 100644 production/qc-sync/emc.json delete mode 100644 production/qc-sync/fdd.json delete mode 100644 production/qc-sync/ft0.json delete mode 100644 production/qc-sync/fv0.json delete mode 100644 production/qc-sync/its.json delete mode 100644 production/qc-sync/mch.json delete mode 100644 production/qc-sync/mft.json delete mode 100644 production/qc-sync/mid.json delete mode 100644 production/qc-sync/pvtx.json delete mode 100644 production/qc-sync/tof.json delete mode 100644 production/qc-sync/tpc.json delete mode 100644 production/qc-workflow.sh delete mode 100644 production/qc_global.json delete mode 120000 production/setenv.sh delete mode 100644 production/standalone-calibration.desc delete mode 100644 testing/detectors/CPV/workflows.desc delete mode 100644 testing/detectors/EMC/qc/emcQCTasksAll_multinode.json delete mode 100644 testing/detectors/EMC/qc/emcQCTasks_multinode.json delete mode 100644 testing/detectors/EMC/qc/emcQCTasks_singlenode.json delete mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPileline.sh delete mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh delete mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh delete mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocal.sh delete mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh delete mode 100755 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh delete mode 100644 testing/detectors/EMC/workflows.desc delete mode 100755 testing/detectors/FDD/fdd-ctf.sh delete mode 100755 testing/detectors/FDD/fdd-digits-ctf.sh delete mode 100644 testing/detectors/FDD/fdd-digits-ds.json delete mode 100755 testing/detectors/FDD/fdd-digits-qc-ctf.sh delete mode 100755 testing/detectors/FDD/run_fdd_ctf.sh delete mode 100755 testing/detectors/FDD/run_fdd_digits_ctf.sh delete mode 100755 testing/detectors/FDD/run_fdd_digits_qc_ctf.sh delete mode 100644 testing/detectors/FDD/workflows.desc delete mode 100755 testing/detectors/FT0/ft0-ctf.sh delete mode 100755 testing/detectors/FT0/ft0-digits-ctf.sh delete mode 100644 testing/detectors/FT0/ft0-digits-ds.json delete mode 100755 testing/detectors/FT0/ft0-digits-qc-ctf.sh delete mode 100755 testing/detectors/FT0/run_ft0_ctf.sh delete mode 100755 testing/detectors/FT0/run_ft0_digits_ctf.sh delete mode 100755 testing/detectors/FT0/run_ft0_digits_qc_ctf.sh delete mode 100644 testing/detectors/FT0/workflows.desc delete mode 100755 testing/detectors/FV0/fv0-ctf.sh delete mode 100755 testing/detectors/FV0/fv0-digits-ctf.sh delete mode 100644 testing/detectors/FV0/fv0-digits-ds.json delete mode 100755 testing/detectors/FV0/fv0-digits-qc-ctf.sh delete mode 100755 testing/detectors/FV0/run_fv0_ctf.sh delete mode 100755 testing/detectors/FV0/run_fv0_digits_ctf.sh delete mode 100755 testing/detectors/FV0/run_fv0_digits_qc_ctf.sh delete mode 100644 testing/detectors/FV0/workflows.desc delete mode 100644 testing/detectors/HMP/workflows.desc delete mode 100644 testing/detectors/ITS/workflows.desc delete mode 100644 testing/detectors/MCH/workflows.desc delete mode 100644 testing/detectors/MFT/workflows.desc delete mode 100644 testing/detectors/MID/workflows.desc delete mode 100644 testing/detectors/PHS/workflows.desc delete mode 100644 testing/detectors/TOF/qc-full.json delete mode 100755 testing/detectors/TOF/tof-epn-cosmics-dig.sh delete mode 100755 testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh delete mode 100755 testing/detectors/TOF/tof-epn-cosmics.sh delete mode 100755 testing/detectors/TOF/tof-epn-cosmicsNoQC.sh delete mode 100644 testing/detectors/TOF/workflows.desc delete mode 100755 testing/detectors/TPC/tpc-workflow.sh delete mode 100644 testing/detectors/TPC/workflows.desc delete mode 100644 testing/detectors/TRD/workflows.desc delete mode 100644 testing/detectors/ZDC/workflows.desc delete mode 100644 testing/examples/calib-workflows.desc delete mode 100755 testing/examples/example-calib-aggregator.sh delete mode 100755 testing/examples/example-calib-processing.sh delete mode 100755 testing/examples/example-workflow.sh delete mode 100644 testing/examples/workflows.desc delete mode 100644 testing/private/README.md delete mode 100755 testing/private/afurs/fdd-ft0-fv0-ctf.sh delete mode 100644 testing/private/afurs/fdd-ft0-fv0-digits-ds.json delete mode 100755 testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh delete mode 100755 testing/private/afurs/ft0-fv0-ctf.sh delete mode 100644 testing/private/afurs/ft0-fv0-digits-ds.json delete mode 100755 testing/private/afurs/ft0-fv0-digits-qc-ctf.sh delete mode 100755 testing/private/afurs/run_fdd_ft0_fv0_ctf.sh delete mode 100755 testing/private/afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh delete mode 100755 testing/private/afurs/run_ft0_fv0_ctf.sh delete mode 100755 testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh delete mode 100644 testing/private/afurs/workflows.desc delete mode 100755 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh delete mode 100644 testing/private/mfasel/workflows.desc delete mode 100644 testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json delete mode 100644 testing/private/shahoian/qc/qc-itsEPNv2-tofglobalrun.json delete mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json delete mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json delete mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json delete mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json delete mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json delete mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json delete mode 100644 testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json delete mode 100644 testing/private/shahoian/qc/qc_ITS_MFT.json delete mode 100644 testing/private/shahoian/qc/qc_its_tpc.json delete mode 100644 testing/private/shahoian/qc/qc_its_tpcNoClus.json delete mode 100644 testing/private/shahoian/qc/qc_its_tpcNoDigi.json delete mode 100644 testing/private/shahoian/qc/qc_tpc_its_mft.json delete mode 100644 testing/private/shahoian/qc/qc_tpc_mft.json delete mode 100755 testing/private/shahoian/reproc_CTF delete mode 100755 testing/private/shahoian/reproc_TF_CTF delete mode 100755 testing/private/shahoian/runTF_PB.sh delete mode 100755 testing/private/shahoian/runTF_ext_dpl.sh delete mode 100755 testing/private/shahoian/run_PB.sh delete mode 100755 testing/private/shahoian/run_ext.sh delete mode 100755 testing/private/shahoian/run_ext_dpl.sh delete mode 100755 testing/private/shahoian/run_test.sh delete mode 100644 testing/private/shahoian/workflows_PB.desc delete mode 100644 testing/private/shahoian/workflows_dpl.desc delete mode 100755 testing/private/zampolli/calib/run.sh delete mode 100755 testing/private/zampolli/reproc_CTF delete mode 100755 testing/private/zampolli/reproc_TF_CTF delete mode 100755 testing/private/zampolli/runTF_ext_dpl.sh delete mode 100755 testing/private/zampolli/run_ext_dpl.sh delete mode 100644 testing/private/zampolli/workflows.desc delete mode 100755 testing/private/zampolli/zampolli-workflow.sh delete mode 100644 tools/datadistribution_workflows/dd-discard.xml delete mode 100644 tools/datadistribution_workflows/dd-disk.xml delete mode 100644 tools/datadistribution_workflows/dd-processing-disk.xml delete mode 100644 tools/datadistribution_workflows/dd-processing.xml delete mode 100755 tools/epn/gen_topo.sh delete mode 100755 tools/epn/gen_topo_o2dataprocessing.sh delete mode 100755 tools/epn/run.sh delete mode 100644 tools/monitoring_workflows/epnstderrlog.xml delete mode 100755 tools/parse diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index 3dab6e9..0000000 --- a/CODEOWNERS +++ /dev/null @@ -1,17 +0,0 @@ -/production @davidrohr @martenole @shahor02 @chiarazampolli - -/testing/detectors/CPV -/testing/detectors/EMC -/testing/detectors/FDD -/testing/detectors/FT0 -/testing/detectors/FV0 -/testing/detectors/HMP -/testing/detectors/ITS -/testing/detectors/MCH @aphecethce -/testing/detectors/MFT -/testing/detectors/MID @aphecethce -/testing/detectors/PHS -/testing/detectors/TOF @noferini @chiarazampolli -/testing/detectors/TPC @wiechula -/testing/detectors/TRD @martenole -/testing/detectors/ZDC diff --git a/README.md b/README.md index 3b39e62..64fcf55 100644 --- a/README.md +++ b/README.md @@ -1,297 +1 @@ -This repository contains the PDP workflows to run on the EPN (in the future also on the FLP) and the parse script which parses the description files and creates the DDS XML files. -For only a quick introduction and an example how to create a workflow on the EPN click [here](#Quick-guide-to-create-and-deploy-detector-workflow). -The options for the production workflow are described [here](production/README.md). - -# Terminology: -- A **workflow** refers to a single DPL workflow binary, or multiple workflows binaries merged with the `|` syntax, or a shell script starting such a workflow. -- A **full topology** refers to the final XML file that is passed to DDS to start up a processing chain for one single partition on the EPN. -- A **partial topology** is the XML file created by DPL with the `--dds` option. - -# Folder structure: -- **common** contains common scripts that can be used by all workflows, most importantly common environment variable scripts. -- **production** contains the production workflows for global runs, which are maintained by PDP experts. -- **tools** contains the **parser** script and auxiliary tools. -- **testing** contains scripts for tests / standalone runs maintained by detectors or privately. Subfolders are **examples** for example workflows provided, **detectors** for standalone detector workflows, and **private** for workflows of users. - -# Topology descriptions and description library files: -Another abstraction layer above the *workflows* are **topology descriptions**. The *parser* tool can generate the *full topology* XML file from such a *description*, using the `–dds` option of DPL and the `odc-topo-epn` tool. *Topology descriptions* are stored in **description library files** in the `O2DataProcessing` repository. A *description library file* can contain multiple *topology descriptions* each identified by a **topology name** - -# Remarks: -- The repository does not store *full topologies*, but they are created on the fly. Users can cache the resulting full topology XML files. -- The defaults (particularly also those set in the common environment files in the `common` folder) are tuned for running on a laptop / desktop. - -# Workflow requirements: -- Workflows shall support 3 run modes selected via the `WORKFLOWMODE` env variable, the **dds** mode is mandatory: - - **run** (default): run the workflow - - **print**: print the final workflow command to the console - - **dds**: create a partial topology. -- If applicable, workflows shall use the settings from the `common/setenv.sh` script instead of implementing their own options. Mandatory env variables to respect are - - `SHMSIZE` - - `SEVERITY` and `INFOLOGGER_SEVERITY` or they must be set to `warning` - - `NORATELOG` or the fmq rate logging must be disabled - - `GPUTYPE` (if the workflow supports GPUs) - - `GLOBALDPLOPT` This option must be appended to the the workflow (to the final binary if merged with `|` syntax) - - ... (to be continued). -- DPL metrics and InfoLogger (not a requirement in the sense that something would fail, but without it is difficult to debug): - - The workflow commands should contain `--monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60` for the DPL metrics. - - `--infologger-severity $INFOLOGGER_SEVERITY` enables the infologger. - -# Configuring and selecting workflow in AliECS: -There are 3 ways foreseenm to configure the *full topology* in AliECS: (currently only the manual XML option exists) -- **version of workflow repository**: In this mode, the following settings are configured in AliECS, and they uniquely identify a *full topology*. The *parser* will then create the final DDS XML file with the *full topology*: - - A **commit hash** identifying a state of the `O2DataProcessing` repository (this can also be a tag, and in the case of production workflows it is required to be a tag). - - The path of a **description library file** (relative path inside the `O2DataProcessing` repository). - - The **workflow name** inside the *description library file*. - - **detector list**: Multiple comma-separated lists of detectors participating in the run (global list, list for qc, list for calibration, list of detectors to run reconstruction for, list of detectors to include in the CTF, list of detectors that have processing on the FLP), defaulting to `ALL` for all detectors. - - **workflow parameters**: text field passed to workflow as environment variable for additional options. - - **number of nodes override**: Overrides the setting for the number of nodes required in the workflow (meant to quickly increase / decrease the EPN partition size). - - **process multiplicity overrides**: Scaling factors for the process multiplicities for raw decoders, ctf encoders, and other processes. - - **extra environment options**: Free text field where the operator can put additional environment variables, that will be forwarded to the workflow. - - **wipe workflow cache**: Normally the XMLs are cached, when they are created from the same repository version / same workflow / same O2 version. This option clears the cache for the current partition. -- **repository directory**: This is almost identical to the case above, but instead of the commit hash, there is the **repository path** specified, pointing to a checked out repository on the shared home folder in the EPN farm. The procedure is the same as before, the parser will create the full topology XML file from the specified workflow in the repository. -- **manual XML file**: In this mode the `O2DataProcessing` repository is not used at all, but the absolute path of a *full topology* XML file in the EPN's shared home folder is specified. Such an XML file must be prepared manually by the same means as the *parser* would usually do (see paragraph on manual XML file below). - -# Topology descriptions: -A *topology description* consists of -- A list of modules to load, both for generating the DDS XML file with DPL's `--dds` option and when running the workflow. It can either be a single module, or a space-separated list of modules in double-quotes. In particular, this setting identifies the O2 version. We provide the `O2PDPSuite` package, which has the same versions as O2 itself, and which contain also corresponding versions `DataDistribution`,`QualityControl` and `ODC`. Thus by default one should just load `O2PDPSuite/[version]`. -- A list of workflows, in the form of commands to run to create XML files by the `–dds` option. The command is executed with the `O2DataProcessing` path as working directory. The env options used to configure the workflow are prepended in normal shell syntax. Certain env options are set by the EPN and must not be overridden: `FILEWORKDIR`, `INRAWCHANNAME`, `CTF_DIR`. - - Each workflow is amended with the following parameters (the parameters stand in front of the workflow command, and are separated by commas without spaces, the workflow command must be in double-quotes): - - Zone where to run the workflow (calib / reco) - - For reco: - - Number of nodes to run this workflow on - - If a processor in the workflow needs to identify on which node it is running on, it can use the `$DDS_COLLECTION_INDEX` emvironment variable. - - Minimum number of nodes required forthe workflow (in case of node failure) - - In case the there are multiple workflows in the topology description, the largest number of nodes, and the largest minimum number of nodes are used. - - For calib: - - Number of physical cores to be reserved on the node to run the workflow. - - Name of the calibration (used to set DDS properties which are used to make the reconstruction workflows connect to specific calibration workflows) - - ODC/DDS allocates as many nodes as necessary to have sufficient CPU cores for the calibration workflows. The different calibration workflows may or may not run on the same node. - -An example for the topology library file looks like: -- topologies.desc -``` -demo-full-topology: O2PDPSuite/nightly-20210801 reco,128,126,"SHMSIZE=320000000000 full-system-test/dpl-workflow.sh" calib,5,"SHMSIZE=2000000000 calibration/some-calib.sh" calib,20,"SHMSIZE=2000000000 calibration/other-calib.sh"; -other-topology: O2PDPSuite/v1.0.0 reco,2,1,"tpc-test/tpc-standalone-test-1.sh" -``` -- AliECS-config: -``` -commit=xxxx|path=xxxx file=topologies.desc topology=demo-full-topology parameters="EVENT_DISPLAY" detectors="TPC,ITS" detectors_qc="TPC" [...] -``` - -# Calibration workflows with aggregator -Calibration workflows can be different when they use an aggregator. In that case, there is processing running on each EPN, and the output is sent to an aggregator node. Communication happens via the `o2-dpl-raw-proxy` and the `o2-dpl-output-proxy`. -To set up such a workflow, a couple of points must be followed: -- There are 2 different shell scripts, one for the "reco" part running on each EPN, and one for the calibration aggregator "calib" part on the calibration node. There may be more than one aggregator in the topology, in that case it is one *reco* script and multiple *calib* scripts. -- The *reco* script must contain an `o2-dpl-output-proxy` to send the output and each calib script must contain an `o2-dpl-raw-proxy` for the input. -- Each of the input "raw" proxies must be assigned a unique name via the `--proxy-name [NAME]` option. Note that the *reco* script also contains an input raw proxy, with the default name `readout-proxy`. -- The channel-name of each input proxy must match the proxy name. The *calib* input proxies' channels must use `method=bind`. The output proxies must use `method=connect` and the channel name must match the name of the input proxy they are connecting to. -- The `dataspec` of the proxies is configured in the same way as for the `readout-proxy` and the specs must be equal for corresponding input and output proxies. -- The channels of input and output proxies (except for the *reco* `readout-proxy`) must be configured without address! -- The output proxies must use the command line option `--proxy-channel-name [name]` with `name` being the configured channel name. -- To run on the EPN, the *calib* input proxies must have the command line option `--network-interface ib0` (this ensures data is sent via InfiniBand not via Ethernet). - -For an example, chek the calibration workflows [here](testing/examples) - -*NOTE* For reference, to run a workflow with calib aggregator on the EPN with AliECS, currently a node from the `online-calib` zone must be requested, by setting `odc_resources` to `[ {"zone":"online", "n":10}, {"zone":"online-calib", "n":1 } ]` (adjust the `10` to the number of required reconstruction nodes). This will be improved later and then this extra setting will not be needed anymore. - -# The parser script: -The **parser** is a simple python script that parses a *topology description* and generates the DDS XML file with the *full topology*. To do so, it runs all the DPL workflows with the `--dds` option and then uses the `odc-topo-epn` tool to merge the *partial topology* into the final *full topology*. -The *parser* is steered by some command line options and by some environment variables (note that the env variables get also passed through to the workflows). -- The *parser* needs a DataDistribution topology file. Example files are shipped with the parser in the `tools/datadistribution_workflows` folder for: just discarding the TF, store the TF to disk, forward the TF to DPL processing (what we need for a DPL workflow), and forward to processing while storing to disk in parallel. -- *Parser* command line options: - - The parser is supposed to be executed from the root folder of the `O2DataProcessing` repository. - - The syntax is: -``` -[ENV_VARIABLES] ./tools/parse [DESCRIPTION_LIBRARY_FILE] [TOPOLOGY_NAME] [OUTPUT_NAME] -``` - - In the above example, this could be: -``` -DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml WORKFLOW_DETECTORS=TPC,ITS WORKFLOW_DETECTORS_QC=TPC WORKFLOW_DETECTORS_CALIB=ALL ./tools/parse topologies.desc demo-full-topology /tmp/output.xml -``` -- The following environment variables steer the *Parser*: - - `$FILEWORKDIR`: This variable must be set and is used by the workflows to specify where all required files (grp, geometry, dictionaries, etc) are located. - - `$EPNSYNCMODE`: If set the parser assumes it is running on the EPN for synchronous processing. If so it will automatically load the modules specified in the topology description. This variable is further used by the workflows themselves, e.g. to activate the InfoLogger and the Metrics monitoring. - - `$INRAWCHANNAME`: Propagated to the workflow, defines the raw FMQ channel name used for the communication with DataDistribution. - - `$RECO_NUM_NODES_OVERRIDE`: Overrides the number of nodes used for reconstruction (empty or 0 to disable) - - `$DDMODE`: How to operate DataDistribution: **discard** (build TF and discard them), **disk** (build TF and store to disk), **processing** (build TF and run DPL workflow on TF data), **processing-disk** (both store TF to disk and run processing). - - `$DDWORKFLOW`: (*alternative*): Explicit path to the XML file with the partial workflow for *DataDistribution*. - - `$GEN_TOPO_IGNORE_ERROR`: Ignore ERROR messages during workflow creation. - - `$WORKFLOWMODE`: Can be set to print. In that case the parser will not create the DDS topology output, but the list of shell commands to start to run the workflows locally. -- When run on the EPN farm for synchronous processing (indicated by the `$EPNSYNCMODE=1` variable), the *parser* will automaticall `module load` the modules specified in the *topology description*. Otherwise the user must load the respective O2 / QC version by himself. -- The parser exports the env variable `$RECO_NUM_NODES_WORKFLOW` that contains on how many nodes the workflow will be running when running the workflow script. This can be used to tune the process multiplicities. - -# Creating a full topology DDS XML file manually using the parser: -- **NOTE** This is only for reference, or for running on a private PC. For creating XMLs on the EPN, please refer to [here](#Quick-guide-to-create-and-deploy-detector-workflow). -- Check out the `O2DataProcessing` repository, adjust the workflows and topology description to your need. -- Open a shell and go to the root folder of `O2DataProcessing`. -- Make sure the `odc-topo-epn` is in your path (e.g. `module load ODC` / `alienv enter ODC/latest`). -- Set the required environment variables, e.g. -``` -FILEWORKDIR=/home/epn/odc/files EPNSYNCMODE=1 DDWORKFLOW=tools/datadistribution_workflows/dd-processing.xml INRAWCHANNAME=tf-builder-pipe-0 WORKFLOW_DETECTORS=TPC,ITS,TRD,TOF,FT0 -``` -- If you are not on the EPN farm and have NOT set `EPNSYNCMODE=1`: Load the required modules for O2 / QC (`alienv load O2PDPSuite/latest`) -- Run the parser, e.g.: -``` -./tools/parse production/production.desc synchronous-workflow /tmp/dds-topology.xml -``` -- Now you can use `/tmp/dds-topology.xml` to start the workflow via DDS. - -# Quick guide to create and deploy detector workflow: -- **Note**: Not all configuration features (see [here](#Configuring-and-selecting-workflow-in-AliECS)) are available in AliECS yet, thus this guide shows only how to create the XML file for DDS. That XML file must then still be entered in the AliECS GUI as topology. While this option will remain also for the future, i.e. you will always be able to create XMLs manually and then run them, the default way will become that the options are configured in AliECS and then the XML is created on-the-fly. -- **Note** the topology must be created on an epn, which has the O2 version installed, which is requested by the topology. In principle any node should do since the installed O2 version should be the same on all nodes. -- Check out the [O2DataProcessing](https://github.com/AliceO2Group/O2DataProcessing) repository to your home folder on the EPN (`$HOME` in the following). -- Copy the content of `O2DataProcessing/testing/examples` (description library file `workflows.desc` and workflow script `example-workflow.sh`) to another place INSIDE the repository, usually under `testing/detectors/[DETECTOR]` or `testing/private/[USERNAME]`. -- Edit the workflow script to your needs, adjust / rename the workflow in the description library file. - - See [here](#Topology-descriptions) for the syntax of the library file (in case it is not obvious), and make sure not to override the listed protected environment variables. The workflow script is just a bash script that starts a DPL workflow, which must have the `--dds` parameter in order to create a partial DDS topology. - - Make sure that the workflow script fullfils the [requirements](#Workflow-requirements), particularly that it respects the requested environment variables. - - Use `O2PDPSuite` for the modules to load to have the latest installed version, or `O2PDPSuite/[version]` to specify a version. -- Create an empty folder in your `$HOME` on the EPN, in the following `$HOME/test`. -- Copy the topology generation template from `O2DataProcessing/tools/epn/run.sh` to your folder. - - N.B.: this template script contains all the options that will be provided via AliECS automatically as environment variables. Eventually this file will not be needed any more, but the XML file will be automatically created from the AliECS GUI. -- Edit your copy of the `run.sh` file. The following parameters are relevant for you: - - Leave the `GEN_TOPO_HASH` setting to 0 and use the respective section of the file, the outcommented part with `GEN_TOPO_HASH=1` will become relevant once AliECS is updated. - - Place the path to your copy of `O2DataProcessing` in `GEN_TOPO_SOURCE` and put your newly created description library file and the workflow in there as `GEN_TOPO_LIBRARY_FILE` and `GEN_TOPO_WORKFLOW_NAME`. - - If you want to specify the number of reconstruction nodes to use here, you can use `RECO_NUM_NODES_OVERRIDE`, otherwise the default from your description library file will be used (leave it empty or `=0`). - - The `WORKFLOW_DETECTORS` and `WORKFLOW_PARAMETERS` options are optional, your workflow does not need to use them. They are mostly for more complex workflows, so you can ignore them for now`. - - Leave `DDMODE=processing` in order to run a workflow. - - `GEN_TOPO_PARTITION` and `NHBPERTF` will be set by AliECS later automatically, no need to change them. - - Change the output filename to a file somewhere in your `$HOME`, the default is `$HOME`/gen_topo_output.xml. This will be the file you have to enter in AliECS as topology. -- Run `run.sh` -- Put the output file (default is `$HOME/gen_topo_output.xml`) as EPN DDS topology in the AliECS GUI. - -When adapting your workflow, please try to follow the style of the existing workflows. The [testing/examples/example-workflow.sh](testing/examples/example-workflow.sh) should be a simple start, for a more complex example you can have a look at [testing/detectors/TPC/tpc-workflow.sh](testing/detectors/TPC/tpc-workflow.sh), and as a fulll complex example of a global workflow please look at [production/full-system-test/dpl-workflow_local.sh](production/full-system-test/dpl-workflow_local.sh) - -**Please note that currently when creating a workflow that contains QC, ERROR messages will be written to the console. The workflow creation scripts sees these error messages and then fails. These failures can be ignored using the `GEN_TOPO_IGNORE_ERROR=1` env variable, which is thus temporarily mandatory for all workflows containing QC.** - -For reference, the `run.sh` script internally uses the `parser` to create the XML file, it essentially sets some environment variables and then calls the *parser* with all options set. So in principle, you can also use the *parser* directly to create the workflow as described [here](Creating-a-full-topology-DDS-XML-file-manually). - -For comparison, see my console output below: -``` -[drohr@head ~]$ ssh epn245 -Activate the web console with: systemctl enable --now cockpit.socket - -Last login: Wed Sep 1 19:11:47 2021 from 10.162.32.2 -[drohr@epn245 ~]$ git clone https://github.com/AliceO2Group/O2DataProcessing -Cloning into 'O2DataProcessing'... -remote: Enumerating objects: 182, done. -remote: Counting objects: 100% (182/182), done. -remote: Compressing objects: 100% (112/112), done. -remote: Total 182 (delta 64), reused 135 (delta 48), pack-reused 0 -Receiving objects: 100% (182/182), 36.42 KiB | 5.20 MiB/s, done. -Resolving deltas: 100% (64/64), done. -[drohr@epn245 ~]$ cd O2DataProcessing/testing/ -[drohr@epn245 testing]$ mkdir -p private/drohr -[drohr@epn245 testing]$ ls examples/ -example-workflow.sh workflows.desc -[drohr@epn245 testing]$ cp examples/* private/drohr/ -[drohr@epn245 testing]$ vi private/drohr/workflows.desc -[drohr@epn245 testing]$ mv private/drohr/example-workflow.sh private/drohr/my-workflow.sh -[drohr@epn245 testing]$ vi private/drohr/my-workflow.sh -[drohr@epn245 testing]$ cat private/drohr/workflows.desc -drohr-workflow: "O2PDPSuite" reco,10,10,"SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh" -[drohr@epn245 testing]$ mkdir ~/test -[drohr@epn245 testing]$ cd ~/test -[drohr@epn245 test]$ cp ~/O2DataProcessing/tools/epn/run.sh . -[drohr@epn245 test]$ vi run.sh -[drohr@epn245 test]$ cat run.sh -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/drohr/O2DataProcessing # Path to O2DataProcessing repository - -export GEN_TOPO_LIBRARY_FILE=testing/private/drohr/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=drohr-workflow # Name of workflow in topology description library -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=256 # Number of HBF per TF - -/home/epn/pdp/gen_topo.sh > $HOME/gen_topo_output.xml -[drohr@epn245 test]$ ./run.sh -Loading ODC/0.36-1 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-3 fmt/7.1.0-10 FairLogger/v1.9.1-7 zlib/v1.2.8-8 OpenSSL/v1.0.2o-9 libpng/v1.6.34-9 sqlite/v3.15.0-2 libffi/v3.2.1-2 FreeType/v2.10.1-8 Python/v3.6.10-12 Python-modules/1.0-16 boost/v1.75.0-13 ZeroMQ/v4.3.3-6 ofi/v1.7.1-8 asio/v1.19.1-2 asiofi/v0.5.1-2 DDS/3.5.16-5 FairMQ/v1.4.40-4 - protobuf/v3.14.0-9 c-ares/v1.17.1-5 re2/2019-09-01-11 grpc/v1.34.0-alice2-1 -Using topology drohr-workflow of library testing/private/drohr/workflows.desc -Found topology drohr-workflow - ['drohr-workflow:', 'O2PDPSuite', 'reco,10,10,SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh'] -Loading module DataDistribution -Loading DataDistribution/v1.0.6-2 - Loading requirement: libInfoLogger/v2.1.1-5 Ppconsul/v0.2.2-5 utf8proc/v2.6.1-3 lzma/v5.2.3-6 Clang/v12.0.1-2 lz4/v1.9.3-9 arrow/v5.0.0-alice1-4 GSL/v1.16-8 libxml2/v2.9.3-8 ROOT/v6-24-02-12 FairRoot/v18.4.2-7 Vc/1.4.1-11 Monitoring/v3.8.7-4 Configuration/v2.6.2-4 Common-O2/v1.6.0-13 ms_gsl/3.1.0-5 GLFW/3.3.2-10 libuv/v1.40.0-10 - DebugGUI/v0.5.6-6 libjalienO2/0.1.3-5 FFTW3/v3.3.9-6 O2/nightly-20210831-0930-1 -Loading module QualityControl -Loading QualityControl/v1.27.0-1 - Loading requirement: Control-OCCPlugin/v0.26.3-1 VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-40 -Adding reco workflow ( 10 - 10 nodes): SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh -Running DPL command SHMSIZE=128000000000 testing/private/drohr/my-workflow.sh | grep -v "^\[INFO" > /tmp/o2_workflowmfld0a0n/wf2.dds && [ `grep "^\[" /tmp/o2_workflowmfld0a0n/wf2.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/drohr/gen_topo/test/output.xml" -DDS topology "topology" successfully opened from file "/home/drohr/gen_topo/test/output.xml" -Done -[drohr@epn245 test]$ cat $HOME/gen_topo_output.xml - -[...] -
-``` - -For reference, here is the creation of the XML for the full synchronous processing workflow: -``` -[drohr@epn245 test]$ cat run.sh -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/drohr/O2DataProcessing # Path to O2DataProcessing repository - -export GEN_TOPO_LIBRARY_FILE=production/production.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=synchronous-workflow # Name of workflow in topology description library -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=EVENT_DISPLAY,CTF,GPU # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=256 # Number of HBF per TF - -/home/epn/pdp/gen_topo.sh > $HOME/gen_topo_output.xml -[drohr@epn245 test]$ ./run.sh -Loading ODC/0.36-1 - Loading requirement: BASE/1.0 GCC-Toolchain/v10.2.0-alice2-3 fmt/7.1.0-10 FairLogger/v1.9.1-7 zlib/v1.2.8-8 OpenSSL/v1.0.2o-9 libpng/v1.6.34-9 sqlite/v3.15.0-2 libffi/v3.2.1-2 FreeType/v2.10.1-8 Python/v3.6.10-12 Python-modules/1.0-16 boost/v1.75.0-13 ZeroMQ/v4.3.3-6 ofi/v1.7.1-8 asio/v1.19.1-2 asiofi/v0.5.1-2 DDS/3.5.16-5 FairMQ/v1.4.40-4 - protobuf/v3.14.0-9 c-ares/v1.17.1-5 re2/2019-09-01-11 grpc/v1.34.0-alice2-1 -Using topology synchronous-workflow of library production/production.desc -Found topology synchronous-workflow - ['synchronous-workflow:', 'O2PDPSuite', 'reco,128,128,EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh', 'reco,128,128,EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh'] -Loading module DataDistribution -Loading DataDistribution/v1.0.6-2 - Loading requirement: libInfoLogger/v2.1.1-5 Ppconsul/v0.2.2-5 utf8proc/v2.6.1-3 lzma/v5.2.3-6 Clang/v12.0.1-2 lz4/v1.9.3-9 arrow/v5.0.0-alice1-4 GSL/v1.16-8 libxml2/v2.9.3-8 ROOT/v6-24-02-12 FairRoot/v18.4.2-7 Vc/1.4.1-11 Monitoring/v3.8.7-4 Configuration/v2.6.2-4 Common-O2/v1.6.0-13 ms_gsl/3.1.0-5 GLFW/3.3.2-10 libuv/v1.40.0-10 - DebugGUI/v0.5.6-6 libjalienO2/0.1.3-5 FFTW3/v3.3.9-6 O2/nightly-20210831-0930-1 -Loading module QualityControl -Loading QualityControl/v1.27.0-1 - Loading requirement: Control-OCCPlugin/v0.26.3-1 VecGeom/89a05d148cc708d4efc2e7b0eb6e2118d2610057-40 -Adding reco workflow ( 128 - 128 nodes): EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh -Running DPL command EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh | grep -v "^\[INFO" > /tmp/o2_workflowkxkzei9w/wf2.dds && [ `grep "^\[" /tmp/o2_workflowkxkzei9w/wf2.dds | wc -l` == 0 ] -Adding reco workflow ( 128 - 128 nodes): EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh -Running DPL command EXTINPUT=1 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 EPNPIPELINES=1 SHMTHROW=0 SEVERITY=warning production/full-system-test/dpl-workflow_local.sh | grep -v "^\[INFO" > /tmp/o2_workflowkxkzei9w/wf3.dds && [ `grep "^\[" /tmp/o2_workflowkxkzei9w/wf3.dds | wc -l` == 0 ] -Creating reconstruction collection... -New DDS topology successfully created and saved to a file "/home/drohr/gen_topo/test/output.xml" -DDS topology "topology" successfully opened from file "/home/drohr/gen_topo/test/output.xml" -Done -``` - -# Creating a script to run a workflow locally -- The workflow scripts should support the `WORKFLOWMODE=print` option, in which case they do not start the workflow, but print the command line to start the workflow. -- The parser also supports `WORKFLOWMODE=print` and will in that case write the command line to the output file, in case the full topology will be composed of multiple commands, it will write all command lines. -- Finally the `run.sh` wrapper to simulate the AliECS GUI does support the mode `WORKFLOWMODE=print`. In order to run it locally on your laptop at home, please also set `GEN_TOPO_RUN_HOME=1`. +The O2DataProcessing repository has moved, please find the new location [here](https://github.com/AliceO2Group/O2DPG/tree/master/DATA)! diff --git a/aliecs_documentation/README.md b/aliecs_documentation/README.md index 5fa966c..5c3a816 100644 --- a/aliecs_documentation/README.md +++ b/aliecs_documentation/README.md @@ -1,110 +1 @@ -# AliECS PDP Workflow configuration documentation. -Note that this documentation is only for the AliECS GUI, more detailed documentation for the PDP workflows themselves can be found [here](../README.md). The PDP Workflow GUI has 2 modes (selectable as *panel mode*): -- A **shifter mode** for the operator, which has 2 basic settings, for selecting the number of EPN nodes and the workflow or workflow version. -- An **expert mode** which enables detailed manipulation of the exectued workflow. ([details](#expert-panel)) - -The GUI can configure the workflow with 3 different methods: [Manual XML File](#manual-xml-file-configuration-method), [O2DataProcessing path](#o2dataprocessing-path-configuration-method), [O2DataProcessing hash / version](#o2dataprocessing-hash-configuration-method). The method can be selected in the [expert panel](#expert-panel). The 3 methods are detailed in the following: - -
- -# Default workflow and detector standalone tests. -The shifter panel is very simple, and doesn't provide many options to select a workflow. Only the XML file or the path / version of O2DataProcessing can be configured. It will by default always use the production workflow of the `production/production.desc` topology library file. For using a different library file / workflow name in the file, the expert panel must be used. In particular, this means that detectors must currently use the expert panel for runs that do not use the default workflow. - -
- -# Manual XML File configuration method -This configuration method is provided mostly for backward compatibility. Currently this mode is the default for compatibility reasons, since it is used by all old *saved configurations*. The workflow is not generated on the fly, but a pregenerated workflow stored on the EPN farm is used. The following screenshot shows an example of the panel: - -

- -The panel provides the following settings: -- **Topology**: Absolute path to the topology XML file on the EPN's shared home folder. -- **# of EPNs** Number of EPN nodes to allocate from the *online* zone. Please note that this number must match the number specified in the provided XML file. - -
- -# O2DataProcessing path configuration method -This method uses the [O2DataProcessing repository](../) to generate the topology on the fly. No pregenerated files are used. This is the "*new*" way to configure the workflow. This screenshot shows an example of the **shifter** mode, followed by a description of the 2 settings: - -

- -- **O2 Data Processing Path**: Absolute path on the EPN farm to the O2DataProcessing repository to be used. -- **# of EPNs**: Number of EPN nodes to allocate from the *online* zone. Identical to the [manual XML file](#manual-xml-file-configuration-method) case. In this case the workflow is generated on the fly, so a workflow for the specified number of EPNs is created automatically. - -For all other configuration options see the [expert panel](#expert-panel). - -
- -# O2DataProcessing hash configuration method -This is mostly identical to the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) method. -The only difference is that a repository version is specified instead of the path to the repository on the EPN farm. -This ensures proper versioning and reproducibility. -While the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) method can generate topologies from any private O2DataProcessing fork on the EPN farm, the **O2DataProcessing hash** method only supports workflows that are checked in into the official [O2DataProcessing](../) repository. -The referred version can be either a commit or a tag. -Tags will be used for official tagged versions of the production workflow, while detectors may use just commit hashes for standalone runs without the need to create / wait for an official tag. -This method will become the default method when the workflows have stabilized and do no longer change on a daily basis. -In the following screenshot, the *tag* `v0.20` is selected: - -

- -- **O2 Data Processing Hash**: Version (*commit hash* or *tag*) in the official O2DataProcessing repository. -- **# of EPNs**: Number of EPN nodes to allocate from the *online* zone. Identical to the [O2DataProcessing path](#o2dataprocessing-path-configuration-method) case. - -For all other configuration options see the [expert panel](#expert-panel). - -
- -# Expert panel -The expert panel provides plenty of additional configuration options for both O2DataProcessing repository configuration methods. Some options are also availble for the manual XML file method. This screenshot shows the expert panel and the default options. The individual options are described below. - -

- -- **# of EPNs** (also available in shifter view): This option configures the number of EPNs used for the partition. To be more precise, it only sets the default of the number of EPNs. Other options (**Resources**, **# of compute nodes**) related to the number of EPN nodes may override the value specified here. If these other options are set to their *default*, **# of EPNs** controls how many EPNs are used exclusively. -- **Workflow configuraiton mode**: This option allows to switch between the *Manual XML file* mode, *O2DataProcessing path* mode, and *O2DataProcessing hash* mode. -- **O2DataProcessing Path** (also available in shifter few. Since in the example above the workflow configuration mode is set to *O2DataProcessing path* in the example, this setting is visible instead of e.g. the field to enter the manual XML file): Select the path of the O2DataProcessing repository. -- **Resources** (default: `default`): ODC resources to be used for the partition. If this field is set to the string `default`, which is the default setting, the ODC resources are requested automatically according to the setting in *# of EPNs*. Otherwise an ODC resource request may be inserted manually. E.g. `{"zone": "online", "n": "10"}` will request 10 nodes from the `online` zone, `[ {"zone": "online", "n": "10"}, {"zone": "online-calib", "n": "1"} ]` will request 1 node from the zone online-calib in addition. -- **Data Distribution mode** (default: `physics`): By default physics should be used. Other modes are needed for special cases. Refer to the EPN experts for details. -- **TF Builder mode** (default: `processing`): This specifies the DataDistribution TfBuilder mode. The following 4 modes are supported, the default is `processing`, and for additional raw TF writing `processing-disk` should be used. Note that in the cases `discard` and `disk` the *topology library file* `production/no-processing.desc` and the *workflow name* `no-processing` must be used. - - **discard**: TfBuilder builds the time frame on the EPN but discards it immediate without storing it or running any further processing. - - **disk**: The raw time frame is stored to disk, no processing. - - **processing**: Time frames are built and passed to DPL for processing. The raw time frame is not stored. The CTF may be stored depending on the DPL workflow configuration (see *Workflow parameters*). - - **processing-disk**: Combination of `disk` and `processing`: Time frames are built, raw TFs are stored to disk, DPL processing is active. -- **Topology description library file** (default: `production/production.desc`): Selects the file in the O2DataProcessing repository with the topology description for the partition. By default the GUI uses the default production workflow. In case of detector standalone tests, the detectors can either use their own library files here, or stick to the default global workflow if that provides all the processes they need. -- **Workflow name** (default: `synchronous-workflow-1numa`): Selects the *workflow name* to use inside the *topology library file*. See [here](../README.md) for details. There are 2 default global workflows: - - `synchronous-workflow-1numa`: Default production workflow using 4 GPUs and only 1 NUMA domain on the EPN. This provides less processing power, but the startup is faster, so it is currently used as default. - - `synchronous-workflow`: Production workflow using all 8 GPUs and both NUMA domains of the EPN. Provides the full processing power but has significantly longer start of run time, thus it is currently not used by default. Will be needed for Pb-Pb. -- **Detector list (Global)**: Comma-separated list of the detectors used for processing in the DPL workflow. If this field is set to the string `default`, which is the default setting, the list is auto-generated by AliECS from the detectors in the partition. If this list contains detectors not in the partition, the synchronous reconstruction processes for such detectors will be started, but they will only process empty dummy data, which can be used for tests. If the list contains less detectors than are in the partition, processing for missing detectors is disabled completely. In case the *TF Builder mode* is set to `disk` or `processing-disk`, raw TFs for such detectors would still be stored, but such detectors would miss in the CTF. The abbreviation `ALL` may be used for all ALICE detectors (not only those in the partition). -- **Detector list (QC)**: Comma-separated list of detectors to run QC for, if the workflow parameter `QC` is set (see below). They keywords `default` and `ALL` work in the same way as for *Detector list (Global)*. A detector not present in *Detector list (Global)* will not run any processing and thus also no EPN QC, even if present in this list. -- **Detector list (Calibration)**: Comma-separated list of detectors to run calibration for, if the workflow parameter `CALIB` is set (see below). Works in exactly the same way as *Detector list (QC)*. -- **Workflow parameters**: Comma-separated list of workflow parameters. Parameters are usually features to enable in the workflow, but can also be special options. Currently, the following parameters exist: - - `QC`: Enable EPN QC for the detectors in *Detector list (QC)*. - - `CALIB`: Enable calibration for detectors in *Detector list (Calibration)*. - - `GPU`: Perform the TPC reconstruction on the GPU. - - `CTF`: Store the CTF. Note that by default the reconstruction will always run the CTF encoding. (CTF encoding can be disabled using custom settings in the *EXTRA ENV variables* option (see below).) Thus CTF creation can be tested without storing the CTF, by removing this parameter. - - `EVENT_DISPLAY`: Export JSONs for the event display. -- **# of compute nodes**: Number of compute nodes on which DPL processing is enabled. In case of the default value `-1`, *# of EPNs* is used. In case of the value `0`, the default that is specified for the workflow in the topology library file is used. This is only needed for special tests. -- **Raw decoder multiplicity factor**: In case the processing on the EPN is to slow, and in case the EPN nodes still have space CPU capacity available, this option (and the following 2 options: *CTF encoder multiplicity factor* and *Reconstruction process multiplicity factor*) increases the number of parallel raw decoder processes running on the EPN. The default number is multiplied by the provided factor. Note that the workflows also support more fine-grained multiplicity settings (described [here](../production/README.md)) which can be provided via the *Extra ENV variables* option below. -- **CTF encoder multiplicity factor**: See *Raw decoder multiplicity factor*. This option affects all CTF encoders instead of all raw decoders. -- **Reconstruction process multiplicity factor**: See *Raw decoder multiplicity factor*. This option affects all other reconstruction processes instead of CTF encoders or raw decoders. -- **Extra ENV variables**: This free text field can be used to provide extra custom options to the DPL workflow. The syntax is `OPTION_NAME='OPTION_VALUE'` with optional single quotes if needed, multiple options can be provided in space separated way. For a full list of options, see [here](../production/README.md). An example would be `WORKFLOW_DETECTORS_MATCHING='ITS-TPC,ITS-TPC-TRD' WORKFLOW_DETECTORS_FLP_PROCESSING=TOF WORKFLOW_DETECTORS_CTF=NONE`. -- **Wipe workflow cache**: The O2DataProcessing workflow mechanisms will cash the XML files of auto-generated workflows in case the configuration mode is *O2DataProcessing hash*. It will then reuse the cached XML in case the same configuration options are provided. This speeds up the start of run. This is only possible in case the configuration is set to *O2DataProcessing hash* because then the topology is fully versioned, identified uniquely by the tripple [O2DataProcessing hash, Workflow name, Toplogy library file]. For an *O2DataProcessing path* the repository is not versioned and the topology is not cached. This option forces a wipe of the cache. In particularly, this is currently needed if the QC JSON files are changed, since they are not yet versioned in consul. -- **Beam type**: Beam type propagated to the reconstruction. Eventually this should be set automatically by AliECS, but for now this must be set here explicitly. -- **# of HBs per TF**: Number of heartbead frames per time frame. Must match the configuration of the detectors / CTP. Eventually this should be set automatically by AliECS, but for now this must be set here explicitly. -- **EPN partition cleanup**: Clean up stale EPN/ODC partitions. Refer to AliECS / ODC experts for details. - -The following example shows a screenshot of the expert panel with some custom options selected. - -

- -# Extra ENV Variables -This section contains a list of relevant `Extra ENV Variables` setting to be used in the AliECS GUI. In case multiple settings are needed for the `CONFIG_EXTRA_PROCESS_XXX` or `ARGS_EXTRA_PROCESS_XXX` of the same workflow `XXX`, they should be concatenated: -with `;` or with space respectively. - - - `CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow=GPU_proc.debugLevel=1;` : Enable the GPU serialization workaround that avoids the random crash. - - `CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow=TPCGasParam.DriftV=2.69;` : To pass non-default TPC VDrift to TPC tracking - If DriftV is modified, it should be set also in `CONFIG_EXTRA_PROCESS_o2_primary_vertexing_workflow`, `CONFIG_EXTRA_PROCESS_o2_tpcits_match_workflow`, `CONFIG_EXTRA_PROCESS_o2_tof_matcher_workflow` and `CONFIG_EXTRA_PROCESS_o2_trd_global_tracking`. - - `CONFIG_EXTRA_PROCESS_o2_its_reco_workflow=ITSCATrackerParam.sysErrY2[0]=9e-4;ITSCATrackerParam.sysErrZ2[0]=9e-4;ITSCATrackerParam.sysErrY2[1]=9e-4;ITSCATrackerParam.sysErrZ2[1]=9e-4;ITSCATrackerParam.sysErrY2[2]=9e-4;ITSCATrackerParam.sysErrZ2[2]=9e-4;ITSCATrackerParam.sysErrY2[3]=1e-2;ITSCATrackerParam.sysErrZ2[3]=1e-2;ITSCATrackerParam.sysErrY2[4]=1e-2;ITSCATrackerParam.sysErrZ2[4]=1e-2;ITSCATrackerParam.sysErrY2[5]=1e-2;ITSCATrackerParam.sysErrZ2[5]=1e-2;ITSCATrackerParam.sysErrY2[6]=1e-2;ITSCATrackerParam.sysErrZ2[6]=1e-2;` : add extra systematic errors to ITS clusters to account for misalignment - If these error are applied, it is advised to apply them also in `CONFIG_EXTRA_PROCESS_o2_tof_matcher_workflow`, `CONFIG_EXTRA_PROCESS_o2_tpcits_match_workflow` and `CONFIG_EXTRA_PROCESS_o2_trd_global_tracking` which do ITS refit - - `CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow="ITSTAlpideParam.roFrameLengthInBC=891;MFTAlpideParam.roFrameLengthInBC=198` : ITS and MFT readout frame lengths in bunches (defaults are shown). If these settings - - `ARGS_EXTRA_PROCESS_o2_tpcits_match_workflow=" --ignore-bc-check "` : Do not validate time of matched tracks by interacting BC's (useful if the timings are not well calibrated). - - `ITS_STROBE="891"`, `MFT_STROBE="198"` : ITS and MFT readout frame lenghts in number of bunches (current default are shown) +The O2DataProcessing repository has moved, please find the instructions you are looking for [here](https://github.com/AliceO2Group/O2DPG/blob/master/DATA/aliecs_documentation/README.md)! diff --git a/aliecs_documentation/gui_expert_default.png b/aliecs_documentation/gui_expert_default.png deleted file mode 100644 index 1d143b8f985f96cafaf34af4d860c21c2e4e1dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133047 zcmc$`2UJvRwhu6zS4ZZEVfX-x)iWA{Za+Z*rkg2E0#M?{ORIPH{d-&o!oNl zM9c{#mGe)!)D21`zJ*l@(WPY!t?TA>SqurAKJ0wZ-04;q&Zpz#B(MqJPau4Z3k?b~ zva;e%DVDU>E54@zN@S0s`4-X=e2? z75)eL?CkBAXq`qHd>mVHY`RM%9-cUQ^nT<0d-uHO!+ibyckS3=)|4EckdTm`nX*QFC88CjrFw~)uBtv%XIYgej+t5gfrg0C8{JVD=F2JsE@kNk7Rjm ztOo}N(3Rl5S*|caDe0dTn|B?%lhkFCQNkqu9MWO2jcSO(Rz6%_SzG zTX#r8f%bNGAF{G)>*^$K<7QixOoPaUj`vOluWf31UBZ;K1{Uh@qh&`6!XbuCA_zhD@vWY*FWlfyb;drgbm5 zb#k8+m0DX{uPjV<7kh|`s=B)urX9yn-d7SO+@U%lCKhF7W@ffyw5_ep)zy`XS^S*K zl!2_Qe?dV(+I%dg8Q<&krKKhJTAX}LQ@-OU1#QLE!QtVRX0TR8+Jyr>dsrG}`oDJI7kgW$FkQ*H|=d zVSsv(&gs*qMV-bB+AU3t9A8#r%@!6GF2;vOkY9%m9$czq_R7uAr%}QkRt7RH#Vt+s zmhoFOF$&wUv9gvnGz630$wg*k&unaLA|5<=a68pu|G+?Tr!kGPhr4}#^?bU&dHbG$ zSz|rDt~~qUZ_yGZmaQMUiri+m7stoM#9)@MT)ARyZhj_w40m_*a^TssXUD$3-aLBB z_{)>~+o?W`GYDF5*|H@!H+R+T93ma%Df8_FMed6acNrS7OG>OSzRB&Dkhyv_Rkz?X zuk+Gim_CKJs;cVnx2WpuIQb|oJv|;v4-WCWXDwS4_mw5y>?`--qHJw%=hexb!o!_C zeVQc(i@GG&)5yu`&+5`F)!}o$CMOk$XTmMVTGIFL-%reRoi`61eJ3A<0m(Bg+qQZ0 zX4bYMH^I>8HF*GD3 zfLY?@gLEt%G55tM{kc^^$C<@k9lpH~=H%qWjxwP?KQug?s+|)^a`*5^)h~G&9Gq!f zMHARhK|vv4)mH9Fl$Ivx@ND$?@!~`FlU+p^+5-#>)q^wG1tkt#!RmT?dRkhp%X7cy z<{SjJhmcwxAB`aoqK-N?KBmq4(Ic<kf%p4`}*qUJJ>oqKlbstA}gy?;A9m-KQlNmkha^0SV|uh6ePt#BGJ&&YJQ`Z zk(2ApFr}hyOt^NOmGxd!Ird&_t0sF8w_c%3If=To`~V~4IpZ&TSs8Tfi?8OWB_0`*~c8-p_ckX0iRZyr~U0wC|_Wm5eK)-L_7vm3DOM8`atUK8i zUdj@&@Yh!+OOPtO2EIH+&?_uF7pijY+O^5&i-Wbg63&Z z&^13g?jJvXtZx_)2#W@oylm@E8RF(`yS_Iy(Fryi{0-YbVy}i>3OMBBi*O(F)z87v zv8=RoY<#?8H*t2T*51*Po0m6Q!pk$n{><*(yIViEcm5gg$g>X#2_ZHh3y3pnX=~?L zG*2u}_anGDPj+Rcr}wV7xw_7@Gl@7D*k7>eF78BV(8@CRSetL&x^*jZpL&XpPe6c} z^91AQQqvo!!mwhU{QP{&f7q@?4bL>|d!^^!I@}-3acyy2Vq-NZY5-xjxVSiZ@mKv( zRxA|-X=$^@#E|#z$y12^)6?I7^rg|&_64@pyLTq|HNK;gYKGL(*0u)^ zU*Ws|_U+sDLp9Wb5~{QenN$8_}L=P;7= zb6FCJie)wa$eXyhN}Jiuwo+13#NePuIEq@&ZI~D9xF_F0zG*2q zL;ZVnbff*^9fdE*S$Ne6Dg%{O+9J?0oxWaxfUq33yfhrG{$8sw_9{JV z1fQuq0LMgU0ahJe8_T1qCF{!;(|r}lhvEDdp}$_RA_%W$`}$H)PumMoQd0UztE;Oo zx*`lsw-X3cEIaI(sF4s(s^ychnoIPq-Mg2LF(w&(4dwu9`BqbN&S~sI246>-NEUQWF}aq^^})vu8e8YM+VMHd$# zYRBI{V(~b*Ldoh3Wx?v09PdBLL)FJ#+?Q!|<8c=sU_M7Jc6;XSt5+Ytew9H!zk1bg ze+jmQ`ul5IC7x>}5((3I7-^;^oDa}|6IbHqX5usP4+{&!CRgFq&9fU!*31ZG6h=Iu zMMO)P(EecT^Z2nshDmL?={}cQiyPOkV^sx>jg8IB*o7`jr+wZ{(WyM4mhYC4 zs=kTPv-YE@DMdcpu%*I=I9Em`QC?m?HSg=|i@cm(<()c%-0*=b-F{f!v#)z?W#P@6 zH$L%B<84h%P4_0sOBu>4<=x!e@^rrOC|PtBE+MZWqR7h1E>f2?mxnmB9NLxq&AxZC z{V+B4r^gR#k;+t))adBw1Z}zohTT8BS=@s;?kv1*k0G$Ln*j=qlMPo^R6OOmx;Qm8 z<+d=9Wz`-^0z^f0!2dgqwM_RvmbgSD?mBeV?B_cN-&~F!-9jKt)?Kw{D*K^(;lkbA*F&G;nF!~z#(dN+fBPM)1q$J9SIHa5TpQ&YFH=ez&`82HUqR8$-$I)ufW6OxiL@*-G6LqnNF zov>J1kSx|0N;Z~OR>FdVxpeb`i4X@0DgulI`hlaX^_+jbwywC-FkeL&fqqPsE_Y2)th zjwPRSqneHt(8OpoEbWG6%hwm{>+93g(+Hf2@$mrst#>wUo|&Bmm^)AOT3<5N(0HDe zHBUy=KVBhXv9q(=<+%^lgkz)+9Xf>N{q5Vg*4EZl-O1v`KFak?B?;?mE0diCVWdls z53eD7>FRa@$#V2*SrG^nz5IEBO2O%(D1+{p_cp(wPft(3U1?Tn+kuD<)cjFx-lYh& zg_(tgO;=$!iAN{*qa=Om?b#s~7M9ZL0q+*BPslWji!O9p&x<`)_8dN^@%<@QN=;48 zP+fGLIxq|!uU<{|%G~b^hu=Stj4xlV1Q6}ccl3)s3)rX?wV&9f3&8d4*wweJr{QMcGfGPmRz$LYYrY4h<<^mQ?mZ+z$hH~Y(Eu{Rq zbPsXPaOpOp#->f1jvYI8f7@;vr(cap>bQV+h+yBu#KhoW1>MLCaSsvdgv3O0VC|gj zmE$$rLb%f$f2R2~#nXwYKZqv3`SB-RQT1c|{8`_>f5)!%Tw88!Ycs!j^QO6ZTT9F0 z3VBEcIXM%7Vfu{L4ULWW?cdMu_Gb)R1rQFe?3+JLY9shjN5rs*Iy%l{mr)_RfB7PP z@nTt7S^t-(M^|;}Oz;4XBMktJcw}U>ty{KCWe5TQuTE-;za2S8&%h8FbX;N2fm0t5 zn&jkav0o}Hhq3+1B@5F?b1E|}E#Ix4^Y-@k{QUgauKmQ4iWaiH7hNN4(UgogxwyDA zr08l(NmZaK`uWqo?xh$?Fe4^_Th^mT-R6ENrRs?}Iy&Ooblh58TA608A8sUF1zr&_i)I=pIn)E{-&dAVCCA%Il) z_%cKsN2aQa{DF>vKN%}KOT0?hy-arzUY*bj8AYP3m>^)t9H;xFl#&7izinqKsIID_ z)?Hgaly|#M%*CHvp*L_Hmw&N{t)io&L*9!~!uCUmC4j-k>fQX-9gAfiU?3J1gm3kH z^vlDt4=>3`ii?Xw=`uSW93Ab|^Kp|>`ooV14TSTxGmFzkf`WqeQQLe-{ki0!xqaJb z1k+822!zE@V}0!FRKKHSOu8u2@}|w((h4?t?3g@b9#_-7cPFY9^M9C_qEd7V=rC7w zbfLk)w-`;$%zh0G(H%Op+^DYa%wN>*-Uckbi4|zmUzoI_G+>iB#Hxu(@}?+~40Hm}9XM2^?_! z3LA~R{Va<7z4f8o+GLO~MiA%8)6rArkqAWvsY8U<~F;ckCI~0B8&+V@1YkrDOUp4-LkdwMv8k!N;;#<96!%yj&*>I-`%}}|sSD)&)Nn(XR) zuPvzNj^Y*+1O`Ubwy!+PqFLOl{NynS_n@{!X_@@&>GWqKpQ++6 zgEMilGY9EsX+A_#D={?;(=;}In~VM0W8~v2veNU(2y_lsV_tr? zF*q>)fZe*f+9)686cmO(-LF(qGL4p)IF_PU6!G+FeU6R3I6@?T!Xg4)<~-J-v_|z6 zsOHk8OO^$wjYx}Cyi+$r)V}xS-t!(arPKO4+IG-Ct@%U!$_8(N)tt(u7K`^5rUtKL zUp!f}wAHzAvtoApW6Sd zLw252OV-G?495&&_4DyD@R`VZdWw5Vvig!pQ*(0-_4V})4GvCDd#I@Bvx`yI=^--$ zpZAT8afQeP1Oz(|;^M>{*MLYMS_fLeekxA~FzU-fT5 zA^D}0YvHmFA(}D$mF3RHI%BLCqVh7=$Ckc1WV44Wgi6^1p-5*3W~1- zs22b++p2w{yChno7eqHG5=|AAvu594@fI&$$5O!44Qc=OIA=m2xLEAmd4aE+iZ{R_awZZU%r1SIj1z|*f_Fun# zkr}k|@*N6;latXA5zF(<`pxgP)xq4iY-yxlO7kZzw@7QIFdUBZ;L&A2{){&2YS`|_ z-%Ng|JPrt+Tn*IG)x{MNSioe}aDMvq39$V6DZ_h7Nhg!`(b44>6liN{9hUGs2Wk~O zja6GFwO+sy<`zWd!BYkVYLAui9K@B?upNY{)@SNvD2aSdu(1(UP!yc3v_;~>2A*>Ez_(mI=f;lC+%MI5=qcXao&T4h~?ds=*nM%Sj0dnp#@o zo~zHZfX;+OMKMLk+1S#2^YdM?{Fln4TK3m~^S)kyje?OUp0#M=Dpm+$mjlMddk5{7 zu(L?<3en;yCMqYWC@6rsSKtZL&$D~bpNqj87#_~pgUn~ls|zB#(Dm^_0zv%6 zZU(0Z-pSQpTsW;=^e%n=`Q(WsgTNS#VBrw~fzXmW9UUEoAfmv6-k7|0?oZ$)B0{HO z2>3V9*>;Qz168zYr_Y{647|}k_VodfZkleMjyQO5Rv8(Y>jjn-H+gwefBaBZyCN?y zaOzb2wYYDX&Vh|WdJv32q|?Xm=JdOr{pmOvBr04tV7D}2FP!2QOqK53U7J+cMF<_5i%~15#76W|=zS)x+v<-{`{hxQ`1eEOs;aw{h#{H}o?j zXMiq5p>Z_k`*%g~S*$a2bKqo{1S}7Dkz!+Spg1F{`-0zZZ)uq-K+TGX*`hOl9*meLxI*k|ap+J`h_H6k)6#bA*s)ix!Sd(3faqxE_NE^{u1A-) zinc{wpXCE*xu|pj;z)1Vqd16YQc}~Mt_u^~Au>z4E}{xoIep^qzVvRsM~|fC}IrY_Na+2@VOth=283H9%GQ*#^_>2%ZEf ze=K#67Yji#R#1aw77qsmVAKu<5IGJEAn=A|cd^(>P_4LF6E+8kCM=oJ0BF<80+c6IJ^c+bR5)xuO=Wc6Mzg*j+0NkXQFG z3Qb+gak{b7w`A)42>}7Mj+H2|8g`6f5fPk;8D6X)*?mZ2o&s(`Vd3FbHeLgj;1@xR zy(0!cf6is?a(MKkNXaFTr-)VhtJdf=OveY4wzb{#vDT`j-ktfgPc-e@q!jQiQXlvtypSlAwX`@b zxw*LZb!y%B=rYLp{t*wQ^1Db%G*744aa7I9YP{?bl{558taG9YLI83^>Ys%$OA|>4 zhs?C+!NF$@OTFJ*eoWyv`2Z25sK^83prsX&<~h>9!D`--`xkW6)B}-wGqteE4jq+1 zg5Ggr(<$+pQ}QizU+VCv`yE!j)9&c`?G5He5%J|damB) z>a4YRLqBdoGj4GvHQ;cyq;4#$((-V)Cu^;A8}z(I@}X}yNfGy7*-bDJupbx!~fWE*6F#N_02b^~7^ zO8~<|vcc9!XeJyx8u$4r5o$=sjE@*Dy;v}W#;CoK@9=SQ1|)q|H7$vKC3PON=s zm>&7vr9FEsFmR8PQ`1;}K}}6^dAYHGo_bD7UYx1+^i$rntgKF`_#f|X1_e9?D!-+r z1zI`V@#Cg9ZU8`o(I58+XoKGPh%A;yp1o=J>-+0Z_qQ_(-ReQX_~*|b;BeL$6dyNC zOn9_1N%P(d(lN3|k>(QINwQx&1s08+{uY8ewW;_xa#qXVC=2K{e>v}HdCjWoYD$xr z4`w(+^iN+(u!cO-{N{6*=?9M;h^Z`Dz zsIU++_17W8GZL#)_d%Hh*+Et}MP&`FjXD_2?KG443^`5FFD*Oy|D_aGzJ|Dj4tg^( zS|$aJK1Xg96%l#(-~r%b?Ay1<#}F8omX;u2cQrL3a9Zt#RRP5+u%v*1z{!)<-@l(a zcMibU5*6QQb82%#gK?QC#A9maos<6kLPvKB#)V9vl0}s*`pj1|l-7<73Z^RK_|QlEgDg{K_-hvN}!Y5 zbY~;k{F{@p-R#Q(&CwOcEZCzKGa)HH>3bC+6!=q-h5ni&{m+GLMGC^l<8xi1O8@$; z?kM~xgLl5SSL*|`Do9Uq+62$pEJl0lM z-EHUZUm$zmD%7;Je5XYSg!sDvsg;F082{(&Z@2XSgTYp){_=$`tm}nORb|10&Z~wE z|21{H_+lJYwA%%w^@=q-j@|`!w?6|_*TTobb6-FFlm(mDlrR}Wk-k(_T>-Y@J#@gm zubKt?zS0-tx|o=60|Nulp;?g0_VP6isp+iYl{L;lxvEp+HgBxfA-m za?#>Z{kaz(?eSs2SAVLgth8sOr>3@*>;Zz?yMPgM*%Unr2NTp!+*HFrdV%19tb$v; z|4;+3M0BId8MGJcDt~?P(Y^ckQL40o3Cpq8wVjnfC|&rWhDq*CL4qzS5^E2w9z@Q@ zoj|!-2GMc!=uzRoez(8_r~9BnmQGp&g7W=A^n(U?)55|Jw?xqMt8)Ym;pgY4on?M(Ld6P2H__P8kj2_X zVWjE3=#8)YSdj#F=%3}|OHxg0fo+?w%gMbYuMlqQ7x-S~}(a7AHVs(wFx30;Ki6&Fi*U zbWqP24jzOSENIzs3&t^2PsHHJ$ZFdT1&K8x5z&~jGD^r+(tT>hz{*OFY}s>{($;o^ z=!gOq>j7SsjhxY0&XXs-mVd|ns|JpYj>3&nJVzmh{nLvl_908$P+Fl#a%*J@IZx;S z<{>#9pMbe`>YT->NOtzTloTZ;pMbmiW>qm3`<66AoSzVmQ3dBvKxIor}kD(wZX8~`4c37^viSTM0 zHuV#kSme4$QD>e=M?3fgK~kWo0%LOR=b`1SlTf#`%G&6{&2R8zz!1k+&l8}NiCRQl;qrKLv zI5A%4Ki*!^&^Q3e?9TP@vp4ZyLEa&tsHwnd3%9?}rZ;qZ~QNXL7E4%@Kqk+_N6GA@RVS zrJa1H->`qu#$m#Ny9CVGBhvC;L!_Ib0_%s&%vD%oD)GFQEoqQ^eYJd~dBVUXyoH|W z*4EbE-i=DXOqXs49H_9I{Y3Rk_FLH^*4$xDTGkSM`2KZic7I==@tIbOCPg1VzoV?q z&d!GQAejxz9>UA_rMjB7N#6!jFcWt0j4>%qTTM-^M&cWa(z)N)1O;U#aT!8Zeyj6T+B3280a=H!q@WR0; zOMZihh%4+q;P!#N%VHvs9xLnW>Z+=KcNGnHJx8^Dl{jf#}%ie57%)r6tMz zn6U6*LxLX_^Shm{jYoJD#3f9 z6nGC?wJM}9L8~@nE2~a8qlWY0razY|7fFW{HYPtvEEj-hqCN8_%Y+u6ipTp-%q5IE zFq$PYd#ygzzlbXis#?VFRl;r}{epQJJGsvfyf+G<_xdHp`T5Hwx)KSncTIx%2eA!= zKI~UjRfV5{yWe92<>f7*ynt}l0@@4zW@BgnP#}(FCAouw0*R@c{7u2ZbC9?p<9h*< zW2M8xq^PR8e*x0$Ud3zIth&1f%YFE&syN^@z)&>){E1&l$-RGAd|yS({4x>W{IjtU zE@RdhRHbl1eVF>giOS@RfPfxu9SK1rHYVo!zaj=)W*)_pac@&nicM+{1@>dneWpJ~ zQ&o6-7LJKe)`{}uC;^)U>i*9%kivbXI72>{m&-EqL)(dSfF2?u>uxrSIsGFeWLr7>CA0hCcfb;P;O%|Zx&uoAZi{2AtYnt# z!i5Vc5AI#uL^!|6%-no^b+&HINeKDT#y7U$#S0w|kD`bdqw&l2Dag8(k?%d1md!2` zu~4v+P?%dA8ykaxLInUbjRf2;g1V+Ns)7=)yiz*coFQQefgjdtD^b4)V-7r(PFVRE z+R!TFfJ6LR7*+(@t=s=%?~h*hA|lM+YklrBuPv(@v?D9*=WS6&W?cP*H+0Egx|E$e zHzX^&t2|cFE9h%gRXrIC>az&)>gQ^|w;0DwfBflx zqF-WPB$1VahllPj#LVjJyY53|P4PTMwt>ECad2<|K~t`Zg{Q!M{P<W-5BT7 zk>@Z!;8_kBIb-`=+(%E3f=}b(#fw+3UIl>dDJEZH3Y;7iC%`%+j0!8FNqj?JHq|yVz~86s=?VWuaV{B`Bmh?<1N$X0?;@K`PGm!j z@NdS--pv*wBQYe^^I!DFAbW1x!}!Iv1KgO@JmebCv_nJeiDWZbf9}nn?|eoYGaY^_ z2lhKnbZ}TNUY3-Ej+CUr$$#by@JJGo)z;3A##vbd>0CfiFie^a;VX3}cF_zf=(Et! z&)F8=-nd@IvgbQ#@I`hz@W?8=e*wT>+#90S>?wqpFYWcaaDcx3tgg ztii`SNXjj(tY=Hqn{A(P*~=hZ9J0NY0o=yf+d5 z>lwPUk(>C2iTbvS%f5a4Itp(Gr4q6AtvlPG=YB zE1)cBuqipzMngi@7;yL_n*c4+(hP!xAHe?sFIwumcTSKy5emV`&?u>>?5nf|D3AF@ zoI_&TN=b+CsKNU5z<~n}<8AY(xRS}12F6NU&2Q3us^>!e;61Ef03?_o-K7Q~bzp3; zk^w37J?0yM-#9EiYJ-aYx>5jz{|DiISHVvyYipiLTZy$fTI#&~d^<*GG&#_xn)?L? zu8$<8!do8T@BeTQlk4y|rojGpvf-s#`h{b+kkS|{A3S{cp%a{5bCNnJtZT^rVKTAE zrmSeTp`)Ssk*G?x#KX!55q9ggZ6-Hvq+jIX;sS2JOa%Lb72n_C_F64fkBNrnx`oBbzbYpnxHJ(c6m=o6J8p!` zq)!z*Y+mgOhhXSKdmLYism;&LC9xmigQ$XG0tbZ}2;63GZ*Sk>zblA8wD1u2i6jy7 z_w@oK5+c?%2;)b)87>haC|{R@^vN32(xQOhhiaB*^o$08J} zVq8BpHTC^_E3{PrIa80fq+jF-!~Q^f1B6plA|S4y@4KQ9A{tv*FwoIuo7Nr9(*exy zf^E>L^uvcUp`7DmW0wLM;V@7DLkHIl@;sE=m>5`!IeQj8a0kR(GvOC`_Us2LRL#-RXs$@hn>TL2*CPSLBe*eWUI8T7 zl|gBtI@8e50O{!S3)i8dq;y-HdOa2Ug4VLq!CSY{(3$6|%S&|tjJJG%+JMRKWX( zhac>|;9aB$E3%1+2_-#`4i+K3zWW8DxVSiG8T%BS1!zCmPn}+QG<9U*n}|D_eTZN_ z&brS1LXiEi1q|_*jgF9$>UNBA7#Ua*UcEZvbZ{6=JxhBCibiPjQP6RH0N<|bUECb{ zT2LNB89E}~6Es2=hp|M{JJIq7Xf4q#wTX1tNm_abHP-gk?^_8y_G)W_9PFZ^+B&XT zFFMZkdNukwVLh?N+_^)@E^uG6V-=OhebOUjfI zBzBOtSFc^0#T=~m{*}hD5i)#JQh2D5VSL8F4$kbPW#3y5wEaoldy(FE!v}H_J1fm< z1pMJ>AtC#*osw3IGGxUu&oE=bZKtUz44Ry^?@cGvy~c(HE^cl}BQ>1J;|K+aq^p#B z2>fdE-Ta!FeEj_5CwoRmElf=-*P~kD(OP`2aCzT2jBiHP*6Z%{TaUQ5Ac;@uU&Hhc z>Bi`0u^UH3Mv^6Z`xdx`vobTmM9UEoi}y#0NfW`>ppRyHY6|&=JqCM^x*iYLN)#tY z61_BoP1LABUaFGfF^PDs@*EASf<}RUnKaZeXtq>qSmyliRQn_$5s|>dVj_Zqz{5qv zfx$ttgPv|b{CbC&nI*`5Q!p0q8)c@ZuE(AWOQHUNFcU5da_{WARxTnlK)Cxtr!&@X zqx%PN7nU0SwoXndkh~EBmcAw-*?}H`f9nH^;^ZH%E^H2c+STyt!u>@nxTjG8la&Z} z5dIa7jUjp(VuP`POroG5gU|;yLwf=1Nb=%ESgl*n%3lKfT)b+0b*ux;VyT7Xr?ixP zM$%}=gh1l#Y`XvG(Km29qs#ElxZ09ice>FdBI^>WeBr>OtbzTA@?Vt2GT{Hm{lka? z6-f=|VQg=#6`=T`f=wTXUqhzQ-uh>v(+vieV^>4>)`P5oL!f-SJ1Z(UxvN(p9U2xi zE}7OUj;*We&O zdL$rlqvtc~+-+r^u>1f@wYq4_n)vNeWSF=G3~s2& z^@`nvd3hi2ZiUGwF@AL=OfAY(7w&aW?TZ)hld$raD5!Do>8hrQvu=<5{2&w3n+PYU zv_U#SnU~&)c7nb2FqLfOxdpp1sXm2kH z%?y3dX#69QYPH;zG&QsKb_(v?K+IePm?@tD5u`l3601#n` zZ-J=|>MsH(mzwIZQu@?vp9QOX?eF(5vs5_utLnMZBz~SO%FWea4BdEbj?YJ1*k*9!ZuKWqss}8 zgYA#`TwCzRJZC2|jJI@-Bb(GTd6V5U-Q^!Z&+!ZF~gO+ye z(1V8#QTXvj2-)_b!3H8Q*oakh(UKzdFF}{+7wRoIR3;uVE0GS19(Eb92v|upK{Hm8 zq4)m%bL3{wde<^JLkXu=qiHlctDZ)!pb-gQAIRW4aE{FJwCMN79wVrvajUJLQ zq9Xr%9Ojge*yyY9W2{V%jU@d7{6-JND%!4KO#@Xy?ji@{4k@X3rV#WAAUFhUpFo6T z*EzhoJ;$c5P6mC8H*s9Sha1&!0$uVyU}#~1%4USOWc7@&aJb_EROL_w5Gzn>V*WhF z+xTs4CV_&chD{+#!X<_E0V88+X=#i1Q%;3%Xr+mJ_l|6~0&v^CW5=^PWNLORf4+ua7QB!Wy}|29yYph3{9gTAJ8$5OrJv~Z{- zby1=@@W^|5dIFgo5_3IUaN-ckTvP%k)gr|w&YlgfHD2|`#KQ^(I@}qyAe3$BA@}3n zTbi4PcKZZyYvda5@+?B>C8Fht$AAZUSO%QK`I%<*_ed>`&{P6%+~-V<19fF%6aC@^ z*Ye&vcI_F7`s(VdJYmRTqNh(ktz|P#m`5>#r}1cf!bF`O=Z?M?L%6nmz@(wqZF0sq zsjR;Ksa~#ap_w{Z)qQ`^66#&Rd)*@18YG?9#yY^`^`GpM9eEe;De(vPZ@GMKIJPc7 zEo}`^SN^&1QbtL(DRkF0KEB8Xo_ zf-O=}$sCz&w^RYQg8vp93*Mqz2c|%FS&BD*{nPS@{E6zmV~zE?)+X<%Li? z#>|tg74jq{#oEB&74|clR}Bn$HqhjQC4r`ffX9!!K|I2FfLTsSNZ=?ut>Egqi~_I~ zWwwCVdMu(P0%!61@+eAnMp36^SXiJ_0QV5#hRs8h0yqG@+*>ScY{ua90q22FP^MeT z$b7xZEN~6QDLs7-mME56w6Ogp>`#{m0)+DcfP`Y!9YTNP!oPzRE!kLid*I_lL=RN~ z!bOyXm)`Sk5)QZkI)z$rf{*W7O9Mzz)(CW!dF_PeMyI{>21ZZ!oMu=zm?S*iA+>vr zW;ZjOGPonl4s6v#8bjv4nlPJF>j7$v z1}Zt3mR>0?kDc2WO3TVX&0Zm{T6{5)^xd{A9Lf7214F9jtQYxkmTT(F+o$Yz9^J_z z8**mD>GG|h?y$4m*hjz5wS8c15tFs_VDtf3gUv9#urSQ& zk6H}f8_)~mx&^qZQId;!EC+|eSki;q8V08R5&Bp*`ZyHrwYzP@s*F(zg2H}dK}{v6q;Vy4$jHW6iU$@=oiUb)Pp-jJt^QHX>8 za=LZv7rI)d*+kIp2J}%Gz))$!;YaSuMr3@iSLFKf&ZcM`eq+F}e~syGV7(ygzLfAP zcAnG=k;#H@&iYI~z89b#9i4JnX2(Hs_eG#Xh!y?6e}}^%3$|lq zM5dX@@fAA>4yob(em+2WpgF8t9Qg7|CWI5ROurL1ARwzZ?2MhCKJ|jLUi}HO9}YD% zWk4EkgboCTo%Xmq=;|EHRy&NxYQ*43(Buj>%lcwJ%xWaKA!l+n&qxHA5g^92(m#C5;dHH1t1{}D;AvFr9VO>%)Gm;BO zFaRm*JlV?{RFzvu+N&HV&$PZ{E4n11lD-smPJy2lNs+6Xf-Zv98<6(}6i{K|*6Ql& z=4NLABHRMftAn%iB;E#~w`E>pB#3^P?hQ?{ssJVsJf=-&eil%O_Y)Fn2kKskb)HO{ z@?}py3N*wq6Ju>zqo%19$DXe!#>#{s_9Uoqrbulj#J>Q`{V&xJi8*8dnKs&Fg-k;x zxuiE$A8UP%%nF2nmB-+0_Is=1P;!&>9$77My|!0K}+jITbAF1q?)91 zLa?SZ#F#i~Ao^N2_OMVNr3l~1YPDO6W2Qh{)`OtcI`R|TAJ{E8J%s12#9%Myn z@w7KByKGC5TMjxhP&o@&cl;U{Z~%O76T4DeE|Kj5{z3#9n#`pgJ&K*(j>&>pm$W%D+P&iU9y80gwUr zC>TY~@$>KmGQagpsCg+Cd7~ApU6K@lwlKd@&`?~}frt2g_tG#kD~!%Y3uu>z4rbne z{&ElD72V?fS#amPTtghUk4lBCgbq$M;#ijEuU~yjrWY_?Xrq>5eTue|R8|5ZI8cYD zyYMz&)Ge4Xqz_h$Ib$oKoqrVN z>^^T=RCISgxA8=L%bH-QEjJH=Fh4jtS^!9bWP%azYHn87SPeOnb&YB_4mdzpKfpY^ z^JI_6ojZ3h>(Cs@W`dFeL7e5V&D3-l83W50s&=gMl^r(`-$Ozgk$8TE#xN#xg!jy!ac!+c z6;9@JE=Op5e(iDl2MH74$6@q=g5GNMPl^Oko$%N)z|90Qw~t=&H3*M9M@kYx>@QW5U( z_Tj4SKr^sJVPTNZGRW^W#iq@7_zeW4ghU0i1B|0>t*vXYxO8aZ*dY|%IHBhz28@j8 zUy6cQ5A|h=#gvmPEz{G?OWi1^YndIZq&4=!K7$h0| z5>R77@C+WlXLRF+BRbWAThX$|!N&G>(U0Ed`>P8$Zp84wJGP{QAm_bM_@eSLIPfs= zqYjQRDY~GJr(RTu^tu5DL8&-n3j86jOk~6Zdf(WO3prfyO4o2-TXsAIo*kW=3CgjE zp@C6RxY%aPr@Cq zgZN&IsX{Ki?{FBwAOgrDZuEH}y&VK`7~1CAd`Kgf@@ zhUAOJ=lqa2!kgkx#ag{R)%>r$ut#Ed0{({AowkcO*NOak_2ka zm6s1ZMbt; zV>s<-7N=`K&|+5vo*q9D*YHW!RrFw^Z1#j~ggrE4Uors_Yv&2)i$M;m+2 zgeTwAR>UpJY~6h3uYyTvIIIjQm;B0l^q)@2aTf9&;ic#%O&$%r{-+;+zY6qqum|m={7Or{K}9#%2hos;^a`D-^bDSXA}lEAjp7NMSORc~ zao9$Fr1M4K_Q0HhOFo*4bs;0k8G@go1VcpIS^ahQ-;3G6Tn(sRdIBq?*~HB3d3ZR- z|25iRLvEE|QaM=?RJ5K3eSG@g%^`U(%&Gowr~1Eo+lD6!z{%E(<1FPLKY|9{R@(QK z1^LR5?E0dllwm)0YKl*ucj-PLNT}g+Xm39*BFci_a@UAWHu?5KGs|2x^hVwnI9L#H zP5x?lSf@>(NPsjTk5!aLwnc9aBHO9+4!}q4C+3rv>Y5L0u)i&He!TRh<25Mrqb0Q5cGZCox*cX zO+E_>qQ!|EhY#~`#T$d)zK%BXPvOJrx4*~W5RSL-ChjWxUIuHLY_xdM-vf#gfdY}7 zaO{>ij!r=rCLnsH*Ebxr5-nh*h4_H>2QaxPvqALO{{C_7Q)CxZs&Ls$JCry>u%gE#|fho*_A2~-_0(XVcV-d$y2l)Mx-6J8l3`9auS>2&ViNy!-wn*;z5#hbyg z3}&<`0h7od;J%OL4H0ajss?Zz)Heh-B&K12L(qAQ%*-1o7$Dho=Gj-mX9W{O<`Djd zl%xq8A(&n~$$K1k2aF8c88Et>wDjWerX89%A`XY(;H9I}fmHxI3dZuVxO)rOi&*8V zR84=7ZgBMOcyp`=C+sncv9k}MZoz<}c^I-Jh&>Zc&rEkI^c|wUy8>$3dn;ioB$zcT z^0d(!5CU0G?0oCd}PeZ=Kxd|Py+ z;1dwAUVDkMN;#netOc?!+LzdpwUQw->_%hQo1LZ!I6KU)E)IkPR)AkXz<6_NH*`;L z)w`G3Xlzp>Vb8dKzYLoLsiPin{h6RHlr(FQf)Gh@lZ04$CMMV%$X#!S7jDdepYo&U zRlBvW8M>WpF9zLpN^2VmZwT1P97nv#{oiQ0IV~U%=;vqe>^wYz?9HW-W`Oy?B18Me z=G}*dZkix!D^X1D49Kcvnf#Z4{abjF)-%RuCi`zjv zf?i+}b5+rJx96=ghBiTii;j-)QC;~*L&`akx-FntD&|el@5+K|4}H>z)#wzA%~wY; z$Y=N~%7;zvV z1|KYH$;w0lilrHzE98S$0nrgzd@K6ExYkCAE&%hbQp{DNC>h_$0($)VfuV9AS`?d* z-`DVPgIe<3Zu$L$FhPO1&uVt|<8h zYy*4-82_U%%%IQi@| zf){kZ?(pZ&5ieEYuz|6g?I-fgTPh&AsGxS#_rVD z54ikMZ=C&lQA2S{n_E82m9C&{rFTrv&aR}<5eU^E#*nHWu)IV!J*^}n|F75hAP}T1 zyT$icpHK?pgj{V&5{@7y4_0?a$BVsvBO{0Q?(G>Gy0l{nXEo(s#%;z38-kI5DffJ( zFEDEcfG_sC1{{evQxQ3Ze0bgL>~9Vf@i-EO^=Ukm9|)gV3vAwi_ENFR^%PvyI87`U zfoX0MeK3+Fl%3e!WB~_-H%?;pCC1=1trXAm=Lu_iYrT({$pZYTT^?-^zs6Ql<&dSZ z_)PE_%==-Gax7$KtYd!*6|>4~Me-nkh$<^Hf{g>u2$P5RlmEusyMWcawr#(ebDH*4 z$|gcdk|;z7F&adnjkK{TQM5s_Ns=-N*^4%aQi`%GDHElHNU0Q|P>N)iqEMvP?`}Tt zbA0Q2-*tT7de=I>aXiO-=A_0L|NsBK@9VnG^SsW>-nVg^72Rip{b_}KXt-p_E7sY= zblZ@xU%sgNg8^?u-b(;D-Mj1eOOc?w^>aHSNx`OpcaW-bw3W|ZW_y_k4peXsBQd3iR z@H{|_@87;XrjM-G8{96ma_qnpD5P3}LA41JnkZ|ua%hV06ZQ*$YkgqI`2xqEiXD#L}hIo zGFL-^0%@Q?wq_pIiKK4kA#q)#u`#Dfmv%TDh7{qZ{n@syh!e739-0~iM+Y^(2B7Zq zvw5KP$!T4L$~M*`)6cYloNz;xzZgSU)sktOgodnr*tr! zI>#~fO-sBq?uBT%Xb&7B$C}ScVsLqV{3SRqo5oW)s`}47GICr0 z*9wQIf<6E`wg*w}+_RW+6JZN!2Lb=AWnAI)jq6JeUeq#4Z;nMlT|i;>gN7X&qSa2R zWaDs()*N@Uw!0cTo;u0uFf9IFgf59V5p(k79MYN}IRhq6e1WJO>7$8B4yG%#Ad-Vr z*h^z9hS{Y)r75X3wdFFyA_C4>o*^rwJl&bOn0KQ!0^vw$@kdG|-V?+N;UthSrRtrQ zzZK?Ww{%=;YsF!K!yEb0YL2QQw!D+@^If>hsTcqhV`Z!1p;Tkt@Rs1D%Jgg7Gq~jX zrk^3Qs-Zbor;l(~U9o>0_p#CZ#)SbpcC=GrSsm+_sAb~r2{Bw?_+#rjFt7#Nz&hjvOg-PsZ1O={=;kC6{|G5^JEa8ls@WYnc2xC0H!peDZV;3;GZbc3!^)#jbOE?M&8pv~tGb9!6h4RT9|=e@wc<;2=WZCAX+E>!oT&Hb<0iib+3 zN~N+AmMw*V^J|{j0DqX}V@|f?>rVkDFL=kd2iqf<(X?qakexTcANz-(e%X$=#_nA_ z&vpC`0}YMooQ+yJPy-`7FL86rae9&&?WvW6{O-7{#D3di0gv84fs0wcl3l+RwyD)N^BFkT=IUur`_#IbCmJ5@ z+ZS}0vwxyin)`API&?q&2WTZ|#^!fQQy5sGt@4MQ(Oh4CPb%|5_`Tj*APGm0Z)dpol-42*`bGyoE`HB#V3WPGweg4=tP8{0>_5)=4B;6dkr9$8{WjQ+dq}s<6h~eORMTa$Rlh zOY0L4Rj;g_UV8!ncVUuq;E9}boI%g4&n>plKkD1QGytgc!N)D9(zX;rGaiv$O$FlJ zi*hR1*yVTf$M!1ySIin)zpxLyMZ#vMITjWiD_kW9#Fa&#;}$|fbx@&daJ0ps>pFG8 ztI#yB&s${43VV8MOs_`6MVrU%Uxu+nt(!mJ-Tbxa<(nv~!a_P;WN+%+C)6|+38#;R zRfqa#k-G}GW&Zp%FNlPIueDVXev{a19M7a=m)R+NxO!@w{XPHq! z+km!f6vqO-P&}MHe}34n#lwdE7#Kd=9a1A~!iL0{m`aW_=lr26w^5lus&cd{aW~@Q zg+U|z!Q{{`{Sti|zmU;{)Pm+s}4@Lld4>oyMS55-~ z+RK5tC)=w)#?w>rl)?yHgK-Rg4dv~2N>@WCL;A=|_#Q=Meckf3kC3-Kw7&K1Sy<4^ zS$MP?5=VG)9FF=Rwx7nMNPrK~yFMKjh|HQirh%YN?!I~*IG3en5ox(|kBo~+Nf-}R zc73;L>$!7U5&15FNUhE zBw(ic$@J|VRFIb-%t>-P`0DN3EQ6%K{~j!|3r_9e*_Li4Nkh^lQ1+(B#%AnSSl8BD z!|Q?YC_s0HyEnBz#b_#(F6t<>SHtCZUKy%DXVg_5-Iia!UzvLsJpxSMyGNb7D#u0y z1xZg&nPy}}S$cGg54VjE&NMxA^3a2h@vl|`+CnT7-lS6LgTLYjO^KftHv8zcbnmao z5-UNzpG!{YmTT?t+$=AFYOi&cnnjBak?X5PmVCQHC!}JN{7OhPQ!?nFX-UW;eodI_%5Or=+b5%< zj_SJHv_BP5+FhTziG==)b$r^2XJaJOot-s)t(TKrTVFE?!Or;Jo1h#058!HiA&Cr) z=5>Toy z1w~4AU%mjru3eiH78dq0MS%Ez(<2DI@zidiD}JOLS>ot;+dysG1)6sT!C5G_SJ~1o zmosUkQ#RkoCBzNw2+c$+xCp<`3LUq-yx4#MJ2$QW)`62-R8Z$3XIk5}4_H)KP>|@* zh`Jn>vbwV4hO)+-arAH@mx;I3M7du?e&}mHf=h_)Y;d5yt=59SqH10s zqTIFNGi845n(+ayFi*!I3|8Lx;XUz6~8&HYrS>U%Qcb~6`9%?pQfG$ z_L=L$JJkLxG%nS<)A(^^)|a;n&qDY2PWe|j*I{`zYwy%9OhK0b>UGud$V_3PIbO-i z)O5ekB0=4z@ zzH>noeOtzcZZ%&!*RbRfTU=hkJu!ZA=(Y9B?hB?wn#EdbdT+bgjnXfHOJ~FG?>*`c z8m6VQIO>PZa2+opHVa` zV9vKY&>@F^+y|0klbAvxg-_|7)ZaKS3QeuewI>Y|Fc!=G55)!yI(QL|mn>e49TKMc{W@t#?T!Xd|GctZ0kujSVF}r$trf0aKuz$JP=ZD43v=MpB)*FTx)hG>F z^JMAgU&{!zR{gHK(IpV!v%=)3x<%$%{1SXDSi&HLQ9Z{J?qBj;>wSjLJusPKM~ zrV59UWIAnj2FV;zBBe(qgijelPXFw7jJ8Kx~Rc_ZV{>=2@|3Zfxr{zaSA zMH#=vS^hwy2uMy53#?4Ur{+MIhhb`uIrB;$?Hm4l6(*#{2T#j9=VRCga$31wkU8acZ5Aa zmVg1zpAcRKS^Hjhi}$ z`!~_s@VCdCyyGIP9bY{RY7@VP3-O=jpdKAV>B61GJXr7j}By45mr$pKU+yL^Q5V!t31dJVw{|Z-9g%8!$FHrBp{vADhxQR7Fks>4{)sMB) zk}NU90f2+sLD&AivNGoU`P>zM*x$b|C!?WUx+1dT!PgZe1Pvy`NKFMo<}dS2xtDA0MNGv`MKq@*@@hXMuMR zs99TwK3j3>#EH#aFFE$wKCR=>rFFkgnl~%qP*zbuMiZ;T73Nv4ys zUCkBdO{S&phYf!Y;KAotyVT)|L*5WLoyWZ?#L2Db%%DT}-aefwJOlk@ukBw!daP%F zb;Ts>Lr%pU0`d}JsFk?f)AKTG{^G?E-zQ;Tw)yhOOf8EAkKVNN8ML80{>@XoI{B^n zS>kazLCeHX-Xm;4n;U*TT1@u4XB|+1YTUA@Jbu!(ac%sJjsY3%R~nuD{P_a75mt6t zS;WfwQw#bhKVSJsE2o)09RCACJTLbn7u3{yIGt1k$2l>^qHBvC3DSu-!na?>KiGYh zu8B42g9oarGKOslDH$mtpp92~GwZVO{3IkWqJ(mAd*q;+xPZjRMj4wVDE-^B}A7b%`h}P8Jn2~&5C;oC-y|-H~`a(T3`Uxn%y;X zGVjN{9;2ghu3(nmHPLG!ESqbL?k0ZZj?+5r49p%l-SzRgaWpGq?B(U{J+gD%%Z%UW zE#uIm_CamKk-OOT8=4w6q8?OyP9>&qpy?E`^h|=jtDm`20C{5>?h%MH<4MkU4xOv{S+3ND3eD+i`jm~?XY9pD`I z&QFQ1kC&?KL+&Bm60jOy`c#+=hK6+!Yh;?&?Q)IYW%1~HxzVP)G|xvcye@z5I)DB= zhjCa~A7vwRHb4E1tBRb5i(H_^{l(2&WvdSDKjm4U5>BVmkiRuL8MG5b3H_%bA&-e3 zC}s>(%HIAa&fKKg^dzd>E-XB_a*APusW>r-Q9vYcnmU~gN8O3CyOQYBmZuv!dpf27 ziXWOPiK@PlY=i8oojM-y}QoMcl&Ro zwHxWCE`8#nMh5Nw(e!BFuhqww{id7z>fz(ZmlG3tNKZfy{s=ZG)*}cGCHF1SZs69M zdK&hy3VF0|*c6!Z^(!ng>mw-iO8A3KHS=az=wJTBT{S0>P+aun33_INe8XFJg@1pe z10@;h`6MLmRmc_JsM1Xij;IL4#(GCKq?W zmk-QP@(W!fvpN34;kL($9s!Z~HhsR!@lWsG92={Vu<|51^>uZx;xDwRRRo~__|XT) z>YhDAi4Ikjm4uwP6cFt7<9KZ(jJc6Mo$EK9?fxdm>sN--jzRNO@TkMb*UiZ(v+O|= z>zpQMzTAa;{0(HxB%N=O^x*FQ75J9D`V4QVBS(bBF7QbkpD9<|+V$U2I$Fl8XH2y$ z1a+%KD0}sj3(~OuH~eI)7gE+eBY2?LAQ`W&t_E4EWT4kM6hXY~`+O4iXx>9t>_D0_ zc^jgpxgjZ@hu!{5J&~ClLDyepv$j;L2Zw(9lj0rbqc4Jdo|Yq&F0t*=>r)E#oYp4o z4?3jHH2lp`&cx4(G^0#*Nb1WmbD&mF{Nw=WO?s~Q$?Tb}+7W_Jc`1q}OL=f~hzGnu z8RcbT)iv+fPSdMCy~Fy;Om5pqz6=+J(LEM!{!TJZ)X#VqVleO-pC1R@CtIaFcJhrz5h9oYazBdS z$P0n@JWL_e)BP+hgA(M$`}p(_pX2d%uReWOWCu)m6;cL{8(Ay9iOl9gq2^ND@rF$4 zI9^E94*0;YLnz@eQT)EfAo2T=&UQxKQ-MV2G01rK>?bJKO>gnnW=bfiPDng9DF15V zOVZ4b`^2~rBg}0S#a|nD9_skpqPV_ zbY_~5AOwX@HE_D$fGd5H$kvUA{cU7{nYO?L@ABaC(u3^Ob$;SMvT4sO2( z-QYWjTVvLE(O>O({@KkN*AL28ZX=WJOwgn^d*b@Bq`b75LOfDL00bYjmOBw`(LcSi zYF+*pwH+&+)g~>~>BTlq8@^qoOYYOW&PVS}?~vjO1eFqu9U&!>f9>3A+98Np@(l=BHZ8wUvcSMxMEsV)deIM5-%~OL6}owNGh} zvpdb3z4Y3wGfod*<}5Gb$K|``G)<`Va=|Z53>oFt-_)3VZ$hr+YCnUVLuwP%13E@aR_LeBT{L)6A^uFkR3^yXfe^`L%TgWs_-ui$oEh|CG!)padL%tIRvyF5HQS*`HV zg9nqv)3sN=)#TS_%a}37>A!alE&1Fh{>x@Xp|<-~`)pdsAf@`1%3p+IV_)a9(HTAo zSF9V=JzGD@US@+hLdGbTjrnhB3SXvY;vaSUwzSujKT*h^KogZoy~%!C9yb~U9wyN>M9nBPYi+2;Dm&Q@1PLls# zHQXi%JbV~M={K5`5g_OkhDiCu4Rb=eTBE=MjFK`)rWO z`5(ZSfdi8Cf+1=MeNwJn11Z>_vZy?6t-ma-0CYMs*#{;EFs-;M7qD**AMS;Q9DYp_ zK(*uLbp_eo_U+T~pX1-@AX@+F7;RK+)ED%A?o)oo7o-M)mh-clGnQT~WQ&q400rzF z{WG~sgRD+H+9zv4>dk=+I^$c57(o=XIh7z6m>52#B{N-@1{kDnxTS0Lz^xwmYIdYq z?a+^<*Pmr(;_43;K3-p+oMErMW{=${?(+6Ouq&dgumHgF4NCHU{eJbno4=_-mm2(lKn>(H79SiG{93k&uQ^|ZP>v~T)(&JORH9-+D4l-f zMNF9tK71JOPO@n*OESB1#KX+tgn_ORuY8^Rh*IE{v6Q=rUV#=SDkjlyPj}C}v+`fQ zemxK3trG3m(u`uMM-ODUK{mE?Qpi^rIr#+V<=t@J!U>tN$>jJ*11WNkpkzih#cc6ivUu8$fn-gRs3~2kD`_Q$jm!)Pi$2| z>Ovat9Q_YPFcU(;^J6dTy@(myd5}D-H>#|xKh8!9`K{G1C(8z#kld^+j^o#82ivQl zA=mX~uVeAisnc#K7oa@UNx4UhKyOj$tm9o^$Y73t!e3yIL8bF<2uV4!%YhYr(Eh+7 zA($;jWlNnbBnAz_knr1 z{F7dRJ5^21BiJN`$ir4L2*M!rkZ}yfB{x522MPj;No*x5G-V}xw`uKX7#qKTdU2ou z)5JH(NkGnn4<1}iWrKk8%9XK_0OJ^WE0GsYj=AC{j3it9%6{LDZ{mqHx&0};k={Xn z7mgPTHa|aN%nGI4!1gMOFM1)6W1EjTRzF*euqw3=W*NZC9e*>ON=?oG{&D@#Fk?G5 zjraGDAJ}0erT@(w1GQ~7)MEd&^rRtb<5c#cx-lvwJlcy z1LeMd7iI-@b*KFT_TAHVeYuImiTaNIwL%aQJUKr-y?E=+o$aaaT5Q*}5R2!@XPI*j zi>soBYt*DkX&hLD z8~+SErj?&$7f!tgsFHi!q&=IIVsr3NV2GiuD0Ld=_ib? z*!8T;NszyS+B|2Ae$j}|Y0Cb<=|Skp<#%EM)i{{ZlDMr{jNY|n=z|^D>oyHIy(iz+ zi^y%M#E*;lI^3wV#y5SGh;&yytB-EK)6(udR*;~dZ|La(D12^9;Y*_j>0Eiu8)IQj z&o_a1pg&?j)+_XDs_krxZyfnX-G)v7&RUchNl3cnDZ3n?` zVVXtpU4OvgaG~e6!ew8PO8Dvk8Uhjx{q?c+WC+1#fkj6L_>IwhIW}MKPojrxkpCXs zRt68=F%5EOJS+p3r_k@-jP{Xd&(}UX4&K+Qh4{jZF{Mb8-Pk^DJzIx^?y8t=IP$TV z(tU@C1*fq$e`a-i70SG0w8I(42wEX@G-ID+B?z+{cmSzF{b|4~Wm#do!XXmkgm?no z04K=0w+~b#S#W6W1w!P1fa0jm)L_k+wHAj+2mgvjwmL(`J;cW-uLy2Ol?nN~xjdL1g*_0~W4;x#^(&k%!+E*Z&0* z`-vWIT3%!{F6NtZBj8fq3#0ELV7U6%Q8DitjFCA@7={=PG>#cLV89~CfTU1e9GwIg zHS)`^(OHxj9aQMktY0h10@J=aC>oj?N4c=+_MO$)ZstLMLcJG!P{ zsDy|Fv8+YJGoq(B<-P$+lH34@;PAnNBSB5cwP-(3C%lmy5p~w)g_A_^)kwW~v{#qh z?MhT*Rn@lh>B!8_!WS=o5k?7Ym0t`+xwiPJ{JFQuC_Ax51;$@Bq%XbfF%YZ9F<(eC zT6LeWP1vp43=dsT=moEaK1c(frqrQplrCiAC@3pa5MGj6Cijs!%69@@4=T=!^ z>`#lK(AH6GDejbV0bV2yprD9^CifR=Yn}+;2XGR*hW!hbgKUC&d~LTsu}lY)x1L;n zKf<5|&+n0=M`J9duv5zI$zp)CZ`0U?Cu8>HQ$K4y%`mZjUe?Ah`$D_x4<9|c9X*=x zF`>0(E7>qPWbKdBxnEW_EHen-4^kqUTAbxZ+O_!Uym~*{ZAR}JgmkPp*mm0x+!ef- zH>dKNPo%MXGN>N#+a)fXUSm=tvE?p|h16ZcVgUf}Hf&9v^edusOYtxZ7&6v3ZrsPRG~ zx+^AVCGz31YBnLm78O@kNsqfJuA1WeYHmN>ZG7>~#`%^P8qFf3{j3$M#`~UpHcIlk z=Kkg6VGnNHsiZ?@u42N+ozLzUdIi4HTRzugcu&3HQ1>r$)2ykbG`gMoarDl$DC$D* zr_u8+C#N}9j@ui!QFqk`QO*tD?x1w^V)#1CrqnzeYsWM8Y4@xf?I@y79D6kC;m(vJ zw<jX<(nmE_;eqq&MNXN?o79K)O>R8aP+=2SByYM#M>#BcnZWu((8a2T+0{wpPJsp zpZzx*rv7{HHp_wEo7{yyFs6{87U|H5|JFQaqeb);2$os6=*rt%0*o_v!7beIuSxa-&-`~Lsxv)kN)0}E9>eTp}?XqQ6| zb-sn$gs~_#YX`Nq74mOp8wVK+>EexAN*s&;ONxsLo?4?v&$am}YLO5vTh%=w+mYk8 zH2$X^G3tnsoi8zK#y6oC`GW74*E@BxAL6RG-9czH=scm4v$l!T{Ud&wOT?-eni?Hx z{@nAMOw$eq#Z*BDQ{Z+-?=R!i;polD1sodCRP9wj#cgeE5zkVKE+qGW(VsAJ;C$?N^y;MY6PFHHHy)e#RPAPeP@b14VHo2(jmLyz;FR|7o?d*#V{cSs zpadCAajf}3TA&D``+AR3hZT}l4K{{j{!GpzNVQ;8S7MSZ#TTh^=|2D^$vs^O9XfX= zwgT``L|+=97>!gzxXw}Ha0BRvK{U4nj+dVluI>JG4y@!U2*GD_GvvW+yekT0a;QoC zG34FcQK5VHOJ1KBI|Ru}vfu{D2mK2=-U+!uZq`AC(0lW@5b&10s3MDsHsO)F7cI*e zCLvN&QvFcMkrP4K2??>S)v7i5ckk{9KNuAB2n7M84r$NT1)nM^5^*^Bq|)(2VN53# zH38+`NQ7S;+-e3`&rqIYvWbZ2yc_sb+W0^x-o1UxEyY<+AA7PMG+(bVrF?V!_|tD4 z4}tsw#RyX?X;gAg~GP(y7zQp8Xj)NY6uzg$qB0rMIc~ln^H-L3L1p9a`Y; zR17~;IJl+2+OXE&HiSM{x+;RnG#FY~n%YS9&~mj$4nrY;T$)GXj_m7OCC!JDZL0jBlSna@1P@SAWm6aGw-cAt^ zzL-F!WBJFA>!^Z`Am18DCCaxT9m>6TuUwO%rMUlZwVG~hOqU9>pOZV1f_sm4RhWqK z8N%HEfUx1x`bjcI@{bs;5bj)Ff|XiMBIZjSRU9D}lAP&=^2eP;_QFWzW4JleK7A6G zVX&JE8dy*}^n%wK&RL--x-$J`X`Y|r0|U@1Z0}gH+(l^!#g_F=vjTVa48eP2^r*Y8c~vh6SS?kN75G(wl6 zq!+hH4%s8XHc5He!-s3QGV)X=5%$+vbc3&VJ3Tf8Q9XN)BOskPr@hrsqWcz`~L0qF{wyEJ_HgIWasj%;)qWb#v`i8nw5fNpO#kW@=@c@27ThvEUaWpj{4YCNY zP+__?WI#(v}lCuVr*i9zYqW??vH?Zy*$MzH|mjq?HuvIP82g7w2ci7AYQmi z(#|3L%ulSu<$vz*&`S}(Sa9Naos}@tkwGb1-##87=s` zk;2(RYfDfbdCZ>zPa*R+@Z9dd|Z*Th)DMf5|qs2pZPth)#)M6eS92P+vW(R$4imu!*bXOk_T!*}Oi(C_0)p+KlXUA=l zx6gC$-?wb-;~L8NB6~g8yIluGY;R~wd_5|zU}GnqU}SMVqR=nDFYj zV|jQXU@GHpHiXBYJ9muXC~_T6deZiy5(VydasRfeM#2SW$b1`{_FJ#Z$oS2x)|VES zRa2qw6h1rAq3hc{Uc_pz_)|2dA4-)JN`QWHw z0d&fpIXlbM@6h7rd*=G8g^wSrt6u){^ZNJF`PaRZy&jp6I_Bo?J@c`r>S64-sIw6I z4`qVi#JC^d;s^OoTs$Gadja+CHo5aS*1`5~q$Kxq{%(X2P*U}2DA<+x+vmwlEu@qr zjx;|%aPp5ndY!s-QS`I~1?u-~^hO$LC8N-_7#J9oKfrocjHpnTo>{$a9YJH<&m)SZ zoNJr_i{$3anS&b^MPGNEL1#-O5|B*vLQP+mD;fBv0_!8RA|skA1qKhk=Lq-lX6(Lz zvHO0qN{Zja+=oxyNyGG(U#C@~{$W2w^nd?}y2U-rG0d1Rp^7FgRI2uLmVW@P|5L;} z4T=I=VS*~e&aoI~Hyxo4uc``-h#+K@fX~5gV!ey5G&S{pOTzWJ0$lRQfGi8qwqM!W zqK>-aBf*b}df^zxmQYu{4}qLmy*lx)zotx{JehbqdGcodoj*Bw@??_B@r_$|^tY_y z#!7FeW$U>;rlHjXT9Oo%bE}ciiTp5>_EqUz_vM|#&Nfmv3%hLko2d?nB4^xN=2biy z_@=zvVabw9tPvI&Fm+K*&RG!j<)tQF{N-cE19DavqDA2B88d3sp)Q`k6uB6wn&pDd zXAjx#a>0LP`<Efe&eop2_2-!0-@2UQV3PO;a8%p0!Te}Lc-5fzzXCYCMX5b% z6bCQpxC=v;nr~FDzIyWHEA*Ph<(!NB242N#x&xvB^;O|v7I6C9_K?~9_pAk(as@1o zfY@*QD||Tgakxw1YYO!n*e;oNQ@gTOJp9zTb01N&fo_0!-GU4O(;Dz@nxo&S;w~oV z5)uyV{R#3zQx`9CiW)*6X)mxi$r*=_XRh)-N|DP5XhnVThj_^rfKRs!f3&Xt?;y|R z`m&Mp=!vX`Fc*fCQgSe$6VXG`$423JeF};fKpYs|xmH&4foNfe_BrEbKPtwe5tx_P znAw^b>H)GR0;JNPBYZS7Gikubwi|85Xws5{cYgESeSQk7K63~8h&0+#Gc&`0Uc|}J z248*yrTzN#E4qwrXa`Pdv>1%`^PZdDBlU}F{p#9FuIVE;KA|NXp*TLzbFEbp^Zz0h zt=iB`(xFha5@1<9bvdZ!j==MsZI24&0%1)o?g$A-(_wXWR;Z}K!Uu8`|vh?e+kd~ zqSK$tXAjtTVgZBou3WiBKhe%Rfi@Ypz?^?j9wJV*xw<+=HYh3nI)2PZB~_KMCek$` zbfuEf;1y}@>(+!lig>|{m9AAmhb<#)`X)F z=|K3=qXL;zIZW&^H_zz!Zu}y5_k0gQp5)h6gl3PwO5H046261?6=t+G*T36bj*ZnI zMtS{+VDRv~d2F92w=d1_&K!w{4|g!$cv($bnaxA6NToJ}5F5J>lL?h5y76`|yPS^6 zQGrqaO-XJ~h9lAZEc24QjAM4RW7Yw-({(5|WENBaqeqN50^a`iV~Z`G3>Fq5_9Br) zh=|nxP*4#5>7%i2+xLo^P&DqNvm~Q*b9TnNtQKw*pdDpmTD=4$Kw57-t(ue!p0Id( zZ}5R7Q^pLLIzcCyJ4f5Hs{FT|G#kR;EdSwD^bKz{KBD4Vay{3Kc~#7*Q{%^u?c95$ z^r$-C_Zhnshd%Y(cb^ZyLE^!YZ1q9Lj~Asrrd@~Ltm1rdV`9p2`g!IbTk7Hx$5bBr z$2&aPvwJre+&wSGz*kBB+~9^w`IEYP2EoBN^jVaa=((v6Ge(8dha=Y`o%*_-c>ChT zi(=!cets=tcEYG-9bX+H2q@$yIUer~MZnbB#er18vk&VyAda28Z1rz4sVh)_*4EVt z(HF`W)+{mg>;(zlZUEISh2A1*?3UQlZ*Kp-Eq*mNfmcS!aRj9#=Yn*<-Yn(Cru$Dy;K$B)0Dyrf$e16_DR4Q*|A zGLVmL(R8380MKCq77+ATVm%LzLvmT46{9Ll4O1^^$R)d%`O;2FPJ+=_%iELt0Z8Cf z*261P43d2Bo}V@sAE!$7*1n!dW-o1~ma{>mRj~Ag&2B)B<3rYO9+FHgZ zJ|~F>goA-td6Dg`l9O8#*wIw5ugYrSe zL3ngqxib9V!JA_)I?@S0k@p6G#1;fS4^I!2A|S8%)@hY}qi9kj^9{p^kV=lWTvsP2 z(RVxkQ!>Bv4oiB1rXN1qtZm8*a5xM)t-M}uJ$iJWk57{rs~sBpH_MDXiJJ0T)5ORO zt|fHXd_>8A!&V^7`MXtLGf7QN>Wqbx1kGm(d^rmv-Lt0?w|@MsUpoh_U=!6~2DH-h zN!(z$e*Gr#@jPqqjT=qYBvaCN#~_)yj?QefH+m&LWVX#)MSf3DFK|qBf$Qta7WX;( zN4q^K=(ATii8b8?04l@f>Bfyk{ATP23Weia%wZeMR=Ag_AOtmAR$8yVP5cS3%`Lh? zD6_;%vs(;EJg?2!hAsll2W- zS%om=laKR(7;>z$eIh45q+z|8hQd0Zc3i#J=|vLt*6;Q|e@pR)u@nB67xRDq$JR@S zb5{PN1rSf@|IPR8;=)f)ZaXA68!hg^gYqr_Nhk8|IgZ@4Y11}|%B<8`8iInV*1j$YxtdY7l_&n!URe~J9TuUTkG^>%P@;Lt>ME_5X!xWpYbwcdN?W?M#2om z8{pIVDdM@GIgh6r@1(@-Za59!s;Hna{ojupBko?p`ELDz1;gWWroI%PFJ6}Y#FG-Q z;2nijM7$k`>H4D%NGce?Q8auQ4wuh^{J;=gSwckz+ap zBEFj*Zz7Gqc7@6mS0@sD`&2KL6$`I(BCqbN2czq$ap)d$?Ap8PelGzvfb934*#gY5 z?-i0OjajT^zkK>($Z{T}`}v7G+q_XX`Y%n4J|<3>;D1X9o7sLJpMnz{no1+xa7S2F zU?6|PzsUM@)fQtwvvlb+DI*l%U{UNG*K@Z+s)gIjZI5F~5UDbNd0eM(e3ms`o|5jYE! zBq;$Ola$$9TN|g#I;ypx3GA*1;haWk-4P>@QczWo^=U|WFhEOd&#NosIAowlW+E6o z3#QP$0DzzJdbxu`Bre4(SN7}G%ZnIO7H`5}V0}y~iT}#V$C0>Vse6_JChJXAm1sDp zvz>ekj~HUD(8C-TBY&wc)Ya9AyM%5u?A(#$d&ZATdMhb$A_#-H7cUk@n)OmrqBFIY zZ0Tl9fW|+nIvN$|6s8p9mQ{{ji2|}>49j|#oqb6W`O8B$y zKtSg50>C#J9f1phJ{?tz)n&+z8CyYP{0<_2X%{?;e^qAr^|0UjN>ah0~xhg(so|Het0BXmhIeyMZPT2 zsZ(nO^0AfyH>yz)zCUI>zXNW6MLIZ-upmnVAmHmnxJx07)`# zG+=gwm&i8xb+kYMvO-X-zWN;NIot%N3q&zMj1|Q>nf1diVd?Ci{j2})zi*{-#PkO2 zmx2@80Z!%(xCS@_g0GI-q5x1RC9%>}j8N>;=O<=X|45XWZ2(0-^;qQwU*anF6SGj@ zb(Ein$FI|r!@F*Z^D6!Z1=gdp)~2ktJ9n0n=8_deQG_<-fQBtpI&+76VIoE2H(X20 zF%UqOYCoONBs@*XCs}F=J5VB)$n4wOj$^j{h7M_jrUpgH>q-p5X($Ex>M{ z8OQt%g(=kG(B~5CeRV_QN54pWzwST2>eW=lE~NhuIHYw%TfFY~H~$G>&gy8MK^A>I zHI?k@18(#zMRJyIeaD)Oygmx9c=+%Oq@EqO-9(vuOdfFc5fZiB+-e520Urs81tXhl zK7Cs0;2_t#cQMv3kz4kgR9w~MPokC2R$Z?S+7p?yVYL&7+o z+Bi$T0I?I3b<+{f(Av)Nib$U1yjw4w$rBC{O>Wa_r+LowVL<_89NsVGh!VAQYrlR~ zR3fEOQ&Xc07TWioWGksJ5o^-LK!=u|OW|wI zNyS7oJnK9>fW=Q+#Hp!X_>45-_-bd636m!1y1x7c2iJo;*Y3Jg^m{pZ$L<$L7CpU1KY~cR= z`5SAlujhVhr!{OT`c4Q)T~&UQ8j$2_+&=w(Y*3j}$i8DH*zc;|w3J|R`c$_cj|rfN zvA)7+5`Gb5g#gU-hYw%BAsog{>flh$9tY67zXk4_CM4=xy zuUb6iXpt{TMIVS-G*28>Sl8+3>Ow}fz|g_qfP*uOn&=TT_|f_F4Uax?LK&UCvhG7j z(u@97IF~}$vp*|C?HMca&rFF@J@4iz>!<`Y58dmbZFhg=wZ3;Zv57xg-EE?Ej#J3q z=X2Y$9|FjIb18F~k^{0Y8O33G^uu_8wD&O9zPcbUtuGj4`!2{3NJl;cBC294J5Wwc zU1G-B%yQuX`07TzD|W2rSbgDWcD=ij@3Kk3q??oU<| zPYMb?Q`~>7g@2M#{(E4+9oZ!%G(vyytg3f_gDDY(rr@1_v3#&Gf7FO9bl}!K1%n~ zWE@oRpnr`+m3RGveD&`C2YvHe=DOupt^6qWyV+ z710Jeb)as$W={`u<9P2%uo7V@S~JW}bI1^S*2o=i_}MW;-K$3he0)F_kKua{Rme^z zjK#!!o}eAR`d%KxPFzrNE*Ne=XPE`BoQRx>m1en$?t&<(LQ=zzp-m;IfY^=b4+Uti1I;;waO(k%@Cb(<>_4b-Y;e z4qqh2%SYu>i~5jq*fHfdp>gya04f`stjBGXdiR!-3%fof_D8nR!ft}qs+&Nave{a& zGzk{MSQ#nw#nzdGErusU{|%uvQmzQnauZF?mrX*pZ@+^!1UcuBm9>m|pKE1B<_FOV z06@d@?qS!KlHxH4H<9F;LW-{lbiE0WiJK=C0^Sk?rH@dF9K9ro4k2S(;_9kI9w8VAI|mJ2{dB^#&(VRTgxt$cJ4UaaRS&ef!Bq1}PiV5{K6%`UGQu_Fnw`Qo)nSd9+gPEBbXFNn2SuDpOY|4!> zG6SP9q0n7XvNk(t2*ne#PXH-Iizq(?KRsK@5zlQc=I#QX$;!)*G=sK8n;XCK<)8ZM+@HpVE+KQfi$kOrutkqS+=hGO!nut z)ZH-)xe$C8KsM(kIcMzZ3plTevq8#(H$-wYaNWDQ;U8^pWi^JT9ft?*r~)dEgdlRY zo-^ksPN~~wKL^Xf;Snd)Y0p2p-(A@lvFTeed8sX=`i>QniEH12l9NvI^ntDbZ0;!G z8n&y-PMmre7Q=NwG|6s3ih}h^m&erNmdlvng(8Pk1Fx$d)4xAASl53h~5jFM_KuK*r-_Y0=W$Vm;BnMP@={9s}Dx6<=bU#*Xtw zvDZ$BN@4$6rLqsHdyPWCzc;2beK-4YBF1q2a9kKYR9k!5C{xgRJv?(rq=5KnoGO`+ zm>LzeWtb*wk&Bv#tOXet&Q7=YYjx|=WsoYVE(rzSCBZw9&n53_$}tL|@|o-0Vhjd@ zS#d=Goe!i`V{e8p^};{M6QFW|D&$}vEZ7$<8ZduuFL`;@Bzx?q>(N>hU-I*{F>N8CJ@*&FBg#Mw^+fK? zp^h+PESqY~e2BgO2iQ(wUCzh~Vo$;W8!!*cX2C?Q6U zMcLWHNdu{uWGhwvT6PZLsd)PEBG&es6npj3xF$nq6US@e-MfQvwqt>zfkRF=d)BPc zqegYt0};8xp#TZg@YfrpU`%`>62z~JQ{hyR-B-22h0d_a>%a+aQFkkCLflhJg^7ag z;j?G+kN)iTaziPJ+rWV^`RAd50c6Cm3cd#=i}r>9u$QKV|AGjMm+ndq3~fojKK=2z zg+?_mZxQ2VUaojKcKC=9pOL7%xVXfKR%O^AHb>84^K_YQ$PO&5JTr5wd? zta~%d-NMi5(Wm1!|Dm4tYx}>1dnPB}b4+9+wu^$$Dp*-ssvWu)UGVpx0%eRH!@9#R zzAGw-RIie~UA|-^mhC<=<`CE-b0HCsQfX8=^ z0}_o*&>Ozy`(rcJN9pLq=3Lt+;Kv*3TP2aPuk;0Kso%EyzXnqLf5xf!p#L2>>;LqR zxl9*Oo96U5OKb(nt)~mXWZi696+e7n9D_^63W)&sG(~eB6gCb#(7{Lfo!B+pUJzVT z32<0(dpjJVU@ZwUcH%svmN$FCz0{Ws55uBEUO4}V1oD#w{oK_p=34 zzQ}o@t3c}T&VV({^jNTPl8NyFG(R5C0rsIiHvjz((j9xbZKocvJYZCWh^v^r6|P-) z)#KInh=>T?jxuJ}08(gs*YpiNaA3ervZL@Egv64=CSV;$A|i? zRGbO0j$+UXJ|paTtycJPzzVvgWLkQQj68}u@AlohPjs$)w_-Ldrkp#-^$vh%zt8?) zl0vc9-JCpctgzUmM4QUcUGi;w>yH`Fn4uEI1fYPeekVDu882irfByQn4>Ax$9;Gtd z+;SL}EB5SJJ$&1b#&$=XPNC_!X3bD7t+k$>A*b5Nyff*WGa#9z@ z)TVbPAg=2B9oMl=fne+WD?NUfZb3?QRnip=*Z<&CB1u{20muTsPdyFS$OMN86BbM# zK^z5~0NsRJ{+JCI0Z82Uu18;MJG^LSxYa&N3mn`4&8CC+nQ_Rj9~6eZqW$|0Kcj0=E<8`tg5XHX`fOyR2PC#C<&=B{0$Zj6dwX{b)Kip` zYn59Ct9yl4H3A8!3g<9c8eswddW@!sXbItiO$@cGk*>YELaYU4p)eEel!K#8CpG$4 zF^n4I%LD+9dDBUzvt|v7;`pkY&{F+(nY=kzC?*z+0u{5QdU!CXRpML*)v4-QoLC9u z!n(YZHW@!eld&&Yi$+Gmc?0U3C?c(=Z8~9%?N!mn;p{vXOCoR%;BG3Q6hr{h*PlN1 zqeJ)IyBSh65aG4`?0=p?J)WVS$Hv2Yw&3nvBi0%!Oc3F7ZNj#X!hhB?3qfaa0Ek>p zT@wL$7V3^Ydw?%cd}&#I6VlzpL<^r?FR|8^))y~}=pYBo^sR^gbh4vu_mx#xOiL~!bV<{X5ZcxYz^48dv|eLgP$Kqsbaz^NK^1U`dFrExAd-^Q1j*u zrN^MAQKAQ)x%B+4&1*iR?_Dw5RM~2-jg1#H?6*-r)kqKrG4XcMjrX-A$y@~w4!zTL zxX+vOLsA!oSJ@7G!L#su%0ISA9N=;3idR;KxOG%@Er{B7{`?C1;plYLXZx}4g}Yiv zNTR^WW=knINbI|H?b-~`uruqygIXxqo9=Bkk2kwD>wPdFk9wE6+Ird%zqIQ=xJ%NT zPg%tXZ?k~6Wd4$9(j`Rd6Y}Sil|6mh{xcM->a`grVr$rjE4&Oe;^XkG`b3dcyjvXWtBRChW=WX`bi zAgB%k5s!hx&(RUSADM4n2S$^}mS4cD;0%4sO^s_jaScEd9A&0~sK_gP*)3yGsO}{! z=fD7h%k6ZnC^nS8_H!O4iYAP#7ViMtkP7`kc_;4$3;N3KRo1r}`{MTP*FafX8}XXq zUY4)*?9O_U^*E^W_n7b!6iaQoRIK< z4k!dxw5Z2$EjDqN@z?B8P*gN1ismCBZgqo_(N^Q?)-78CG-$i1YQ(me4o)^ZHc%Z-C-{|Cgtn1ccVc_kqoKco3qO7B zJ~A$QwUGCMy`Sa(q>s=mP5+bDj7LR z?=v*a(}*P*07Uoz0ouX15a3EsV_%@8M3u^ZhTKIQSe)Rn^-2Jpq78&`&?op8M(K*F zPZbsTq?;EEY9sTq$SYi1ODlElJ9&N7DkM|a*^Jw_|0&0Y+9LFZHxoIv5g=33;s9Kf z)9C?8pX12hKZ|eQj)qja8Dugh&YhhF`K2|IvmJbY=d$md!x!j7{kRP7iw%tGqP?xE zkR=x<4*EF`-c3a%lAwLg+u;uI3eH|IHALnP8A^6VJXgXoULHay8x2V<_Ha(llHe-0 z&l60g72}Qx;FT*_cQ%WeTwK04O%Z~1HMg*k&#$BPm~P{7c6;94_zx`rCx;x<9xGux zK9+hji<5^W^wo#2#70J<1-WqcEQ%5D@}uBm)Om_s+tR_l0apq(}MKeN&${RB;^bjKvv6Q`42*cJ7Sh)A?Ra4HsqGZ1xK?=;0gh`Tf&E z`LBwY-5v~psLrcvB9+?t7Ibu39Jm_oK={AFjw`dhfR#?1I@P0l_koUX z;RhN^E@UG&f{^d{;%`vQbITYvd}Jz?Q*n`zD*bf3Cz$J#3P!fDsd#6GtX$N~I`z4} z`k8eW+{?xERM!1cxf$sTA+pobChffT=Z0{cl%Fu}_4ulfos77A|9$!Y7Uw4nU&c8Y zX;{CbzwZE5Ra}KzULP{Wg7K-c@k`Fen3&9K(~Dnsy}WX--?&NY;mdE9Jj|Id`aVcc zwDWdde2Df1Cyr7V-6ujjEw^u*U1;@aPkI z?2g;Ed@Uv8TisXqjdU+SenHCn5Q2=zaAvAO?}48Z6olHom(GBJ1DA04CHqP5yQOG~ z{#bxnDhNSAyrZds+}ltp$?w~z5(2ZSOz|wphwKmgow4w?$O|Z`)S`%;&oiaWcrM{K6sHJ<#hd!sKt1g=EHRs*ksECaSFMAaXD!Ad)>-lpCRa ziTOvS70$@2V`CV^%nu>ki1D+Q|Iq-B+#_*1luFusyyJN&>~9a%<^f;GLuD^Hpi zTv-Gl7Vg?3=W3@uA9v>b>5qj5py{?M21kMilufDmX~-Ifd*z;0YDz62fid)4WMhNj zI-SB!xEdg~>vMcQ^gKz0-~G6n3+T%nIh5M95{*NwmJHO~%D;ascVdrOs-d5XlK}z{w=zy3lhOk%t-n~}d zKW)WyV~8$ELm%p^z;>dRo3D=L@_lkqUjlCa?jTxsuFZ`s$utxHXA<7O&ARJUCM=qwrMx6KY9ufb)mxGKV_yKFEqBNdnGCGgh0%rAO-V; zKab41!c&2$aMz{us9ui1TQLi6j^86g1$DHD2RSqFD0!`?Ww$HGWi*xFlhlj~rxm$%$nCWuPziuIleD zL&RPaId6cX;<6=6M&;Y&mYl5oV;>721rK0k1`qojU$~YXFC0&h=QoImVSkyPiL*Jq zu=NS0#gQZ3>-I=n&>8XnP??dXK7aq7<}9dq1xhn{^V9tfp!?KL?Zb}xq?$<@SKOMt zFSX8)X_IT{jZT$@p%i?bl7sXaTcyay8}{e>4$YU}-oCkV;>A;l=B{>LvGaoFmA`n% zOqm5-y4C#M`Oqu+IG^N`DmXbt^)E+`WJ45gc==j^=cCJ zJnw%=qKjmRSi@ubfRMlm05y=TJZQ;ZhlOOnqchZKvA(>|B~KP~w$J?X{<^T?R!$xg0)3m)bBu{qfAs35tEssna~^a)N>mT_lLN548w}bq zdbC-b7z~8Am~F4p7aPN@P~d88b7I-#>X7i5J<;&nX-TP*V^<5zN;+i@?fwmmp-`hg z;Mp&acbaLn{!5qi8p?#;1uLbj<6DJ(-h0UA&6{(6PAk+M(dP)RyP5_Dtvrc`WAwP^ z4DA@s+P})&-r5f;pRq7n5Lz-u{i%jG-KJhK>GwNgIUC%V85moJ^pX-;T7ua@fCF=2 zY^OSG*kd*k7lwG;_^LNyf{cvKcx<1uSaa;?Jz{O9m8nM6 zWRN>dmBe>cWQLJ=&Yyob$$sIu+t!Avs;jvrLXVdh-SSvb3kPAMp6RxXnQVToj7=Yt zl>b8tHfV3WAg!&-ii@>zsUtTK3=qaV%*|c2FVki$hgo;AdS&au}U7FhSN74$HNw4n{W&T zHZUP*%G>nxXwpB3HO1JPktF4u`DBSk}@SZ|eKyq?2Q%dH#*dBeWs`^MAfZ|O-V4C-KG2JKV zwRq}Oa>O8cd3|mn&jLI_29@MdXr;|ISxlV61sss z7kM=UE0*VM2d)_%m6d$^a=;-dTtkCWb62ZXrt2pBMm#_-QyX3T((0RX9>oQ1O3Qvl zEuGOGuyGg(jAFMy3j0HGB{YsR>&Qq7!q|T{x=eEVlP`q)qWsH-%XLVA*yS!I1>u14 z=_)(B&wyH|f`c0u-t(uH7E~R;JAzb%Zf4uII(k7+w2=i5F0V$r1|N|)f9cAVC1~}D z5Bc17q9G(d$qoN&R=>m|JevS3VXO%@iZ-`L4Il1E$wrV0xS|upcx}zEFmriH!&x)W zQ9+A(-m)q=Z6|S&$79S56R$RbT71Tud=F4#ZV(R`e4IXJy zx2|Nnhd^W8!Zi3yDeQ)v%WM+JWmthZ$+LT7z4q@vJhy|WUSnsbd*o%-KgL|YE-i$8 zk!O%@l4;VfgG!nV3GC*Ndi2M){yNrc936+BJhYrJ24#c`6;v}x2@THsm}u&XH>qbP z*gla+syvA$MykTr0W*6H)YDW|6_l$Z7hdbptCuHDgr#L4n;mJbZF9}%&*wP*ru0H4 zNUXU|ogz%rnWKAonS^u{-4ET2tc(AV@X;3EWiy|uO5$i+Z0ddft)L5YFbpB z^y&dfsR01*5F3qUSHo?7OZ__Z6UReBMsEMhM(XF!wmY%kgKt%o`3QspQF91Hz8|0k z1b8g<1o?&0TY(0@yX^vyw(&(vP~@1Nb&@KG`B8>l3pYmUPg8!}G z_WvQ_Mg3)nHF`&D>gxVdZM{MbAoRR?wRLqRdf!Rs;i{hdXwKh7FAs&A@cF96>t2^u z14yGOWbSKpx?L;uVG%UFa_5c(yy`aIapy3V)EHAZXAJ@|WBDgDU*7$W3<;g$&gX>F9gb z#X#+D8Un|T`sB)$mnkXu%*T?V-e5)5CXI63u}otkNrfRC4(J~{u`S{EZMpLnrjOMZSDHG!=x5>eOm@2Zc+>LKpwO{5 zj&D#YxjcLI6YFGE%fCjgyfL&#r0F&bW0^bi?%W++`upjcQxoPy^iTceK3VDG)8B>n z469s%TuPniR;4$Lx_uj5b;5(gYkwG5qcnvZ^^#hmeKFHWHZ%+6gCOYx;V>O43vGpe zr}Ez18v+#7BV6ytcFu@aDcAtibqgti$T)8^Gohkva(2e{QtwV*(I+d&1P^AIsP}Pa~s@jhqlWE$yjQkUyqp$`tS{e8d?F>A4 zLD)#wuiO7!S$R1gsV^BFp@4L6k%>%o9siQjeXRhlx28qC<}3g=zC$ublm1Wb8VOC|g77Yn)w98kb9DG7lOgyGwUrT2DC zP%fr+TtAcr+5jB*U=NjDw0JQsY89}VFM6dk8*~nPtCe+epLPjp3g^(39h{^Gy{{XE3`GlPD;l+y)Dk|bI z^XpdyDZl>KwVXNzB+%TS{yD&fvH$JkwkMbpQ%K!*?X=!7qlUNR>ra4h>-!)gjxo zXAPBQ6Y2rmOP4OuvSnfw1lsR!Vh_z$TH4&w@{!`>iL(%%k5`Upm0Qc3x3hbA#-?9O zuaNPmW(rJ8JX8+Ya)odj{|J9A#`+3$*1|$(qD*pVPf@`+kh7Yp>90dIX#FtVk;eoN z^8S8!pG(H9>AxD0k(V@qUT2T(2?RgVVx$7O&pcael*ETp!dweMv+U`yFK zO#)Y{YnLvCUj^m&n;FTYCv^8nq4ALxV@}HmCudC==4>E8?p+Vq0zplYn6RT(-ThGS z#|E9MjH|&v4@m#y<7AFp!6Be&lu+i-YTJT=dHK<*#yaV#sm*{y4wM9Iq(=&_uc6YL z**RG{_j$%IF_9xx69;csV-^4X`yUg^9V+<$SP(;4NiFHLd$Z#wm0$Ci`F=UL%xu9D zahqKH=B>pq-nJPz28D#Iv$r>vfH*Z5A7UPlaxpOf8bg%e2l+1GSQPz#>*RX!xWR2> zk|V6FtO$X_ydWSjCRvF;2|)v9EuZ+DWMZh`Jr6N~U(5}5g`ay@V5C%d!IW^5rH1>W+Hw zb?&T}xRA=9EMBhGn4R1@&E{{;EdLo^IUhrq3^qnC?X*T{5SWm9`9aKQi!f%AC6C{H zzx8o&QZaUWv<@`VL_}B!(qg)~8NI)*i@QnCn7?o#4$6W(E*j4{66N{v4jL4iJh*KXbJQHh|HxCD7Mh@MRknx5 zhHoXaf1;9@4tOeOoA;l$$x)Xzx?&UFI1_8yQDFq=Z$i`9>M>p9wp>1L?VHeO4v_Oc z${SV?tEy_HkNgX-mcKRt^2$ndCUP`2i4NHIe^O9zMtU;{8--Yyc@DtY#*s;Cne|8Z z_nVgJdXFpsZZbCdvNaeB(P?{jE014V?9p63qh$NzH%M(acKqf)$)%)+JBaR9uUyVpAyEz;iPzvE)BCGV4NXQrj3?34anUjAHlNzx9hp|bFDGY&?7 zTUgXu3qGE?(;47hJO1w79k9yUw+_pPW!^;sG*iid&u}#JY~-L6cGlJ6u3T7fV(rI! zNnv5OW@b_fw)nc8hnSz-V?zT=*=e7jRyI5qk!aKt{beOU}vem)^aPW@u!f(gDo}bj8|kQa@2d6dCjo9k=GhpgXZx_TSi)&Z zFOmAKu4CqD{L+d1ke7B#;OJ8$!HJk&sQ7R)080Juz__I+GgHtzV?xKT|s-^y?GPv570Y~WuWQ<-PV#M1jO5Rp)|fGJs=j}Vlu6_p#2*=+moHqv5_Bf? zX$##exGWxN5flfCy?ak>>v+~ntUNkfY4VOoUAM0}TyQyJRe$9O=8DN}Elyl>vT1rr z;(*5Gi`fT?B+uu>$&+TG29q^3d=tK6fjiXgkAj&)WyL0@rjiO_o@?iCk@RV-Sr1>{ zRARV>MpW|U%D#K>*UVSjKAL6DZNucxUAgk7?TN;xH=KNZuK%&f<#mO>IE+6&Ky!sC zy06-iX>!D33ni?8RRO`b~KAX4Lc>DpMuF_0BAF%i6rHqtw*ev{b(_4dY% zBfh@El4ArVLW!53k8$g?%(5CpsGEFS2m$d5eKQ_EZQXb+YR|ZQjAA#Qit_(BSosly zfRM8sCUf;T|0nA{-kaR1_I(cd`)@z)^#&?Cer2 z)%D9)6g9oQkbTe2!b0X^_Ahm5i8vYBCOSDhNQ-FiAt=EoVvVN9TZ8wtT1K857Uhq* zOX(^m5Y8ye>3fD&JjQw#)iP5qm;wUr6A>(_VStvs$@=w`YeL=MofvaBds&LSUP}H7 z_vp!?>x&~>f}IW+ObEJn&x0z4=5D9bpT7kN{3a{rnbL?4k$rf+u#C){tYatqN)Pb$ zolB*(YgZyPD=LQl;xKlEYm`c5I6nlA{;WHxExL=yU<9daOLuKyPaKP&Wfz1}>rna3 zzv@sp$N``n5QqF;S zj;VOub-R~1?AEPc%zLpTHTgaIY+2s9`L~u=aA>Ii8DS>s&Bn5u+{(VEa&_L(bRUT755gCI~u-o4Uv3qL4<@nQDib$MNPF5_4xM zhHJi`yO+gNdu&(j+1B(C4kBTsL#M90>T=gKN1V^h$k5c%`s|t6BSmvIz5#{`B7>Va zO>Tl1Y$VZPd z-f{j44v8Ao^d?q@N^8*wZToYwvez7$&~a-}7D@TA_J-Cp9(YBlCL-S^`&m$!cHghU zmIe2RWH%~Np>v7PjNZ!JukqYi$vIi6;2l@E@k#3;eq1ED!_!R4jKd~xW0d0Q$=|E0 zG=fqcBk+T1C%Erjwh5LhB_$H8g>`-u!qQ?in3BpsQ5IHKK8Fsih*CgvK>_$GC#V0` zL88QWc?Gw2ZipJ>Zf#|C{LGnxTk95X+-p7R_N`kR)+Wm*-T8~wiSVamy^TNY57+6H zz2=&j2xf(c4;LD&>BKEAZa5Saw6<8cK0SP;+@j6#f-@Rra8cLzGA&I4Qqj@a$dRt& zG(vhlV1DTA>iUt955wx>%?+2I}$>NqM~I`)!5X8!XcR_N@Vq@s~q53_6QR*o;n76 z)Hy8r5HcZ13Ts?qlRfZ>%i%WA*YM-$w*dFpI*V;-5$Q~Ph&*OF0(#MXEUe(+ZYkKb z53m7lkSD2;yFm^UG!}db8f?Bz+K2KcE7BGtsQAp-MS2#$V1fe$*m8-t?AKx7Mic~| z`UV}CfiEwFDWfH0wVWwqs9d;Y`K+lXo?r~f`fb-LY$~d;qbc)wN>_ju26O|lUyZlM zy=SSZO?0^oc+0-71BD_Rx6ymSl3{r^9rRry2=TwV?sF%R+k}G22eU6Fi&dAV`z7== zSUNF+_O(`dY4U3*!{2>UG+z?bC6xgjB6^kIwc&i)>h5L1IHWCpA*z1qJ<@?u6Tb_f zVp~xHb4O4xX>t3eBmrSkwg>mBwVgJti+f;Y_mf%FzgCu(Y`o_XJoTxuU$f?q{SOIm zSpIuWM@L?sdv2sXYHk69M%SG1L~g07*T%%D3xCo9cg@?;*6M!P7{{PjnzJ`-xXP(C zR|xcJlHS1@}1GIblGWgQ_m$-+$b%L zlus5TiW#LG!8Q7l?z#XPe;Dn_rAs3c?9@bwx>BPIrh5u1$T|UNFw+3o9H*s~(|JdS z_X(~VrGpRHoFjUt`vF3AdYmXEp z3y{)}Ddv&x350k9?wS18oSL2z5-Wzhtl6(5*ohMoAeH@Cup;HKU5wfhg9y37-@8R$ zx+Jju>3hhoTr6P!vXYV~*ZiJq&c=QiJCxe5jd8nRt zft}QDPNy^z1pYw5Ga~^A;Y$_Y?)VS1#3@!>GO|tE^LS(A2YRZqtl{|XVglbNcb)Pk zVZ)%7MG?1*5dl*_bm_PU{=<|h9n9d9Z5iOpsln2AJ05RCW&KSaZQT6AX5e3#Z-&Og< zo#8EesHhiVb0Dq>-#123W7t&4jn)|bjetne;U$e)9!1dWVaMYmKdeiB;F)+6{v~+h zp+Ene%_)|WvZ5x^-=dz-VMoiGF$M-_Jnmn=ex2M&`^~$$>F|25^o=#?iox^SMp;nP zZILcv{@<`cW9=@-g>2jHR+DkH=bD!%UMFsMnddZ1UF2p6I&rVI^pCG8hdbg~CLd># zl$CdEo72SXqtb$hHO7LRO#Fe|sd1@B{^-$zbslF!X2uFU5nN+%0HikI_n_#Ai9N$i z2k&S2zTbIcJNyQ+DJ`}&%Cffj43XKK9(jzOP`jtmM}-Kgs6!J78~tX z!voS!^gI2R8RSH|bJNIqbLY<8n0ODf5%NG1JwKtIE_o4qw@B&nl0-;yjS|c85T@|K z3EaI04ulvn)9@S(7g!!q*v8WGCJz`ul@Is@yQ6c%1}F>Rji=8Cn>l9=tICp4G%s0_ zPaPVsQN38|R3R`WQ~SW9^OFeS-cQHZDKvMRFmWQ|f5A)<`nZp;Z(CiS6U!YG`j2N@ zRy^b*06Y9e46t*gJEaj8_Ae@XwR(1CqX&Cml$8sijz%wiQxv+H-%bhZvTzGyDqErzH)!^Z z5%T~*kW&%K$wW1QvZl@VJKF$SRn|bc|LpZx)-aWj|Ee0WAqAS1xCpEfE~!@g43r@3kFfW zDaZoRga!r{eg6FO(yG%_a=D@~t(&nmqk`kS73+4o-?kgH8fnP@vOk~a_@{^;E1q>|#zRxvyzA zW8BO&{p-1Xvml2)s2cbj{I}t?Yr7g-T^DxaVdH?%P~V-d7|Z$lrGDXc(6j?BeymH| z72G7~soVN6{i6Kk3o)egP~ZpcRO{!BsGwlY(i!cN>!>O7=hsYL&ODVKQ% znfs!75p&x|9RHceZz`A=zhq3{^FH18qen>ocKX3?Y%k0=qEbQj345g7g>#7V@tN?R z3AOwU^&6^swEJgnBqlME`TMnC%&~Cs;upU6#L-?J-uVeo*V2u2i0poxA+v-2Q0XzY%uRa&OVDVx!Z*Hjf=s1{?dAMYv8I2t@LvUG;u}*du1xxBp%8vWklLh#vd_uz2{h9yK-~3uowDw{M@2%&R{;T;A$E z%)*)X!(gF@g}ufMgi;Z*&X3sTQP{UoMK_n(JWEeUoH^34aa-KdOIYCcljsa&*Br4> z@Rwk}is9n92q=NkX`FT42$uACXr8CE>n>RuRY#7x3$&*j<>Bgt9g%{nv;_Lb1}UE> z?vJ6q%lGe(qRB6`v*^cRT#5&KodUXK^IvuL-Y4u2k}*V?ow3Dd#5Z*!Ir1MhwJ2mX z@bs_Y%7uR#O%pePjY1u|$g@BYo3pSa+-S4$f7=Q@#lxoITyKRw3V0 zqfgMeF%Zxm^tWh61!noM(g)D%>)zP*Z83Nk(*d4;1tUy28?^@_jvRS`MIyXay}3V> zyL9eM_!I1sKN1M4x3giw+WG`J(Q?E$IueY+HR#Yb^0eV^1(*y)eZap1szsR5ZS
|dENCP)LS$j4?$neMn~9YE66d_ebjU|=jg4<$PjA^8a)F}!}E z=nDv7R^qBNf3P&moW}4FIBg_^_01`=-jCtx;!VCC!>eQ|(WjL_itI;XNcZ-}s#)09 zHvXVT%s&O^v2)k1Y*m8;x`Ejh9DA%7sf`AEG5up8jx`y0>fau5KwW1hx~4sNU`qi< zkw~3U$zYQF4qyWJ{Du4b>Fn${yl-D8Wqah}oRCt%0z~_LNYJ({Fb{Swp)mdSEP_t< z4UHh4qEb>mfJ;n=gPu5jxI0W*f=c>yXsCv?grJZqB7IWM(IIilc(TxEsZUmi`bbkf z!!@}JQGr8$TJjK4yPy* zdR!H403X3c-^tHMcRDMv+FCxg0m1Pk1l3Es zbBxcJky_55jg^#?#Ltla@F|y%zqy*?nU@kZZ8&R{QS3b#T^GlUTHvwcz3RylU;_Soc=MN(0Jce_?P5hqh=Kc#Wy=bLl@RBh2|a?Z94b-UA>5?m&@&r}ff<%!kF(|NDASgy zXQ(CJ zH=J$PwGYlwIkJG1CGu?G^Io=tCW~LZR(S=5%SaO#V+zKK22ci=H{M`JEb~+DvxG8p zEzU#%r%>1o5ajpV9-Ivo%Q*KOH?lpbj_bB<2C#m7a01ME|DLfh4QL$H6qM@Cv3FDOOXZBvPyXccUj*B;M-!6H#8D}Smpv>^y7Gj`SZ=nmq!8 zf)<*a8#%q8)uLudg(4ODyE|vvOIpAAK=`1fUs2iY759}hH8DXf{b{;<+xDPQi^LWB z;%E3W-TK?Z0$w(bp1c-_1?MkL&fvJTGcmNyTRVt$8DWSMW)2mu`g49*RXa;#)Z&|m zGF#=?JKsx2EP>t^Qu_zI5teH63F7`9D6Q;&AQWcv55<;Fk%N|=4X8T|!`EMWGxZ7x zzs{Zo?v;nkt^qo~_=47$-OZaeCQ?K*0-87x*@OXpnRJST^Zd@s47|szgY@)BiqeH$ zTA1SQS)iqzL;19E&Jfd~0eB6<#D*6C0u+m={OZ-K_wR#4f3Ll{>~leRxTn2_>cMy+1l5ts;VzvRjY2E1*M|E~{eTidn zX{5qgm);JO7cE#Yz2IiI;4}AwJg$-~4wD;jA}ge^0#%>jgTpz0K{HYOK0RE@Jj2^SKQ+VZ8; zZs9Dzq@d8QDtP9?%XC(O4!&L@u~bCIsSTA2jht9Ofr&w{G1m34F*4OY%uO;P#b0 zJLG>irG;Xo4VUtJfuxrob+rKJEi0wT22qY5GD%XIl&Lv>{Hp#3vU6EAIYTUvSakn2 z3V4wAZs$rmVqgTMf+FQd&z=d}K4AFa!lW@`M0n=+<#`P=cOJ!MH*N~~2$&4GC8%fj zOINSDTYboRmJTcfu{HIT>D;+;hmC3D@)gSnUjYmDB`TH$g)8kzNK+HtfBGal+m)FW z6;cHyAj>Gdy@k2}LGEMK*(bGD!K4uY`rEewAJ2|lNsiRe(h3N9g6U>?*2PTv5-!US z6_wTLXFiaPh^oZxZA)7IJyKs%QL%32${O4bLF$w1XM3L0&;}QQ1o0zJgssN(e{umt zBKdExW=({D*thSrh5oC9Dp>fkmnvQN<1QDp_wtn3lHI#6#s@ub)}{03iDJ{AwzB(| zGDKLaNtJo?xb$YI5JW-%(hTPV6l!W-9Q}i%+fWpaS$+?Dq~&{z?pIU_E>JvQL6yTX z%rK$++_Y&EeoS%BMGnOq$lv(WA&0qc^9SV=(!jYu*4H9_zE4}IKUQPn#1I9>*xh^f zq}0aVCl&fu?$UBPkHCNcSjpFxC0z;&n-Y5Ja&>4>LQwThvrlX$Cf* zDRH9s;Y9qdu7)k$y;m<GyE`COp@csR*RP0N57*ex; z;Iwl0^5qI152cxnX91S|Mk}kI7~RX_?Mo^%6$Y~77bGCwbMMpR2KV#ko5ejx^dlgl z8(5SD(^B8u1@lb`1MNN6hHY50MwkBefGwhM$f**_PFe zw`FWPL2PV~K)$ZTNi>ifcwGG^D@>U(g}?cxfW(WEy3U(-W zm6DY_6=i#_4t)(jfGtjl?4UV9_ttQqcEFYv1?(%QvuJm(GTvIVG?>xTu#0jRX$5~y zjaD5wCaleSNxc5%FJD!UZCfIH_z}n(!Re|lJpX`Gr%w}KA>J@{CBpHhbKXHrSZrhC zZ5+-;%@oMJ%ug7fkCr`5Ax__bWtZoTh8`*EeFR4wo|L~yM0B(veFBs3+rR$9oWZA= zeFA(rzKvZBrJ6pMx~Xfyjhj>|xpB@bDF>CmW)xgnMd7d}r`Ix zJPQk9VVkbzY!Vn6$J3_=xz~`*DGDjWOG>gdZpya`PY^l-!KobMChJi;nws@rFGuso zbG%Tca*B|N&m0=S0EX>Og#gcB_H+{PZ3eMl` zttpijwb!+fdJEK$Cv(0?@wkPN(S0Gr(WFL2J#}JOmP~K&rcf*Z3PXc;_zN~iZJiS0 zilg72SgG4$RIvKmpu`v?hHl%pBmFozN6%7!bNns>9%zhDTRIkuLew9AY@5;(ic&tb zP(M1EcZC}aIJTg`=4kux2xVi3(sVQc3$IvL3-(&xwj;cG&yY{FR8_m)scipU28v=2 zQGpz$BmDBHJr@-nJy&-m&V-oQ`F8vM4?)!b3>2#C##oOEN^JoC-QCMq=gjfd{DuR-fZ1CUeTc<;*NKpd&z-9=sL zP3FJA<2&G``NB#VUq8zc?xBJAE&h|2$mibu-$HxaYy|P^l||z`YTxoV!sLs_&M7jo zue9`ir;T?H9g^5%Bp5qR_rR@?+qQWge?@Q);p-bs#TV|*hP?BHclJ|~Mw~o^@kLE_ zH7ul30bSFcc5Y?@lvhbTc6}0Lppg|-RP2OD?@?F5@bQ|>ouf+bf6&&a8$JTj7ifK*F)(#(@Oc4FUS14jZIpe~2V)tTOiR9o9@&CUi^s z1pS0j6@bM#>Oy0|QgIRc&X7LpKF!T-Sl-qsr%S747U1s>1)Q-uGnS(0Ec4OxRJN$3*j4bGLQg#<2w-^=$~OxC{A*_ ze;z-epE!OcxK*o^BKUIH%WxT#62!;@yzBnc2+7E$7{)=MgNy;f1PdD7ECs+aE2}Ro zoj^+JQFpl|_Cp|DH0ii#MwR*LQ)0UE2u3mlR)>3Dj?idf+hcd78_OQZ}@RH+*C-^(&Bz&mc;F9*zAE#i&4>79~St{6hA}Y^VDg@ z3Elz$3``UWfsSB5NSsD6a?uiq{W^1G`O**hSdnS_@ZUK$dAyFHvd|P>VbH`Ot&F9p zvau1|LO}QMQbqnVcI6Wql|b7Q*p4`d{xEE7==F+W&hOeS&V(RqzV~+Ebq^#`1rAss0pr24vcIo&4E^E#+&$g!J;%AKC%cp+t>jgoB)oe9yyxN&C zWm~~s4aQ0>iCFfP2B$gW^7A9J%Gy*GUOT!ZzVTJndkeD7|4Y!&Z^$~l`~>P%Ik6qSM! z@vPFhw(y`HO$R(BssbA}vd3wTis*in6CuGa#tm<}Eyui!1`AtWL4rbzx=jTqj2#!s zqVw}}L(c>S{l+vm#&HSgJ^=ny;(HEF=^qVIQH)(h+Q0JWSJ<^>5ikRcat%$n>P{xt}J6zOz+j)VqqpbV@p8~#Y?VAb!HkblH ztXM6>`=Afp1w>gZ`DJqhhi00}YlesrC8kJ_?M{L{QHWCfJ-FvJTa`rHKrLRL@`PE5 zHH-z;c|#0v96EULeRe;i59E|G`o`%m|HdkB*lLX6y$`kyn>bPM^y?!xbjzjca{73^M6o${1_ z(V4Gpv<7rS|QEIY^CKPn~Rm|VU z_DGp4Y+dwi-Sg(?7<1E+Qg@%VGME#hSm(vRVut9%6WvAxr2Za2P~(Kca$ii`OK z-7kL!ia(d$ZVjXEUO7omtLwm7T(xQ|AO#2t-k(mP^R3B zu$o5>NizRAj@kKAa`3PuZ}h5Ze{F-Xr(v)Co_-B1fK*<#K$?ekD>l~K#|N*niH5&c zl}*;YX!&A#I}(5o&-#daJe)m7Min-VZCo;T!AcwYQaA)-Xau0VRK2+=HBzZAayk8q z+7*5pxJqf1*-3n}tj8+~oaV7%RP_!<;KxipeC^^-?&YZkKj-lmsG*n_YGFYa_in%&*6M%9d3e=I|%cgGp9YH3gtOJ<*(D|=hR1x^4y{R~bOS!GBva6Sx zas;>yUI;x>e&_?8RGLVbnwfp+%HC~sB1}7 zYUwTSTh>in?wCII^zx_p5z*iL(X;33Gp>!T#2GjgKkMq!m^(;HDtj@z^46K4rzgZ< z(#Xo7&9-l|vW%xsM}qQa{|7#qK}FwBbQAqZzW;v&&g}acemjPLa8FU{y~@tce)6OQ zqeu)jJ*!W)PG2s#t}#I_BntmM--dlYV#JYaDzC=O)k3fZm5k*rB@DK;L6dv;>2s47 z=5~;!nHfFkpJ@g`Gb4p5Fbxy~CC8D<#pD=f63ooPibl}<&6NN@>}k`=XlCiZsP5Uh z6C5(mG9h!qbPQvgv;GvkkS`Ga7Myo+nm(!@hl7dl?hiA=h{M#nz(`w$9nao&@6F-u ziG@MJ#GZu1%5gT=l)bu3q#m>QCVj+IDn4ddt}ZU;O7}>EKFNc}N(^9dg*EPr1^ak; zfIM*8049sCrnACvmG}_wkFJF1$Mg9X7LcEp+;p&TcCMz^&l0 zdzlJF3)4YBsZPBUDd@j{{o07F1Gm>Mh~>I&E*d@e?3!?QRXhQYO*Dal^Kn6>HZd;k z0k+Eod81a+I=tAv6%}FhHM85=o(ekTs{^VTw<0i$L?D~0IUDNg>Gi9foRruNL_C01 z>Td$eU|J2bH-{PLxeJ>%UB`jdTwPm7=X_ppc2*XHCB_%U#W&rXwjHp=fL;SOnTkJS zJnTNMt^vf%{pL`9bd%P}KMi(W?0S1tlxsTNe8jw%XE|K#hknuqtwGt-Ds~Jpjm%Li zUW;#@kB^i_eQo)C{Ub~t$o(lFJ|qz%D<|I>iKHaCW$AIYZPnz@k zjT^`0HS)h=9ff>89Wm>47PsIx(u>h^j5Va>K?4Rnckkr1=sov(eSTaFeJm7J=C_nA zkWmO|D}7J1zp34RMK!u?6?FkS(2Gk;Yd#a&pus?0zs{NAPZ5NJg0cmP+?b_I30ALI z;fGbWRhg& zsJ7yIuk@X+74JsFF%of4tuThS6RZLJ1JJGLA?u+u&k zI`8&1hP9}5ayHsJCHMWG1Ckf4Jo=%wlXB!T>31qLsubTh*_e${)Oz1gI>_|C>8woMRm&fmBZ@UhM} zc%th@&M8bB0W#y4f%1QVB15-*%^EHMEyDjaA?_cWZvJOh;@Ny2+LAG)Gx!+>+R*;` zdH)Lu)1?YvR_x1T+vUKwwXq5LH}+*#)-jWzfJt$#0C-B0@k`D?>G3xKp=^K)xZoLN zv`D~EHefBF^ENlX4|FSXtKx5?18lldAtBHO>$M%$uDw?}QXp~8=+fyQJ8k}3)IZ_t z{oevzp7B%SN12OhE9hrA=)&XQ{d>-+ez2xdZ~s&%7}k!$)-quH-&3f6QA3 zE`N0H$k5Z{%}DT~F~f%KSGvkn?8(cQS1w&T;sa*_z^AbAHTycD9Z-nF&aNaioZ7d{ zH+w)ns4B6pu?qK{Jx15*7L#M!loO+OH-$S@(ZW(9Blr+lh>3E5DPDeL6sT1?t&20< z=x0A4f5U1~|Iqh?kwx?!x!}h+r>{h4 z&UU`-XeFWR0jlB4Ja%#u#^NO}PsW1(Kt+&8na4d$9=m7H6p|r>DPX_Gx^D_H zGS#17D+Rf>^kpS90W>{5UC`+@>!3?T^)Zvw$oNTkq(8r@ra4a>M#XD)u4%4|9I| zjoO!$p>kY%M1qFQn}VAK8-F*qx_P7xjG8v~&zGew!P$x58z!a4|K66G^xK6kCzD`j z2<9l)uCaP&C&S%4t|_g#sm$e$hc+rCv%`Uh6nx?+i$-Qe&f9piC-0BL3}jOWEuHZ5)sUzSlAy%V5DOLL#V(QUfcjFQ;P-^ZwQp#TPs{OpX_2@4> za9}S|F-14vI1E?R_fj1#(aGC`atYOuhMHs(aD7ZuvPryy|-D7`u z70tUSER*A*TA9CB{`mTzTmbWow{N$)xC|MmNOz4ZsOS?&RiA0#8vAPJ&YGn#VY59< z41NZ<5o;ltL7dp>vSka?jKpoOy%WATuG?Jb!9Dt9x5kcR(Sh%WyK47i&aRPshf-jm*vC^8E|x6apRVx zIy z%fINU;$>chKKD#OfEL#dFA4$v8a7PW@lxq+4A5eLY>G-AiD4|y9ZUeQJj|S#*l>Rn zI%!?%W^(qC@YQey`S&B?Y`CC5V8j3vbcZ?ymXEMq@x0^aVb|gj89bYH(#u$*4C3Z9ThQ{4txNhztVn>Ly7df>O9xDp-}%Q{z&L)Z;J_ZBlJ{tgaf z3mYLtXXD~>o;*?2)3aW<(3Ot?K0(t%q(r~=@*LJC+&?(;Z&+^c+1AP(s>C>kXbg?! z*`@`=VjN3gYyBYtC}4XBtC`oM&q+#3;xKmV*b(>OM`Nt#EnfV!vXWW9={qT{>hsWk zmP1Mo4t~!Mro38TcV6*IykFVODuQ@)k1KNE{JVjy-vWXkI;7)nM)T}S`J0`5 zFR!`{9Qq05#q`onMmT%|P7!uMs0~4*;l<+UM<{3mwW&o8sOb?e45uVKR?pG42iZW_6Qc_wM#q@m|M%MrhR{*)(9(0F5)`|3<$ zXAwVxZ_BqJuPTJ5quvExP)OKEoJC`N(A`BW(Xs}Lq4i+tE6b9CUk032UyC*juxxfW ztpS_4`!8RVlB~>5>yL-EJxPv(2Hi$PI$FwpqzrsOm?xj|T+>R$t%&%L1kjF!Y$zqztFMtBBW8 ze0`byf|uYr4#D?aN_&cg5!Lx}N+m_#>|{^R^QBA@)Q@c5v}y1`K$vd3v9CVgX~y*F zT}8a!gNN-`ukN^;y5sV~eH0m8M6^TpDqv9^_nal*6#KQjbPPtoN6XtO9#3vn5hh%M z5&vPV1Mqg`)COe#)f~SsTH)SM6hQY=(h|)lWUjKhKX2;vG`3C2pL79XXsp>8_*B(3W3kV8g{rpq7%J3 zrZs6YP`wx)KF_HeCSxK2Is2FdD(^m8zQOO(Lh^@h*7fkuvOkw+G)hgW(A`yeVUWmg zTxpOT{)Cv2YNf7Xr*_n%dcc6stQ$QRGbMwJLs|VP>{Lv{x8+jRr za@}T@ceFC&P3vztgz(TsWZx*o(wL5-%FEAuXsdgH{WNG&J+EPnNA2au7+pDl)5m|n zY95OPNTzkN{@kS_#wsO0hD6VWF3FZTBGEVdEEy4ASHc1xtSkb;dxIOuNpvpOdETR9 z!2n#}&p8HLDhoI>F38f}kD1J#iUUG*Nr;Fr9@S67Q*O}=&O+_)38OeJq%(pw>V{DI zN)QvYOrqT$uJRMa6aXiy$Ojj0Ld6T zk>~`IXl1(j$`rCXrO9wi{1Aj2>qWmru+ib{_3Ofh5J6CJX*qPk8wqbO-@dKG%n;Ou zi%=N{W!2nVdj7tiBJ#)6wcS90R&P+=muP-!>j??vENQ?I4UM+1Z%58K)uIzlt_=?t zwq7mRxso6a6`E%;5jq(oNNapI9UO{FN^V4X2R;uyrE8k+KTz2#BdV@f#5ViVPE5|- zLP7;=j1OZ(QcGHgwqS5^oicf2Ufz5{nf&6L3*=0PR4j-cdhQT8a`xJ&vuA(I@m0+u zM?p>iTAFryFBy9ewnuy^g~h|4PI*$6lVV48M+HuHJcdQT)~`R$5w{3Bj_cNSGUAy* zAOZw?=69akOUgz>-Fw_rx2AcT&)%-v?9{pRI7>C^+KHosk1wWlBZE>#1#fo03ygQZ ze7eV=*~W9`e6K3$>Zi7#N(m>dx0kusjHTfdt2l*;=yII#h%9+^8|(%_5J}8#`CENh zb9Q#&EEr*`c49D6p3S^w-kd;5m@T}*`|`Jj1onAWDr2#1S!-qPxVnjk3Z`AS-C@3# zb5&lCqV}SEx*2)lSu7%A1K&EE zg|RKwBFpes#o+SG=IX^dgT2f}F1oeZLWaQh30WdDDt5#3i%;GF z@&u`-a$^sa<1nC+A%MAGA?{Gq!W>C-Z@P`FUR`~#JGB*?M>f&DBK4bnW)fS*KLe%> ziCpk?n&PwE+>3_N`_~mZ@{rksGjDnHCcSOY|crF+l9AMVWW(nYm*yDSRRkpV_$76bxyS7<)Cl4ph z>l-*0WOv=V3U-*nBaVqZ%awp)+TlKfvxZ#;(<~^@M;xcp3FxV9Mjt?23-_;hFp#0> zA2l;!CE*AOu<5)&O-qOb)k?Xz9FFSO)X*@t1$1GMtSo=vO}@t1h&c85UAv{lW{47c z4;T=?tKlb8KS1vNFSlS6u)>wyGg;i*G1g#CLl zc3`abAmfy#g3oGc+MpY&=d$XO56viH2ic#8NZ-UV6Zu7-CgV+lS_!vYvbAP|GKni| zeWj$Il=Ap$e0<56l&{ONFy&zfjPKNO&nGT-Wg4eJboR=XN@7b@)!gZ;8MY|Z75KONyet4KIO7qfEVfDB{s79aenB>lBq|*=RM6j=KY~+DfyG^3YVaAl9 z&4de&rfC+`7sEoHOrJKbng<_dWXtZT>I=CgS8419Mv>{Ty^;8r-R z&o7Uq%m+LOxCEl;zd-BayhV!y*QJ*py#~UI=5?G}!3d7~(7_0P)BE>3U`oyYa)KIC z>jSdiE+S6y5_}10YXz9x;utIhk>AXVRUev-_)$p72*T9p=KLRQFQG=6bo=RTu=Q)7 z2@#HqRs8+djCcF-32{EtH)sOG)zvw$B$;vUddVH@_8oa_7oZEC>WCPC&w)rFy_9`t zd$$Zu{|dNK>?eG+#HOdikIzKxdZODj3FYZ76*Gqru0qXR3?mFy*X&yzv28tE#jGrW zI`y)r<9gbVZ+PL*Lo+6bj9kTiij5jzmPzWO3fN`v5rMlglj&XV?vxM>yY2y;vJ|wn zxn}NpL$ge~7(Hkb_@Dko^w9iRnakH| z>1?2NE6`-9Ahaq-N+2hqdSy1pKoW(di$K(ZThXU)-wCD~EBU%y?3eF6|6~eD8BTM- zjGH?R+Q7d*ee~#h6LfSzO-ZFcSX%I4*3;ufY=<8%Vr1LluH?m~#7sURCw=eUhxGgK zJWfuG4tf7t`!p5=<>k33WpUoT=e`pRh2X~K7mGf>Fgbs7ux8{6Lv^!Ek~pw{O0ogY zEBKe)aDBecZY`E9CpTbmbLe&cTr(jr#5#UInDsPbTb~cb;}@5OvVm#{!xB)(fRjEK zhT|m3*rtseu=?$vQzTmC1Z`35l%7Jhx8LFWK})V-X7cxbLCv1yOHSJs{usONTSm8W zXpJdQnekQhGn?{@x)Ms+51QcM)`Lfhh155m-Oq1pI|?m>d%J^zFTbm0C`2sm;szFj zCGp8FD4%%WG7*2b?5j4yRyi6b=e&#rR3k`hmE`4*Ox@Q0`y|GDJ(W6}zKZif94(#x zKZtwtupHa(?fWv%L!``AwbARvO^!(oE_iXRGZBN_%hr8jr&g(pn<5+9$`@Z(2GYr*$@l7jULa5B= z?aJ*fyd3{tGeh%p+dp{m#}9>XYd@n~oL>Am9pP4#U@3(uUEK5KomZ&wjR_a%8wO-h zJ<4DGDj?ee1&RN+pK_LI%cZBK-H#G}+sKt)@bw)Ews!Su>W*gP8*^nzN+gyu5EpfA zT-;C8Lxn2B8{MQuns@b|64{~ciX4Zra%Rx=iA@n+HvVuI|;xe76D;lrKBos)Qhu6Y7-Fj^xmsDEII#%TW$W0XT)y_w6wIC zfYkMEs^;Tzd*CssEMh-<{rQY*ZnL}*4zoMbtN5IbQba)yk7a-s=#GV7`}2@6CxEuD^$(R)DIjxB;w>lGXYqEdaauCLgFjv^wJThyH3Z@FvE=V z}mIq)f`!``}lZz-v9h9f`Xk8H6%uvY2ST*?d|o=Qxw$eYq)+{iP_(bRYd#nqW`G zuTUgxE9+@i?{RWlg)JA14a5U5DW^33aM8RcW$k|Y=BhKP<)g-A6$NMusXAlTNqGftJ-l&qaH;*mMtN_;!=^&j(0By30Uc-fKehtx{pPRbjtXuS0LdR_wc$ExDu#UcW^@5PHCg3r{2 zRZ8FnMZeyB?s)dAgZurlcMvf@SA5KGi0}5!*RM|)leD*Hy=ZmZE~zoa8f@N9&eTP_ zhZNI5U7Ztx9vd;)Yi#Vu8)*}X?QiD~wpm@0>_22ahx|tYyXyN4QJjd(sS);?t<{l2 zk%=i;Wu$xSnXHv#z&weXk`W@PUB(DxK7!DK`EB z-CF=}&0RnvqLXLOKG87sIlCl?aUCLO5<1VWjhbWP2Q4JDC72|_87*lNl+fL<5p1Z; z>mefOuXb!L!Bb$cxwHarDjCxWVF(|V|tCJk2#r_pMVy0b3k&wF{c^`z1 z^@G~Q%0-%*F0pj@Wte>?zZ11!Cg;0v#rpKaCv_qT@lgj6DF8+V$YB_aWs0*K&$_pW zenidQBsuNwVFfa3)WJ_)-rihoPTA7 zNRhfx@6(AO+V%O3vP}-%b?r8QGFM+(JzmyrOaE3;-=;3gzoqp5EA)5QX|8PJrA^7N zM6=;Ak#JB-V84Ig`(a;6$u1(K&DC#b;pi}B;>1kuGTk)}uP>ET_)VHJMd)&fZAaXh zNIbyk(9_F{ZC#hs>hbog+lY@&BM5TvoPRsAYS%c2)OZZWVZ^R(=p}o3H3tmpeKg-yssiq|c+_<$hcbBLfy$mWz%My3a8*A?!7QyH@Bi6)(0phb|s_)C;90S#h1dAHW z&Sb*=Wt33j^M}o}J6#~!_4Vx>(fO&C(y;;E=*S;?^gCTL@anf6C1woYi48rwGLkuI z_*|(Z&re!}gVi+%8_gSVTJ#vW#752@1u&Yb{ev?-euq1wkhvS1*u(%19Yn~Os$YVH z5v%<0upu4j7Qs+4Oi1YF#aiWBQdh?va1li)6^9-7@L;{7qk*h&b9djO3Z+VFXtnXv zia087C{&)5fU#Js<*p+taC0PuEY0X52Ld@5DY4xw1qOICSG|V+gmOvdUsTpLwV7GP z#rye0Q27|b_{v_6ub}Uax1;YL()w{;9>_Yie$=w2G3;Fds(Pn#cL2mQVrqyol6Z?D zv!P6I7f>{N5%}iK8jFGiR!*wRLrk$O)=r^BF~WX?vTX8l6;cJXXm}<11W(iQ_r?d9 zq?ZFRRc=H9OaNp#Y}R8p)kCl+EZyB!R+SeYHRq3Ce|NP^zl#{%OMC7rSe<%a>H;Dw zaK}NiJA6Go#gtkjKd{UDxd~E#QZPzB$YF)CV>hnBq>}sGS%iX&r78MKwM9nHw``~| zG*w-ameef&TvuNYdTUX9H*H;RM`xr2wfpYk{A6{(4KtGBguPjGhI+UD%EI7>jwU)6 z3p)!Lpa)tx(LHGD_+C5dSe7WZAs^Jz)Z~0*z|5FfNJ8S|A5LiZ5cQ9R2&6G@+)52E zJ|8za=mWunt|sH6`fMr_R6L@$4CQ`%J8^z@cctjp!pL^A2kV0p zN6j@ZH!%cT@}q7}ne{Yf)Y4B=JM1O-03d_|l`#=B%<&8ep{7+*eAyH_R$d-#8A657 za)EmxDsgIMoK!l2fkU|!x=EI4G0n7ME04ZT*Ne!xe19Yvk3Wz|<6f-%`Dr?uWo&jTOffkR%FvZinB*dS>E$c>i8B5<2SgRdvUv zUDG=Vw}~i;U{9uRSEeaIJEZp9DWcxEEO*r5t{5e8klaznL(w;GkcyujukfBtqB38H zwqNLEG~trn4^bNn@iXDX>hZ;l3MBvGQb|)uR?!frB}oKPqycEMugI%teTDxO-J?|+ zq;k<`Bud6OGNV9|^^`r40CLDdjwAP+k$s809(VQe3fqHjnVy>=L%=4_UbM&Kj!6x8 z+b%+G4HKA>a%5~rNe0@7gme+{R0HMA*+4SC8Mr~?5|wd}jt9VaNRvtGChbN14KBWq z;~dio&qePmE4vG-1Rz1~8D%+INlYuh1W|c4NqUauFKynd+(n1dPJ|P4tH?R`gJ5p8 zd))MUT`n%&y7|<03|Y6pZsEMV{Y&~SJJ_;_lC_|j;Q#p`8)VyQ)iHLShc@;))6?uS zHKf2+GPN7F2@<=oeCww5x)u*p8b5{jpO-vx|8w0+Xz$o1;fDZ^!r()pFpi9s1xE#9~hWQ z_U+3cCXnQ5Oi&|J8oHMkDkoYaT@UK)kLe73U`NE;vv$eKyU_S1oBZ(~n&MT-jx z;;WZ0_ZvF2h0}q7xl9hJ7lxOTwxIgOC1frYF#UAxpuFKQ5*fmcZgZjg;Ce6!^aY%F z7!8@5nc-@VkVSFi$V=RBVlC%@h+fqhB=bO2_}M}QAe5T0`o>$X4?ltQqsORiaXY4x zp${LUyLTi4WFbgHI6zq`kZPpHnu~-l(>v5mcw3OSJ(V%or6HmeQk8GTHG)~Z*RHrC@dSi)9!4q zjycU)hj$Y!^l~jNp#wrF0En&w2M(+Y_fq0e6QCO3k)q>FsTk6J;N(p%$Br$f)L{?i zO9syx10yUlHBR%7jcuUojqwE1qefvq&6iW-2TAk+G+p76zPx(=1s*_p59u>Y*g0vU z$RkG<-mDCbj&u{vrt+d|Pms!y{}#K>UAvYQY)XyB?%I(PoI$bdE$foBwMN1qbVR(B z3gb_$e&TZ|x(7^S<|BJ9l%sy04+0DJ?&yBqe%=0hjwyE>)r+b)78hCl6s$6Kj+2E_ zWLKTobID+UB7%QNj4j5-y@$_8y>-e`#^$lS%^^+QjF%Z1P-s3H(B(iJNMjZ+?xvN4 z=YUqN=#{vI8T-iuI*LT;Q$v2Xl7y8mA%B2HpkC@_KF&k94n9Mr8&o;vLN)TLUh zlPk~4Gx*M{*$hC4iuy(%#RfgAutVCn%IhbwB2kzyIx9?^xb=YX$DNq*UGq@V%Awqo zDX89gs;lFEcZWrJRXKu|ci6Ct?Bgl(6$v_;!A2bb)H_^_y|4<0aIerF#uL@^J4rDF zn^^i@gBVYm-tHct(&COHG%kjF?;Kh^9t>a^E|`7#jM+I(D~b{oxQC-{%CSNJaQc|D zbQLl6$`rH3#qOL12%V-dVq6qw^Lg+mCzvCE2UW!Z_Edw_jq>DHN?KmFl4u%utQ2A! z*VxV&KB)hwRr9)0Z4?jcM%NZ5)<3>@V~K&>vwDR{n0T4qS^0f8A=)=)@5l>dSG@$7 z5X~MhF#`1B-aY5Q^)7IHkh{#D$sB941YdWu@2sMti>K42u#ld}e6q0ilU`RTnfi1V z{b;r(z9WWje289AVGi+9<)T~qPc!QB}r0;gAZ8(wb_8jpXKAPGM7fF_+? z1%tKGo_l)IT1eB&6OWrCED3s|zQcy~5>XB+X)X6rTD)}Wu|OLVE1sLVgS?8#u=ayo zWIAj^M}L9la^wIc8UzlK4Gj2~y{wNu_qeL6>gKuUm?~vp%(-%<%Cu>Xd;l^{%%fk^ zw>53tr~I0*xdGfByJ?;MvmzrRIy+N@fe~ZxAGtbe)1alaG;2tQHZ=FjKPRiIdaelU zYqgG!XNzgi9}3Ul4Cl<*2+_*=qpWswb$wgg=)UvtG2rGw`8&LC*4I*tdUrgowaZxDlI+rlLT(Fd#gR~W*y$i81Lc$dOnaerA}wUMG3La{ z+(~xl&Yk?r#ie8B_upA$MkATRzId@)Vr)B%yw}Kyzg#O;1ZI$z7sE0LNN+jlxlLLi z+gl0*vmL_akdpVq0$LBqUXSVEOs2?0nJHt(F4otN0k<`j+X9tGTM050*(v?JgUJiP z>=ZkBq8NaPOkZ#G?9=SKkavhB6%}8QUnfpjJPP>M)F;CJ*NO3IqfVHj6@nl-^~R9V zXH0@*{Uhb&5boy|_-)g=j#Jt%PGu=QeX2NmFF!;(nzmJ)#H3_@^L0>`L3&%3y=%G4 zLgg3*KpR;m0M~pL?g9mQwS}~&t7BJDuL-k8j!|bYZE>HwcF%lIt^h}buO4kNM0B&S zSh3@GIue=3fmKyK^^I^54<67H4O+^oYAEh!4mxXloWU4t*ER#3@x(W-jBy{VTuC5? zb#+j01u5nnN}rzykV1zvRsZiE0gAE}kP+B**Y4dz6pg#a#y`(n=}z$)!m}p4!CjS_%S(n&=nie$y2B1E;(^S^6sg16DjS~)z`Cm<8NIF4Af(vBhRSo zD2iIW4lB*i52ch5ffPWNsg!X@4v>F+ zoCn*bOBYgWe-yMNcfjamv%Y_&Y?TV{;%&WWX#JPm#ml<&=u!3~*vuz*NPfy?VmoEv zcsV)3)EkaL(kv)**9%WZx+D#yj^fw?+JLdX z8!?$0k?i}i-%=YAUftUpDVoyLkC7JX1|KqQisw-~$Da8$b6VZ}AU&p=r_$mc39I75V9E1ePz;t#_ z9rqM{%=o@tUn{h)7)z?q*wjQi@&*&Tkdt6R44W)RvwVKiU+EVc7oyQY?|(ByQe`Qw zxv9lppw!V!6O_t-{OrmO5tJ}yW}hG*;&=ETUOm2dw{8YB%p;=D{}i^KK>6c>M8a zn|>t0UC<$&2PVrZT3NHJq>CB>-_|z%=FKT%B0D%k_rlW|CD>dKurzb|J*qOk=ZZ+o zooL*I0V4g_W@Z*uqDgPxPlx?1M=UB*eI+i_X+~9W;=~CPBfX`I7U4DGSToDos?h{! zo_g62I+jeWmxLko{fq+l3F=DBP<`0e+{iQ41gpg>k3#= zj2|NNBp4vEUfT19!cCm1P^@f+je$?hO&Bm9;IXF&mcjUg6lx5K@vArBt4n>6oDkgt z$V9>ThHBE+*B698^hrM3P8hgD(_O(3W*m%0Z6j2z$hfh4s6xqZW`?)u(ygCfy?jZn z6}{?!j<_|Gh0u$zTv^oCfE?5`l%B@@4*`rvFWii)3y6tuW{kce>o-JFvf<~q&8YwF zUbSjs=^*5F~Y(=>1B-J%xfLQqbuT;5L`ZZ=wYb(HlnusYJs{mwd z9!dySc&)>wq>x+Yd0~Zxg%r&;H0)xWU}V(FAqPebswYhL9b5Thc|HgoCl;EtWT->g zMe8R($dR;fsZUU32wQk$6VdU?F%elm{^|W?^O3uCt9g) z1rWrL{DPBhWK9)!iF6wQ4JdbYiC7A^nRaN6^UJq}YTC5Ms(Bd(87wcpy=e3T-M|k&vBk`JTjhlQb*4lG{~Er!;1lhZoD`Ub7#GJ?Y^|+ADZ|Xh|r?p2&C7(*SBwhxGXDg?Uajaz1<$EU zNx{8C`^j$L-?HOw<)_Bd5xT_YYhuMI)htw4A8K|NE1PDI6upk#(j!E+Bdq}vpVsX> zq^UCeLwK;khp-OtZ4&&YqgM!$7x+6e^893l+kGNVE)KgiS$Szm z!ov2oK2x}@srqYvsJ83eXqVGf*XGm;DX$4MnQ7Mj5+9(L&)ho50pJBxviF25P6u?t zg##Hax{OPgHf-D|hHu#K2eXrEqMlt<3iRxDhvNexm~tqvr@bLURMDlNpvMl~0?mB3 zZ}X#Xs?s&P;^pZ+V{e}bJ(+(z*TZ{YT13%uVHSXr0HF;VqkN3!Z&{`SP-I3|yZ0=~ z(OUW$`h$F9>`~IZD^<_TUx!jU$m*{J#8m=)f>#dEPOYd#5qiH4m{@b6&Z<>oY_YX1U6#O?bG|P{pYLB;(bx3(Nk%4vV*=i>JViMSBi?zzR8OP)_;~xV$LW z0#a6#O=u!bQNRF(*vZ;Ut9#$j)GoA$vv2YBDI8T0!@7r8%ZZ=*B@Z*WNQOl2@>M{y zwl0@X_`Kl!gj?|Y_ey9`6`RaAZTc=~)Rz?H3L<@4p?O9iJUt}F@7lY!qPCIm@bNb` zwSfT$i&Rk1Lpzfd>>lES&HAaViYX&TPw<|xf%2eF5QJlUL1YP_b+k` z&iz6^q;b!qnv%w&I_cr#IMvc8mz;$Ms`4&M=qSHq&zz2O39Zr%91gpJF4Lu zLu@E$2NkpL>BgW-4(1P;vF5lr!MjK+54ZtfR8RO+xk>jL24;EiFpO$Pr7-cpaHQ14 zJk}Ij;R`)tpnFSH8ZN+3ebQEq5u)s!J)v|`&mM_48rtDFhekz%2pbeyO$T+=e1bvo z|Eta{E7?A$j*^>^DD-4`-%lh+A*km}U`<>&e;x^-;=}8E97Bg`kp<%uw*zI&@0mQF(7i=(#*99*#BklZml1|bRhlg< zIk|U&cUD)Y@A%okQxW=GF#{W8aQv$^C*r=H`U6?SncwYQvS&rakI*FoYAJ-SUiZEA z!?C@G56#PYc2y7oxuW8n_jK7UZKDmLZd{%Fpecv1W&Sj8p$(p*@a=*U60&ib5zAo8 zd$mccx&}mMuuHuYCl0BiHHGXhHiUXnZsk z+w>g5{{@`=qtg=9Qs&<##mqy=8I8YNgM{ruzNelH<$}Mh`+mhgx+DRG7hHn>7JKRG z1yV-++fUJ89h$olAl#!!kSxtb&_}-4_0U{CwMD@gd?FE<$Lyo{L7znZ1Abb5o8SDS zfzr`w^tBzfLC|Y`tU{{!(|gt&L6ol0eOc-sK^q^w&z}$fZ`a%QG5&9S`$S4F;mJ+- z+d`7zDgu*@P^)A6zu4TQow4s$JZO_&9b1KNl@N_Mw4Ynsa>_PYh3-#JPe$SxFa-H( z&$iE)E6`s|tEv3>al?AyKJ<`kGrc1f1sILv*V-g(Yi?7@q5-fF7v3dHSq z{+Ly zLj&E>M8^^8Mji!a$DSY8Ng%~KdilqfqNTmTpkdM)EzXrAQa%LTK;z?^m~pY!g(jP$ z?(QEJwC(_o6Q2)aEWGW2=}DN zL$SUnyEr^UY`}mR>TRAHtx2???Ygiw7;c4s&9JL;EkI@c@t6+n1hh5+S73=!K2Ol( zm2UWc$L4cg=ib$ucNBf@k@bb{-J-j;E9TD+qRtbI^jt(AQr=CIEvB8-@ zYPOpN1B7=um=M%ZDXBX8OWTV zbz$YO=>w;TjT+^s?mtFi>FUI!ku@V?no0D>LWN>Iy%h3CDmKBosvs~dgT?2giRvzbyBT}*j@5_m4aOJ{$jjpq5y5KEmg7_X z0xjXwd%q-Yh0I!kRY6uoRb?eyQav$NvkJc$x?gCws-U$JNkU+t64?=zt+=>2t$kD= zYakwB$be9{ETeOJn6h~;^%<28wIhNFB6$O@fRl%HY~QY;=?lg4*rVOMb!+ELq_y9N zO9|sN=IanBMmYkk81LK}iSC6=X7lFVSXKO(xr>fhZE=Q`SJ%`;GV_!VX>NXp4nCh? zZ^7z_V-^`)>11gM#pU}>LR*Fs57S#PP{uZGDa9ZG&|HVGn^C++dpjM){pFK zx@}uRe0-FV9Ea<3vSQ+rluPlm)J6UmUy0qhv%~#(-L(4(kD3>L4%YPkPNOt;sHLeY zl8l@+(#09eaM0AopFgo2v|0|f3MGl@cdE`3$C5W$Adg>Cu|I!8rg!!@R@7$_3P0J zk{khDG0L}pgM$Q}{n+5pHLzYtyoR4p-S%?4h)z4UnY)JvdRBT{Nezx2KYkba5RW~r zM{g05Lxd1ZdH4N4-yNYa!@D$QN5NUgR`*%q2qO?Jk_|q4{CEqrvp{(-^PMU*8-mFQ zc-SxDbmxI3iSNl7s%Fzu1l6k9o1IZ!UEN}FE|~-Z3;@MGMCGYPkPl#-?Sw{EnP@~i zqB!8ll90q_1qDMyq?8XeFtzX1M%$acdH!5XM7#0RTTC8^6iostw_5bwSFjfyR{i;N zyGxt{upt_$!-Udfo}fPws)*fB>8Aik@_DW_fhEfMb?b$aR_BECz1#2rLE$EN`l$Oy zhJ>8+@|q`2ETIdUQw`Kp=0TLul8WYvp?)%+96o=|Cd*xDHE`(Ao+5e+2tzWo1V}Ue zTVH?ak|m}-%tH>63lrv@1O){?WW(VH0i--n^_>9=Zjb;cEn8#eQ%u1sqOa$yKxCae z*toq(xby9tffX$}5C>XM6&4;i(R#u@L`h4vbzazw8$^`VI+ooU6-<8}zEnS?c$Sn< z6`JLR4H(onoLq+a1jYeHRM=3GOt8GKY4rZvKJYrSOc?_^1vd>V%m5hDj!J6EegFMU zW>lrHuN03Qg;me5q_BLvUz+6v^SQxo>seZwyO>3qzJqh9pP%oVjDKkXq@HzZcL`iV z^p!Ta;1h=rKSA?)p4m*x+4iSyI69Lx9(ydz-kE%GE3721xZ7-{L{xw5q8InUvw6htRg~TtJXh)^ zYRebpf zQ8v9cHrim*>FMJkb^`-lj-ODL2K+%_%Au(_xU-02mEGFenMq3ss2ci+K%j|%kQV9P zXaCTh9iZJ+1XG~tV!TkZeFqT$7Z7&3)QJ@MVwS=wp}kQ{>);>~4be$r71FqlX;$}< z`b_b>BlK^o3#}W+9*h3aCC^b>bN_5WGYi1Vs|apB~hvCZmt1H*r|9o3v=7Q+u#p-JLzC{3Xq6dsN($+`5Y&Y#6;Ger&W+ zxm7|#hz&6NgvFgj&KFHR8{I(!s&y0(yzd5r?>lvnEV6Q^o#v=}JJuI<_*UF(B8|Ac zW~)fF;cQ;svGFH2_wSBgEC#?fedOvKbPXNu(RqU=%jw=>r8*fBE>jSV%Y{k{qksMuE2y{%VHYeR3Tw`r%~MmqS6dNjWwm~Q zPVE7qy?AxJ7S~#G{B+ zi%+J{nK$oX|Hxy;vepWbw4#lZlXGbKr3zl|(jNnivf9S?Vq=feW4a|aIw$o`>hf;nkBR$#`51nutM){E(P@*Qh=}1#mKZvegC5t7AOxuM7c4-- zhg`)n;ZLbhr;MDS;LJG7<$lH;oMWt2Prbt1s;;uW)w}py`7f`YOjDZM`6K5*66Zae zgo|N-{EwHsLA$EHqS$*h2bfMYW{r=A?kqT%d@z3 zE5wB+W_0=AxMUzIsfY=oyus@Q0qa8H&~Q3A%sN6)rzTNpvtHy z6zHLPg1scloL|%JN;M$5Iq!2j!4;nadlGxud z(N5Fm+=UCRhbpYIPj~Yc6w)tw+KMvPoPm^gPgbY}XvblEg6a>k3K+s=G6pD9jvUT` z^|wsLV)u5Sh91(t{}c#xG;Y|T0l9HP!Gc6j_(|Oju|Uieq%K0%wsq@oU|q5W9B(R$ zb#{|wTD-nNRJi~2X{F#nVo|tj&mLdOf3x}@Ka!A3A{_&^#%}VI( zu{x?0{+Lz_+~(JEMw6dngiQ|xz?UuYAJPV05qN{5iSjer(nv{>hFj4T39S$RM3(?S zg8=ksdI-+A!pa|Su*uA98cHm7FX%l}1HE*niWthXqs4%+mpB&)-Pe420y1kJ)j#$@ zy?gdFp4FfHzdH#iU%Rdd$NXBE1fKiK6)S$7s-14ybaj~5Gtc(N-9v0dlc4Bnu7yPr zI^EFzae9#>2}#t`?V6VnKX9niHOBrR{bg-`1I>h6TXYx@39c1oid&qji)`0vHMVy7+7N2LGj?rQf&2uyVCjU(%4rg#6c?YD zRy=?I_@JgYDPLn`4Hg(Z8##EJakpLzqz6m)l%3^r+|Xyyg_i|Z`<)z~cvqdyT^+1e zYo~6Pex-K5Q)Xhw?qxZS%?_CrwaH}QfdA~uRRgy+=9~CaMm&A;WGl;uJ$xS6hIBY@ z?_Ntw!NMa&82`L6NN7kw{a->F#3Evr^5F^X0qS~_tMgRPl_1dA5O}HS%8TdE1xX^UGiSZM5#T>1`Hp4E z5|qj6e#}6?<+Nm;tk;^==kvbZ@o=4*K3sN^qGI&z+eua*j!wm(%=$Hdkslq-Z#rd^ zr8v!aS~opCqt*BHdhLQ)y7~F}m#s6yJiVGzW{iAS^>Rfo`_ICQGKpYf`1700*ATv1 z_4IAx%!bzeJ@dhIM%|lVW6^sI#RQM9?2aE}AYO%k?fciHTBWv0wb|RP;_o6`9V*O} zNEjd?!F)8!y6bK8CVVpP-5aTjzoxKDLyzK3yOfUl!oF5aIIx+n+ z2_)wksWxr1zV_QD&6A}iYX%c_sAfOiSks=5jzB3h;ZvL}}% zU*h7dyLUGJbHS!F+DzN{-r#>m6hCR3t<1MBef!rWZ&26gi@_!LC02Tp`A9tf{ z+PiGxIX*d;d944={%s$AAE_ar6f&&mzyj*5yzMe*RCsEB!m#L?U_E)>`O)*(wu#WDx9P2^ zd&P8=VS(Cm#UJLq{f`fiHx{}7GiJE#U(<-Q_pN@#+wt`~Z}_aten-r+3R{XMY+N<^ z-`2-}yuB@J_rULfdz4~nI6Fo!>;>iDnJ_)ytDD;fN+&-+7EiOxBVqE3d8l5{w{LFM z;U25@D&v?Ju`W%YK1_;uWS+Q%NEg2wMy_2t^$W6r(nkpx;6Jo1M0xedZTePn?V%}x zBp`!!bL#gV1~zV2E?;(8RL`=&TD>``ym>vOPFWn7dsj~sPDz<#uAe?F4u`8~7(40bH_@ZL^Whbtda$?z1y5l&X-`=BYKuvQ&xH$HO)6e~tBhC>G%SZd5-HP9 zFk##{@JFU|;0`<>_V680XA7t15MN4R#%q4XHK6|(^YP3l#e9q}5Q^gB^}Z27oB~}s zca{(rckM5_l(r0y0r>K-U%#GEZ(7v0sHX))Y%6>nOpZEn;*P3))~k*^?!&t0PzWAA zcH+e0^u7_2h)0QxY_1p2wFF3CSu%9;rbpZt62RPp%6heq2$1no9MHWJ;}gU^_R-s>hBaoe~K;*oUbUkh~P#OFTNU#ncQO4>6w(#UA&uW)i- z3So?ZAF=Y4VLi#`lvPwR)6&E$SWoLSd2;(5S9Cct>&RhFrl-dJ&V*@R*B_>Ptev+$ zmhWC^#OB!!elH)vIgQ8@F!d zzIuhy)Oz2(IJ=VPAS-V$WI{p74P`nig&tEW!ar+K8r3y4s8W_pn)J0+fR$Ec_0xel zgX9H+he$@sKwxZUPJmQ`aauo*GGL|;AdVhi$%oAC`->rh-aQl*Jt?aqsYd*|VgwM> zn*E>CoJt-MqAf=aP7snC8jsUvie=@Ir^DOVefuURoh}SmwJc=Kk(x~PsBLHnk@P>e zxn{V8gbJVuC`;Qc?+UWcW9t`cHyR|s(K9Sn?#z<@{k^~fk=P%9oaY~dWF{5Cm)l30 zvMZ)eoHi{V`5#^P6}IoJT}_$gJ2XYW5oa#aAiRSFxMC49&7%s(w_~)vJJda2NQtH! znhPoY>eZ^cq28I1BQwPkEQ?N$ zK%Bq$18ibWc56kqn-Ge!U(s`PODh-79RW@hUqj-k&n4i*7W?Omrl z_Yt%9BMKv_9L~<+?l5UA|I(Ze^_}s*SW58k(Y-rNImX_n&Yz!3x*~9-n4v>?YMefQ zo;H62U0rTQ&W()^+45)=g~{jSz^+u_xfH_EP5d_597i2qbb}-%_r6aRV-ZQS05Jfh zrW1Yvw|HT~4G%nQ1ilU)Xm>9ZZw4s^VdRkcjAuDe2t2UMRzT1)Tfbq8fe~`ozg-T4 z%_nKia{9g5)HKdG?Gz=PFBvYZPiteAQxbp&n$L5Qs^{uvAzShb1Y9(F%DlGt+{E5Ek3W zv3@{8FN!vX>+YjM2l9UU;X5CUXN&Nnj6FsL6J#Fwo5UEqMA{*7y2!h+ao!JMEH{oR zN#5T1oO)=6naDd8tQM%pCUz29SOSnR-W+V6>pvvKV$nUd$FJ@olXjJpks;D{{iP zX`H%val+jLZxJI5O^LsA2bEBiYxasgScm&nkUV3HO=^5%n3`<0GKT5WYX}_MXdoNu zmF5yVZtPeye7{mGxp+A_Ir{iuCP6ti<+H2Ft@}Qw)-rg6BcChADH$qAPF`zxa?+W2 z;^-0@TVYFc;bB+75KzUS;=+|Ho9E2=D|^9v5a`j;-kLTHV3L?-`(37a@u5*p-`~5@ zD@~`!YuWHgM6TDeS+zWF4PmX`9)vr$29lpm7f{5~el~ZrjT_H7bC%QImtL|;2$JPe zEQONx0_W%mhp%%!I3i3Q<(0+(C9w0+=+Y)nnuH{OY*wu>0#dNLxtU9^yDO7qt+#vS zH8Qtp68dBW05slLSNr<;Wl9t8ES_KPB=!qNaz>U=&1j%GfWgZgEV@@xiV(3>TmNI>(C0&w6P1f25r#w7kjmU{DXS0LN_Z-AKz zEc(;NEChwhsztTPR7Zk0^u6CB~REYI4ufk9Hme_hcH1;>5E zX+&sP+11Y8KH<(CnB%36ufvj)TgUk?2g2O;BCuPt-x)vvRSAzmid^iCSmJY=Re=VM zC62|x|52?2Cg*Fs|n{&;Nkk;3`b!rs6!81` z4Xo^umyaLsS)bDAx(HUNUL$JNE^BN3EL^dWxlGi!#c3$rPrYFZ(pB2lK=2v4L5DZ; z^Zvt}IpnaEYyQnL0lZ*`km=~}Tp^6xT4@7Y-belC=83}swuUd@>RoCO#JjoHdv-Tg zG(dr5_r8~IWRA#RgDgp#c={KO_U`?3yr{1KY0QXS%Aw-;VpSy zb#tGZqGYF8qep*W#k1$s?ds%aCO3r5PdBj9U%LFL5g-3J_dUjgq}os79h;Mu z=vRLH`Jl{(+oBu#w6eU+CPwZv?r5^(_oGN zI1jGsjCvWhNJAKRfiwsypcsoV{n4X9LdV7F)=ku|Bz>d4Q8oGP0)vAy5u_*f zdT3+fVi=|qzxIUI(C-$m!Oxkalp1rnk8wqXAfGYu~i*I-i%nw>}Npdk4tzfaHOk|j;p+ua!gPjR@^^Wck5Q2 zukSj^bGOHXPW_rFml-c2SeSXVjE$F-U9fg7M$qpbtX?Ahh6ETtA|~BH{K513 z`1|{xKQC8V4qEw&g+r3+bMj<1S*b@Edq!7V8&UruRx}XN>$J4RiHWmA_4+*r?1~t! z=kIVz-|@lCwbEAczRG>vl9Hgqsi}TqKPnNA&GG za{o@h3fp2-_Kqp4$I7PK70-NpxBNxHW%-HV?sxC{YAw)ZQSAaK?)56to`BD)#0;0X zNMB*7p8R~TNWC%^5bZ$ltp*%EU{s_d!n$2P>zAIX_J^o$tCEF88k)((*!XG}eR+M7 z!Cq?pD3L_7cgNqkjR&*whoLhgtJp(^hOJlYDt(eyzY){n7)RB%V*UEzT&cslt^GGM zQi1&F7Q=t~xw*K~ndIi`q#o+Xfokhl0+hn}m~X23!&K<>TMjK7JyA`Xp@<}Z>W*t> zrgq+_xPAWvRQghLHP{kfvRa#VH{8@YbZynbzWw`O(Uub|8p<1ur`+#K;mz4<3dIT{ zUR^!jEA6$+xVZ-*)4N|_3u7lw9lB+U!g!l+$*sQ>rcV8N#&CTk=*sh2kA<@As;oVu zuZdqDt)XvUC918d0< z{;8FBz7(lFHLkIcF}&VV|H8xdwaG`Md!9t_5+P`$jm7d;0l3J!EW%BaJR&F?)z{hIoZXj&#%_7Ei|9n`#GIa!|3M;@^n z2;o%CuL}=rFm6dO9k=wQ^^Vm{;mE=mV@zx~c;EnKI9AH8S3zURK$03+dIGqSQGt+cOVI){3CRgSj}i7y#^ zR1Gl2*7Wnth0k{g$io8|OmjWn9T(zVT)&hgj~Fz_Y{!la5A9(?jO4@i;ULX03Gg=r zRNIsX-~65^3|5ZZplYrSxj z&+;U$973kAB8u3qMCI!8a`XfP`}fBNTXoZ;u0guCl$Ly0)LAo`!*zYlG7S!Q@)?Gg zI|JL_=)D@6kJKkLB%~pF+633DtZQHfzsZ{y5Cq|tn$bnkP*_kvlqr>&>DzW>mT-+wa?D(4jrCNO+sfocL)_XhOuUaag)V%&=~dV zRV*eAm;v+}tTc6h%TJyo#TO&yGK)76t;k`UN{=aELz7KY21kwHiB^ApGU8xECgK3Y zQnVBm7NU|wsz2H*4OBL)I?!%~Iyps6QnLjP4&aqo$*MtQ9PHeSRq*Ju-_4kqM8w3f z?tFkC^(&zqT;v#BCDIhy6`M&Tj!8_g%a`8Qo`dJ)$&-Tiz&!71K>_)LJ%uoQ;^uL) zUD3ex6Vh6e8)8;w=TiAIPtnXGuzv%GPf)#^^$eXsOG9!iYBj+uP&l-B!eC@kNoqDV ziQg-4mVM%;kk>=leFci=IXfaj1SV*qq$1zO7Pb{P9@b#k^84LIKFq>h2;=~A9IL;&T{%AMI9q$C2p@Si8oCrxCb zFy$T5=;<5lgdwXGcATmMh73u7jl~N{OiZe7x}B{pkyPNi7kUh3IcX965r+dVyIhIB zbxU)}lEKug#AWIs&}ORKJQLNZ8#gd0VZ?~`f(1`N%BVT-CMI&n1>@L&i~`D{JNp)JX2fP zuf9gLI_}Jpfaa*C@L7y}g>mBzU^WixAEZ4BAsY1ui>v^cATjY5nFxG_^xd(-_H8Lk zGuG|V%O;D*5@y@PP0zFblWKq>(~53cVz(!*BAm8o>SHErrliw5~Jg;u7a?ua=P%Q z&OY|nO+Jf?FVW-9Y*X?Qi2(!LBrbLlez?y*ta?|@)Q>R-?>u<(rU{t|jj^1wpONTH z?Irw%Na4tOwZ7Z9VI|)?Zso8zWTw}47F}AIy{+vv{)IqaKj1g}Us?eE?hhJ$DgV8d zEggSTg*nxG$Dsy)_M!CS+JnLfYo!a!(y+0){pV-TGBX)L-gjZi;I;uR`PAv8nao?t z7KYPUYXB*)S>prNf<$d^Lhve1IfB)}Q~c@m)7j zb7{={-2eh|$&mOujSe*#EP?u9yjmJ?S zJ@F|zao4NJeM%qg1`2U{H=*h_{JZ7QSdJvi%O2kt!8tX84#pi4l9G_?>r#8;WmOg@ zFfguqW$gN)DRfx6?|A7@0&ll#s45krloes~Rpa>>Ff8yIR@At0;kmhb{{d<*|KC9E z!BdRsF-4^}MMlP@!WPb3pk7T({F#h1d9o!Y7Nl7;4ui*W$Vk|vrKjIz_#6QXq)EOb zvW-JEMMXt1w;sg=;pQyYekW41BGL(A{-I^*Fch08wSZ%GAXaF0{CH< z2I+?49ve4*f|kGfOc|N?WcQ^VMW%6Jfct;sn;s$U;E89d=(ev9=m*x~4eVHOh zcC=x2VPgl&s_B;&1Qqd02M!*@aX~;@P`^B)6@-LhgNX^Z@DBLGOGLjr#$*q~46sz& zJsL<(#)Q*Y%h8{|G&rlyVy%@GBFwFwOB7qF=nN;>%JMrXW$d) zh*AM1tH0whSw&@iv~e1+kFB3%Q1RioxT#=8)Qz}aL9gs0)toEOSdp?gKt7BcpXTQq zOgyJ*n!SPMPC}-+!tDPspx+}aWU@ffQtE@P(vP0pSUzOshO5sqGJu@vU%AN5#?Fab z=|96(+E_^HsQMt+u}~W)-W?rajA3hE2?-E+0yF3et!K=G6XKZQ3W1G~i_48+1-Hz0 z(`>L&^7)lL8dzvQwDhGrukXhF&7W00%DAzDxrL=~a`LRipLd6JdI;Q8dIn6HG=5#fjBWVaT+!Zm1rK6!tm?0lTp41ffWRU!g<^tN9rn zPDjBoF|j!sZ1Mq>S(MUL`pP?t8TN&v3G;CT^zFgYi?f{k%Hnu&cZ}=EGTywIK6$cE zYWvwm?81F)>GWRcUrX6e+1f z(ofPgQ~IS@UFb9jSire75{tdTL~AO8H_6BVu!^}ktZFXl@|7zFDzI!hIXCHOV+a>= zO0sj3up|gRQ&TxHS~9OZxD%u zF*87a_RL~pJY8huPX35$ZyG2!UNcNoVw^+`8I}OQ@5?eruXCM7dM3qC(h7f<|Akx# zlbGk1=hM?g#?{1KMyn+zAt7tADh-tfGgdax4<2bWi)-fKZU7?ynNTYD$q54*4st$& zW-cBDZe;Z}B~G-vlW0}vhW6hEE(I$6nYO*(*JPmwN>GhPtc#B(i$?5VJj#U%iwiEG zHbZH7_Vj56#_Ykc6JahCUq+t)ET{d9Wulm%VS2F2_C*@F{{tLVS7F9=Eu;fPFmQav_^9546kS|}iI}wxWLf;k%`J_kwfZ0=@ehUj*DU!I&f`bjIoLN zoLRfz`x|73OGvq?lEGh zSeCe6RkM2ERgA!MVh6TLM_nlj4s}LD%MYb56FPFzx9HsW~yL_F9+a@@E81nzG0_`56H3qkym*t&=HN+(^T|MxOKhR#%_= zNa1O%gL~_uZZ3UVlszwcJxiJ^snE;t?yUtK6v3Yfb9zmOEB=C%c%P+!dR;=*&Vo-M zf5x1Yfr55}So}I+xCzK0SKT86Vg0q@v|1iH$pBU35!Z?ThL>lBd^??H44~u397t9N z_C7>9_=8WSr4OR}xyg(lFN~+`m8ZtW<0q0v4pMb{$adlW{2Z6FY|SZXdJRz#x{D88 zV&#R0S5b0+936Vgk?B%nv=!OvweXX!tKF!Yujt7e1Y%4oxT7UjWRy&TfBO-viHToU zEhM_RRv301*L6dw#V5{a|B4X78lin^fl@?FG}(*N_Sd`c=?w~UN*@D9xiVC5&4=@O zPYF1DcSyf}(i$@T+!7MhX8Ml^Y6@4V9{u{3nHP@dl%K|mgN|X>@`d#df4Rlt-9WgL>xt)AZ|X`=lA(VAtaNPy~5D3k9ucs^CqvN!K8k{hcUm3#fj>! zYi^m&(YQ7*aL)*+|^!5M*KQ*tAL7V$B(@^~7N1FdCS^ zY(#J>y`*NCtCy9dQ~W{ z)JFRXzr1_6P+s4l$e|D=2VvciZh7)80`sU$F$UM*4Tzjy(|6yM*XdjFxFj+S+5Av1 zKPI(y#>}0}TOGNq|MOb;D66y9{Sa{6D4O5rRp>0AEDzLm)*RnXxA!gkHIm^3xr+Mz zCA#(1YrK*;`f})a(#hMmZ7eJz>~2I?W_=yk2_-|9E(D~aXV12gZpxoIsuiO^bL@kLu3#TV~dFj{2?oPDjof;#4d)qPzVefU3|g@X)JEB*XKWcM<3pR5AK5 zH@9w8_b`)Kl@*q?KW+W2kt1gV^k>!1P&=}-TZ(1fUHhXt3bTH<*BNk*JGg#*L{g!{ znXnlT$yb%vC4Wh5DBf*pNt-2IoB8p(Lv%yMwUTt*(Oe?jpb-e#xslLE*~#xz8eY>M zeqmSrd`3BvppUU8%$)@4s39=a4#ptlR{EWR{eC;L?9Rswl86}ev zywrHKwX82nQlq>3o+HXxxG)4JOG6l)Sl@a3c{y5T;S)ih^;iCQutZYm$6$pT<$tK3 z{`#k8{g&Zm1HUy_Jy>$z{6@TPM--GJr8mz0^i0q8FfsO8c)0zqChPiJ0wt0c3CEg`n_M^vrug`fo_kGglGwc?p2w4dpEl+Bni18j;JUyzE^ zrQl3xfzsooW7dfVHwz&09b4zn!e-iTFC`6ko*OWbfo{CGNrunpj>2pl{3kiWR}C*} z=sa!u^nP?0iWh*DM<(^x|91eeRKNy?p&)!J8x@mPZ3vx zq!_Kz_D)^J0CA;hrL)++y&5^}MPFanMWK58TfU_rZ6immT#8Cqg)S~L@zgYxu$tdsU zkq3O3HmmqB2s8wFGRu{S!hrT(YkfBWL_;5z1}i-0LDIHBRRym~`g=-$8!7x|16V|M z5f8tL+JH=Ctb#(HUcF}8RG*(TKKtRrGDPj@nFK3ho&x>i!a$3P@ctOs2{U`yhL|8z zry~$4E-vPTMV5WV?xreH`xDL?0B}6|Srl-1hw?lpZFAZpG~V0TBr)C7R1}7Fyc3OE z{2>uFhLI?H_SB&$d+Z*jh$+m<^K{l(bDiX0>NeE_*SgHcadHa<(a;p8h?hgx%x&>n zt}bo!kII*VVUMXc**KjB9Zw=9P?Nm zZAwu0f50w(uZkY#%?ss`1K;|+QrXI?_58L`4n=lhwvof`seR=dXgB2UUXEzf8DBl) zqrR=n*OfGdOvEgTi4nMzk}j4i3A_2;+7(-lTzE1ka#(IR+ErO`s!B@q`RxE;e`F^7 zhUlt<-RHNRxMjcB4o_zK+LQ}V`?dYxcl-ZN#A>P%zi$2N)p8zC=PgB8{C=>CpW5_N zfZIeF!r*mOKYxA(fLf$W~9w+pZ?ES@IN|h;oAR~Qr-U{ zj{1N4YknFGd>3WUCT4@I5a+?d$U4WId&Vc{G9SCeb`#{+rgxFjldF;LXv;mC#+C1l zU~lr6gLJVHKDK*jFF}(Hrka(dATLj{H`kD@ZH>r<2 zyr13QD)|3=dw)+rxAO+7P7qXIS|hJ-wqQZ<5`Fn)xs!!^_||A6#1T9FAEooppBg{( zQ^FGlpRoZAeJ_tHmJ=9E5(_G^8tvE}^seG7H`MV8umzD-eml*d01#mx-qplnWaUvt z`g_Q=$^HJ9M&hy5+L`qKd6WU`g`RCb`lZ+Ni!0WWSCQm`Rp;i`S+8HX3zIAd@xx9c z<}M+E1fCJIj8ygD&3f6lwnH|tuI|uZFJI||=w+o` zXBD&F#d?B-eWknhmxpXdhl;H*tq!_<6n_;WX-qOKX0B)?*t{*k*D z3}N#2)|6%Ouj<1HI@^8wDCg0UI&vckQ2JT@o+El760+6} z#Ej|IPm78S0ZzBQ1h+7$%+i`neLOS;2DYmw915X1)+}cMG#vxSc&Y7$Z^&tYgI(nq zyImHCB1Su?A`~iKa>ANi27bh^6HsIFBMXGy55OOFMrdyV}0G7-R04d-64YwDeQx&x_`vtuN zD$!M~p>7|^zkr#+a<~n`0`JpjRm~G5`F}Lt)6}df2dTJimJ8jNUAn}Y=PhARL0<3M zH}wB0?oHrwUi@Wvp$u6vL=q}fDwLAkNQMX%8VnJYF{OcG5hYWS6pCnRkOopH znIe%yX+p-*B$be+^S<)z=j`*}&p!K{ea`>2@7HTT&-T#WegA&f@4CL<&-4Wq+_M-K z(fZ&!!juC>E-gWr8Ss!07i2Ii6bi{pK!VHNhl)ht>3JurX*h&2P;JKJ%NgVMd~}&e zg7q)IwU}y{Tf}dJgVt}g~s{$Nn)ik9I*d=?|W0}OaQFuIHNjvQz=mP z^_Wj@b$=5KrgaVFc-MiG;K!FJ`Sq2PW7gUTnwIVNF^thu7ZeqdQ~=$%g*}JOP@+zp z9uQrRY$}q+n_lp)iyO;5beOJP5yzTDW2{m(B{#)~!hdBUFY@UQ>(?Q9wcd=FVO*!-Bg3|AMK>rhptq zXn6n*M^Gb^O`+TH-j4;# z`7%?n2UnD?u4Yo|@;mKu04W6VQ9%4})=g6B&cZ@lkFKJktn5MEwtoO@2F}j_mlev3 z5@V#x2s4yn0NXY`9dNj>VHk`F5F+qIIU;4RkLYo%usaX~=^Q*BA_a6ESUD zQGWizz)p?x~rB0$IhJ<#Ed?pK($qmj*m4A z}qyLnf}`1aRJg#=ixpPU@0REBjtz%|?QNG4f~3Lwn<45nX=d8sy%MiUP? zPq(wRr!EPVWY9R9ZgvmQZA_gpgM(y-PI{e~<=Kj$L&kU4t~+4%0QN4ylO0O-U%a?p zTsstDBzDu3cuQ_?LXp(JsDhuU9DkYJ4VI;nbP*ZH%KW%<=M*`Cn4#*`zWcyrJS*Jx z8|_nr0X#UC$U)^s(>(Nk)$w&SHl1S=7WV$?u^E&OHcG0cUQI3dMoYl=X~4rZ@*}1Y z6fxn;=7Nb=D^<4CJVgoIx?(L+IKKY=3F5|Q#qw=rNv6CwTZv7baNU)@$hugHSj)AU zXjR$(BAaflM(>PxD7O8-mp~&B9i~9?JI&y+?Kpc??A==$Y-Go(t1E_5FvraaE)`R@ zCA`CXm*B2l7qzM}JIMg28iaQSz>AqT99z(42Zx5zFy;;VZIt35 zy0CQrI+J_lv$^VnH{*2XWa=Lq5YR^kaH?}x#9nv~KxNRVn4POKpQ85u z{pmlkFx!#xC_-ruz5@mjgH=9$6giWO#CfAJZ1!7gqYJszpHUgO_Dk${mR?RJEGl8C3b|OK!>bv3i=^vgRw7hU}@o4#qIUlSn z3m19FHT0>b2&y9@fk0;@|BL#(@X35D$bI@5(=SPZCspZI!}l98swVx zb3N#LoMnZ zP)dlOKrdGOBIR5__xmSP%uMulz!jv5!vgNexyD zR22^p-3_hFS=nddR4eguOSxA6L5f~NJs=SSWcVswrhNT4ck^a78KRQCz4Bj=-#Kq{ z?1j&Rk8j$#wU03=0|z9vrM@I>_vAQg+po1JP9*LPZ^JnXKa{r|6pP&FE*jSB4-I6U zLt#ql-_mroC-8X=U$MHU6~w zo(FxFJjlu_b-7V{C`)UiRl_(F9AIW&T!MN}MwhNHX})h=@1!xqxY>V2A1w~7QKROb z976ocv42vydk-A=c;LP$-KAj}I#CHavtrKH_Rh=AC0d6> z=Wx@Q;Ne5VThwnD(-L4RM662*ax^H&6_hmQ#*fI7$@Pd-fuTjrfu@}g0!Z|ul=B6n zXRSLF&B9J-UMD;N;U@-8GBBDoi)-z;Y3)M=j(1MsP=EhbFIB573ybEV90^LhdzZ8* zbZ|`suen3$gi+uvPW1!vj{ev~Bh zTGSLvFR!T~g(>pTv~5G5d*5=^{4?87%&_*inQ`HPZ63#V|NHFs2EABNRIvRT^kL-|y)&_niv+b=SUX@2OvTq(uz6!t&2` zDs0nkuCAZZuu``G&}BV(#C-8z+>ZD~)aHNuU{iLW$yHpyHJwfKu1uf4=fcUerH-e3 zea}Qy$opGb)b*K#N}V|*2pO@w{`TvyyN&j;!z+fORIfhGg)D@gt;=IG(WV-WV@CzkPr3Lvr<@gylVN{_Cc(fwMv%IsU8 zio6wVBt%ctt2|*-w?7#nL%0JBoX z%+eQ5Ti{K~2$T;ox=}4b9*aNtn4v$-^mEQN*ATm7`N|cTW0@cI^;U-%v*`FA&%y_u z3+Vq_)CYnSJP^X5ec!ik)F>W!#&I2xjPZ?oxjfg@)>c`k`t53!Cs(Y9p-CxC2_*T&-f z`-u*bj$awm1<3&-P=4ulmmA%jWELCssYAwWGR|RUz3BljvB`Dl;u0L9zSfu+a}~E; zZ0vl(AAiCK!%U*ccfpbwWOQ0zQu#oyepC_*Nf_w7@?8!aD1vNK11!Ikt_Jx5mJH8u z-td0ikJMo9n^e%W@J}2)70wnjz7$pzHW#-xhb&b7FacGc?=(KLw^#F>)YyFihYlGr zH`wmx-#JlMsV$J{H@?5^f@+-1Etc@HRnI0ZF*DnSZiseq^&$5;Cnxx>atWs0gkiiI z`(U!w=ViFNCuPBIT^b=z*MuLaDXovyaYj+DUE3+@UfhUkfQ7k;~$UZNg$`=IkDwtv&2Xm|K%f>T&Cwj2y$4W5O?JYPwCjKIvy2tc<+)Z zH3>91;IZj1H-E!4rO-7{oorOJyXVLh_j@2boN}>)9l#V;ocQC!?+bN84`v>_^=c@y zjBxz+zmFZWnMHfym!(ZRM$S=!P}?zE2^&1B>X~qFCmf!lk2lK}G33t?g=J^=RbTVO zqoq#XM72}m6n*`_pcg-T5)$cq$fYqcxV z^4IUPB`laf|CU^`ea&wzi_Xt)eigp0bWG*%6Av;|?x6IA*<0ocGuV3-&eA_RbqbuY zDU?!(YDfRf8gNiMKjsoEooC96$P&-rcAmefEX9|kpg;%=Y|f>$S(XhI^uu{f*j?U} z%DgK1DGNx!-&Ad0tLx|2-&z|}E4mMCvYZ&!^0Q2Dol)*6JK1?{!s&}aPY-(B*cV5; z6FaX6RTme12`&Rh4xSKSxU~!1pUa{Q^KkTuXE0^Cz=^O}k zo4SRSP;-UEgHFE6i*$$a!~r7Hk#Z%4!5rv;NCnWntEExpHIuTQ--H2RHYI2|R~(^x zFU#eyT9xhCJVT~Mw$@A5cJS~iY{_l6qt&MR(>vSb*2z0kjZV!a$LIXqt?PTd9CKCW zo8r(FXJmsOth1eCzyHM_HfSZo|z~cK?Uxj2jItJap({ST4<8hsBOD=oV>}{RrZ&?3U-gtD+s&?o! z^zIOlwT1gbgXH}D?-8GmFx38ph8;%Hq3(D3VeqfQMT8Xe@uCh=!O%dj)(VTbPj7$k z6Mx((WRmIW_}bn4N==vVZL=K!S0hy7tmFY}(&R&opQ|cMEDpm~#2n^@i^~ z1?w{9)^2`AyncQx{-4t|(*GoE#K++U-y^6wUQe9GJBXKD_w1j^HG1y`|0my(fAwFy znZ7&ZoZfGoVrZUF^49d@XI@Q+GgA$CxJs>W>KjLW@rw@-L58q2a^7&o9-UI58(ts4 z+)qggbH%r9x{}wvry6|VCEf>_FNrckL=?|&%(-}!naQ(*A^-cje_Y)ww{Pov>fdU+ zy5l|dp%Bymd3D)Q$5?WAx^e)y`1#zF`QLISEKh~LM8P@SS(9F~rEAtyC$96QvrCSvgm<2*YG0ybQbyO@Y`=d7vDIjeCjz0pX~MYVx|uSvP>Ep`N%%2o~3-IfpPd}f~W zo7=x%6v+8bz0au_RVf*f9edH&{{HJNYH^7~E$~rZ-c}U4thCOa3iu_^qM|`iL8LG$ z;30X~~+cDmqy+Wl(T zQ)WA!?q7E@z;;OrU)Y#&4PfxVK%GKLD^*!)EX}s8w7=}4FJ46U@6Gnd zjU3*KddA4&0_oGd>MQ)GX%hhk9Y8EBrA@@OYe8P%4tRSAkHlyEjAN>;3gsk2qoWM^ z>}0xaTN5*)_y=^(jL?`NVUe9gZlpH|qbaXG-V%Pyy*xhA<32V`6dn*#KM;gAtUE-3 z&JM+X?=^nc(GSM5O|~oSI&Q7ZKVxa#u#w(CvgPME8RQB8O&o{OFjVLc5Jj8Kp8ZE& zYHX~S+73&?nGXb|VQN!e+fE@!ce|^ZSw8omx~l5b(W4?`S~%CYzCH<(La7fbyv50h zOg?orHAFX`z^n3$2g!)`lCrzA=ZcJ@BlsF9G?5xjW*DpAAt9TS+VSJ>$X&!Q$jF@V zGFw0fPo7^_^=Qi!EsRcpk?1?9XfKper%KfE>0BIFxh zfs%dYC~XZSJYr3WxK(itSTuxKE8@OmO}bF#Gy2A$P!QtN#s`^VWEv5{r|Rq(3TI(qvS<;>Ksgy1`z-Jh=?#)bH*>Het4Baci2QZF z&oBjQsf)YX($7|JSh{HMuvm@VYJvM3b8$2vAZCo+;>Cf6VL;Rhp=>^cR4{-KebUbu z>iby>GLMhlBZAZh!UJoo+~sltCuJE;;&Nks#{tbH@MSBo?h;p-93VoclWY_ z+S)GpA+I+Cbnv*|^!xNGZkXfSwKQK>btkucKMPffjS&+KFu`^34M3(yon1zXJ>q0W z{tZC~A?M*qy=t~JElIiv-NvvxxTAj+`0gd_$Q`=^t(!5Ba$`w0JN6EEMsV)O{jEO!+01lnBb?C-DfjrzxJ-~5Smvfkw=!Q;~1;7SE?vuwH|XB*s27&!>!Vt#H<;P~|r>FlHhNs2M0 z51%}Jx&(Zi%QLyLa-8fPTRDyw5IsN)-KNiX=%9uvDq>AF0bMONqVbsnst&whWn!Y# zt1~dfO9nNs?|Bpu5;M*xOasx@ROEqve$V)`bLx`JR;80#y5b}$4`5@LkdkxGQZbaP zrm*ke!IE{&x0!(9o%R;gmcvb4Uk(>uSdJ4C6RpTq$HdVvzU>?8HM{KW6zB*v`yHbQ z3@cyCie$WE^C)q90KJFzTHltd&gAgni0L%Kyf_V*ojQ!10tn|OO$7yf$Ggo`R~Lmc z5pzzMajtGZzrOI7P`!LKNPiyxq_V#mFvtMF_lcpD7wMYo{A{7G6rI#qT8qq%cYK8zkQ;*Aa!6|eGa zm4i;G8!^jYLOMxJi&TPbBQfvog6@C3E+BwQ#&hpp8r_S)&pe7kMK)a$X{u#=|53{Y^Tc`e>KRWB&d;IvI7yVm~4@f0Bt|H}02A_p+UYx47Ar-Eo zqMwY+o3b+QZ(Zn_pGB)>lxg28wlVe;RsmoI!edm)TRCUfo6VdtV{g67+u&hk<>fu* z1G}0QaGY~admA*zCYVk$HQkDik5#1KOaR9)0^_)=)z$Ed1gj`tRSpyM*R{;VK>C=#-)h|i}fTDkzfFcbfe{mo$I!P zE*3n2EZx7nM6N||ZH`Jnw(sA+lQecMDT&K1W9V%to*dR0_C+&=6u z0R6>rEBDfuy2>l8=xIeP<$L5;Z{B26WKab&^P7VperiVwQwWA6_97T2rmQo!l|7E@ z#%V+z`u=aC4FrNWO73l9l=e6wY8n+nzXtNZQj8B+OXKtV}OR6WzD<*7;YR6224sU}p5mTss&%4g~ax zUuoecDz9l0>W`A~la^vjG#^D?J5sOmdf&5_YlIw2-AHBE&2q0?uh zD_sHr;=zRksQ*(=ju>bjMqI2nDBIBP&8xQjl0HcEekIc;pR+76*WMYqzDo+1NbYai zX3eFraHr3>a5&Rnif%}Es{53|ZgK0k|Cv&l@Q)U6-st~MC%9vEPoFeGwne$Ex1BzX z1>RI{x9exuJ1PKoc}-i_3jt#^D&YU@dIM(@z!l)@yEBeXdCefODu7HLUEDdTRS7b+ zUHJ4t_tMkhkMNLBCVZus@PW_wywg?yX^ju8=qNhUSKZVCE4z9y=37dA`0>L6%>KV= zLroVIYaPUL;jB>4FUbveJE+sAKoE{qsWr_25>Rjot64 z7&B)0)Tw54G^}i|v=wdd+dM@W;1eaAHi@W-{1>wz8adxk*YxTv!f$+h;8Lv?y=Txp zRLe0Oe!yjk6w5h1?ay)pHtb@0`KUbXeGEk+4T@A#cWhq#i&r;mpfKhaVK?55?HW@;|k$Cmr#Lzyt92DlJ9*WAj1l-lIpAy&s3- z^U8ei;EgH2z5KT}7$uo&5#PtL@6o7PA=loyvqR`Lx4{XSCiCXqd^{1%d1Kd^)3Ty%7^^}}(wDK-`xH}ICH2MP#f$LeQK zBTKX5T|ETWvM^vxX+?#KbVmp%mwKvY<^a+NT5d;0$$$!xXk-1e*{?V~1*^b}oqDkl z6Liz~=TY$W@V4@so5nO-xc~FOI;JWsTO)r@eH0{`)r` zB`ScrvlevD-XBpym8ap%h1giLcI_#Gwi3sgA*O5dvh^u8L7Ragm3% zRt%H%Dez&z4OJ8FI=iCf^2?3Yu1G2!}kCxZFy0eXAZ7Y5A=9Wg< z{riml6)8q!cW%FaJ^~q3L17^oMLUamgAMx-Rt$THX)^_hXolAO)u*xZGgkWDySweSKV-ZtPY81Z z>bRS)yQ+;Dv#cmojDITr`iEn6gE>k{7N}TlH~W2SS~Eie7euZj8sj&NoEi(Gia2W* zEU@ck2EU?}cws-gKEVkxhVh;FWN==L*VKHTmskDld=?Zyl3O5y717#}i0f}iz7N3- zmX;mnavG$qi2HH-3Ojhmc7MTfU+nScpTng)3a{uW4)-dIQuvaLBan3=n@tLq@JBom zrqN3nfVCfvf@%n1zs)oSrdbVhO@esi$>?JklIDj`M(mv1_+( z_r4ZO&9g$X;T?YY^3iXja~BAE>q57_u};v{6SSGOVu z#Ikas>}r=P)Q_7WGZ6~%JEeU&C@E;KJ|}UDq63h}{qwC3R45sbA0t#@rb0n$am;FD zGC;z#;gxET{wO2b;w0;ddN!c2fGO}=LxKd|ZYnxPSZ}g{FrsGCA5x?5t(YxgtrNG8 z=Q;Mu75bD@u7s|=LaphB_nEIo$>qjR3(<{tIAt*DR6&3st~LtB%KoCiBdpBPF(H-c z)|O^cf2c(`!i^-9m|UCk2gim+O>S-S>koju0j0Vukrlk2T5C=?n`D?DTg!=jZ zsJsh{r%F;=TdtE8NG~a~?nRQX29};#qXJA#OyUXF6p442^7sOZ3SGMRfJ~auzq*v3 z+A24Gy}7Y*sBr}Q+0Y)|h~PNl&GrHi;uKno?fmb*)WP-9G(C4E&Cpx2V$B+e_M2Kz_F_*+C}c);t{jcu z1vPBWXXYITm>-oZLYozP6y)a%({vPKG)!Hbin3cdAg{K7LIa#iwy-!#Uj-jO&h!`& zf$;nXrz_eL9(K^%{{>j_aNl8=c6%Lh3Y=ihen`GWcW~s$?UpdtWBl{;$qJC;t6N{Q zrzR`2vo$>>j=oRqn#?tcX)Dg z6L}wOW(oa&*IrkszW%`V;NVvPC|FzbtGL7%2Wjk)u#c!1BalC%KhQ_LQJGqDBqNG78<;Jc4 zW9tK0v#LbdcTd z<%J32!H-Mxb)if>g2To92*a?=oPrF1SlOFkStQ2<0!HvK|3r&OBQW3XSUeF{yof?lG0u$k8+p4w z)kaHn)Cg_u#zkEVAltB`E!zNZvSvbX>Qtp?0D9=dscRp6sAcyTlX0Te$1$ETG4YU( z&yY|=iwyJ0Q|ssFm7g!O_rQsvN=i4_GK7qkc$mk8PC5+01?BCPdHH=dTdRWu-M1TY z3S>~(+h4eJ=@Lf(&lGE!b?HpfHIMI=&iKOuy=Vl_wzNCuWY+T;27yuDo5&}rW1pU> zc!d7HCMY;8GE$8DL-&DSrreQ+4j%MtPxK~};0iI9!5e<$+#;MUD+`8wooXRGCw777 zCrcm14r9(ncpu^W`$~M1@}NPd892@uHjDv?Q;gsQ_U#M3KVxF9yEfEfzxr7aj|wX~ zSj47Ah(#XLTal>bdk4P%B9-hykonW6Ab#Wc3`t2GMo9GAQlTLDY8;C}*E+fkz~3Nv;@gwT?{se--d5cfK8U;vd7loAlPK7tL+4@ZXh8^ZSf z2y(ORP=ZfRw}WY@>p2D;o_T1i@kA!S7gg=5I&(W# z_1k@U4@E^qHZiZn#*W=*Z92(~m6mDTZ>^F^J9tso|Zoou}!dMMU0OH9LhFFE%%CdXbr_+gN!C@f%skU}TJ4@+)pq z2V)u}&D8osrZ$258ofE*fTGh^IvV%tk6%&IPzij#pGHrLNE28y(_`SXWuCZbHM~d-DLP9Bt52*8T}p zlNfr+%Wu5z6oo*T-Ged>`vJC;=~x+e?1{J-;zWo6kv=;7ZeE1#v@sDDUbu(qhq;i1A z=a=$jSLmQ?GmyM+3VH-7#*oTIZn8s#OQ5IBQjPKKtD379F%u~tum`CN3{1UNLzIsFQ?~$@$nr85Hoi8@aGGIwOuFq)`J`^94*qXpt2}h{}-^${)LDG{o)VxDxf1;v~OGsGP*n?0als9Jc-nafiv)BIY#q5J# zNEw9W64`J~?ForO8S+JmMC9@Z_p8FnbxZT2Vkl?|*OIvrdj^yUI|%^Y=+veo70kVz zNVYb>(_}k+rM8EPya+UE_BlQSLvHtxlPhEn+!g)(0yLT-5n|Zq&yj|01ap%tbSOT0 z-j;+u9$^j|kp{ED4V+m%%y=RJNuMq!0`p*yU_%39HsPS<#IR582@EAPe{;BpVis1I z@dL-GwM?s~I_GnKa6bhwKoJQ1LaRWl`}Ez~kVo7&T)1;3m6P3z?uiz3)zpLh+=TiEmQ_N zCv5f2V^251DqYc-MH-K(wLe{ExFg(2B;Sf`@mUJK=^r+8NYJ!IB*uq?TfTXm@J_k% zW)1gcgnve1Rsyj`Xly_b#T7D8RAW*a+QzI?+V>q-=MUb=H~XM$Klkj9h%H$(E$hEl z#J<$V{_{YC&j`ghU)et>Fc2dXebKQ~mEW>w$m@J_(yY~le!Y0!FlG3iy!+JyAc!>va@kM4f9PtZTm zD5P`5c{tGR}e;cbB_%FW9|L!;I z)FAFcS3t3aOxz~QTfivJ@9wT(5(&g<)1JIe0!vc21g8gTXNY8$^ueTR}D@Px$9; zH9fy(JeHwbevD&+pTsPJz_}r%-wrl$1P`?WW9>SVtFwCb-+_UBQvt?ar?u%mI3;qz zWn?(IdiUxj%=|RJ9Kpb4vK`wsy{fmNtY&-Q94-~VQ(aNe)Oh-DrlLdCE`g2q0{Zju zX+$*D%4rUBBJ7l~+qhPX6D%QU>t^wT63Idfi)J#HkzmhM_Sdv~ZjXeD7UA_07+HXQ z<^pO{WLsOqjuQsGIN^F3eih8VjOIFK7zQ-hty8Cnix*eV`H8O3ZE=FFdwR|r4HVoU zSR@yo^lXl6#U3-!1`xNLbUxSIt`E#dc{ze1z=p>93c~OnY6x8N)9;}J$P<4cazTa< z9=uZ^$WI1QE(&=8!-U4)IQPYx9li z#v5=?)69RXsR=~S3sTBki}v+Z9jtycgfAG&M-E2RWpHA!#P4t=@ZFt&0+!#|!xlHE zS@tn<5}iqtpy2mH^N`k!Zd}m!I-P$7w8Ws^NITT9NI^JBy?uP%nHG;(G=LLzua}rE z93^go1f=-xA}~x58-g}xU)l;!{js=MS?>wj3&B6gTl+``5*x9BqHT6)8g($2+RTnH zC>hT^d&IcJQ(IpFK+rFnU$I97AkK9zGm%Sd@myx!JxBf_Pe!SG0;(h88;^L2RJ4lK zlpM>KQw${to1F;%tf?8xVt8PU&4t6~L;azB`^xiTLiptp1ze%|mu$L|?JAWM0FZFP z%5~4@&l?rw)T|AJKo)#zuNPFfh=&F?~j85Ir z+=-_9bK=9+=J1z5Kc*MV5SuaN=s|BW{)3noS{g`v)V+g7je30R)*BjabCLM>7}5J6 zX(lZ3@{xp6baW>suR>44EpH)siSHc?eBo=L&MD0Tq3IFu5_}@yV*@i;s3tDBcd?A3xN{MXHmf4U%7Y~e+SsLgcN_U@Y=|uHk{^5b z?16~IT2h03_BcxyJ3UP*hkX(o=V=)b$LSK543g4S{(O#+X0bQZ(mcIjFfT+!T_+6I z*Wm6FOmMY0Zb_WKWYodma1lKKn8lJXMz21#Q@kcV;snjz zi;*BTm44N5@san>Ix#d@2zbPB)W@%E@X1CYC)OhdANBZ)sm@K!&E8&aw?WirN_gx` zwYJqh7$#wgUZ`u+&?ryOX|Tw4G&KJYaV}kVMV9}GYaWB~;4NolOAO?se`I{T@gQl; zoc^XZb%Xhm_!?<`3T7|}=_StvtI=}t;s^EC^1~@BO9UV-`GOp1vp;|Akxd(45cVVd zCA*AQ#}HKx0H#rd?%er{3==Xq zM>@L#JJ}|{81Bj)WpG*adamWB!A2k6y_+ggb?PyH+O#y9CbSDL!09e#abwYTx<#Kq zKb~K}4+0(c$mXllk|VXIEY8sKN_)#FQNVkGK0Mt7!MBZ_n|U5qLlq$36m$Rs8fQl|G9`{PM$ERnzfne`MOamnj%F2)di<34kXSm(WnVq^!q)JBUmVDFU zLq=}}cuN2rdY#T4J2Lxq?wmQo9S=and@VkuS9oOPzUygV0piQfkf3HZ_wa zaj(8Fe?W5ir^x5haa{7RY{cOrk0j1@aXy^2pbetm67dXlmz&d=H)T&Z zMj&hXG`66v;>==sD&gh+dTp?C#OPnsR&1iyh>VIVIHT7#o$uuMUyd%mwq=A&^M3?4 zV&1>|e3fX>v=uchcme^tp)hBokH3^RQ8jH7qB1=R-{#AAyM^mN1Ycw5a8xnHZP)%M z+|&pY1W_`Xh=dV{6xrABzwRVsz&HYpB_i+N?dBL7QW7v5j9!?X`Xwu!I~qvTvCiS> zQ+CLEO&jt!mLj5~Q%Ig$@2L;Izyd&Aa<~F9z#uEDV&?Yk@vHb~b*OL?5YN;@HjzvR zY$nTBRB9#}GV`g==pi}qbE(&^NKvRHbIr{=I3*u4T$l4{D9of~8jlVm2q6zay&?UV z&&tge`6t=gzSpgbv)N5{c@ecieI|rF9ub84asmP3bdyu}QlZNEjo+3;HMEYAZ9|8q z<>uD^w3XP>Xm8v&Muv4YQbAz_@7`y$1MTd(=N23?d33G=jT3y;w-Z(Y+#asRB%c0p~6Kb?cUu&3p+?^ zrUX2WH_Zbv#4Nqy`ov3*esDP)hIO@GwQ4)%6$nIbUfwW;D=D3q?tfhQZ~1uJr~RnS zublHruYcnx#{XQ!i>Wbr7p1|bisvK0{s4p}gHk->PEJapJVl&H+evRR-wT$*1x5wc zU&z?ieGqOFjso388V&&+>>AKszK0Jlv$Zu8Gg6>6XniS+TR3|WR3k%rjfiqr)ykO? zTHgcITI`&dSqu!)*|j(^w|@CJpXn!-_iRG8U*XWjoyOxPPtYUEWX4sanR<#pL6 zHK=nf!TyarR zBlSLE_^e!3?P=tsPEKDbkmOrW2Bf(^7h2mL{Zy`9y&AV&1K&)(v6iD@n3$f!se40j z(6SDN%n{wWePK}>+(O-b|J5sZfK@a~uyQcieTkJxOdMZL0M?V6WyGW+3FN*uwO3Gh z%95ixB8cRB*F%g#gf068`MStlsGX}W*u)KUsWHM_KhR|?uv1hJ>WJFfx4rr5f#Vb)QE)?O=N43$0Y`taM3QWD-x*){1fW|wE7TCBUM#d zs|*L>tQK27cS1&{vDkD4ND`twXx3Y7L09h*cvP@=Rc66)$rr8_GE!HHGnV5=8ZJ^F zwm$z=CNo&45n&dXeF480YDBSD=c)SoBpjZ>uKg8UkJk>@A}dZQIZ*!2bxq~t-uLMh->2gF-s~<13fEpn zO+{-Z(hgo&i`JTb_8F=(?XJCvQ6kMSD9Dz8fK?g2gfN8HjuN-V8C4w1LC21*wzG4? zaY{G#&%bQ!9?cl*9f?nUMy=#uJFm3-GPU!6hH9+Qj5C84y#3Sg0>d9?_UNCM3`TTt zPXBDWxmoWwPyA=ojdzdT3}*OGG1t0%D4h;wUAA{6KRWvpiLK@ciJU9=2h@4YwXj*W zs-}ofBMc_?%a(msau^_V7dMNhDEXzlF%n^L?SB_fpm?eOPrw@gZ=Ezf+eA@vv_Iic zYZor;7lMg4MHFHKTpe9w+K{F-$*?Qvd_47OQogU_-)u1FQKHBo0^~Zvhpu053Gj^&W`o;00Y+i6k(EXNBXlySZ_r)A9=O*hwCQp(kyh-f zA&-8|4u-a!FmHEI2#t9C7tqs$e;b1REdG*1Ls%c1)n7{v#=0s0XXdHa-kdV^pFh9u zO?3$H0l=#w>w~+HU?1r|eePGFbP_|!{2BYb7NIvQ(*$n!HF2IlIv0b3eI1 z1(NdJ=s4Vb<|7je3(CdUWbhz&!9aWq_;T>zTZ{&vn=lWdlVQu^NU%cqLOsCAfE`0{ zrfxio$q7d@_N~1CwjiW^@F$!vfWFNOSyn|e%pBGy8-+!IL(N^$*4zZmPnriAt+=RwpH$M(A4MQg8{52}v`o~@G1A;VE z*Uw}NQVeBtsO^`-C^DZ`b0Ej|^iovMhy;04N*wl!u_SJSu%lwfSWwT;^2FfUM|x

&j6l?w`RGxO8?(u7 zrGFezlt&gq-K?&tX&eE)lOEE$p$HKWFyf>|$TuD&lvh;HBLrT5&*ae0ph~U3fEYB+ zkl!xmpmX+&*U}2gBe2&};Rm&s=WP#NX_i9;8EJ?CtdceoxH)*(uu{%IXdb)V$levp zI8`ev`^(5|qU1HL6-Z*&o&gnTZ-#DeftYBz;*s|9r4A?Ob^16w#SaLr0_XWk@fqQGj(ftW zs(C3-Z~op+yfy}K14-K^Iy{x2jwLZ394J>x_7CAUUf{1@q$wX`xmL#(VNP1ejk-5E9FZ9=*4ULS<0X)+4x3Z z!O+0qHJZMg9`_KTaFh`1a$7gm86$7$qrf|J{u&et1!$Y;NjxK?Aao0mD-L1kX-RgI2UMCT$7CjxFbPutSH@47|c=|7A?DE zN2B|_YeM9IFg;O?lx%fnuJz18(s(%l=)!3vcrd7Itk9OnEZwr@GMS=4$%bK^Lo79&@vkBN`u^9PO86a^rOePDD5c^bwOHBP9;-aq>4 zOAvTl(s)xw%c`0Yi9euc&mq1B^yj_XMh|Ih|FMP01<;_D=F!pE>et<>#VA)>WUE1T z0#pTo3$p{&!Z1$(6LM+!DR{t=t=sLnh7_0d?g-XJ6$N>;xxReSs57900#yVC#$~tj z%$YZo<|*t5yLPdPGIa*CDNdTy#6r)^$PnWsO*wJiR#VnE^=la!a!M&$mC$ggTz@KB^db>*?ye#S9V$$6W31z^ZiFdLXQJx7yX&6%Tk}(0c z-eR&VzOc(o(FmpL;xTObjDufS7pPivKFB78TN%&;;dhVhBSUA=v!OEwz^fK{JvwhF zbEzLgD1CF}8>=xlZf+egffI#SvI5;^mo8mSVE!hd67oDQZmdcRhYsB^NG)G`_=!IN zokD2fE||rIf<;3}yS|m-gsm@a$UcZL;3NU_4;}gbSPFiiv;2N)pf(&ONRBYl9INoc z39@JRZhDrjsCa~7Al_}=`nI-hoqPRSB*DC#)7WgsuDqwdq2=!JGTbb=qg`+e@`P}} z^I^P&0*jp|eEXc!OjLO2ID6T$*X;KU%>&R$X81yw@l_B3@#|D&!IPelyv@3TRJbs_ zhqr)?b>6HJ9!F5o??+t`;a&@ifwI#`(BJ5OhS6hqSNSW`%Tou;IW_Zi3Y)dLMSLT2;2J=oh0%rw^qPF! z=VwNf5kZkFKbQvqzZk!qPMCHyYG_7$jgD{GO`*x6rdk7konp)Wi? zPDMJIoTm3^=452T&YcS%-Gy1DYAKKB1PlFhlEbiZLxzl-oO;?O%VX|=)ia6$PmIsb zS<{CNj=ca{7(s0O${3Hvszi2Snk`?i;A;o=iE$aMNF*i8_bk2nxjmwz{^WD86*TR! z>Dk$n)`Y6b7W{Vh>_?bgWTAIHeR6O7x{gf4>Nyl3X`5&c00Z)$+u~;Q64Dpj&eUa}t>JD+ zaxU4}9IGIOpnw0CnXX;uVBN-O0qQ9buJzsh0p9aY4tr3RA2&p1sG_2?o0~%#{W^>` zj}U5=7LUBV{d3MmxE)8h&%^D2z-;SQCVkjkKg1x}_q346J(kbV&1uUidPr^7LsVB@ z>5Lr!Eg{`Xr;w;O9d&h>|K2{R*vs?K@p*@Xk(NwO=j;YPLoJ-by}5xuhO$p6K9&8I z`Dq=UX72o|OQeOrUN^Ky8QtuOu)Py?WM!lCeUFLz&&p`N{rWuI=jqN*+GSk zGvB*hA_^sl6(q$=lwS4M-F95Nk+|xOIBYp%02GJ*I|Ss#<=lTlAm-ckl_;rQkWbjJ zj7A_B98UeV*KsMaqHHmQUc~{Ou(~yEbJhS`B2Bx~GmG5oM44Gz_v~rkb#mT(i|JKf z!_nXIYwXXwM0)`EEg zPxiQ`yx1)P0Rb`d{?vSLKEv^l(+f>S`)>~m&km5m1BC-pjO5&=Fhym53Qks53M0`{LxT87fS~Tw zWE2EWPEH)!^IFevDl&bw3gm;~=u3%S2VkUz;CM8n!l>#inmef{(%urS19E}2QC$z6 zK4@ijdja+z6hmu?Yz3AYA`%;3d0{)c(u=6`*TonrKLl8w3=EV>{X+H!7{10K7q??g zf9Zc+@$$!*$ahQV%*1O=dbzqtbm#SYU470k;}7hb|Bt^quy_9TfTv8~Q#BERf`B1= z+y3f%>eo-Y%8^5^jNv-d#KIS~ zBaBR*dk>tgmOkyv$!*~)jY2zKEQxq|xK~e$Z4+#lg{#~@|3};}?fSNVzuev9g;iq3 zv@Mbz7aQFNv?hJ4Yk0IVCHT(w!0KlAR7@Xd!8>@h{r8#^*=y|AteH3C7pafyso$ob zoj;&C^9fkP({SmueofdY7({R zRC}q@Hf>*Ky}jmAwj4XVD6Q-fP|QRf^1^z-m;XkdNV}Y(@OzlKQU*-UbEjHdyXBGz5ddY z<-KTR$elM69LpCng{;8dgbVypNfj$o(g1Z$&5Z4*Xv7HC$hFn@^AG)wyKXH@SOP3} z?emljz7)?2bJQYPuUmR@$!}H>YNh|F0^Trp?cm+g__HmFUSh`xKl_h=v7@BGUbAfZ zEJo$dw;ERS?OXNj^TP*p+nc$1fmk`+F5|R$dPOwPVZVU@sEix1Ipt~ZT3X#F2gKDX zR2sbi^_I)3zo%X_z4n(QpqI`sZ9hVIN*GeSL;vDOs$2%`eo|3yx?1bKYnaOWF5o)- z+CEHXCZm-eUTcPulOA=&3IF@GgUmRYwF;4hY1kLnlz;$JfG%+1ojV)P@QgK6%~$}bfu5i&zif**kZ>Kd7G9vJ zrU0CK-cMy5%7iwhh0=^`^C>8Bgj+hl`Q1^!Y!zVVptacx^8_LnRJ)*!*Wn~S3By=>!eN#2D0fP+DbYdL&^T0h+ z1i&*U3IBjJyCo4?cETOBvBd#sXxfe%Y&;zil0PZdlV~{&G=2~N!9xKcEcP^n4mDPJ)42?f(1l+2XFtncvaIi6l1*Ev6Cm0DMf&g zbdf7D)d(!a7+;hFd2xJsH(F~Eo=6OZP&wd5;CXi63pYl%1s~_znY{x$ckgb6B!~8w z_&LttmfC>S^i}#^G@X`1R9vbO@@PE-J5AmRsSsS`zbVdTz0vs^k zg*-i|G8>RrUcQyCq!<*9>co5BzCvI-q5u(c9j!in^!V`!cF$G!-Vt-ZX$Ieyln_<7 zi!#$BuTvZ$G!$xTVjwX+FwNv~TG!--TTwy%)_qbePAClAsFay!K?H*hJP2x* z+7mf>d1CGyMLz;NyacEgP*}sl9_eB}mf2$5SwXT;7wCIY>wPFGiS&^=y#UuWd41CQ z4N*6ST+B(r1IW8Yh|RRi`7R)BO1nFD>vr&35Dk#wD!|m9`upW4w`7=VcORgoxV@If zW|l8+*J&`{4@mn{YODL;yI>p&VdoC60Pje>(PH@2VKmO7&DOX|^t}-8+$`Io)xR4% zDD)VMD(nYcHA>3T|ww7o4q?oV!+fBsoj zajMlQf^l|9zs>S!xwJ(KrNJoSfVzBv(8s8tUpzKjfs6I(6H7_QHiq_E1d7^d>e z!Xmnx`cr=NwH2m8oeeJR3y z*8|Rh*FS7B6F4QHB;z%eq)wM6?d+{q>{>C>)Fk~vWTY}{2^!=FB`!72+C!y z*}0Y}2|n4V`XVM(U5172GML`#7$k;u!5cPwQCw4=5t| zrTl6SB6Mh#yqywN6cr`9CYH$+qS=|`-(FMX>k+D;{7&l0+SQkkU?-6=wfa&)l@q3b zO9l30{^Z%LbaJB+Go2GRE^s!`)p?|XUxst|UR}eJ5t-Tjq6#(i=+V`evUJ@5#4HLr zP8lfgM}WZd=O))*e){ksfkTPYjCp*f9p99cXs&s3`ueA9Om#4q>+ctsx%$J}^B675 z>RofM2WASdkBUv5mE+W zD#mKjMvF+hW2@5)D*S)bGaV~;0ELa_2~6k+7#zyK%z0K(PnG;gd~?0=pY=*M+_zQ} z$wc~IQ25XN(=rRc{U&s#ghfL?bIrM9xCR4M7so?}tiAK)e6XwGqGC_}a>>%AoIC!v z7;9Tp<&+mNr>>^Ph3CP8gNI`SH5Z;c4u-I^Gp3J}oz=MNdW>uFxi<-rMiw=*KaJi$ zeIri(pHOj`)H>q_pLH3XEY1D~>^yLwF6SLPI&mg*EtGdluYj88EaB0auX`C+a5`r%yHN9z zVRxCIx?7ren5Wyd=;_mV;>!WCQk$zbP}+`GQ2|eQL38~6SJU+YN4|8QZ)!ShMx|3D z2koMM9jb{q4>~st#PYoK3N)ChCQ^C<@k^pBCv=edUc706m9*K}AwB zi@Io`HpV)AacSb*t7Yc=H3J{EgcKEDM7<*Zoq4s>2r=uTW1M@l>%>|tl2<%j2}g3fM^q$Xrueh*4}3dQ_ra%mZrW;OBshuQJPo&2LuG zeXPoHz%L?DfSlY9B5<)=j^dU=nIe@o&2zj-W*-S> zOBflDxf=BvO1zi+jn%w)gQ6`8g6E1@b+B|hT(KZ@L?~9{-=uJ^uPQRNP$pL^husyY zTn#cER%Y-d7f~+qpg#R|BozP{|94CG4S&e(c6@MbiTFG-r_GgI)L-`3{{gpk@7DkT diff --git a/aliecs_documentation/gui_expert_example.png b/aliecs_documentation/gui_expert_example.png deleted file mode 100644 index 67685f2c44414dc606662866db3ff3f090542b72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139614 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

r6&({}mcNGStld&mLtXD->Q-uA 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

h3C!d%ujsOt)<0L$ZE=ME{IK6!E_%wQNi zyn*K0ej2awMNmG!^sOK-sxCscU`D_>I+trGkqr1e$)eF>Kl5&PR~zdRbSJ=l;aX;a zpua%4s;bKH)br}zXwOK$gZX5A-*t@+URt9I8{ zn}qFalAg+s;e(bhv)8@#aK5hcD$nDSH|?8O*W9)HILsFJG8K;rgZ%wk zjpw=F0eix|WxAhJ?Wq*MCGwCN65u1fl+M4*ctitkB5`h6KdXseQO1$u0G~t!y4v2Z zA!PIt+dzMRXeMb6F9`At#R+{JY|j`)F3JfYpZS}9Bebb71BSJVE-XS|jbQH;jKlie zk5YZqdAP*v#^R6_s;T29O#&_WK<2!B`JnVJv$V7pwF}6{HkfKwV28vC-u;RTkMPqo z3k{Eai64)-Q|jI;{XP^_)sHkvB7sdcI3*{?%g~5{ycV9**AD? z5k^cy&0dhiEg2LXjEG4{b&-IRG$C|; z@!~s>oz_4!w+64GPan~ZSRB71l^Q6b)9OQhepH=%^gQm>R97$0%hgXybJKxPc#P;o z*R^{6Lsy@u6WO2WhTHw&Ij?88mA@Nf^gGNUqzn%A7TOie9>)!>w3LZ4^TQ%lBm1}5 z>R)0hxirJg4yY%VxP&~ehMaP#?AkRBt9=`|#@jRi2vwY37PgC67)=bGg7oxK z!R32L$5`&d;fUtV#iEjLS4P|L&UQ4{_gwOKwF_F~?JG@s!6$q0*;U55ieG^<&`4LE z)Qfd3qnBNuV%Nz(`EN0Ar9I{riwa~r)yoD1HC!1T3G!;^c+aW?7FQ$o>k*lGbo8YO z(F!uw6Mj;ALWAK`w0AW>e3u%g&#yA`_O>bz&Jx6d#xVLh`*cV>h!}eqT0|f6`QHrAPhqU5a=9e?edU@1pL_r^Lc_ zI?OvJ=?xB65pBL!W*S)o*=1q%;8vOXfk0nhOqUrZNP|5>d{g&Pm=!>Yi!kD6b)IYX zntLCL-ea7V#f80k_1@O;A95U{hYyvhDVT&__(d$Z_$D78OIVaY7a3Rsf1ZCX@)GDE z_k^LO!YN~Am5p-h|BL$SFF)1vJ9i|OWh^)q_L+uK@ufJG9)Eu1&GPl1S#v*2%kCQ%0qFeKp4}S_>hs#fSsJym~)jA1XDD`hIebKHB@>pgxyv>;31R zR{2=-Kr!v?OKvuG@8@xrzfJvKw0|H6*rLiv6H>&*gan$`GbLgN(3!XtasaHDq(tk)Iw_ZQFt4T>6_oLI= zdTx#jV%7PwyyTD+ES|hk&@V+or&U0f@RqiYygS+5yu}^l7>mUp_%O6TezRuTv&t9 z-Y7ap_;_y91-AxUEC7`va^k$BEu@gNSRWnrQjKN$?qIos=cZN#bewudm{0Fix@c|B zzI~scH5}qy;{Kkbf~&U5x3CneDj#~VLfijl7X3w9p6dz{BE+9(+`V@%!8S)X(ROls zIoGE0aYwy%O$L?M%evH_eTnhP12QHDAcZL#-?neMO5rTc2GwLkevpk_`d{i}N6A4| zbLcn8>PbHd)`JjY$&Ir7Jlvsm)}wi#>u8|Z4S@C77)vdBFi#svb!m()q%YDs9E6rZ zCFqLQTFM5PMj+KiB_%5nsxq&QY=_blB4n4|<4#c%LHT{Xt@bfYjFHF4WV7fE@!!d0 z98f-Ua|M%$CRMj7=w2T*zeFm%q2FbQ@DfJG#iqbq>ePGOo{}qwEaNo!kTfd%TiL!h z7*IBl%#BM6s$d6+%R9RE&q zoXC^#eKVr?@kuA}95+4%t$nTnQxH!$^74kx&JFBiG?b*?r$%&@%lw(L&6Nt{dQf!4 z*p%-A3>v5zW2{USFratuZ?9V*8dM2x1*A9M5PfJlOnGy_1B^@*ju$F@75KiOKkN`% z8MHOn^YA@lxR;~(_^-f+Nufvw3Wl6IbB3WCmu#M`Au|OaK@$2NI_2Eq)Y64?copR3 zv4Ilb&h1xG{$od2Fg=`2;822$nHerd=2B8oBReo^6Z@_V6_uG3)NE9|yBJ8DM{NhH zC~pXAO%}-~6=FCPyqO`vsEP!)-sivTh$c)r z=1#eH0jGFCSLDGh!h(PzPr#Vlzh^BoA(3K7jIy{crhu~-#Jp?4oyX6B*6@1jr0qXV zksFMwS6@I^FG064YN{O+J_PL*=0AL(-GUNOJ0 zUJsfn6|-Rmi*e@?K@-ZTrR*3QE_Ac!#3N~KWAsnZuwtaF)_(GNIYYWm*-T%JYlq_7 zazCd)3i>>*=rHe9Uas$i5*G_*$-R7OZe8jU(#c7-KV%uH6s)SU8a#y5=H9*GW5@b{ z(QKsU#){KgeIk*EX)s)ZB^?t@dgx%k_ESf`AH-s)1i%gey@!XF7q;TVhYzPCsgWTD zSC?F&V5PAe*BK%Z{Gd#F?+xRwM*$TpWa1~e2vs+GV^BB=Wk)%DJ@#){x3wcW*}>sh zT!|R^Jy^pv;QOZ*oq>nTzI|SH3QX@*m~X`Chzl*ddVcSB{Y}{<{rjtMpu|Y=Zri&A z6{NO{A8IAh-6p#cEuq_Wvw7_FP=rm}Rh@J>Kl&O}t+YDx#Oc%aWY!uL9n#cCp zXIm?_TrkU|q$HrDO4dbdgCLV-06?hT4(KRv$a!`betKF1G13s==zcV6<3XxqpD)R8 zRjxKp|ME%W{ORv4zcn;ne6ilqD7ssr>mt}qL@X)(+SNV>ay=qLr=_bb@thPVC2Eqq>=cgui^kugPAhM^7lw2|D6p|UsoX7ADc_`mSBO~MJ_%raXVwlr8gN|nY%BWk0H9&iU!;!yDTha$829SZidtLEl zuJIY5DqevUbbr1;rt>DWxc;|sy)W(S;JOXQVuX>|Jew_oy7;-S&bUj^(W9U*kc7aE z4%Qzu5qy_PlfE)uIdN&R)0BB}khu5n-&2v|8=U(5`E$BR zxtF{?*VkWU&I*2R!5DJHozshM?SAz4-_(N|rg>_r z8_VW5UfmSfXJSHDcGh|V9yjb_>P)s0b&!WOC?x;uJ9b4IIg_h@cZlAVofo}oQR#9F zemqU@Df>Naxz5;hd>4?Ox0rAar9Oa<+C$~Pc=k)fp`t!!Yj3mOuA;+&Nt0aJk8ZeD zd6z`(D2bU>MeA_EGRPNxBW{-j_4AL6`~W&j#U|#7gNK0PF31(0c3F7L5EaMZ_nbN{Y-p#xoIxuZFM9OfG}C%^fl#j--VOs)wq zvw}8pJP&s5!t2SppwA@7n5e6~u%8!U1SjA;Xp^Gi`_fA$&oVP*+qb{MU9}|G2X6g2 zJVW8f;3iC@XrcKKX~p&10Gofy`=>>*k2<73ct9RtdC(;!RNY~PnOOl$kwwxlgHsU^ zva5|y4w8`MuiV$^RJUtC+IH@D7HK7UhH0-0i!ChZRURQI8&4l}p%26+T2G`h6w9h& zXx4xM)M}3wcIrQ7`A!UNNYCLVnC%8xMiMHUQC)cQ;iE@OVdjz|?=?rvvzU~IQ#P22 zkt+M(2;(hgX8IM*=5r?YKBOZh#{qL#V{U|~8k4UdIrs0hz>4VXQY^EU$ zx{^iyMD9gCd^jM0w`|(1&D@4xaHQiaRm_>}xyX^wr4ksNU3$&i_SM=E*&FSCxmT_? zRr0x}1{KL%_81MpYcP}XV(rmGWZFT0-&;j@($CiyYJq=H5C*W@S$S54{3+1n2#=@d zsHMFoZ+y#PM^L){#g&>I(`78d(U*qJ`fK^4;7Zii3bzH^#n1{@KEJHrYmLyMb5~^1 zmgd88D*up`HDlo#Kf&i=ZQyT`aK;=KoKwJIh(j=wFZ0%%6x_k&Y}c-hu3EH-mOO>p zQTm3nXQz_SVwTRho3A_vG5*E678gqVGGAt8ZRDCK7=W>_Rv7Yo&Om=CAo|mrCy?k9 z3NXZi$aM$RGQOf$hT(E1=EUxohA&CEF}r_kg}eKma?4+VE3ld2D)PV;&0zn_tDE+} zbn4DEnt^-v*T}g$_C}Nr^vddJ+cbxoea`043$}0HHQ(s0{kG82_>M)Zx(<9G-F8AA zKnh=PLZcpbo^)XMKmO^!ev72(NMAi?wf?hAkWBJF&Eozs^7Y;CoXC=d<%(;w4tdDI0xN$_!COX>zj-snRC%#p6j?Liy!>a8^Z0>9~}Xw z49+Z{@lU_Ie+(+E5tBf~m$il%cPhU6boq}TfxkNOzvbJW$*~~#-SLh|$aQo))cMub zPjn)T_~3l3`Pb*Qu1g7UG2t3vB4vdGAL7k%6~@s&c!19YS8?%+CA)tSV#5LwO=gw# zooKt~npmUuC=1#A^e@ryxNoxmIRV9vLJ=R&enM`Sg!v#;vVSh}xl^awG&{01?Vtr; zPuF=Pe!uvdFhERC5nl)Pi)G|%MoH`75dQ0_^OabTF}}V>PuqTMWapfah|;8_z2^Q; z1)##$e_pR@`%DfZ)W+6lonxe&o{$it?7zBL+JATJQ|b;Cej}BbLpOeSvF>WKZQFir ziY&=7KcJfg%i+8{D}hldvR9xP&n?dT>Dq&+Q*qq&*fNatrQ{0iMt23rN6^02y}b?` zSRG8JhG4&ELS;9^NU}cVtTTSCU#`4s!bFCKJ!O9fAIjpC&+}C9l_dDkZ$%LVxvqHg zM=*+EfLSbCCun?FF<>sMD*V2WH6PPm>-TD@%;!8hSTgVuor(y-a)ZCm{ zIBb0<$0aZkTE5s%h7L-m(FC(J)uT_x&YkCLYlA}&Kv07hZyrhZJW^d93W32f8JT%b z&{3iOlFDtzIkuQe?`E{Dg1=2q?}r*CQBy1HpL!}OR4yMsELKed80_G-l6jeFc^^r zaanMPaW+$D>r~sSsV(f(=g6eBU(%kAY1eLvhjdP)s_9yj{n;yKtnnwW7%H#BsKu_F z1b!DLNauh|fC-Kte`yN7hOLS)$QqR9z>TC;0!ey9zdRtL!M^w>ojW(p`stv-5)h{- zmbbj3LZzE0ygK)1Qtp#-XyRZ;Ot+zBiF3bMfu7rGSce=|N)f779`U$wM#)w0arYu} ztI>|Zm~G?6AgH>W<-%9oX4p7e-Q{v&X?g5{0-l!kHS_SRD;Zt6-5O?xh)CjH(tAP1^*RwY%g%F zR^JF};$4#6#ed$f%m7o6JR*xgNy*iNo>tu(P5!CCvh;XUyolHqcva-&I^xbZZkEB!5ZO<`=K%<2 zn5O%RbXU|JM~GprT9y? z=K4JFu|_(&2;an1y_%35QhxgNspvL|U8oysU%6I!ECJMm6oj7-In(<$Z{pBK0BgOZ znXjR-^u>8!*pdez(Xw+;7hu}OYSRc7E;1w4H92K)1WB`mqYJacpFBCwTL+nP4Fw+`an_fO+u5wO`1|;?spZh13dchp+E?oH7-iP zSh5b{qT0E|Gxo3UDhs=U^PTM)dG;)=u2*nS4jkwtC-?`cs4HhlsgQES6p+1pX)Hhx1Akmq zz&pU5zN=8VncdCH3v|b3;f@+GOM#XT@nMY*fKv43G8Y2=K6mQzG&QrbV68Akiu^)% zYMG<%M9;;G`*q>81Z7;h0yTlfi1PFnb#`f=c?gdEes2yuHS_He_ z2fHh(&qcqQXtv zF4H$|ww~?SLAB7GiY(}UkE44~TgyatMzUya*f3@-ov%bhj|*pyfl3C@Q-{a6s5AWi zC$6KNv{5DH=>!W(U?wiA}m-1&mkyuTDt*gAs(G%qn6)- z@k>Ze2nz-qxdu@YG1ZwfBhqz;`ck69(@etemo-sQ!O+m~cES&SIXqb&l-*ei#@rAy zvNdp?G+bfhoPqzZP zH`83(vj$=U_n(4VYi|CdM`Eu-kp_zSji1>KbOgG0?~Z&~*aTzC@bn%Ln}Eq*(#WMb zjz6y+)Ixej0CLKb@>j`C#Fmnhk|f6ph7rhyl);g?4rsox5EmhmJiq!2CQhwFX!41z zPhY-l1}dzqp%(X0R8i4$n=()iTb^8n)R0>!{--_XqJYyPpGgktq22H*0~_Ig;*Xhatwd~HvGWK+qP9Ne)?Z_e3*C`)`qG;;IuMo4n! zC?C=u%H37&Gf6x7{18d*l2pxmw#MINX*fyUYE9I=`{EQvVCL??B$3867Y!tg^_+n9 zi~T{E;~%&J!?F(aN^XchuS|QNnrK=YFKd-DF4to7w74B-mMfheenwtIzX?>|A9PnA z)vC$boP@AZ$-mTb(>3#vx=CbfvXiE3&zlExSV$#EZL=xA@q!onxo6Lwd1&kFR}rVM zqFveFOPWo)geQ3~ElnYl_Sxe{kI?fJ09(`dkGy{U*h_;Z6NQiYi~6YTTyR2ja>%*u zJ*ZN8_WU}>t0xd^{`g+KdwXn>N|^z!Z?d{T<2*Kemy)b)k4YtCCrns%u;7;$*BpgC zQ~A1Hm!=M>G&=C`;s+=iv$6Nq|PjH z;VeD_9`ww)zc%IN^ndsQlzC{gUBV1tBpr6#wcz8yk<+IyBi-428ub&r)a)uZQ@;gx zn@|^){R=!ZDmcP?WZP9yYsnnpIzr+SLaO+~(u-sy1W?=@>=^L}a7;c;T9f^lL7ta6 z4;skn!6b2>d!sI(1j0S|g2u+T?#ao?81HU%#gSn|IBm6g)6U*#7#iKU=jsv(9_SOh zp3^q7uz1pVW6@(VxV~OBSy2{FZvHO}4~Vkj6YU+bDq~=`ZbP@P3n_DX_5Aq~x3o!K zCF)x|%GjAU1|zt?aMNX_>|lIhdns^L@bWssGa-pCc_8 zt5WuUwmF0QD&Ku^jWEso{vgZSU9;iMZXzD2IqOnXF>Xn(mGEjv+F7luLYEDm+vYGh)JMa$(PbAVmYC8;Uzw(wwi~S%c}eyjU&+68xJ}-Th90p%~914 znxM06SqrhDeCF2Fv2EJ5`)Q~FM7)i`Vs@5ULHQS~^c@^($N_y zrNR?UlPMv}vHO9AqKu>HCNG=Tx{56tKap57$DRX2Zy1pjeVXtz8HL3T(kk7EgdmF`@(3CbFxMbw z2G54T7_Rvxf$IqF5uot$-=-eLxKg;*>8$u!q|(H(TQ^HW{~p0`k@}PL^k{nFFswkC zx+l;W;>oamsg|UWOOv^RmLWbThQ~0#%%jm$iR*^bkj#?=Yu)<>I6yE)S=FE}zkgTg z*5P+KS-pKI-Hj(J8Z)ODyHJC9R)w4%!Lu4r)~X^mhjDqX=VEk=Ge|H&=;HkK+!d!y zb7R{eA*yVj6JHY%?m2197z2sV+z^ec&_frV9ILX-6@;~dy6pq8u({xjZrU9S66z1P zU76@uK(P04H)n1l^=HQLf8x4{L2FHqa+XP?Z~-G@%z?^G8wXMnbq?ZPVToM&nSjoY zrC=ljIr1{`m^-0<%9c;t5THVDEYe&~bxPD6H(|oIoS+`9iVxhdNfAi;uaTUSo;+a!Mv7EnbG8w{AH)6%OOQ(wMx!`P&97}l~IIX1$RS}1z)_5uY#4*F#4 zqa*YwL^d5deY&RRE5Q{LD@cc_oS644MB|J^tg5vIKZ7K_gDH4`N_B)SLFZ$S##DKm zyT(pys&wY^6P`Kb3ES&3=b(uTrf)^{quEqBp3TEE(_n?MQY_bt`*r8(F=NLX4%|e# zVW1Fm4S2^teO~!S^Eo@>^Ss@;$|ln^C-G!zy0J3yObpG|tXx@(r392YhA%q9<-z}2 zK`y>!9OUm2617b4+4);mGfK6*-5WQ?e(^*uGcb+R3IZpMDaymJS2v$MtEDx`xquih znhpFcZYNt9DPH7MM1+HcR>=}UKaooJkj}Cf_gc(>EJ4!9(5;VIrWw zo0Z3ob)bNyaKpETp-l%49yDF{@)Xb+b??AQ>z4v&NTqiHAplc>%L^~tkG|;A7p@3l zp!nT8F|P^g#y4DS)6$~zj!6jk0yrR%nf+Vm-yy-#P}kPg#mxlLkqNpCL4!XKHO?k$ z=)xoGh}kSQE<*xO=&0w3sUsJ0K*<##2HE<_a;?)9>k0>G$ze%=`WUJJpZ_ttPD#lI zS5^8yhtf;6zOJmd+JWoet5>h^kDUxPD!OgihBYGU%L&c0dYJ(-2GS$6R{Dmc30{U-oSGx_<#pTdPGHFE%zF>dlA#{*nn?sDIQOb5C4^&d|zigk<~k z-#|Z5g51r#+*Ux^)@n!RG9DllZ?_wuyJv^+qsY9`)nJFH{xx^`Pi7+!GyPvOZ3Gm- zt*D%UsIl+dVwNW-VBrR8q?OnqlL!9&(1|@SsC!WK&#(W4G&C* zKA8HCMZVP=8u9P*uATo|biL@t&;CPo?3V_IOX|k10RdH?dN`SA z{TtT4^Jhclp9^s_Wi}ZtJA1Hr*2a2~s_756Mi~cqC^-Jn`jku&Z$IRix3<)5mHb!N z)W}wz@iyI(sPd7rUEMB!40FtJe7Cc!EGmj8KzMp~2pEYSnuX97iJV@+p?ELex787W zG0(qLz0Po0N*q!*Omh~pF;gR>+iDDD4j8>`)GDkT?>M{=T^MPU14H(_OHPA^tF66J z1*k{eGI`^vuCRI1Yr40Y}bk7tR(84LO^>p3CRD6$`Zj#x&el6CL2 zjlVW(#E6WnER7K(VtMZq%?Doy4_^U&3KLL`3=mwR3$}7-95e?Hw&Z;Sy3uB4&Mw@L zZcZ-HC@3(%@sJ%Uw*igXn?}99cyV!I0=Z{+`|A!g>4b?1bFtNHI^!7L*w6qPcA9*= zcxfjASy7tPHs&6uiAVKa+#``{;Ue-1{Q2kzOnAXd&^LecpQlm`@z}QM3~=93smThH(Sk>f|~Co8ag3hVlUr5ep5H z&GO@8D8{S6j!3I4aw6&Ou(?wWotuyd$K1F|7C~quM z>knDck!H3rYf9TO_3HH5bw`Pm_bC0qBJmVq;Or{f#z~{~;HCB%I=05wAWzO`_wJE$ ztcwzVJX4ldoa;D)Mhw?`M(`w_#b;6`Qa`O141ndm;!H*sh}z1YX^q)VzaD@mC+VEC z=m);k^ka763{VuE4H)7H^0A_1Y|*kcE@Pv01ABR7=w z^5tE-c0F;aqKdY5tC_=Xtd2=X3AWf)Z33f)F@eF*r4sI^4J3<}Ju{7`NU%CBRezF^ zq3=FMknhqQ_&`tY-+!Y%iWzPeA*0hY?_r;T*B&J*oj&f-1L!>2wenZ zM5=F*fqrjr=wTYVb`maS^rhv6kX79qWQ1XW35ki_&1cWr_eYWX`OkxNSOu^dc|n-N zA5zn8iky=FLyjb9dM?YuiadEDOp5TYKicRWJEe(ao6RsHoUE!ty%n?!jw{qxw@71K ztPCqEn!w-M>pKF_d6&Qh!4lGdWP_gco;_^_ca(A59~|6wieP{1V>@FKThVK6#lD!P z^PQs%W6kaCROP-kG`K5BrFFF4J!jdcfqD!3DAMjaVh2iTh&ZobPe%|2z^xSwHijgU zIFJhx1n5Y90wKvARbTe2%;r z_IL0<5X>8k;pG$u3cY$M`aNKzkGY{?4f$SPw5h(cjd)IuTej$fk5pH`e|9DV_?2XR z6EBETnk?;t8n=;fPAj|^33@tFp(9x%+4>kP+erGs#xpQ5q5g!eM4%CtRivk!aOj6* zv(x@7U_R<43DBA7Xq-W`nB_{(5T1BB9vMJ@#ZLaJNNV9hKn3Ra0!UNGy$5Cmkg!gy z0ndSth|KOP!3>NKHUw`OGp`b27mw#=A#~iIsC-mL&MMq=f+7Cl;lu9U*7)I!-JT6N zkb^CX$7TP;3H2>Xv@o2 zF56{_MXQ7?uxH_T+`pv4XYbO3hsafyht1^Bj2t4tp@O?n!q~RKlB-K;PCk|(A{`b^ zwHyB!koK@U8Dhckj9SWasTdlf+?QMyD^6|e7dXmGR)oqo^)k~Bdb%9aZND`0>&`yH z^;s$j8n;@v)J<%0AMJkq`w!G`z9|UF5XsnRN(_t<4rl0T;<9OQx?9t7w)1oR!~iqj zb)Pj-7+^11e05_)SHmp`IVC|D{Xb`B>mPFD`W-q^IzR!MC#7jqwrtB6mk`<~ih@ob zUkO*v<1Cg`{6Tdihni-*f`T77CX;Eqg#0_qp7alxec;J|0ki*Ay*Fj}#*MZ4`uX9* zEWHA?1y;}J%U`e zZjIXV`69OtO>Fjp6lb9b{-tf3HqJK|-CH2>VLppB$Csx`>z!Cn|6-$~<7zXAy4BSi zD8ST=tGLDZmzHlCJNAT-WSjvkO-PfXN1-$?@wiH`0KKw*2$qP4Jib+k{X`xC~G7q$(fMu9N* zEc>yG`!Xo@kc${QLt2C;t>-Sg0mrw_w6?b&tub73bnc&0w6E?Ep0uRIiSkZUoGS14 zc#Sk|h@9-}rrxav&;KSPkAF$Y6aDHYRBz{PED7u$%sx0c(G$ZU*tSvv4`Z+8HuyL! z?X#24(uF@>eZ;M@yrSvC){~#-rc9a*%pJ~Nm6xk{8ZCgxdF6{F#p>(fLL)9mx>s9M zg9#^GHSq*sGhVSVK>z?KWMOFN!<0|H3&|ONykHSs*(Bkn{em}qnQg30S1XUCeb3?` zl!om)c3i2Sn*G*Tl!-fsU)waoJW_RmqD9d9uhm6EA`-5zpMN>p(5CFo8+@Hyh+bVZ z8)h6E0tN69xd2g9z2?t&|HpzND=SgEw=XhbtxuWD*33uTj>m?F_cU2is#-A=dcvwC zui<%-`j4&VIMa6_!EDYf{=I(pgb5Rj(~aj{(b;+8;pHy@?g0te2y}CEfzcLpS-7xy z#P`K86!|Rl7Led&a2vxXUSb=uPu!mLG#7rW`0&B4p=dvWJ7!L>t&1H64;0W%X@yp%4Y)y?$~wK6YRt=(zyI`aIDe)E3V8v%#%ES^5g{~BNq^m zEEjhDs9fcP^VFLp^tJk>nQR*C-g+}sXOz6l1)4tMzo{<#JfYWVQ&VzQ^jcfv!uqP$ z%Q*7p*AS1K2^S_I`38UP*s;T~{PBwPE>W-LkGpeW{evI-COXb=FIb3a7hVlU1y|6M zf`X&&`L_N311JoSyK5%9Ij3)&W%%E~@dP?-7apcByY?(~%WF4U4A=9VT$;PvZ9Cn# zZU9DkE!w8Hb#K|mB^tG%G?PgF*C65Bc6ahtcqQ0zmmftVv483N4?V?qVIfSX`3g)tn_PL&PYjdK}$t(s}Sc1wT z!vbtD2;Jbwb-;BFO>q@2+Lh6@&&Sik<#I%rlR^Mm>BEU7OI9^Ykh;aJoCu2vi!SI) zdy@Rf2SI~3^uybZ-o+%aKaN)iGk;w)FIQ--1K>-L2ruC1NkHiHp@^w zW7I1A`&hXSw?LTZ(L!aT`_K8BJhQ{zU4qw_zXsU2{`gtSD|U6x=F`H`Nbv|oHH^pe z*huAeJohI>~V+bE`rw1XRCTv0o>m*;OEGaGM`Guih z`Tq*n#(i!s{hg1(D`QGGkGn40)W6&P(v9$hIWv%dMV}>Q#}3B3#a@#Qxq0i>U_Kwo zvG{!T^@OcgL<>;Cg8qY~Oa}507cI9eB^1go2^r6i0;^DDkW6c%A zq2NHQMz0Cac=`*@-y6mzt^Kw(LvyO|J;pq^oNAK1@?X=9VYX&Q|F-i_;9AR<4Lr1o zX;DeXjxD|V;?yYd*es?>{vYbz1ght~@AqyS_BK=@hPM1W;jzmavy((ak@zKmD6p6;Kyxz#s(Oh(wS#K^n04#cFs}|M#$K@7S-V>RE<8o#Qwg%18QIRv4VUU z>lzdDI;)GA(HuUN3$vrZxLw{&tj|5Zh`!%WM{=&8<9s^aL@jmyVqG=57_XP)8d zfOptfvZ~h0tFlah4=2wdI=KyM4WF${Y-JmoS+k4 zjtRmfZaXa|b#ep|JuFbZCxCO^Yr%Gjdd|31-$Q_K+oq5dv8`>0Ad_8ma~Do@;m?1o z(f!|ojsGF#{eS*t=f()aV7rriVggt|Jq2~_s|ZAkT)1#q?%|#Hz3m4u=yZU=qVR(7+pn(Gs9Mu*9`WULxJrDlq9X6ma6zDb zvI2=du6|7f-A&st`_pIt&zrnbU%%&1V1<+Y7=+*+7Ib6Dzd_LX-2Z}8qh>CB`;QiY ze|z%NCab@N&)-eG+BDG&%``07wyk%D(y4z*;s3J?TDW(wUPg1OfdO^C%ok&fLv3wm zE>|kJ?Kiy>bZ=8$aBT7$SpF&jE>8*0Px}77+t+2eu^Gcd+z86DkmoYlj;Wsw7cLys zXms@-QTJ;=)T5#%xIKFWlL$#VLpW*4VNynPSe|^)A*p*joSX%?{BrQ?yB`0H!@Gl3xn9! z%=Fkh5Bg&(206Ys66x(QJb`SJtY}i~FGpTX9!Z{ezw7pQ?%ZKGvFTxEVma8CMDO3b zZSj^heg2Eqxg_g-*}ON(=Tb>C7}VA+vCgG zN3XaK;1?Ugri_))W(iXeVE4@P|3jwxn4G8qMfCmC{AVyF8%i66BCn zE-SBR02C4=t+3Zqtpf`RopE(3rx7F1=ZM&u8C?JqYizH*{NKQY74+l&)xtC_GMdXP zE0JT28@Qi0<&)NgE8-MUL>MwOB#B!A-*?gMo8#jQ>ciq8l zFW@KKXB?n3^pq(VvmIp_1B=oe4H~EzJR3Lk{c}wY_`fCJ@~!VEVDt0a-$lX*9mSzT z=Z5`;O@?!wYR&QJAfoF2Pj%Uu`OE5ji7iXZe|RN-$X>gw6MlaBVDZ$sFsAY$27(UO zzW9u3OTzLR#))WNd_<-8__b6s!KV_WshSe zOUOt}oTTiIh%gNmFSQ6&y#|x|&Yam(>p@5!tSX=l)ysAo42noJkH{1N+p9cw!kYk6 zh}1yZNDd`(%VZ=#8WC{K4Hb`{J`Jz^@ekVOGla>_GSR@jy#fTxcL~nZEJPuK5a#`R zKBADCCNFP`m{^2fU{su0VioAAR$=(DW5h)q{6K*2dm-4nmyb2tOCClE6-7x2n2(NQ z0`_-VQUED`$#Xn>@F329d2v;%EDQIo!f)f1hQHZJ*F{6~f)<}jBrWX+^|V=6B$njH zI5_+yi6!w5g)AAI9Ftus{PqP|HDk{FQ<~r(75Qdn5 z+Vn1u8nFm-n^9=uSqL1_CoZggC)uUCe1; z{1FcTmXsUWmL{di+3jP5`FW0Q^9_zfM5y+=zGBgak*z&fUXeo@tYcoe+}N1uZ={+#PTG&M#=^4u<$d-Nley?y+jgQSGh|bTB zuW$;g{XzRGQ3M=>%zw_DlI*@rDjQHFbir@wQ~VTFRS!8Q6)!qvG;r|XUKyFGSJ-h! zJRNxPBwbG@s`z(^i^coxgBFd1na?^Ik&*02ai)$Mv*Eej=qPr##sPh zsV^5ugO&6ibNu)Z7dwXj z2#fDq6oQ^+Gw805?oD*%h4=42DJ}hogHK*V#s`}-Yn_Ra1qFaLzISS>DFTvo=rmz|LJ z^FaBvsgbpQ???x+A{3;6rO?dzKuai5X^I)i>`UGf(e2+)sS;KSp(TWsOeOpR(D|Z9 zY%vD~Vl`pnT7aGzwAUM=;vYVEVA~=yW%UiQ3&!~)lQ(w6uR6a;0It_E_^9q&6eAma zcZ95A1DDkTl_kLzbwqG%tnvX6DhAz?{GJs329+2GS)U#~nwpz!`pQY<5h4WLy~@PI z4fPo(U^5p$*_^Za;qj@4rl#AtFT&f-$D#8%ucj<3p*{IbQ{ASjc6ryK{UJ^_rlf#sZ8Fde85?zU_EqoSb8at~0u2wb)N2fs)oq zz>aTZEID9nj9PI-MhGd7_;8jinMB?nXB%io4`*~0dLjT0MA*7V7CxtLP>80t9w0uV zO<{mRztBNh-KHQv(A^JSQdIP#`kw9NVUVo`!v4I))s-YuZB%J!P?7kt<}S8HUR^M*&e8D3U)|ITcy2ET$cZS(67F~L5Hab9WPhk6@Wr_oJRG%Ka_?Kvc~YY|fC~vxKUUn(o`zuY<38buWzwXD~P=A|M5GwiV>$1Q=g7 znpc577&{s8@|rMgtw_YI%8gCmOkMV)>@g$kzOV1i0}*?$wRTbZQuDJ$nQG6OemdX4 z*5mn!4Wua`u@Vc~@J>Xrdn(|I|*FC;JpW3vzO`X5=*D>p{!qn>V;}@M6 zqtxj^L)Sq9L<2vU%~DB^VeH+I{ERtmqJ1Z zOBi=d$}-^%#@Gl*J9xZ>Ksm6%?_{>!RPQogL5c&$lTTQgatCgd@y_GM`Ta_I^0nOI zd%gM7mx331S31L8|J#rbMD5R&y+&LV!l98)Q&~{aMNQvo;G5h}ZB0&Kx}fLlD>CdI z8XTMuAISq;cEK26>b*JXEaY^oTX%M(a2JH24F==6^93Nt1OcDu^f$u9WN&eO1 zG% z+SB9>lR^irTjQ5->I^R(+Zq{W`SdjukFOY{fT07SBxQHmx{mbxu>lTl{+4sE>#gH1 z%LeFOyiosc(2&fgNm;C`QZh&wiVgpZN^y~_#P2%Up@es1eSn)K{R!XMC#n+^vkAve zEC|V+7vCQI;$Hk%;Rc@FwApd3we|h{X`V~Ujb9yYBZ8Uq+ z$=&A__un&eX)H=tx}5H?+@fUqMdy~-D=E=&k}IDo`KK%SD~*@Bvf)%OrBa{eQuiWd z@_w~{fAU4E+iBV3?Usf6yf-x#wvLyX?Y~XCpfbO(@uflIsxSLvD3u(ZyrUp5b4X#4 z4{V=K0Mu{dNSO9d0e@6SvzmHk<_I;$+t|AZjzta{Y&bLndP1mpRVjS@oY<12t=+8@ z)z#h5!h#8pl|}A>W0lV8B6A;dE{>>5TpzRMIs3o?1YDk#3lN#Kyt>)-)5&GB4p3vL z?+d@!YVBe8a&vR0OZ7a$12rG!ubr8lTMJ+q=wu9FIEe%KML=L=>r(u1=#9}AKPQ|v zt?>yhEc+4Si7(GIR-7&ZEU~5d6K#P>K#W1-yidsT-PdPW5)?XOC&~(3J24F=pQc)w z=V?qrVteqIyKSc9eSyMSYfTV};NrYg(c3LnrPX%e9~XjaZ#blZ*9#0Hzy_sX$hu%* z0yv=^WG?)o2*yTa-hyms!Q%956^n)j*78!E<+%9EAhK|?_d3h>*`3e&w}66$y1FZp z-s7E>ymYyDPy2CU^)vQd+|AIw`J!cK7uX}HCTDC+pC?in0RsXAWrf+MRNCvEfz;*rcT`owe95H zU4cp(%kiB%KGI1yo#ee%-!9i)o0DZjD=v(}(EKw_ZW^h&hu*&Y)l29j>Wbx4#my`F zLo{48i6vJ_?ozZk&4#%68e7{E0Fm{ZtsYW#kRecBM(vDDxREW`{&Y2rui1sAG3qjFFl71P}n6_XDmb)%?#jc~F2Nj$q! zvPonuqBkDt1gX!9)wPbIsVMw{5yB~NKE(%nIjQMqSw}#kIhS3W@>(&UC$_{_y!``x z&VW@y=nm&Kf6ICsuH~M9Sco@YdHF@T2KkeZ>&%9|ee*`x@!?}gQ|A6bn10rZFS3K0 z#^v3s7t*$_9SvQ+F_K1Av;=)Q9W)XSE6TSwpJ~*Rx~bc2K$X&PWKHa@{bQ`1Qu=&V zME!*S0UO7I2Op>xRsM9|c_URpvf;&blDZ4td`6Rqy6Rxuw7SN|2@UTyAs4|v?ch*J z$wfz!WUc>w5+v7hC1L11itq60Ta}(l#8Lg{{KaM&;0xozJFJ5wJk=ndr`K#BvieOG zYC0diJfC)t$ZakzYoyO<6*{U7H!0MxFSZe+Sdo!%cXWoz&R@Fb^`Dpbpg)Xyjq9|h zzK4GuE!~3q>9z$#1d$7t; zEe}`j)_nw@_wNr^v%BHSz^)sE&)JjYPLWscc@9!^^~*BWjy?sslAPQgXUoqy9g&ol zXwGwFX5DeG*ct=OFK6)4W_0_u+K0cg+tXe7N8rLL@8ScWwK_g)Tqvt(JNd+6_N9Zx z{@zIkT(}iJhbpn0VLebrllgU{@rQ>p`2F;CRQH#NRb>*V-u@Fw zhBG2-0TgKIEtxsV&31NXg3mrw4L$NW$pr>iaUkSBda**)5AKl+`Z+=`y!65qh7U}0 z5Udc!k= z5G5f7J@ZSsa+n+AOn4RX`B24irZV*B&m&FGiU~LtJO_<0p5MJY@05|dr{~^%`wU-P zV2+G{#FdwGc)ELd{34aCs+1xGuu>QsgqECkz7Jz~bk5H^ZO+DxFbEmwv18^mDd;JD zR-A7z@iSHAl6ZGL!8Xj6mqJ_tYav<;HL29!Inf~0jcQ+qZ3z_*kQKX?UtJA1-@L{BZk@f_{rBH{1=K42IL<5ueAA4x(Z66^dU3fU)gVT29#C~;!^K<@ zy}RCGwtzy=atJM~K!BM!gK#9>u)M)hk*HVEF>^`f&6S^$wk>1>@eABqsoWN1Nkm{+ zw*K`+_PJ!&t$sxzm`E8U=<$8xs^OjGi#F02rHhT zx=T%x7kS(2q{Qb|ednpTw`8nl1R z()?*FH?N%^a=++eRj5 zwd#U-!GG-ZZ5b0|XN`4M+&J_Il;rQ@>MR4UUG_3N|18{T%j=Q*^0>E6ZZ1+&U8`o4 zlrA?Jn9yT!@Rs;{g{yuzSx@V{9eZnchR)OK_vL=qFWBW6&M2c7)BUlW zkBwff@t}Ow38PBCjg}j`mR9dYk;1kH_v@f8n&IGpMM& zt3VFl$T(Zo*cqn8%@^zQuP`G;!#mrw(dBpEa{m3le_h%%RLv50RbS(*GZ+#1j+vyn zF068SS?1-ahrdf>UU~UAwvB*PmlFmt7t!kQhR&P!yCLG~bhSEja8tQxkZ}DGku)KT zMMxt+@F9ett~#_^#)4$6LxS4S01~!VmK4Okxh??G5)vQ_xh~nvP<*^O^5|5@!MQH1 zmeAXbHlox&Pm>rcxN8r9<1C~n0T2mP+kq4ir|M(oGXcO88xOn(g0X1f!jQM(;!A+n z;P5fDvT-4S4GoE~TAkkVIQoK4vM| z(o+#FGsw&3;pPd-IL`KIde8{dr7@EyxZn*5MmPm9i678>?F0C#>7RV{>R4H-S^sKe zggM7AGV#vk#Jtlo(NvIzk$xgGv!k0H4AEA`>_mXXs&q9V5C3WbhuYA6*S5i_Du0OW z>NtyJnOeY+(gjFJ)zrGXFJc@)XHCL12G1V9ckk}EH1Z*{ z2%i1{?$IO8Atl|rqn&S~R7*%s_VQfOlM_*Y!2)JigsE%AUc2TFCBg5Kk!2z<+L_4O z4s3|1rb!eLCWM2g7H>A##++qpL0la0HeT-TSlxf2zT>Js@Hs%#8^E4zsPh=mJ$m}| zjI}N(>X5J6xP(+ zJ-e3Jblpzv__b@AFgSv^zh};2i@Dm$V(0BLN8*B>QD-kpjaDpaAjnA&&Mg|gLx{u+ z);_gfi14w+N+nSQN)mNltniC4GQ-afz*Vd8sv|y1E?C1}g57}fRmt?S(}oR^LKMB% z6l@dR$T5dPt+959t`N;&e@l`gZgliZ?~YZKtW+a6`I;Ub4k|Sz4k?Sy1u1;mj-AK% z9dBdt?~zulAMpprrtFhudKt+#IzgYbcu^FhDSDPkWN&ML?+PFxnsP#~EW$mD$7AwaSU-G+U- ze)tEGp?>!Y3Ye6>OxNh#<2Z;47}bIMLCt%A8uFf@OkO@5z~*PppSOFF=^--CaC43` zDcC(d;xgc;NC=5y0M&_|2=l0yBn3`NZTO)9SCf+o`W@8o4)w?^5y;t^eG^*NA&NU% ztx4)4xgf98$jv)AeCmE*O54%hDr~8>$De4m01X<$yZDW*r{_%odKRHH2py zHMezs%ue_CqTuN2=B5x$_2i;m_~p_ZVZR8}jQ^Hw?E`-`*-M`XW+*!Ia?~NQ(U0o3 zun6wvtp8|Ud`1F^Ow6fbTbp%>-mk4D^y=^|GVF5?japyNNC0kwWl^>C9vJMOGmiGk zDJ?Tt%BWJwhB1q8;(Y-JyDjbqh9p_UHW1TSB-(=7k#6Q|-Q!xHs2v=9D^2glH)G24 zuQto6k6jv*Pxm}e1b28OHDn)sld5H=+36w%gPO&eNEXqz@a8>(x`LH9OpfA?)R0t! z5}Yd9@Tq7K{%?3VkW*YA2yJ?~_*WAVI+Q)p%!{J_RJd!(!C^3&?0XdF z6u#Q1;(Kpk04EzAR%3u4-u26yd|0nIPBZ9wQ6Uv~xU?+!{Giw&MKIEM?BvHFsLBc` z%J!B90lQ?DC_8at6R}*CFn*i5??}*bfBP_^AYbn+bQZ9mLNwPZW2R1@z;Z3EHKFjw zIe=~6KJZ2Jb`v4mJ$mBF5z7f^M`}D1(iwaQ>4x%6VNDIgNA<)NkQG5GIlQNHfT`{a6 z=0YKpbJ~~&#o$;C>)XB*#(6e{*)7TAFF`c{KpH&tg*I@d*oK_5pK}Z$539Lm*h6w{ zz;-xC8a9D-h?>d53~if7Zle%@08h_unlL{9v#dul{07Ulm=6;8l8`qxYFqp*0P$z^ zN6D{m7PvI>sjdmBu=5TM{p6It3|xVIp8b#eD5|NeJ9gqk+fVO7nN8++2)IL~w{Pz` zG=Uk}FQ!z8HC^^>Z~WFF%&~|w$>2@m9Xp^CIFQis#_Qi+AZ5RXc?XJg@iT%-Iw+$P zUl_Wy9lFR=b2W;SpOZ8+paQ=MWOdEG0Bl+^SpZ@Yi%hek9w#myT5%&)!v-LfZl;5s z7#1k#`0;cGv&blp__7b>M;B`9B9 z{6}+wYRN2HOs_+7##eemTrjLO#RVl()YaQ-f)?*lLqUklulGI)C)c+SI_8D7K%sI4 zS29&*MwPJaz=`yPNwG8GR_gC>?Y3)wbNZ;Z9*A@r(EqTXM(IrGhR^+`%QHb?Odn_* zYjP;E&#pCws;mzLJ2e@NSycZiiHU3K4>S9k#2wNA7(K$-$8YC;A60E@`AMv6n2LGy z<2s({O_N~H@#@;^Im`mxscoSDiLc!}c9<}~zWN$SwM!FXE2-Q=n9ikP6Hq{$WbYv6 z4r~0xiJQ2ix~>o`sGG@Pef#kv;W?#OH(Ck&{g9Vw1zBB|nVD$YIiL+((3XZEmq zs!mmX#am#MswygUdIxBJ^`H83lTYv}oSxS=#6aHJYdQ5sQ%j4Wo8??YlgrEd`GLku zIeB@%%@mtwAJ^r79B3^)UvSr}XJ!_^xa8gbW1nyNt2r|Xhg$S=Z+9;D58l2odAfLf zT}jujeJ4Pj^5QFViYS0Uz~qv7mvnb3ONakj!d_MCSPSQe<52sTZQYMc^qb|fmk~pc z9zE+>H?hVf*ZLF?hm~2|g>sSW*n#$yLB3>5#hWMJWl}je>|Z%qtg7c=k*FG86X+>9 z7Sx{oZd*tDj<5DYW&&^6>-zc`+rKyQH(0h1VX0_qxAUciS}$UYYl95cMeF%3?1mt> zx|t1r!$xgyy2<{5;AvgzfZn&>-=ffw5K>456%LNR=6A1Oz1l=+mip)m%N$Os;4>eW z+zE5$q;Q4?ejB>u@+=Vn8Y+s4Lnp4D#js6|Ik;**=~-cG+7jbUfFtji93V6o$Q!Q3 zKueecj^mL`_`d5!2+1^>1=6oc3PgKE6~Mk2K~eYMY-U%n%vL5sQ z-A7oR=kkP1ea3+5Ald~#(pv%jq9>A{vHtd|i2K0pEhn6rxz+&EGFW`(whQ{dt!$g3s=Bc9QgS$(TG$eB zjY+f3BGLf^flPb;q6o*5?|C{bU2J|w*{ zv*f~3`P5m*+a-W>gZT01c5yo*j;B}K(31r^&m^< z>=UVMGr1wGjaywV6RxrI-6I*7hlX)Sz*t|hnL|w^_LEPufF8EIdwgAdwywf53yX&O z`T`fJ@P3@@+WI-0P45ldAiE+i^pF=L+WK}hTyNyv71ezFIR3;vqnb6)1Y5T)fx&OZ04*d&Wmou8JUYTsyrd!B5m zD~83JeHQp}BqLJpE2Vj4;W(z{bU7es4mQ{2Tl%*SGPxJ5_`y8n_KO|%1I6-2Feosuv^2D(Gu6+|bA$cZumT@l-`XG0@i>;rC|Tm$w7AroLhGQW zqN3NAuAgrCZQSToOvKB?87k(LLWd-J5@R?-CW-gSGj)KfV96HAJxPZ-mrK7R+60MHqo-9O=jW%Scu__Kp857rW731I6Z<>l3i;F7r(LjQ`M%O>My@F_rsszHgs z4wGDK^pLgTJ>ajl!!Bcx<&wLK+ox2XI~QV9xx9-d4avon;`ayPPTmNxh=O4jZberFhybGKhdk+P@!J#D zN;bKPtN0XBKFsNK0Udcc%#Do&7YlD-u)5>VLBdE;S=lOnt8i7#?*gu*wIPB5_z~&_ zx^ri66O_KJgH>Pa&b2eE=G?+?^vgG=U+X3%^f?RTOg2^|&6V=D6&N_(Q{;LbmfL`G zj+x=IOtzK~uP86?)~y>hidt%tzy)t1$vEoBMRbO!Jy8Di=@%_;j;-|sP(f|Z73KW? zMn2^0x~=aX{pm|Ce5=~>zpd_8TAyC~Ag>BGhynD!@+VTj(;OKq;=a<}h?T^HG(JIAt4`e6^|LH}grnz@rXIf7%HDwC?eP`gz{UfyS+^xG&6 zm6{N?4&;Bwj~-os^!t$RIKL0lx3z~|C*dEV3?K2%vPJ_kYOzH9;0R%-ojUvhKYzH! z1{Iavg4q+-I*Wdsrlt^HixqcWY#+m{l)!kuS%u1a3ab-bX2_RSuUn2E{eEpBkhdb- zFmcY&l&j;-lg@DYENnWrZ=XLq@N!km81tK0=3lyV=CEW?klix~D_*xS`#8U@9IHDb|Kw+}1Sry!lTg`&gw!$J*O7iJHy%#p^wJ#Z#)*i28gTo($* zwT}Ds>{2RGeb`^w;-nOjP?BP1V9?92)O%e?9WfJ#(r(*}&OELY5(5V7NbYu8V4t_@ zEpRzQLi(dFR&PpDE8LOHYvoXOc}LT$n>1txT>X62hA(t?*Ax#)b$hq@7?piS##lKy z-?C6iJ*gP${#GD%G`+rs7S_7=`2hhYu^%3tx&)QOB)~c3 z`w60so;|_yc3v2v#XiWo(!rEMoyQ{Kv@XW$d;F6p+x&7RqMx>Sw0PP% zR5~@0iZ8`skoX~Tu4(oQZNl=NJW)f;Qmv^zYt8^19?;35p>M0Jlh@q({p)X|#0fNM ztV}5=ENrC6g?)1xcYMfuP{xdmR^BwSUX@ga>x=kQ4eO9_=F19f4LufqLb3>yEw6t8 zZX)pjdCo?dQ~GkH+cYv*`$3;LH6QByun`J81QOJ7J^J=lb*|Q)ou^R%Wu^M~Ih-;r zf3L8GhK9ZS_NA4fYsxJs{Q!dc)+38zTcBwNzZtKhLc&ZtM>lW0g}>Ldca6`tn}``% zS~k@;+6qoUu%^xI7C@!L1`bpsA^{LBwK7n9j+O90gds>(znsgZdcOYVG>!JOlu{B& zR54(t{Rm-N7jHCXapo$f;d@tCTyor4m%OGUA+&@dNk~3 zX>)cC>xUnwAeGd=mY+UJ{hB-x>f1Al?bKLIz>?(J+^586A>2|p$>=!2LD7o33r2FZTQ+BR#rylgaJZC}bv78gydpgpPAmVhk$^;dsw4JGwxD;J1D~d;Xv$-bsKW7h73gu7&0f z$V^0@=NbB&UU}SKP6Cc0$|p8CATA*j7WeMd;k2mE96qBjj}>ZN9uV6xo9k0lY0S}} z*Pk}cJhnugbkQ1rarv3w9w3OTW?$9$`R+8memoU5_XI6z8|5LO1@$_j&5E&+yV0wM zq$bn?M?iP*rXD|XB*7*xkb{VH+>Erex-IGKv_h!ig{8LK=ixr6a+7e8@9*cHgBf&i(+1N;8`X*lZNh!z`9BxIJ+R zR>J|tLrq+5`~A7-+}dRkWauf_D|rnInJlDF%F7GVG=73`K0fw{gc4Z)R}+12L4D%E z{i8vlA*Y)&y{xRQtN0RnZ5nN6JBNp_r0r)}%iI6F$CDvznecFCac$%a-@Pk`7A+pX zl{bJuiEC+TY{mlO&F)4cvE!rbIITj&F7aF*pfFf#%GImiT3S{m+33S@YSs>VaR~~W zIJ_htCA$?(KQB1njoekDHgl8BS@%^z=qUm0ZJKq$F>QBmG>43h_Iia#avz5de547a$6dzZ0JoGY7=F0lvoXN-lRp)k{;Vuoq* zx`nBC^}$u>A_1vnBGsLF7#lZwBg5N){#ASu{*(}d60{(!8k~OjqjZFjR9KPqUOlPg znjV8@QS?^?f8ycM@F$}90h8qT_B(u7XVWXOr>}6d|LIGVgfIe=4xQrx=^*DNU&hEU zd!oQ|rgRfK@1D`&Io;d6t#PpF*g*_1+p%{atl#R6wB{eD#l^Y_s*~f>UmjQa@Vz;* zB<5!C)JNnvJo0`wf1QbXtM%5J;j+K9ca8HJ*h^fRY4r?F6oA7ECb2$}6=H_G&0jA( z<+y~jaB^@!ci5-h<2uuuam!654D;EuOqzH=V;~t#udga0S$l%DM|mXOH~n4{So?$O z_EGW<+X==-MkkkE;7zXCoCU>)@NxRIX}Ij!Y#8vQIBi-QZz|dr+F|b{@e$gltFOE9 zb%K`NAcj%kRDVJO{+?JruMbE6)?0)*OB%xEZ=ry=b`hzf2*ZthdvX81lek4}Sd2?+hoBz06*?*%nPFTy|tX^Mtdz0BY;koT9 zZuq?)4z4&35)yo(U0}C|cMgkj?@9S>{q%kCUD9@#F+TPq= ze$Vgl^)-9aX2JU|dhMb8b?=ffq@axb^q_uWC#AbLxAd9W_w;4X&p$7_>vYR?31WpC zD{py#b5b}`Ot&wG>*udLiFGxq2=zsc?8hc~{tJSFGu z8-9UFoqPMetsh%;4qcCJ3K`U0_t}z`bqC@#ykMPoY1}L_Shs#do95zze&N$=(#*!0 zMou1{a;wLxZGZFfW%v9V-<}#&w$<(JU4N5}soy=5O(D`Bd`qs2NPB!Qt#{nea6WMPf+e}e&nU4wf7~F?M$l{bKi2#+AL;)UMaBPxKEtM%%edj4^XJp| zK^KlI*HyN9q<85%!MQYi>D_6^M|hME*NB&Otd|W_=Z<8K5Tpb*ydR{W$vI@YfARs# z>n9|YA2n$tU*SL5FO4T?n?8DZYm3oLA2q}jubew&2_4dT!z!B|{|I}WQoPqS(EN71 zp5npl%d{SpT}nNacx4!0_@PtY(jk7X(NTM5H%ML%YYw zj_6*NxOe-)83p~{9~*4KF;P*hWT_3L+YKgxHfF#Dvk4zRbw{Bs2PYv zqdb)VC|Nep?mHh?kOJ+x+D&kS56#@F@AGCx_GK5_ilL23r3S;Q>>5=OKNEvXOGA`f60vo7YJ2=KBDGl~u0lvou zaYSzD5lFbm>T6Ves4vK=?bV~lMCypER|&A%L6N5EudJfhFw?)Px_X*_D->=FqL@ax z`Co>-EU+{PeNpe6bl=rmFnh$my0h&xb%S^j{r$LpXV0Bu-p7l3_uf&7AiJ$P3pPAp z37_Wn&5n!2LGpjy-Q9@|fm2*n*@ulWa$j85vg+n7$}3;mE-_n|CS1%e(~}$Rw+XYZ znm`(%f&qg8Z|QzJf1u*PUK}w(IFohA3-9I3tf3)+;pD3r&o|cjcebB+k3lXb>ne!@a8)O-h%#o#g zDuD?z=!%nVJEyhXHD(L z9^3E@`r##t9aO8nP%;SKw^NpvHs|=c@%Hb;@yN7BeyiVklrcadk}FKfFQ-p|TgarR z5iF&Q3I#ID`uRTgTJg;yWi{Fx-avSv+o4M(9*w$^gn(`sYpnYxWOxC031H4rU#4|{}KYxBM$W&ylFhMS?fO6c8M;l5U{v)DHc?Zv&ksB<& zHs&quaDG4YIOdIsOG(|Ag%XyHrn;mHUH*dwdvc5qe|3?|EaiS`MGI z3iF=>_VxV1o`?KOw1qZhNMz?MAK7Tkmx-keroh+cUo8l>zho{t_ob<6qPn^^4>G&| zjW3t3ts;1Q0F#FGOdn5;^M26$^vDv+j?mm8dZXspcx<0tZ#57i&qQ$u(&=KO zy2+E1%d?x}hxmA3*NeBDLEI^yq~~=va3W%eh}j<|p0eTj@#0bGB2;J_yBq*Yccy(eZ3=LdRw+5 z*ePd&0Py97=QS5`Q?+HSuUi5YO%eCmw{OPu=}B$$w~6gH;Nk-2`s$4j>o28gq-n!= z^^693JpB8k?NuMpZP03@<1$ZcdpT_=(*f83iS@HtZpV)%OOl;tkqBuxf*3fF{(kR} zX{bcCd> zjw2ezRK2(C#$es~Ll5bTE;Z`i`1yeL@Daa;23%ZVaLGvBvxn|W)_RPpJkh^`%o<9T z*+__nfnxvo{r8_g1b6*MAV8ob-Y}w$t&?9#NJ#h+@2$7JyUB+Hg|iSGy7CI&@!BKW zfS)O4#Ekwjd!8ir7|ipqH@80lSz!?Q>We7;_{23iEN*lU?lt$sJLgcPBkwS&l$Vnu zizHO4HZMV0ue3&rw1w7a_DtBjg8DEeP zPdqffd`73I%3`)G1K9?6wo!FO#-DbY>pS;*U0Xrj&ySWysV(|*Ye(66mQ8lHymNcr zP1}K=$1Xc?b(M0J#|m-lKZOyXFUE0Zb3TJQY15shq-@28cWq~H;4_x-WvlFmcYh0A zRoOFQ-NB_7!L`be(h(y@B+G<#0jL7OvXmAD-XMM>p2ijLz5oXo&QqR)2BPqbQiy@Xdg;Ih zabbiH^m=Liy>uz;*kBsqp0P!Cw^#YgCk{DN)6yNOoxmW?O=2n}H32WH`M2?PF4Jdv zILejRHAL*E@bL2sST_JyOi~MFwvwgui0V<5D=!-=J#&vyT-F$oTX3Y=EWBCMO7n{P zo1b1st#?u@Xa3bZ{D}Tylcm#W%2$5)EACWI!itYD%)SQ>Y~Hl#$R%yrn-?{2vQPT@ zIv=^Q?l_ppLam*_0Sy<&+HroO{{;ijn`Kil7+Z~j3 z-3=WU7%H0^ak+$CukJeT81q($u|0BR6Z9FR&;CW8{_J5vAJ#ogxVg`%(h~3&&`)~A zh?T%VGOv+tu)rMvgDLHNPToNGz_dEmw`&|73nG_q+SDY-dX^C0PZu1Rm~VI9}PGpS%iHVg(K^34MLkZdco~;H+%{iNUF?d^egQ?elAx}-3zgD6MVR6CW%bkkwILqsmaJtTKIW$Le z=t9FS(0lZcJ8+48*U5h8(T4JhvxY8}9f)kmx$01&#G_T8b5NkKMItaB>w4b-MHmWk z%jt^b%NBZEX3?TG`N8%A>>rjobFrP>`4w@IYW9H%Pgk;+VMBss0G~6H)6^`#fB#_I zHVG-I1tJQpt(!KPrEj^gB5rW8!GCxYeKw9|nu3zjMaWRz2SgUlHsxcJS=QXq0pebh zxlJdQ3$Uu-py51ndZH*fa%2_~y!!&41fHPGFhijlV-IpyQ;?L9aBX?N+_OkDLn!(H z?1l;U)uPiClSjhjcMb1{mLhTW&D~F)7?asesZEYa%$i$!*}m&}q~LHdLp+7BEx|LH zV=%^Z=@{aD{l;FL>Rh>n*c8Fe`RL?L6e;r#k9kzB+4Q9FQ9PoFq(f@x=dzHpX)=fUTQxymD{gLAg%+~QFtZ<1CO z6lnkQDK}aSqegWrydg-e?8`1c$Moq?dP$fxZjdbWyJ9E1=&d&h!Oy<$(n@IBxy82) zq#;Q3Gi$QkC{VcFWJo2ZrhcS(L0uU+^Dm*>Vb!q@p+*BIC%SOYj@OZfc;;fv>2-ZZ zAArHK48He8OE@fno*7%m=q=7Sr~%)V6=U{~$;ool-Q%pu0Kgq7D^_8Y)G8b@crZG? zY$`U_v`h?LY+KrbROWud!Y*FSo)9rXV0Ph01JmO|?Y41W+zSufzNg0V;_&F8^XPC0 z#au~((9;TGVBGfCb(d1Pn8^o=uxSna9g2 z%KWQ;xSGvcfO%D%Ci@u!0WgZ4aqj#Av5rQ;eU!RbdCouht>=Y*hLSXG(EZn>@Bd`> z$lM?PuQ}CXwl^$*Hu$rvqwK#ro`iq-f9f6jzd*YF|M5$Ysc|<}@1o0xjfeafAQQ1c z#LoOZ?9KjGc;~S7K9-)Ip2)(8HzKO}Zz~sGF~Wq-mpEX4uzxzDb8`9Wa()ut)e{jB zO9Z#hj2uK@L}rm9tD#|9`StGKz*J~NgflGTA+VTCX99;RDk_TKjp)o%?6Y#s8W|z# z@0BzY?@R*zBkJ#OzuN!B)9bLpwH)dd%KD0lvBh!twlK=d$mm9KCt$?IbCRz|8$8!_ z95Pi>#ss?qfQufR)E~JnTzK>{*6@oSoj0v1Y8~xHU0q(*TMuoxMusy{0x|b=8jMD+ zOX1nDJGr^JbWb~=6;A{PCee~od3<=Dp&=(%Q(?iIsbLsznZe0rs2xuJIqZOtQMP1B zfLg0`0_&3P5)qczuJbgwiHoK1WJW(N)3)YTrFb(b(i>fnD#J~8hBfv_QIZ5 z12s1(yjxy5iT#}fUjDEXpy%ftgy^R2eC`n$b~bA{3^Kg=gMxw}phq#S!vv?&jQiO^ zJr$>hA@AkvBiWm5)@4hVo_WC6Y%DemcB7lN8MT1Jy$ucgPi#eyhQcfrx^=x}FE7$& z7|h{oZFv{QL{t78_=__coFG;A6k+r2oabAoM_g-3qryjn@~*-VGUObaCWIU>gCNMJ zY>kTKM;I-#jJ^_-aP_J%@K2n^QeS{A`{Yx`3sG$5z6=!fU^p<16NlIRf`V}Ne1slR zkw*KG7c%2o7RW?mH;k8|p5D-zo?Ga)DRdBcm{C;^4aMI|c!l0+k!T=W(1;PrhfFS+ zPWa%frw}9#c^@*MsBQ~JC8n|l;K&72;=E!=^kYfiCk{f7&+rSp(n!o=W9!jfs%*cK zH&}ipWh8%xd*rl{BCX{o%0tPbzp*0L10W(Zyv!=+pTn*rOhxrQ&tXe-#;vN={0Ost z0%sN4$vao!d8& zrhpc40(F|V`wgAA%a=N1Dub$N2UnPz!-O#@R^}AVv#6%No(uwYraRN9iU(w8>o{Wn z?IO-?A=9l6Qhwc-HNNLj9WsUxO+CtimX;RzXnN`;*Upwxjs9wD^R?q|sMb#}I>#wa zMl-%0NmnzCYTjgzNUKcuN#f9^gcb?&cn*UZ_UWUhu1@x4?2&9l68_aRgOsZ3INA|a z$P)85guD1kHGSu=bT#Asyz2u3A|j;2r;kM9GGM@s4Qe7aD!kCU8|GzYWmRpan%5U0 zDp|LWgI__GAcogV8OciO=>6x-_OPFPaev*0|ESKuA9Q%1xj z`fW5Fq3$#~8jY#YHr+!If=Ha@W@%w@U+2OFo{7Q@6 z8vK=?>_cNj8mR+5_D$k`f)+7glMl7)L0|Y_CR-w97X>puLucFvLB057C%Q^HcDF5C z?iUu;dbFc~p?=``v3_lP;#(1%c zMfgl^*CzQrlaY~WI1=J!O$asQk8-C*0vFqu3a@zlJ zlB*%$eZ7N2zAW|KQ09NZBaEmri!lh{twSRCDoW{ zP`Cp_Pju8hWyIDxKenVDeM8P5R;^J&O2n`@lU5!JohqkD@x6D)yrSKcq{Q(DN-QBG zM^iB?02CI@*h_k8U5(MFmtNR&z42(RC3I*XU2KEMGs&#Lyz>*zy|482Cy>7C>Z#Og z#ZP*DlUNx_3%}^-mC(+BD@_D5Tr^K^zr39{CbN3sfAoFFQ{*6=iC;er0Nz>q36<&>jU$) zzMDF}J2cL2*62KuhCG*LB0)q!63$$oF$kDh)co}7aS6D=Sv$$ z)A$DpXcAXjiRR5ily^8ppALWy#f6a}&;50i9{s6+Z!|z;X+S`fg~c<@25o>gWI+fJ z=(!F^N=ZxK*>@@Oety1eH1xOZ3Se^0KgF|9#e8pEGiqV4@-9joKUF8SG1|}^Ja7}O z77Q|B1w@t3HK)4L!yKh6Vv6MBBQkT!%Nlow4LxEWsC&weLuJvqR>UKI_h3KR+=m{Q zO=SjAy+1tna6eevp8LrwQ2)M7cteb6K%A;X3!_uY0xNsk?;hail+@nt{=Uv#_TbcG&A-w;BOD_e ze?{b-XilH}>;A82-y%ZYcv0w#aEp1Vz^%Y6oXF}Eo#*NW?7=z_|_;8qYq%b#ura%iD%>Zkd6kT7` zb?oZr==q8(dKOn`clS(oi`R=;I!0{!#mOWR0ZkwiI<^eL~?>ii$dD4HKdOESvY)}zk|sm0CB^t^!c-d zE>})?Mh%ne14d9;;lG;1}vcn?!rAlEPDGuW9VXGt) zt?uK;7if}Xuy~hqqGj{&2;l4`Lp+Z#^oC!z<7>rwVocEA^S*3#btOj3f4jqv*r1)* zA0wFX1TGw7%_EK3G4+o=Lyf+VJjzvLeCGfqS&We?^Liu#gxfDo1it0il|qjxd|0Mk z)zn;}<>xWHY`$&8U=BbWofGTG4pQfwwrpTDzLAZI<=u8OrfYgCk%HqZ1YCo5q5M+v_mjIc}uWbSs zY~pAqpc^;3o6Mf(?D#uypUkA&#Kx(FjRrcN#K5;`w2MRlb)S=lPmh@P0k;{EIA z)?atr`6BjWVVYHO%mK>@VmIsrt`2@7Ur9_%{>FiwdisB)j*Fe^ek4$7rdg)V1@}|t zGft;cE`gcDJ0vtIC<{M)b%W*VxQKw^(_CvH9=4M#3nj&oue?uyCT@HWX*bW{bo>U_ zOaTsDO5ttVPk?-OeQF&M2lx|gFd_XQ0*I?`=jxm>`@7fnb`*7X+7mtb=PnmChDgqZ zPj*Lj%otLa6k|8`De5P-`Wb~5q1_?N#l-fn#DYODne_ASfDd9~cTwLN#Fj9Xb_!V{ ziZawA96=a)D8OAC4vqW8FaR-wnRpqfF7XMlxRi2vy!Cjh7oGD8Pg^AXl$gJm328i)h9Jh*o2itxApBjF4fABHM zcS4SOgPoF+j&V4bI^)5D)fx}l=q9}%g=#=FdxHgvo;7o9$ zkPlw_uiK431%5tQxZMOXu7W)O=XR?qDA}bsSo*6lDo(Ae<%KL{^>$$ z4evm93Zipm!wC;7eteK#^Ue5vX9oYSqA~yJpY7wBsa#iEdrpz=crh7bEUDp#=AC=| zt9n#NIrj1Bu}Vt$NEXSHAkl(3O6&;B03i$#8yZeLy&9C1yg9h5yzs&_T_xZ6TFx<5 z9i5KThqYM|fqs5@I!yHNQMk z)`gIW2)4i3bx{(LA1y~$KF`{*lKsXaZE3po4!hQWv;b0!38nc7Qk}4lU6Ku<%uWpq zb-91fMD|AJ;ouy7vugm31)~eb*ounZfb=b2j7gk=vz>qjIH=~R?>}mzl&80lWml&W zCIygdnpHLyLvk+}w#XQ%M|9jn-_&=x@p2CSOLh_3pg5@k*7T=<55&0ZaH2rY{5_0g zQk=;QB&2Lz`ZFmCQxg(2DQju<*o!ui1;L;XHhCuZ%=}?3wyStv{?@#_am>`>zvZ=_ zU%%1s7`w5qFO^e%80dm~boE@yAnfxMckiC%+5i&rUk@>*8>B_+DFZ7^5CBo@Qp1O* z1N!ml;X3NKF{$e5i}rC(%Z?sDu4E`bhf|O<^GyNeHO3+`zHU<&U4(&LJ~AaW^)e$h zw~wP0TNWzzYU3**a|7$RAfiA|K;1WP-mP1=dh;ePmGYWV8Y~dX5YUaS~x*$R-RmKdVa{N;Tr9)-j`e(Gk;M-#pXx3=Z>ZQ zi0Y8GjLw{OMUbunF$|32oLqcDa}ohlwm~!8jqLw-h@K}_X!um929xrWu8wrzZ2hGpLjl}9nN7?d=Py&|!+k+hLE zL`9?sP1%KZ^D0AwXd_aJN=OnVX-6@XO^PPFLL;MMO3EnJdVV+Whxfzt?fLRL<~Yn4 z)%ySM`@Zh$I?wYuudL?cv>h9_5YZP7n6c2`U)Y8Np{#)Y256(L1osfv`zr+He#(X` z5&w=;i_(wVr7*7(|HT8x*P$*a6DOn+X36mn{H-`Z`r6v~EC7@UNT2kCuWL^r?J2wD z^=D!Drc$Qw_;C0@N{Yk1aXv&elP0=1gbZk}8ZX74qOLsaS4p7tnR$^R6{j^TC)u8C zIy=eFzPr9+=WW#EoxA}Lb#5EYe+zHQBnj6R3J zhBBY@2qcABA?(F{)!?EUt9lwu|C}EZplD)zf&f7(!|?Vo@ho}0vt|%ym~QJp{P7WF zsZCz`DNA&73&K9>wg1wNp@$f>NOTv&S8z zA`igkk5daxq-Ds~xk>l$-_PBF`)(tvKGJy4NvmUp)V|ez|2WD-+czRFEL)mbX~EiV z3�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 SIVXB6B&J3dhG*r={^#E~TGCAb diff --git a/aliecs_documentation/gui_manual.png b/aliecs_documentation/gui_manual.png deleted file mode 100644 index 57bac23e6ddd76a186836a0f5abb9015fdfb381b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23364 zcmd?Rbx>Ph-!DqrUrPmPpg4s#SaFKBP@tv3t++eE9fCvJQXnbT0KtM3FYa!|-5mlH zcb8y+n?BEb&wJ+1duHz3dG8-*&YA)CUVH7m`jtM3fD@)0^B^iNP6pR4t{5}k^}qA)%bO1};D29rd{ck$uPbAP z|L!VB1nt|FQcwduBME|wB}S{NvIOGBwXTLO6Ej2N{qsb2jhwkgOjlUvKFyg`S$Yk{(Yal=NrO28 zrRQYpclru0u4$9$wfRVlOP{#2XQpGmxqGxux0hS`xljI@2eee~SQ$6qftgPzDp66zAON;-)lOR6fV-H_JQu`WvXDnC?fPNJ2RhNdiMa#hsx{n zcM!nft{8nq!gd#cy?lQ4827}6c9F60v zUeB-kMY}~S4|7MS20PUgX`DABo?wJ6J~u*B@e|2@1kt z@2>0{3^==w0p#ygs^ z4SqKp-Wu$<0@yVtRd*IS9thh7*9@WJkFZ^S=uU#mC zC7&a=7wNo06(_9piz`}@f9f9}9%!B}aB%AMq8TK&8Om}rdLvft4we?FJ4!~*p3y-V z-whYPJUZX<-~HNv*0(FLPnu&Bup4)sPSy(|v{qJ9rkolctos^JP!XVZq5Gx3$)H+5 zt#ccz?Ies^mi$-GE4 z6I~gocWcjti#V5-&;WZb@#!)VMi>m{wje-!c`=K#A%FF<&tdoX`Bs}#SfG^7M}6tfud)T1fu^omkW0Jn%~-UPrbOTLz3oBz zY0U0fh#B=1>2Sz$6t?arAAAgqVP@Jp3v8|8rftk=EKl>01okKilRX<+mDRi%*XQ5* z1?z2+(iijo=x2u2@@h{jwmXYWxsN^MP-LT6Us-FchFafr#mEkLtP8mPp^ov@ahyR| z?H!iET=_2X4X#HTjQ#NN&MBJpaZF|{NpIKNuTJSwz#F&_%Pqt%x^YY-O=CuU_fMmF!eNKrb)*?pMRcC~Vu8*9zuxyk5*09u>{+)(7NMlU)-aj0{KcZk4QYYtL9_d-*&H|aizg<27WbbH zXU*?c%UBqs?w{*K<8!aPy z_#|bpjl)_xea5^I=beFjP&*^Os+d6aY}t4WxQdZb9waYSI9{5MuAM7kUmPA*E~GVB zwgtXSTYe%@En73o$0F7}^6*>F0?NK5s}{m&MbbPl2#Ij+^I9<#3k>w&)|Sq5oZJY8~D5+c*?2$sAFCbq`uw@o-lLoShp!7 z86fqO1X(gaU-IstN00T6Cc<(j#r!7AB(&kO#CUi;pKNTlf(U6~zdZKmv$C?T7kLA5 z7RV=Ei{v?c52sZ!rmU1hHb;_PgU;*PJXA=e_#|_C&1vUVr%YVhbgr zCP(H+?(n9|@@V-^9o?(A0x=)9wKS0!;ebp z8aqX!8!)4Y;DAVZ1dPOydp(@(Exp4e*FbkU{i#iJsw;@7(X#c7sM2d3bog@uL$GY8~c;D|8h> z+Y<#>L(K#^IL0XNV|PdKEbdMkKkF3@BC?SM-A&atv9Z|KPgOZ)4*#A8UEq}%FNNHz z*W+YJW18!Huwn#Eqf`))zqp)oiy1Erm!)4!q&W8W6U|ZykAWrcUfGW}m^xzf`@LI4 ze~5TePV}>__wQtiv$`GgBPE-yEhKadbw_`x!C^9WkTY0((~d79#)BxXPohWkX+0!p zgHSX$yqNsSKX+3>4yN||JCi?kAhEzo-}wi(K~#g)RUgPTo+K5lYd1$bv;$PsW28D) zk~o>4%~GCiSi2;<3@b&QuAFSL)DM^c;s-t^66Mz%wLDDjtr3nHUj@wz(|c`SCk#=2 zxEHgNJR1O`rRLC~Pooiq+Ui%vz?PEH)5j|V$)~+p{u9Sj^O8i7k%cdwS(*DJrc#cCadIYPURV3RvKN+0NXm3_T+`oRXTmo@`i8f%#l7W#JpxeIQ8~6 ztH%-7TdOSaNlhJ%+98gZaz=Z`2AOg7 z4vDc^_xW-@y{fdN3<2d{d+q;ePR|}ltnu9JiK-@u8Beb-8S7rp`1JG|@wcH5&)D~)5U1v2`O_!UmOHe3h|jQOI!fW4 zb)JIePksHZy@e~!{j?b2o0b)dnV^jDWG^5Wdr@w$?mMg?rr2>#V%=j7Yf|RFws#m) zfevsn=miWT0%PGYK+nK)L(w$lPU>W$&0()&ySr;iYC5cN!sKam9yjKN=`d}D;J&>@ zwtkW?Hv-1kv&G2?HjUa6h$aEbMd;8W;yuFJCMlQ&99Q=DHl`M<@b8w`t36=_WH#v@ zGK%ak99<0mxD89F-iWQxA}OnwR(5wZL2^VRU~6H7bjt%vG8W2`1{-pEAh%nXjh%>gi&ss;b<}zARq~Xqk)Zi97n+;bg;>vf;pU z>9>wQJ)$J5%4^^S)R_1;^$oI8V@I2Ha2Vy*WC<-mk$TC;d_u!s$!@gL==R+y`xC{L z^V@>j!U1xaI=;6%3yCs~=#6!y)T=qQd3*ahVY-Bs?Dc{5_6%cXGJwI=;j9-X3ifKQ z-&u9?eW0e_joZ9^r@mejcC2)XKVdvUHy@a`F!KPVK((LQGu3z=thf30S_}{Gl?W4v zcOV$`n%$+05D!mM#;e?GfYu)Y>!~0(N9BaV?l#Wqy4s)8SUWE47QS{nj@e1YS~&KO zZIRF$%^sa6EdClx8~GIQvc&!+L zTch)?yAv0pRpjb33bXs!(NBjd%4XHFksQ55Pk!B$74;t1VInKM;9QHkcQ45N=(MJ( z8*R4(FYT4yDTdTF`dpvRU3ynIlvNTOEzxPEl;?GJ3!@yE7{%Ybb8a*7QyvnU)z#~U zby<$BIn>!Y!ezeKm6oW5grQ%x^4MqZ9||F#zTLf8&8xlV-#ri>KeQb3=<*c)PPmU| z$yfrE?#?lHrPCC=`F1wzWX{4V_Mc4Kka6q<1qZ9B-mO;@iZ;pXI*|G5qW%X0#P~F! zyuhRZGw6BwgESK7VCy)BnI{rI>yv~0CcwkG(Y?CQGO0|jUy&H5&Ec9udp@^sk{6`D8bnJoC{k)3ni3okr|5I7rQhBmDri{0 zS@4upWo6&7Aqq16BTjR{{q(ZbI{mI6yLOyRhTL%v1f`_sys>ih^76RiA7BVmCs&}- zj@D?a%1bg?G7GT^@!Olp^tzAKD?-{_qF&a`)neo9Z{#HJ!WC8xvZwPQmRdxG0|L>G zBHL>SWP>h#%}gBp{@r-ES0*)K$945#%lA9_0WBpLn>5lL7~5@wc}-@(_l(CZgIl6f zeea-N1pzDjcINSpf=2r15Mp8<`4W&y>KaAJnc;=ejQ~vnfl|pmyw6QV)iUIie@hp; zKkOq_d|O+6R6Wk4|HAg~+nby1f9lZB_GJdbY3 zZt3eO15NEg-5tC?jz7B14Gj%3dvm?r-KnNPDnLzL-TKN(z31WA9^pv9TF<`&UDZ^4 z^zCpDy<33OZ=xA#n{Es^m?U>cce?R(@^7Z&X7Ay48|5$_{{|8jf zC-;mPae*I`K9qFH475D`3E-P#v~jy86U$gljv;7ewAH@(E&l4zpE$^b+97NO=f`|5 zDd9lnm<+a?L!pv$i!#1Lds9E>N}h+e;qLvom_^iDOYN+yUK|P$hf@s=XD6nsvPH6U zHrNW$9k*_2y$!7N-g7A#*^_U591#I;Ys-rAS9xBOT>xbwh07F{Z&Y$8zy=)SoCP?m zjPLVA#>Gt)7a!YB>}Z!;ji*WGP2^7l$lb-5nPV2T-qDjja)fq&!d4JpuwR!Q$lg2e zf}aPP!pP?DRM;QKPUV+p_*4yWH$dDw5eJr*6fnwGLmbH&jCH;bno=ytiIPUyYex)@ zCHW#CN0OR90^HOE)NH9*>+Q=<%`yL^C>`@c@*!R+)HjB9?jr#xOaEGTm-eFBfrYts zTi{yJCt)+1vw6(Bim$ipjT2uJ1UR@O@}E>c09CHfh4Z*Uv=4O@Up&EeGn)jN}w~v(%wJXnVDHc zOiw61Jia27^=14f|DmD}S07-SOWe&}rkF)*%%YuxcFY`o$xu*d4=rtyUKIEa5!{Lo zLacI^Y#U~==8L?mt&Z~9U5=PHVS6CGtFrPBu!_}s_Q7dzxdCB zys&tXgDz9?a-mOmkS){v{8iIgSYp1qX%0L@D=C#vlZ8yoarY3hATnNLW6vf~RWxLK zJ=m>#({a9EZ;7+rNGF$Fs_#)`j|(32Q_LxkDAdQHojmMX=SoPqnHQ8tJQG5)#swMD z_+C%rTApuH0AHl-oNLvyF_db*_1Ifta($elFV*dV!8qK+BXj!NTEu>}-iC|HjuLMU zvWrX>kuXG)s<@0%2ATBr_-PF)oLwNYL1QCwTmq+~MMoPEWX}Vz`Rb2z;9jer$)9-K zFS*Cj*$1vw&3~1l07l3nD!hrg-x{jJq(a<`~q-8HMYe^Vbbk zJ!IO4b)3ksZt_Dn{WdMfKH>Trv5H717qRR<&q}FYnFgYbXCa zGLsfKb$tOu3Ev}isnGwpGGQVS1VE{82-uwnee|hiZPOI6ga2xd>C|u4Tj0aPyS|sD zuawiYeR_1D9s}NIT6?hTZLsi1d8lv_L*l9vV?dXz3!U6%ja56}rWsmgzKEBjlp1mv zi?G~(w@yss6a@#l5VPbA70RVI20W-BJYodGOE06YcN3~4@{9MnN_TpfX(VDf7=bmA ztD&JGqe=al!|kI*u^14)`9RBRlf&wzBNnaP#iQz4B-YxgM9r6q7=U(V`Rg4;TLwS0&N+(EOS$ zLNMLvJ|B?ULm20hYsQL}lYapCu7E$N9`>ZE^64X71ZQ+V zrXEscrXeYhK&MAa>=+h#)n(mObQp0S{oMyBj565SgV^7KnJMkZ>>)?*mP?dAZg=Tm zn+PhON=s=nr)jbr30gbw0syD;R5^}s_;Psx72?>hdgz7L0GKcr>v=ooWP{*kYqf7l zjGnJ88v}4~e)bgEu8|M#D%>N!BvT^#1p=9+N9x3kuhk!^zye9?>@kr?ofUZxG+qLm zWVN($4?4Wq+e{@hM@y*CP9587^N(LsWt3Jm;#l|`zg(PF3rDG7*&2>srRpE%l-89%R1P_@XIRbfOOlBVsmp3DN0h(ExsF$Mhax;_au@81K+CMYivC7v{eS?R=r5n^W8S= z%>5n%TA2qU8^8E1|D{aoNEUBNOWmI;`A^0WZmm15PZ83cp9&RGSl{hhvL-vIX|+R3 z106^mv;NRwSdp3JyFKr5&6t4&y5tEySmx+09Yyz1ez^u$ z#&8<2p^h^C&7}_ZFQXS*`-$zuE&SW57lRTOUA3>BPy1QjWZSxO3#=%v`(} z@Up`hOPUR75tSf1aZ~ytC!c?x3J>q*j{eC=Nq#ukixiAb`FXA4fM~j*ap6mw*y2=T-uG8-P4Idn9PX74*k zP)WVutH@otmE5MgMe*i~YCV%ltUaNY0UZuwTJ}Xlzx&bx{EyM_08mCR*Bd;ew8uZF z5__4WX8;IhgO8y2!`Wq*ipO8vF2{22KLFR)TqTvr5xnS4`1+C1>JfUc^flHwRAa}gK} z)&Y)~O9E7+&}Y`8=Y*gWt!|1wUSqZMDjEPhq~_XLQ-K^%)8ITy^tankX5(hu!ozKd@^#tWJW09WKHV1!35v8&rlgSO#ba?~b?)yC> zCG*#fOOKesK`S%Ylu)qpcDRr zPXU7K6*ta04Sz)<%9oP~8H z<|x~Tb{*aKANF8yRFAr#C~^^Ehz0aKXOh@~;9Z9xb=Z9BEo^)XC!iO@It)Je6S<}Z z&j2cYsq3IN^2Q-w=aq>hq{Ig_vc10l&oC=#V~W7-A&p*V(_m%;H^4yu=6CV0UcXa$ zg#>ktK@B!H2Q3t=5PLLK{BrHw1iK8q5xs}^9wFv|AQ@hhrizFZFeFbiqS1XYB~J+q zdiC4z$o8W=_mkmt^M2gp%e5u`V*yK@-9Ht9l|+ecG~BSRe7PIWt{!!y`v9o?z%-S; z*pi8s_O0N`I%fo7$R}oB-*@nh%Tp%@!F(BK=SP!8!D{}lRK^0N)EN1ZhieA)f|)V) zV-sRggXFdNA9eeV_yc?nta$ew!+O<)2_hdAPu@9j)U?P6z1rg1hSWCxxVY4Bny!M& zM5PW>$iH~1cY74*YSHq={aAS`#91r0DoMa`p#C1$NNGw)Rc>w9B*^zRHoWdJQJJ|= zgadh0`YH9BSQtmc`h#B?#F}oy3rieAoW8$>w2o0>2g!Hve#-a@M!vvj1^7V)0-soj zPY8&Q&!4IL%+hZsxFUA0@>oI7R$iQzv04}A&zI^jOEkk5?<{=V3-2G>-`sMbH=H-! zxc_C!MXB@X!S24YIS>fM&i!JGNMa-7!S_CCL?lAbnNZk|*&kA$SkQxe9DE2bXld>I z{MZ4*%>gVS1Qxhe!Y58<1R5>K5fN2hFJfG5Ww$c{@Z^T7(38qIPtUMG8J;FcuvLIa zq%|*n)s0G%TB@E%xqYqXw`9tJceQDLv#&Oc>w@M*qe2AY|S~!Yr zZTOVa7Q+}MCB%Ep~>z2 zkr&$Er8W4FWOY|^AoHau?9zVh-3MF-{H3jt!xm%>=>FBdyrw--_~5gLic$r2Pk%s% zubaA=hl1Rt!ipw6n_`!nKh~{I>?-#;(4X%*Kq>YM8)oa+Tng!?eRq`VKmLj1Oq#o3 z|ETkjs4!bITT;4ds@l0IC8a1fR>UJ*M_<1Md!>Tr(5Z1zYHmI~wR@2qTJNARx72pEgnTP3viz~7|t!; zY%10bh(hdm9Hfbf9Zsg3clUM-0FfJVA#zT&Ty>oCna^Xq=ahbM@YA$A$iIbsmtrPf*SmVSCc{1tN`SMfVVnRu3M{P(p+q7q58W% z_eXq4+`bS1is}s!zOIt}@m-rwcb54qL zT{)ZpyquOXmoWWa!^3?Yi}MeqK<~WIIGEq+D1z43*eED)xwOGjVW*O4^y-qf#$@>< z&G|jN1IOThq4o|`-m~31A8eV%VF>@0{|U_Z<}2V|RlnnSwEq7B`29b+{O`sO{zFPfQUPdA6w#W@ir($K4t;^2RGxox*|RkGQzF_;_m*lhjYI&dqRb zq#_XrM09j?RFs*ubvHfV?_!SLqQ8Vy9T^!>RaH$)OvF(IXUu(};5Nj)isUg1`Ws69 z6P2x*$H~EQu7L|#MFikt@45wRT7)lmJGk?)^uiE8<#QkJ_^v7 zPa%{e5%$;>M@wD#_HHRAVTo`sy`5E)4#)d=pKo&$6Vb)RuClVMa+WX9^zG28Fa@|~qujdi z^GslC?fVzeUC8jgMgx54t)*}C=)A$sAWvu}#)&YmXmu3)n!s#}|Em!`E)e)c6Lq%z z>yPGW#4$b$X5~BTNTR(Oj_)DJp;vqmTYzyW-~&fV38wVy<5DTNY<`So6%|Tya*v*f zXjSrAWG1nXT8Ph)rcm*>1?%~iE|z{;8XA{Usm?3srvgB{mE_0a_nNG7Oh@nbGhPz` zfh67RV|mMcMI-=30O%JK=dyn|74J1N6_}16+?$&@+dgTSB}($~PK_yj(at<)G;vsE z;&Z!RfP?$~ZZh1t5NN;;7xNbHZrJ?%E1lgdeX~e2AEsHyKQ}$0(XG+f;GJ(RmNR!F ziCVJ26eB1ca8tac^<#8(bCA*=QpfC)8254}&(RgQ z(Q;Zm7DDPuT?~mo`ly^l-CxxB;g$0n$X2w8WGszP1Ek+tx(Gt! zd3_kO7W5Hc+RwjHPrbp^3%qBY zqs(fD)^n6N6ArxPBE~aF5Sb|q(4V0X+XNRJ3_pMdBd)Eqxfjw)1+OGyD?%VeO$F#?$a1#qH7qjH8l ztXwUDa$fcR!yUg~Mm3g^JwZQq?0BPd$a0sxvL2CWkgkJ4h$a~>h?Y5z_qB>(_8UDK zYZ}tlckUyT9caW)zuBT3JN@>ocC{>^R3GCH>)bf~2)& z(Uk%l1;ge=ri!kL$i3vLx%?)?~bHBEv~hzXSq8Kn^IdG3(hw z4N!EHdW@wDP6j^9hADu%YQ~Fm3S^=HukB~bEk>JCX2t?xTsMxhypoyVvMdS@-RY&Z zxgr+usga*6c)>=0b+*9h%1!SYd{F+a&XxM~%BcTW@N#x?G2w=wujhD69(g2rS-nZC z-!&ToIhdH#D=++&kL6-Gqp}s=Rd!1`|090=)}7dJ#^oZVAKwmIUP9v-4bu#t;fU1o zbUG%cDftX@<7>3FU-vz!nvV}j?p@$5dx(dZLig8yx7JNEQOVXIMSN0ei}k<>Uhp1g zPH5Dn?_0oWzDYYL-R*Mbh?kTzf(CxEgSGR3O{c^p_o$YAlHWe2p`qe?je|w zPwNhS=T|%Q5=MKq^G~a!y^=y}5FsuD(>HeRQ?-|E1Cfg*$Iqsq#pX=f4VOGX%?;S? zy|uK9dL)qVl}@Fr8B0Uq&QhpHC;}vbaa0*T8Z3o;V7!NSuEkqmC8uR5+C4%|UNJok zGT+kKFvkTzKNDxDt1NGx$={!BwiIaU$UttZZ*;x?NL4gxtus-h;bGVSAr=DaVve4N z4-0u1{U&ExGkwx3s2K~X{T(m9FIsk(D{6fG6@|eFQ|Z4qQhrgnPzxpK-O3W$jXLkZ z_6GHB{v7?~bN)8EXu`Pb+q94JLS(g8v0%FZ%^kd(B-#X#r^Bn+)H{0ii)yVJLW7#y~AKP{c>e{CXw=yM<(%?bIHoHH9PS=wik|uyB|@< zk+A4JFAu+AK2}EwP)-gQ8rmqcW)U~-!aIiW;KGVoy4{y7;rrr#YH>4>r7wj}&5BY! z4q`jecD2QfD23U!&5K_3qJOv(=AmY_h;+P=lYbQ$5mA^AiOTs`nxJ;u<5u`DEwjJL z+n<($rVi+bO>Q~H@&K~alfHQN!Q^&IH!NrS8aa_iMMQgX|~@n5maaf`WBj)Jt(YQUCU}AwnusklX`1CiF$;nca5&4 zQd(wP(K)#6ev)uSUc5s7fzBH<>Z*;i4lseD-PJ>?wTmwW^_O1?hCyQj`{9-yEUM>p zx^rRU7DSG`N=9SWB>o8k7bsZ@m`sM7)zDfmJ#@|sZ0{E{zWe5+-WX>Oom1$zo#T_C zrpB{fiV&n75gV&&nLfPngW|jq3;4KomL-8#%SOG&jqca4Y+ORAT4o|c_9sYn$6jlG zTu+q>klB8%1lrBhbqS$}=!|zXyTV=#IJw1s7tx;VbsT#$hLtdFM#MwsWEj(qG&oOiQs`W$BwzUY<|6F* z-2&o5!}<*jRuCd$_r_zNo!ix)9;eE*HUp-&ClA4N-5UkcJS4-tA7lTK029yFzb!<* z-Xv<+CU;n*@%5a25Ruh%TIlYoSJW|{Xv#29IPIsD@vHo@&CcHz{=JS@44|=bINS4q z>|)%5!o?F?M8vt|avD2Nl5a3PnZE59hR$`rDpmAicRtyT+CG~rIkJ7oZjkv( z<)%*Zf_mH-a09&@BCeEJvibYV{oqlK=e-bWK?pkf&|h$0P(>4sJcPfhabRmYF*MgS zx;`{Zr#1`UW_L(}*07#Ej&EA~J(J1$_O6Ilk^i!Pg0SB=Rc&+wu6tbhv!DzF%uY`q zhBZV{^#f$!pjldI2tfI%A z;rLq)j6SXKPm1IHJ!J5={7+8E|H30U=#J_(r=p_zdluw(=Sv2LkId|w6aD`(zPr_O z)N$bL|9Hg8Dx0Z#nD@Ym!ul_J@~&M8t%LQ zFG%~Jtv=;<6%bMdS-Y}_i~r#MPw0d%5Ao!LC1ut}&|T=CCeG#6{-OQgOD#+ZpO(x@ z)?OndSV8BKUp~)~ay`vdPCaMgEzlcM!vy{P`*X1DeQq5_K^8mgHJ8yCq*PTFMB+N@ z@}a=zwtk(hcfa>|qRJox=SdK>R#%DV6eTY3EZgW7e&`kdY#^SKjVh31jGWPU$efm6 zExtZLuBF`0f?}iWDq1(Ccm^ik9>&3ygS^@z*+o` zWSt<33?pPk3+|%Y!g6N4W(sCQ;|B{lbZs{wk$E6eI>)bG_@(cxUU~B9zC%yNR(6A3$W+_h{O{D+ND$h5gP- zKbcZ!Ps-miav}RpA`}yCCvuH*jmGjaURigt3USs$qqqh2{o5Zh8v0k{&9IrKfRaV3 z7k9p#K0!hKTn6v5$fi2B${$zCFCTTyd`X=oVh&{>IqnpTtETzrb6YH%|7xLJ15%Qa z%6#0IZTnpDv|*X$>PU|;G=HsTsYYwxk>votN6EC!O6yjVkXSk*&!U~4y(1IQPrg_0 zxTRSKf%qK1_qgGC3SS}H8h2jPg2TE#0LR2F{we)=nc^G)NkFeuuX}J~ov)ULktqDR zci1w&#X+dEVPf1U&&s<;yPgpH38MnvEjlQ2G{g3m?(AzZr)|^j8bvZmqw^=Es-W-A z6bX|kb&t^^p-MdUjSaY8pOFVb*IR^haB=>6Db9tzR;3y?XKrh2V_e-jzjr~h2VqHj zphtI%FBXSydl&u-JLh@x8#*3h7WIvQK~w$l98?~sA;v#fvmHBcnCq`Y@%ak>1fz7+WP36blY&yxE!-tXbj94q z;eg-Bd;`YQ6vdtVk&$+M0?Zxq5_S9~LounqL;46N^UC=TVG^BYJggDz6rnd}E>&5n z_ApZk!|NhHeULh*b3z3m^owqz@6tNT+Tx7YV8qxN|Ez8J3d^^h?yvH53-fR7iPr!S{#X` zg#9}0*TzP@6RuA)`&ookHMLm3S*>10c+{%EUBUZ@X}ElQ`KBI)Kh4Uv2^R$_ZW_N5 zyVceD%mIdCx23r8UCwVF@0pfscd;B4PG8?2AqxEd+MULKYRO3(_r0}VhLW%5` ze4hAC`m>eA8lpz7q&aPEeX~u|5i|o-;leWCln5gdb@{ud6)a30CY{ghW57BFd-Iv3 z)ao8WNH~(*{dD$Z0m?q?#2Ev=MOWm@FH^gdKQ7VNm~L8)#CjRoxytzu3pF&(q`>TK zxmJn)vP(BHMcCsD=iAIThS+<3$jz^P8KLjJ1v58l5E)lxaGA|>afd_fd?lTb-{QpH zKfR@Qa=&7=;HAuyKb%}G7c{>RtuX`PEzJcsgMc#ntXO`7;_hC#+{d59#m+S9E(I-I z5b7EQCX*kbIj$pg3Y!ZZ?Yc}ctn8E9#e6_`|Lr8-$@rF3P)Hc&x*d8areEQW)s&f@ zpLlO6sy@H%@%}eGkvjfD2Mgfq3U`O0)$QUYRYEO}MaxA+eC#fv5m;J(J_GEW!tPKw z`^n<9xQqkuU+%iX|EPDNrP?j&;u<{Y6Zo!wgi(_Ayi~_tK2yE0)P4%m7jSJ&)q2Yi zF1&UAtB^3MKrxeT`+Is-9DJl+*uVB1IJVox^C6wr*SX9S0Ii^_hs^EVdvt)M1vM4? zgpNagnE2;_3T=NaBkxk5r-11T<%!10qP?cKT0#F-(UC$BZ?xt_ZcG_EYhop^$w9ZS zJ}j6DaG%JY;dRa%hk-%V1a_h!oD(2$dn#7-m>VhS@SNG4vP3q}uvH4mSDuZMu+wOb zkwf&%Z%XPI3{*7_fXsJi&BxAVKVDU;KE4l(pKYF`vh!yvyXpJzqS9`rX7XoaQZIWO zXlx@G6;z~mcaKx&sxCy4Ei}2&xb;#aU09O|C~~WFne4Yr4M6ne$}O0rcZTm6&1ouu zPNm6r&^Q^ytV9@iS0_L->8oul4OHk0cskIa9^N&QefaAzs*!3WyaTVBdQgov+^$LS}1#KyTLZZ`+HfK{k zpcMf(Z!4?!*AMdX@Tlki{$Btq^Q<7wLsum7MB2*Aicg-Z754F8CFIE~+^+7+4cE3C z_gJbYL`{V4Zb*WN2=VK>$da0pYfO$WyZyFF5NheG`r_Qk%qH|QGwJKQI-_&}ETL3} zMPKDCR;4p#!22g@c5rc1G;!ldg>dV`JRxgwt53Ih9%O*&@g&28NXJ*W@D7P662`&K zwM$Bog|~D40kB9HNH?Mk*7epCWg_0Ym7vp;VezFshUXpXV7mP1GV#ixd{t8M(`}3vN{IF{hN)_ zF%SmeWQ=R+ag`jm^0%i5*QkCR1CgT6lf4mD>j`JRP5ND31-k2yCdGL@k_0+<_W}ky zjTp!RxqV3LFSU~!GYv9PFc20WxFs@-IxUaLrUEEFQU1e*X1x)u6k8&Pa9r(J(F0xV zMOhebzx@iG%+5=Y$yhrbtq_g@mytwt-48|AZq8kkdX`3V)pUbY%ib$)8lEWTvFVZw zw>5oFddE7Vrxp))RcwtCc+=FGaaecUKDVa;;!?c%Lrkf?W%2>Umo~n0)o3p|Pba=# zU;3{sUQ4H!NHs@qp^ZT}jQkxpKR(zhDwYi3bv9pE#8GIf2y%x&hxVzGXg|SW9a5{J zoESE=QLx{_aZmLm=faJU9}{-fA1Pz3=E_y2eKaV6@LWeC*IWgrHQFDVqnDSeyFs8a zD3rhI*Jws{uOw*9Sf%+|8R|nS^=e(|<0_WEzsS0kr_bYJUk-=PLQj7G_j=3U0G9m^ zsHEOtyNuAk1X&8hDiUE_xgp8R;Nx2$(Chxq;KzUmgw*^SJS&lnW#80ekiOqx&noB6 z@3njKAtmW;BtV3M$Iwx4_BP(*piJvmBUoe-tSfWcB?b(&+K>SS95*p~M;OgXDS?H< zytO}z0;bh%d0lqCnfT4l!UFH6x-2D2K$+B(*>k-5Qv~U1T^3goUxvYd&3q=jWVwL) zV4hEbE^hB!yH2OeqDEK^qBYMVRi6F$Zrm$%=ZnOLpr!N2OL!MRF#Oq*Oa)2*o>!mV zPf#F$FTR!vMc*y8wBCF;$Dp`}>8$8poyoF(qIrnD+&-#d@#2crOJVUCG)pH8XdUc1 zQiIwTsPPaSOJItXS^UW7*=5>zT(V>8vvKVF5QOm!YHM#P5n3l zn}p0U0zn(kOyezW5Sjh2w%wlr1d@!Wi*aE9`nI#2flv{qx8o?Y@Hm1^P=?F%-|X#` z<6Y4Mb2ZlfnlauE&j1zY*Uy@GCf7e?>gXWZ!mKwGKy`fi)U@kL38fpsMpGmC`O}>& z=dR-Uc{wMgBcXbX2JZ>PyONd|_Q53_bx>nJAT@Mii%1xY1Ldg;Rj&X?)R@U-%XQjg z*7}N4CSQl17oT$aS^{+e!@*j-+BlG#gEXi?p8NIN^)#TxpizRZd3p9o>Dq+|VEF6z z<1iPE1SHZ{u3dHvi+u@t_GZUpksx_j(EzqFXX{;A8)9!E!Y(3M_y|C#>)drc`wTo^ zkNMRSXenQo4x5ePMF$i7sVG~x+0+1TIj_9L96hoC+p2OD+{0~stHmCkk&v1Pm8E{E z`d{<=l6QLs@)a1Jd)Dj^Qar6;8+PHD5kHdb(eRB=7B6kFG*m~0J)qDDkMA{%y`>S3 zeL#`YQZ@}6ABtsn-vSKi2A#eyz?>GJ*<_}JrpS4COHqYDlCA2$00we_-lX3JmzC0p zKOj|^Owu$815dkC$Nyi&oL5v+Tert82RXt44_Ig_M-Ze*7p1F&-g{3Jq&MkJnzV%8 z2_2&J8mb`_g%ElXLN7reAOu2*5PH6N&o{<>zE5{P?zQ$BYwbPv9&7#QZ%&QHh5T!G zg|%E))d1ETM^8Agav34S3iqEiZ;iNlEh{I}m?u0plh?i$sSEZ5f0d<`wcFAj&S?{I zd%tIYad<^h6_kZ|9xJgZGlT671J89ZZzlsoP^9jAT03G(#;M*;x>$c|@ulmdmxzuI zz1IMAZE2$Gl=C6%l^B-5`W-V%5$+hCZp*DTcD%t1cw##zKgMb-9qX=sqm6Et;*@n4 zWUvHI*?C)`X>SM1Jdh0qgJDV|f70g#*ZsN<@I*g5wL#DBE9+0SZ}&%PX_#sO$a&8G z3-_*E$v33G6oQtrB*%c?(YpvVK*X&WocPw1UyyurIblpnm{sbFE?}{c7LgNIp;zq0 zzNRuc{MyTC6sa9|oPYB!E6DoWTNXq${_F;_#|5~9E~DYOw{ekru^fHlF} z-}TL%wHo>-EIL{0_jeNZ#d4yeq9US>e$IYs$ebDv@>gtq!8vOUMVhxhO?LbY zc*iH2#i<>kvL%BVcKj>;Ig`*84LeJt5}Vykmr>VApBXf#hq`7X_ac}b4xv6-uB#Q^TLf9o>YK&CQSNA zx7OrAA*~-N0!v6vhoE_MrR{S$B#)%62<a$FgR-R!d{#LGU+aRxDW1a~Jrjh&osZ<`oYuw9sH z4FNyHC1Qhne<0ur7EhxeUb*6TL)^ttRVE={d-?Q11~P4PF&19A+te254_Gq{XkJk< z9L*_BY@c@-DvDmubWBX{B?Wb98kdg;Mk+zj+RRNQW9btuY=exmdFiUvfw|VqQD3zG zQR5R8wJI(>Tz(y=viayP7t6yeP7dCXmyeEo!oK&F3`0f2nFNvpr8B{LVswBt^EoSi z9fx9eFZ&?j36I0uFJxTjQMQL5Vj-$=;>koGR&)+ZW!`x9b8=)ShmU{Lvz2CCs0}N* z?Hj!I^W=|oWe{vQvG)8mCSE>PNbp%AI6#^o(s$X@4A(UT;6(PeOubRtit>b+PKTZz zP5$**8^Mc9v7p7aTWcC8mB~3i=`_ZvY4E_ndLx3_%Eq3pRaR-CQI?hxfJ7Vr&J!fO zmhW~~JdK@&F~lpT<$W4Lt%d(88#{kW>)t8=pmD<15DMQDWGMeom7=Y*tz*nR!oiVK z`LA2Oz}=5k^Zmd!uSAC{-R0&`%o}+}9GojWa(@JCLl!I0X9zC|iK~gzZS(3dAZi9x zK*Pq<51sJQH+UklbR{b*S18_e6JNtP1#OUg3c^Y1?L9c}MowVFrdJ3$4o2(JeSFmh zh)A)aK;G!1+uk*LY)ZfZR?fkILq;Fygme`U<#mz$c|pfz=~UU@vG&&DiSoVVgWDh% zKPy&}S`lrYfwnYh+isc`{RaOau2p(H+y$f4b?(PeLG}r( zKe2JqY4v$BxA*gWAR)ZZEy2J!yTAuZoW%0RZh>^ys8+n>jqd$!;3Bv`}=A1}ah zKuhF;9omhbP$h(5fJI|fDkIg6<9VA#iv)LH=B@mKNzGCf?PKRn#meUtPQ>BI7#9HJ z;{koIMd$a&P4+yG6k!0&t@H-G1h)5zcDOV7@*vHqV?^kv;Qf~F)*5gE%=0*a`}yEy zPYqh>F4+YWaf_Q$;z6(F=M1r7b})hagEk;D_=VElD)f`Drz=e#n+)jn-KTt2CC^p1 zmmVjZTr@{#I}>O*;@^vJ6<^gd;Epf%LNX?$v#e#G&1CB!JB#m#sCGK9PhCnU94Ya=7i20zFA$edh1%g|s zpTovcJtt~b0a#vgxiFvHs&>;Cbm&f^ofrP%rM~9?NDGq90b6*9!WWc>gnOvE6bF`z z!GN_z&+-NXuQehax5C_UcfWVG;=%41MJneRM0}qXa=?Yu_<7=Sy%wmXRN;UwRlJ_| zS3D8K2@|mn5iVfWr&ksXgyIjnLUz6c_+K*%K7@nc8XZ0GMg9U^)BoN*dMfZ3wnz1# zI_4lQW~-|n{WhEf5j_F!OY#(S?yK_mv`tP;17A}f(E~%<-Qtn@r*OrrQfxxIpl&lO zp{52{jOq&p2PWFY-=6ceXj}b!(#dH3O7EBSPHBPP=cDc0Ob`1)diBS>x)Sy_@(5(n za#J!HsPgn5j;3BHt^un#*YvoI;HfTT>*odiB2v}(=nNt#K>`dfjvr<;c)JhPm#LmT zgwnpVl-CBd+G@kEW;2vS`u0p_@&ya;iJ@VSU#)gkg?S#R74)>;e}06Fmh=W$u5dEx zHyu&I_0)<o8Aa~`q75%~Obut3da4F56@P_1ygv({ zKRjPia&y^QF<5tfc_vct7InN)y35>j#K(N-}Q{x8YOKNeUEA3L%VOIKLJ#w9nwDE9b@ZfMf#@wy|M$HhDeM&NQGqe zfDBG=AY?g_q4Js?TAS$DDAWde;txC+#ZO!I3v3_tbUfeUp``W(x{$X!gfy3?W`uZT zs&W!Ev2e#>+y{45KAlI@+GIrn2WQ-YbNlk#%8D;!MBUb4{fmm4U>l_$5)uUp8s zt@MV|Y!nXXs9!Esp*srS2Se=7_T7t$%-Q118g_=aT#dD-_NwItNrAX|hH4>adOQY2 zv^d|wx>DP7`792FZh?1L{Ev=RS7~P7E6QC;Bz48L@~z_^e|T@U~qZ&>?|E~YRq^ZZErrC zzki#F>b7n;!{G30q74>8GFC$!YzX35O$KNF96yQH|8lK|%9r}go;le|K}~S5-qg2~ zL4XZJLvJB6nXIL5 z>mpU>hp7?-w!4E&U4^N&wh;S(wdo;M4wBZh8D>)o&U;C4_I>V*&P%y=gS{~#?!>@0 z6eFlb6RFSSY9<^bPSNapCH@MjZptw#n({xo|BN_L&0PP5 zm77#o&U^1EE2pTt3R22+F~vQQ!eSxdgB|Id^ahpU2YE#45P4Rn$%|s{1iq}-`0+*s z?1>Y3`L3O;ja5^xeQ<=0=@hin;alm0oM}%T6&p2|)xxnpZ)GaQ5$6QLY!T#>8n>Zj z^Is3^wn%5^h-Ut#N1Lc-_aE)7CkTEUtMaaIohRzM+902nU*oR}$Mg3qrD7T*%im+O z%dT36%Xrf>Lh5Tmx{awj*h%c z#3LO5R;KutTRGv^63G_R@UT*o$39Mb^yX%}5dJ_VAGc42DtQIOkc)PfjYFew{+Ssj zzWVKUf;UDFvhX91mJ12lp{N4+`&4Wiv%Wj@HR^!QE!r8;PKLqy6Nl20xUC;}0*|3& z$DY}7$NX%*sC%*Os&ToVmLk#wA$@t$Cjt1iPdE6}=UQ_h`pMFpM+?kRwj7Y5?>*9G zgZKtxR8DkGgFeOmB&jw_<=I%xS`w55bdM!=UIZ1tS8uQkHNU^Z_P^ib3(MsTb zp!d;c_8en5qL*yI;>U+9%bhfwrEI-qSH%RT@i9U4@y=rolatf8Cz>T{x)n|ImyWd# znb=j2>=$LL%$@Ynlkt_!kD1ibwVhwy=v-mIafj?KODX|-7n8EEcBnqIx5n8t`TcgV zs|xCJQ4IJ)?(rqjRd$`A-`aGi@olb&+(-Vx)R_2(?4Be&rmc`&=D$76K$se1zs!5y z?3Sn2lg$bohT)o-+DAm6e>kR~&tM49HdoLx|MjzGqPps__YMJd1+i(?@u=5cFILSw zf2M27Y$q$10}GsYBV$?~Qy2yE%ja%Ozepi5zIInJxpMBiRi>b3FogZb+rzqxPE!lc z%sT$fOb@zvgJ;M<+U0_;N97etqv;Hk&C}EKi-8Iu`MqJyV+kn_+!1G3d#|&MN344P zP+P0(jD#;L9yF!&)QmW@iu*~|JIqVLe-jr1#Rd6Ze68C=QqdYYkJL_kU(U%7@n(fu zkPeFQ%BAg#+93fO=Y1#g1!^pN-+p~+8S$XpC}OoUFk!de_WY}t1GeiYSM)tmM zvYZ$O{-?j&56TEj0PzpOcItmqHm=LOW6w74wg31>PxK0p@#H0cH^Hqs{yD`3++MuwYrW6@`e75c4aMB@5?iR`j z@c7myZ7QSz3QePgLi6cLV0Vm-wcldQ+Jn#BTpJc@C}H#v>d`kwQ#Skd?xlTlVNa>) z@H-nY4Mecx1zJ{Ab0QsHWD$1Z)+UMzyX@Nh15&Xcu%zNiSs>Y-qnzm0dBGiLrr+9l zC+do0f6}0XLWD?YNV%ObKk?_@B+fE8b)$Nw-N!T_;ah)q?ckm&2%zOs$} z@P^IC*90-^7Ma=)H-6VEIae1E^=!dV;Fntmn1bI$XZ+@zu~n2KpAO!+pu%yEnv>Ft zVwgYb|1H@PIu}v(8xPvQL!$@;<_rHOoJdKTnWZ{B5xNiGQRt<;#8OHvn}GIzn+m7# zO=i`?1K~@Q0#VDRNfds7lCU$eX~38Mo+3NEeA+)aIDtP@D;}SnHGPptZAt-oWjH-N zJnHM~X=rF7D0t=-N671*b)PxLoJ+mMjnB1u9%Dt*)5n|Id4y(C6C+APOyed)&V5{;HQ ziMCcle4KBmMXN}-rfAk|Ufo!09P?7!@sOTgHp%e^dJyjGa`Eq!m$$2LeQ~k#zvu}c z#(Ax!9NJ4lPkZNS7Kx=leR}!?3F$kVK9N|K0xvJGOaeOMNs7;O3vCZLGJKhlf*T8OjCgM#~Qmw}%r&8n-t${(gRb zzP_p&8v0I{NG(M8!u$d6QIL?1=)My9!_E>ybmP0byQik6cE$@B@X(TF|CWCJiT$_I zhv3@p;xArf0oBVM+sd}H0M}Y*p3q?;Eky-Lr2*f7L`2oj`>$Mv@861n^fmgQ$AR2W zoE4IPE`68(l!W|Gjui?62IFrML$$^HC(}avZV(U`kp8Lcdn7c7$V#nn0SgBv5l7lr zpfNke#}{{+r(H7??*~eFbC0`_1nTA*BlF~ZG=#x&!*Zgsva+I#$+hogj-4OwbXBdr z5WTXP)zz4TG5KQ$f85$*qb@PrD%Ip_2~TnxW=pjjVU|U8Rn0EZ-Q)~qk&S2H$O(%B z^bIZb50}=qwTfhhB525Rjv7LgB_HsBc4hqlx^`4DYRa|qb4*2!oK%xPNAlitc$!aJ zWUacyxlv*hUrO(BuK7!%gHGA`pL;|GM+IkM;m_JQ(7OO`tizQ>y|p(FeMG3rIRk^e z?xd%CBM~wmpPXL`$gDd5?Kub(_;=L55!;6`BhNG(6+pC=(b`1I8dqTNECUVg?Z#{) zc$~=U3Js?#a{}C$n~4RQ^L1$o`Vz+sJtxseF@mifT|VY`p32#WSvKx)o}aSeZ~FQ@ zxEypocQwbG*0nC)Jx4`H`CyHi~MNvOLDzL_;qnAnKltjF@(VC>rki#Bs!+@LI z{kRhXgP|{V9`<{@r4sp%cSL)j?UxL`49{-|pGd@2vwi9;<*l;`$JbVR8P7zX_ z6;_Q$D5y<(?fK?Y>m3}gf%q9F$dfYkqsW+DBe*6c%^;7Yez>qA<=L~m3J$}^gZijqaL=&OAEWf~H~4W~}A;@zA~^CCf@KC?&Y(7W_`M?pp=Cepd) zpG~FtYL0UJZaHscUf2xq$+U*zkIufBC|=S#R4xAWVb@B^DP{9Mt~4>zQaHqVTW4T= zc<}dhk!OW0dUX=RpIPEw;`6Eq zN>g=KNAFJ%Vo^@>qb$M=UWNl_w@eWipMR6EF9%dNHj6Lxrd3s->|}U z0^{yfEm4ViaInY4R@h+~#vM3#NxT=;eWgbcNNn zM}qVrPmp&m1y0Pirf!IaV37;u6Fj*{IOKciX3B5$K?_yf{DPR3@P#;-o7RM9M)sR; zhf?PT!ax%Is(n{JRM=%%JaOxp1kI}(j9OK8@{>21km$QDn=Z`0Zv(cItLhl3HHTNJ z#GY>q=?HL!r#o~=WxB!XSF^Zvj4EkuSIAvHj{>zBVI}w=!_H(i&^;E5Zu+=EhaiT= zg=K+6l|PKK_sw}f<&C_|#Hs4XYdR?}9RYol)aeIEWz}VzW^6_Au;;?bV%$)w(yW*) zMAt3b>-<#9s%W=@&t7e?&h`n|xw8I(;$>wSOVv_mtcRG*%wFD zf-wsZr<;9KESy;7YS+vO>s0B*3PL!Qio`==`}J6+}c&;c{LcI@$I@+*Rz8wlA@dQ=jqn4t-VX}+7#P> znv0Xlx9K}oA_p$YFPXW)Pmx;Oq7xJAT~3X_JM#@Sd3khRR~dh83R*7vp#vYj`ja4> z(fY<-c)Q)?Fk*juBYh1E`wMwp#x}G>5p`$F9(QwbubrG322zU;dY1PlnVCjNrZ4s) zzOyje-Z-)x)?IjKz}yD{QGEWHsBGEy9UW4+e^>Ae)9U7-H=}NqJ`gs?cloPFC2*_5 zn~-x(JhSv1-9*0Pqfe>1v79!-_I_ub;UnlJ}r~j+k3tCpmUFF!p*%g&P!Sd z7+TvD$&WO0JBz9rO99RkZJJ()MYir(H<%MX;;TsBTSz{$0JGbYSWpcP_)l;dkxxh6 zQWjEghh0g7M~npT^Yu}RbNd3<$>xMkBIz|S9{R8Q2Vr}a2(imuRkt*VVqeK;d0^dg zo05$a@mY_fm4kEDA7~@s zsZC-HNO{GS6^RpOMIznc^w#vFTJfy0us&V;-kL&`95u`vs7Fz>OQ*9 z_l={Hgan>7Clh-JERji=U2N2NySa~-FLvBee6AkbcDMCrodfxnWtLwU1|xaHG|MT; zW40Vx%g6-k5S^bVbaYk3I^Tjc4qk~4B zP`{7@j4Erkemh8XWTe6bj@GgpK5*p#f_9jvm~&DfT5+1nTQ@PNHo3yChncj7b#lJ1 zU^P0V3#oJ(Szactx9cEV3|S`AbgwLke@_$XW{1U|K>!qh8Lq2Q+dfljua^NPDm(6Eaah@7-A=IBV9qv?*KBX1ky|ge2+~egk$^}w+!J6#X?u6W zj%~LN`ODkk50uVEaxKw(gE8S#O9@PkH+ER9vHeoR8_ffSYXwnlxG;(I!i7!+YVJI3 z5xRHjXInA433VzdKkKeM3aHQLNJ;r09zMLSzSpFpNa279$1jlIe&EO@E7DE6X1WJ@nX_Nh&=`-OEOjG{=3jN>Vk9skMrP( zqj9nSB34QdSL59&{^b(+*5`$2m_y=Pg34-b5clqN<>})c>Jy}2lxPEXB+SEE*&7d5 zSGKyq+3(j_B$-tz&mkD0-p=co1+K8FbNsyS#BgwgvhbG6ywq4d*eEKjg0aDJM5SwT z{H8Faz+Vxo-V z*&dk`zV!8Ya#s|08FucM%-gk0c^2XA7{dt|e-2FG$hWM;%)LuRfANh+$4&|!btF0} zgzN9f+5^+%)n@^LMDF=wDAEs6Zpq*tU*M#-F1OZR2^S$yT($!*^O76`RESZ4s{;*= z968s4X{;FSyvl-QTb!c+r=;AFPWOPyfWQE3Yi2GG{eT8Xz8=1MsYOg*Nk{m}&YFC4 z=3+l*2tTW5uX@at33R{EoX`_(t8MhUA@<=LgCKknIPM7$O4T2&bvG~obay=>b_iuN({4HivxH1=$k`vUmT35|y$#pnLV)E%j zlByhjh##DDe51#@)xV4JKMjQ#P|YRr*w!`|pFG$-hI+pUfj~U?zFAF`m3D>RK^wMF z?xS(QHx{xeJB|K^(`gUmUdN6uo-6{AaN_4WI&LzaeyIf)o*1(gt9lg$7mTV~4Ri6_`TY0)q^bjT%ZlY6%yajvz$@IY3z4z)EMesgHLpn-5 zpJ42wqX;a91e^hD9fcx%s^qqa1EKCa)U5H^^ZJkP$9eN_aVou3;Jm;lDL*kww})E2 z*(MZ1Y6q5^(6y)AR|9ca_d*RK89Pq&xDjLR9R-6tQJ&2>SyAEpFd3q z6wP`QA~rN{XZyvg_~Y^v{aR<4?fr~fTuqFmFF3EYr^5Bmks2YhwM}?q-$d-S)ofPB z;tQ84jUcKZG%jI{^2grClVV>}Lz_46fa7vQdbwtsKL#{ruaSq*9Yn zSSRzH6#%@TuqX8Q^)Uzt2=Md6gSzb?YX=7@$;tOC9q2cg6(pd%akCiu%Yzc@*1xR- z(g$X%(7~>*oIi{?gd`*+1Oyk>#=NexdnEq`d3|X9`SX?Er{5*bX}*?+xmWK4&`JIU zfvqvRuz0e{Q{h>#zIf5Vi!st}R`i@nIfeUfe=UBdVV!tma~mi%E_@rp1Z9>HG}uIdxI7B!H}Q2 z0ASoA-cpWNVidOk6(mkJR1F&%OZH3?y8lGF^_Em^U`)M})q2)Kbf5Ha)a7G#XchCJ zVnzxfJmzX?V>-1sS^Io;5d9MKDiLtIg&havM}Z0r=@n=ErjPVBj*JXtBv9dPVW_)vG0yKv-^m@(-Px??;lz zS7(4_mr(a$vmx!=1{FJ7XK{xoH6M*m=7?EZY#6+M1{meuWsJlnMqag%B(dQlkaB}Iu2!hUnmCpx+klT>K4M4491ZlnLTXW1)>4jPQ5D8(Qj zrr>m&+y+m5TreNkDz(=uB&4M_1#{EwqOnq665}iz8Qi|#U!qe8>JVD4>aZ6o^2Mfl z+l6@kRBMb)G5He&nsvV_38l!5HlocDqN(dJ30ixirVDo}zpLrvmJb6-8$0!cr=2ixBZf7Rey1Ex@J;6&$ z=+7sSk*>NIM3N}L=&5Fq=-0R4t-Y@CTkW#sUlJaCo)b3#;VK!SL@U2*aRMl zkoUZ$BEO3KJ~48XEM(3O=Z+n&fY#wrUgdDB&eFL ztb8%EG^&ed$Y($Z}ezKPPFpGFA3YB@bHMRaNPM7Ml^c9Z$}z7g14faB1ADj?rKs z{Up}VGi8azjfk04en9FI+p~~`9FWS{2lEhCQGgX|Zji-)ro6WrQ(?*nMM!LTvIqv4 z+e8H##Co$w-1RLhDqAmbT1$s3wMaydr{;5M`cQM6pgVJb^KV>gP@|g3r?L{1T4?v4 zT4x&CV=xFPL89X`Rta3HUDZ&tLdoppKm3WWg4aBpc{smo>n>7vu;D0}^W55z(TJ0I zOjV!_PaKySSrclj$WV;_+1MK6rBvx+v*h*|)*eH^F7QOUE{UX+#%MiRDb}zJ*Y4?M`!k|D^f_GIl<>Cl zyW-$dLz63raz;D=gmRhKvEUQk>k~ol;eCK5SXQyvycl?cW)gQSx zNYNgssHk_5-j~>$D+i>-=FC*-k~OPpvE%EM^%9~Ar{576+)Q0!O4R8rvg=mp^9Eq> zP80v9MH?prL+}pv$qx+yqP35ZPKWdhKoCCd~)05hZvT6QG@G zyQ)ci$FV!Huip4g#==6t>({TTsViW-3N_*o&hoU@e(}1`LeNGV&p&%;?2KAM(>@pt zzvtF)vzL?tpX|WN%WCD6CPOaIW4icVvE_Y4oohR44jc=MOe7%(S`$0OQ#^pK{))F? zpM=ZMc#4R9O00ZohtK*7+{SY=v~ayV7HGpQx-zuSz71x~*~_}T_ru}6Hih)TFc z#_cQL+bt!7C>bx4#u_>%DiN1`wi+M&nq;WvR1fE+2uJjflv4%UE2f`#*<+B(C&2i0 zJhMt5q!wb3A{Ma<##?$$7>phZ@r&G0O&LzQPl*p5xKoP_X}IPBeSzBylrC>D3ik%v zQ@Q-J&}D&Y3_6l+E+{Yd4^K?q#^Z%cTuk>jUL#2a4&ro_`xHY z<}g|gPZiBj<#*wO@!U)ZpDkIqguP+?tUu3ttk?N>!9HKvIp~)Mw9qctXcmL*1 zjNeFiGq0u`&@hw@~X5-XINul=1TYu6PBuizU3W55&hm|2HW(8!!>J z8}E?OmK#6pgF^Z9 z0+w6zuJ0AWPMkeWB4NOCLCiF`M5c&9+z1D!`^evg@IfC{je-TwFWXvM8G)lG^MPa9 zz2@;!2z*w^Ohc_oX*wkJi&a?~!+WGrqtv&;r9f5Dsm11gZ7CD^75spuvtJ?7fVqGjQJ`e9V)h9lH;Tq-QlWqL?^0MZ2k^_Np>fFA zq*Tu=0V~9#Df;F`aUE@j0OPumGRXRlk|vt(zO?x{$dBB$huD>cgz^)(K0dNzF{#v| zx5Dq*gKBZ`W0|HV32f`(UgF`yM@{6(J8gq@5)-b?*!DR=n)?M~kD4Pft^}`B`b%~@ zqO>`AaJx1N(pJ;s`^#_ll~*K|O)*`@VO#U1%J}A4Fj#t+01dc$$?-85T=M{>!)w=4 z>z(x^OJ(=m+4BoqoGNVQkHc(+IGC;@x1}?0j+YFZDpb5ER!BRIs|wtjDZ#=ZPM0Ga z7k)T8e2s*JHr^@j7Hr=8(4_L&d`StCS5ckJPS+|q0mxeVVX0MZr&fl=6!Wf%2Z{d>Ug*)kp zFIuuQ$q$QK1LhAe{}INzF$JnaIL`1`L62rSTw`%X8fBJ))M9g@W~qD*xCp`9dV5|$ zXXRAd4o_n`z5IK$|(LU*#kbCaY1rxKnxj6>5b+kO{M_pfAI~jnLN)6UogaQS3 z%U){}<<-IgRNpQZgjzMYmbYAEBuYyyyJ%iG$Br5ZS@EkN6w_u|Gd=2+C%+xAx&}01 zE&%qY(3317=Yt}Fo4c>P&G#Wa-dd?xC96gR_ggm?7`NK+dIfa@b;tw8m*7dmN$>F# z49pPA9gj-;+Z+6-)WwDBbqUOjBo~{8GoAOv@&?Pa%F<7p4bp4#l` ztL5?=_)T+6YyAa?wu}{y=bxe?h*@qn=i8P@r#UOr<|9_$a0+g%f4l0|u5%1fwCCeY zs;x;0cAi`y)x@7x3A5z4;R1 zmE5xlzg#>vvB#dIi+-<}GSaw_wNRALKZiA4zj>$FC8q!Q@?=TuaatSYFshUM1(JTd z@KU{r=)CiR49ifF<)%)D5;Xx7ZxFxWlJrqgN&QELl8N48*xw_8w1pc{aU>pF5X?-v zA+2OBQ!t*V+|5u$BTvFaPj_)CSg4`6b4OgtF5?HQkCcQC{BsD*NJw&6MLWq<62dgJ zwy+&)I6YQ&8vl4%H@Venv+>Zs1#?XH6fzq_@TI_Sz8wX6G9^=2 zMfsq%v5qo#mb#?ocI)@SzcA1c_9Y3L{k*dkfi9qYSG?0kanAVB-T(A5j^!-s1(KoW zF%SJ$)oRFQ1px9Afnp8E)$7UPJXX{ul708Cq)9<)eb1X?BMF!lgoy*CC8R-d{Qi&S zTU%45rQ$;=qBK-l*b#ny3BkcWVPTuMe4XXKbL%Ur6~(4(@M~nGqs6HB_*?+n8y7fy z{0ew6zlVkD64k-p@JSH!;W?M#B9Wn>%wi?Y0RZju!CU}(1=4@Z_e0V6OUsOAib&wS z!$JC>`^qgl z=E*P@pRuv9zYev}g?oER@$pxCdn6AnC;|4H0E&fJ>G<6MStFimS5A5~&sIH1`0KanmHLt2C9TFeR1kWhUaT`f8}{~Yzpr;Wt|iG zmz|Mi>z-E$@Nu=VX3Mr+I|8zy6qvgIsp~5)m-OCrY3sMn6~N&_68&S$tD&*m-oCc9 zbV}|VT0B-^KU0`r z01oIH{+lt|4FIO>{s13vB{TI=gB7;ev4>@N}^US0c#sr)18$=~V5R!DvP^;5Q54A~tpINu}d9Jc+1 z`als44GbVZ|AktIZLtio8?`K~{4o>_p;>Y;p2m6gYWAu_Uuq6tmDS)b9j|f}6cXzh zdgpx!d0U-OYl#mM6y}~R)fUPv=iU{KyO4Sn3=BJJA8a-yOaDvNDD}DN_O=BT8(Yap z>3)eg`SC5#^Pr`bm8H$iK11Hnh6eMmUr7lGQGANA@-uA@M!u3CByldvt5ouq;D373 z#`=olXZM(IQQ;74e_kfz10Mtuoor{l@u#Fw%OX=RuS&lI6FK|toUg|IyU$2^s~p6^ z@)MW8ZoXWj_Sb<+NdAp<3+o$4U){3at+shBX&wKc{)&} zI#I*u&PE8APQY_Ti139x9SXyMxnJ}BU2!5fB#X?Fp(&^Tc=ys$2$!RTnTPP@!%wl`QXiKT#Jy@O1m_RY(FkE>MVD^0*jbw`OK|KCeX0(aIKT+Db zQp8}Wu8WBNl3{oW5=_!NNS-funi!r(x%AgDF)Z0)GnUWF;qQ{+U!SpBnIZ_C@O)2nZ8M3e94w?$ zN26240Kf9Fs*nx=P*-{zuY&nvJ}H^+h3b#;*&z%&HMJF~mb`XfJb$%^qu6z}nsf>b z%n>tDEK`Sj6g7pkg+kqWS&q1{^SgAZ$5YcvwYV5hM6TlI#&|W{hUsG0k!SL(sPjv! zv-|F-WnR`$?d0VKNZxMEBp6M2Jkf1;=PLjCM1K^hp`*RnSU&Dk*-1i;o8f_ceyDsgd4_t5x5s%rz#$8b5{&1`n z1j5Hf5zRmvkkzaz3sLNaKN6XrvR|i#sD6O($$Zk_-(1~}&3iqxPL(|N41kd6+1W?t z=aY4qW~P4&g?M6EH|`&ATixksJOMTnnu>GQu0$t2OP?hq-GiW?lP< zN8Q~q%oj}j0RXQ3`C`bfa$6|u8Mu#B9O@^Vv0TbjgIt z(G~Blh?V3VgDQLl8V^JQY#Xlmn5V_Lh-y^>BvX3#8USyf1vaiGuTyZLc; zKhVI+UzdfSf@;NTYsV#no;E1Sx6+(-_tI&deI?Xgh}V}#>7B`aQIoKa0 z+)cTyBl>M`)P&}G)f1%e^6?`rB~JIQgbL*t!8LLIAo=~`^}jn2lAr4Z<4tD>e_9&P zSq#ub0B?1qBpvWN*sh0Qk-cz}}WkPZV=xlldHXx~;4rXZve(b1U$;PoUmj zko?S|X`}1TsuH-InM2s`V%DiN@{_xV?(Tq`qKn8E1WEnr+Ie&)q49f^Y$JIC`+`2Ivw+i zJZ##Y#Lb_xorkSjk z37z^?@)DBofllynr+68RdW{nC;6dRH>s4VoX=MjY4eg#@xZ~@Xl>|T01$j6Z372eTN@b-cFFS0+1 zJ6l~`-CZt>TOI6;S0*Z2Ox2yc4F%)HOe80^Su-gE06=F577*hBQF^y^$%V{tQjo>7 zy_LO4qTaP`a*Fl?qu|EX;l3$QW86w`Hl_wgxX#0M)w_YdB&FbPA43HYss20cSxk6^ zlj=72M_?vCw+UosW0TA(zp7OWh2n1>ScgQ;I&k5$|5a#gj1)OqVJCOlKQi-MPQzFR zl3DF{(?o(pv(@-wcLf|~rs!7hETBAGDq|sNFxot!N8cJRF{AV8RD1Xsk%xkg?d{Ga zT(3kDeUg0U$lk8HWpKP;aVj-?fT$R6CH@~e#P>($K!}C0aa)P!tE`5Q_W(aaO?k$x z0x^i|dO4Z0kKzR>r;)bD&k7KqvKjqK@LI8DrT^ku0QBY7AGvo3C zzAjNj^cVo`hGsp0E!{sjSY27U7S{An zbPZB!C=fH!-!Dx=Lj$mO072oQ`9(!30+p$&zX1gG&mkm-0uWJ_!f^rcE<+z^7F1Gl zS!MCbU+RlHAJB#kK*Rj%SD?i^yd1OoPYMug@#<@Z#$GsbgNC`S&HZ&-IXLe^*}sox z&q#^NREr&{dMCJBX(#`O;NL_W>V43 z>ON4Xk^59?Ow8OJT|;WZzUX3Y&!*;Nmut29k5a`~yIyD3gj*)2^s(Kf^h$>uy3++D z$({~cR1BTpKhP?~=hG|Y&3etXqU2>g$bIEPCH6|{Dk0c^u*P_$ldMaWCShS_s!}0& z>!LAq+7Ke%9tt>JD;w~;$bqPW1egvWwkro9G{sn)dh(v)yYT1EOvpV^RMCA?7OvOQ z;+ed5C2fP3hrw!%SbPnUqr2|cfWRSkE*y@W`l_cgQ)27Pk=OF(i1oHH?^B+LN~GS`sNB`9r;}je#pWTk5)>;eY}!+ZP*3Y z+WT9c79k;Z=u5FMu(=QWe#G!#P)+QGDB#9Hx!gjNKsTHri(TcmlTIG<+$|ro@B$4l z4#r)>blxNvt@FIL3Ex801Onj@5qZ7UX7@t~oq7hDf>mdP%-K5WsdeXR0afgUUfnYM z9a!vbbb{(PC3GTg`}y6Zl?RdD^0W8>$lAp^-9yW5MRhvWp&SjK6w`hm*Y4GMao_OW zfu3RKLOjoDwWn=C96rb|Ym=xF327}D23v|lbM>%(4@!nAR2beeP&q&h6Y_Zx>Ut$@ z4Y=|d`(f9}9rV}1*+Lp0AYYoB`kC@q_0lsk?4eC*%#mXEO7HM0Z%<#>5II{$Xm-DZ z5KzP&jviudRlfGJikH`>)+73TBq;Avurs69=ciYYd>M5@zgL~s3>n+nWVMQzl_&~j zE?taFzWHVrMh`^RJ&KlR<2_PYGOjCdczITtEF*4k<=f7&zMbcWX8|6=54rE-k~)al z(GvS7hlhs)506EVj<#KQvx8{fz4O*#|GeYFlo85uW^+a=csa=+Hx^_5oV!HlOA=nQ z%QoI4T5*Q54#(clrplHgt4WNmgGtLtw|-}lohcgYB%X4+kP=+ZYZQUTKv4Iab<@u! zvM$8aO@D+pf8OPP^7&X&9;^{T^UfmLyvd42+Yne+l7&YTh}4$vFUA`+^$xYJt^+({ zh{MK9?~GWL@;tvk$ZhI$4ap|rH5yy0cny(@=wBC!{xMj%bSSF0I^qCuj22=1>ZRJ& zdVO4bI~PNikh05V9S$_Wxl1R34Awc&7`0R+4;@W9<$`H zH$A0PZ8Pwfb~^r`ZjG~t<(aH39RK?&<6UDlb#O0i*6FR#X!GwwoiFT@!Wua)aM;#G zr0{tRPhbpwwq-qcd7|S@fylhG*h#>n$NE$8Li4@cQKNp$kmaz~$Z7o}3kwS?f}Sst ze)(Qq7pop#ZkF-zO89~kh)d$HmQ-o1@j+j%%y6x9iH6gP0&_dca_+owR*g0b8>>%t zwpm2rsy%_ZlRcY_?^b^e{0t2ZmAWJJx??yCkc%BBxj#k+D@-}jsMGhhFHeM?q8(_d8aLWRMY1|&(! zFrHk-^hk>wYp4j84cWR$2o9-}NVmDj=h*9FYNYsFu4w)8b@pKuQLN!;x(crR(nP~< zw)_670aHYL^kp%RX~&b0Wi-ayt*v}n43DB{9DDxD6nz!3xqY!0750EXv}!12ch>0n zO+7s&j>cq=VCUT#L~Dunl}@ywS~9iaX`{T1xm%tz{?mx5nL52LZ^gFJ@;dp2y*V;+ zb8vk`B7blBo{pQcgQc|}8@md=6g+&~({V7I37t5oy8WiM!WlOL=aJ0ROsZ?-pH;P3V<^#5DSQJ@wdvvV?dN-31*p&s=d9+&n@jW#tZbQ38iHE1V~*Xq6mMQqoFQLWeGEo(fnRxQd%>{(?xUnKf4V--1$; z8Dx@1jjF37Ieyw~Bs^V=Ou9lSOFaLnx_qisq^rg)=!6d9*!FpEE0 z2ta8tq6)a7ZGS~E_d4!3IYTRga8otb!>*PK#QU6V1q-RKyu*^NDugi;;vkULQk_E! z0EC~_JFF=xB0s@Qx|8QtkASJo7fQ`;erV;Zoa8~uhNt>lBT_BSin=HB{Z(Z40!op)RcT(9=97lB%XX^ zpB?(t`;yXJXU&s}dO>HG9v7hbTe@OiKirm)A~Rq|>>5YC!cuVaEEl8*7tiCe&`#nw zuZ&b5yEE;JU?7wmBA$ze<)1GW9)?Y^DRr~zMWK-{g0_*6$O8WUUw|h6&>JfWEFQn9 ze19hVpZ0owVV@27Ocri}RhTW+?uww4rMXiBN9|AA2o2RPx(EgVJO0;wcNuP{Cr_;@ zJ_ES?>^hd1NoX)R`T99X@{5p1Ko}{H`v*}D)V7!6djt2sFDF>;eP2;j9qn*f^j~HK zaNBTDrC(GG+GZpTDY2)%i>vM0bXB2DCkRL(;wA!A*Gtf}l13MK_vzYaXYk2Oz5ynJ zrU*SXOaBCbPdaPkMHq5(_(IuE?5*WU-eD~&uJ{As>VZNbRh?P}YRVa*>do#hhPY)C z8_n+5CtS0SMnGuTZzxB^hfLZ@$Ce{h+%B)trkFa37S{ggUE4VZJlxIdXYX<3C;zAb zGadHdQH;_j8qbk?cFJkE?Ww`$iyIVO9>ST2ga9*z(w?6rs^PY>Hkb#bcEd@^dvJUB z0wqQT1}MeU;x(hvT#rWzFaRZi^l4;Mjx0IIf$f!?OfzzrXEmvx{WEo>7q5Ho&H#KP z1T_+kD6pKbCa$~OLTqmsipE9}&biBHGq<(ujXxmD?o94SWQ+NL9<->`wB6KEclmHS z1rG`WX03Lrx)0z(8hCtC60d{6oUEWh_FD66Vc;ileke?7ib;^5RZ!>SwzxfS<`;c% z3<|XG@sgti_d$2-L{S3&DsZkldwau%s~!IqZ~=q9YlN>W=$f+;um zlhSXf4CQpG6FtaT)E`<`8vx3q#Y^pYwmTP@={dL}zOkaVt^{v4k>WfiV74AdzK%uK zCfMG58fSQN_asNTwK|LvER||I2PWK<-fPI&NVaseb`b6I^toGRT2EQ@1E3poO{1x4_vZ`(X1M)E|`xjrt}dMacR{ zzLnEV)&!tU#>e|fiy~Ty{3YK)_wr<4SmXn-x%hWK=#h`~ot!mN3?Fm34rfD^HU0PS zxaPO%fB9>ge{Bl_y< zuSv*9oyuL0T|S2s&;IPU$hg?6IsAJ2G73=#wpKqGrRGL`)?ynfh%UhM<+)(l`^)x* zF0>QuO$A)zCr2Ubbk?p1_w_gHIj8#OPjk8T27~Y!m<`u)hXb+dkyw>X`5ew_dvH6O zC#so|{HXT;ccQC6d!3Yq_EYSMdlVNARjO_J%1DSzpKM9BDIVW)zlW6PO!uY_(z7uS zQ-{6w2;_$6v{dpVayPv~MCWCEEENZbFO?+eMaI1;x@6$ob#k{eNbdQV5m;p@=IEWg zlK4tpzw(D|uTH8`y&4_txRMpHqsg^PxkY2|#-4C_Jn^k@cbsdV(zeV;|1rin2NQ?c z$0nKhK(T!nN9^-zwTA)%XIB@<(OXnqu7JK&YsqHdIAn2jrr4&;b`NDBdw>b1c-BRF z-8M-EGI=jCky1;kAklEoPdLv+{Nyjxr;})LzyFt3zB8(+Eol3I(k&=eq$!{Tu7oPR z3MjpI2p~N)G4w81u7DJQ&;y}LlP0}`(n|n=&})DIp&2RC-{|`Od~3Zw-+y!FoHg_8 zvuEu+Gw0cd<)pfg9?Ntw?BSpJ)^)9#KGV$9IiTD_v!E0s z1&#e@Cf>Awud>~BZe2sj?W$o9vu?TgMm(C0iIK#rd-%he0IC}tLppluoKhW5vp&xRFTpka)9kYTYdy{&5_b@Si$^QarST!-?*?Q242GafEu+@f&IfABzA`8@&_C z+>0G&cl6I2)YTpSWpPr%x{8Vuyd6{>ofFKDn~uI8ix8NASmPVfJ7w&d`IKMXo4OnK z>)n1kHV%&FUwjz^0`smOxes`tnoVmks0(|IJRU|OV6*)=x+Np<{;Gvv)}@y!{@>`* z4Jxa89CfM^O(Ea4=iPhHVg)I}Jg2=%==|Pei(vhV!hBuqJkgdH+nYhbsh{3}hnw25 zvtb^Zx}<%V)nCusPe`a+IkO`0f~!fn%QOOWIvQ{fEOJ?_H|us*MoCzfF(P1f!G^>y z0ycB^_{IUxl-c4xbti+al?7bjf?U&_V>gfPEyH&UdCtU}H5CVD%Y=R61hwP1Q%1^v z1ovu)m3riW9A;S8pwhWWpa&kG2iuNFI;C9cndE6Z@>mWH6!z}5NXZoQh1yZXR$Mz_ zwE?zyUt<^7PBAj}mN=VH)B?ta=)HH1wa8aqkclWq{Empih4 ziExhGtT#C#I*ihKY=*$S=@Xz;3QmS~3~J6$Wh;~}D0;3Sp8@ZW8KuV!yubxT2k|Fb z?X{G39M5M~%@1{Z?SvnHO%=K+&;K8aJ$Gqig6v>p<{Tv{)gVPw?t!BH8UO2!qHtM) z4s{aVHNedsYS-Tyc=kIs#ND*b_xO{HMG2!mkUY=*1m)^ZOKz38tDBQ?yY_;}^JC`f z#ZjRaD`f|5mBJzxBXJchl01jJ&#-sHDs9dImXLT%1C+I&$ISR`Ih;@ayfJEWK8jZh~OHPWSj`i0mdWmYg<4fn><9*0=oPp5m zmo@IDbfKWvN#E zhv9in;sR8$ZSw43N{|Xa(Nk(nW+FS&xp6nK_M?&|AT<`vyYux zcHQ;7Bi@1hlFgiZ3fIm2-OlopJ571H107t0&%gII!m!9aI)+SS+TG>pyM>^Zw2M2J z=yRC@Uo2KmvyIgqY5+Y-lCPN9hi}_$Dd+Og;wbqy;?+oP z3hnmg9*ay$${`UR_5++L?uE6^%BM8{x$D_DD(k{y1%;UQF!Bz3e>lkJu&x#SY@$r6!&}Nj0T^nm2R6UY$03>q zB!Ih_=nVAl66Q(5gqr-m2!3EB2ynVt$OM!I&>gUgBLnHaCB@+2vqd`V7K>A*VQS-` z2nZ9=2I3(gSm8iSKGr0>sanB})c_J^TML9hieJ|*B8rZUZ+{;V54S}+TYHO@GP(?oQ1L~fowGX$Fp3WE%eG(5sH^R4_XXgfS zq7)qkWC0@uvBk?*?vDm9Y^VSW?U&eZ(HQ}jPCvZ%V-D*uqI)J6O|T>~IPyZzv^>9@ zy1)R)z93WUy=7eK-Fs;+1Qa~tZaV#V&$PRE=kYb=j7qQa5nGkpNMzt+pl7*=zASxt z)9>`9-BjSh>5Cil*D;ho;N#P5DQjeY(!F2!^}Xjh|0}o87={Z69J`z_v16d5p$9TJ zO@EQ}^RdFE9od?ViB6G^h0wuCU-zpfKX(yAp1`j2_PPj&AeV#8iU1J01ugPYN7|NK z;x+{aQDRS#a)q?5L!sg)&jFqFw@XZ+7tt_xnWezX;&Tn<@;Q;>NHbRo6GC`@f)nBG zGxmaJ0rCDRt*+~=H(U7d>cS9-76!oNEdpuxw1nqyN0w1ecXj4>H3Ofe>Tl_*uDEk= zpmL4&GzM6+%aVSx{N=)!S}~@x!Z6W0^ZZtZz}JjlZqR*(TM4y4pTN%A6TY^DEk%zu zT=;!I^XWLW1P8}QXy&A}zq&bEUv-4*+wMV?QvtudFAV^{X2W3##~2v!Poodf{QOU$ z)m&$-tOu26N5e1D_tW)wpL`Bd9~xw_bbIi+rY@6^V@%HWj#<4bVF&2dBmlKwd{1*) z(om@nD%L1AY0t%DV_hgQkD})mdL^@1Xx6am4v4~S($2V)FL|Eq zXM2}rgYVXl@alF}*(MBxo?`E*vRf1B)=r#~UA8jqKc~f-N6`X?5%0C0mmVIGinGW` zB?{*NKPvK@lVsI>$vc+xhvG}L)2(iYYQA&}S(s=otC_3Aw^+7Ly7`Un+N4&49ZdSn z9umnJsgNz3HgP}*%Tbe-HxlX9UACrfpT+JpSjtK3JKnYX?_A5TyEeu{B@HVvxXBVG z1EoUh;}h~Fe~Fn>I!Zc6ZQ_P38@JbQXieY#_=hJ?Ayg`B{gtVv-iwuxj+!o|df2c> zChx2oRDC<*wuh|N#r@u1vE9u#j@w4Swt8hOGtt5F{DytZqF9Ffjg;L>7j@^}@@^Fg zaiKYd;1$f;b9Y?ESQQSe?ERqit#N&mNQsi+orF-xx@Y0ng)9e~{yn{lU8DN1{#|X? zhK2MZrA8HuR(*qF#b>L?y@2FT<0ILevVBp|Eq#Zmv~^%KG^ zj&%x*fNtVEP>jrzKaWI#)W=^$r|1wfcywp2E7UYYOa7BWiOBX$1y5*?N8#?d7%#Na zPQH^zh2bzcNJtiUA3z=yXf{*dvztG?Dc9}2bbsurP8$$AtBhz)v+VYm9E*9>FLeNZ@Y? zj*?s8TpZ26XV9@mOkwF>zO7jhJ2nsf2`jbwv}Yo@R$qjN8{Z2Y58?U4>;fYm)YWM*emwRaTZ3({B5L(}(}Idb!TPpbwQTYe#*f52I( zg+Ko$V@Y*y-7afVCHG>NvdzgnpQ6KbuEyZ2(!D1DRYhTZZ)fsPHpLs8O}$OT4Lf~v zlUzwx`}N}?X~tw7&gHcxDofE!qIQ!E43V3KC(z;lqZR%-4}A zoIJwT_#nI@+#|q91YE%V;B(NHU}vgDd<>jxzm=&C@b7oG?f+#ErCPCl9Qh)mFX5V9 zn=3M*6S68bEx3E801%Csj2PG!8)1q0!_7X#(F@Q;NuF|YLbGkYjU-&KV{+AjVBh7p z`}2Kx{}}feDJqRJTiTmW?YPZVoFq0DDdFI(P$CZA`nOT9S6ybuJfpITEA$Cl=1+6A z@Y{70NjO|f^@Sy-(WL#pj@wxUrTjtUn}5jV6-`vGNtYxE=`3q{iGm-ii%FDN3au=u zTqEh=Jg>{uxDc}(F2vOR5l1e(Is>|C5SGo{Fyx`vK*qW{-?=hr-R{?cm@Er}Q0E)< zf@i#z3!Qz&`>H4vRy_D{SDGOO`J?(-_?2tsGp?(}?^2JO0&;n;?yfSMd`$|=24BbK zy^n}sHBTeY-p*!=+{BT-1Ln~d{0@bLBgWMwgb<~@cZ@I@+Io5?sM>enK;nuC7^WA~ zWREI&W`GdFE+*aV)b?n}OOA+mj>h-e^frRem53vD1pUWj*-((iXZ7EuZ?uS^1bSFa zbX;vAXr)?iPgtu-)AS2fbBrADUB+j=-g{-KDvbTNqH$p!w=04Jw(;>v4EF;=R*#{l z9&dC406H5q%~&hV3*cf?*d&}8dsF_j(;64`=5%Jt-$;-=SGO%=HUW9uqEn{*!R2y6 z0;Iq9U2nK`lAFKUuC(#EZu+9XgB!@4vdsUs=&3}AzA#v<$>;m+8Bcw3G~3fvSuy6` zc-9#1&9LSf?D3G_o0iX-#m8>(t~o;i*M=X%(EHujvnjH*wj+)PtR1`=eD}sit%4kT zEzmp}`82$T3EVu3l(-Ub#^*M%0yP9ScWfl$p|8AWnkZ}Huxlr(l!6B9?c@# z1a+vup_kcG(Tov@M>t0`^RvQ?OszN||7i!A>kyivpl9NCcf1@-YE^P3dVaOhl3x`w zKy*<4I`dy_Jcc=GnJn$M7Z_M+HJp+CnaRdL9!8D-;s3a)rja-F({c4~r_9NU`?HqG zu%h{NxQeaYN||91FH770tACfe(WIm2%Vn!jH3n?N=D(YA^3)D{RZ5;}$6={ae+w!l z5d$T^*B*P3K5=yV`iMb|YY~M~YQ>{PxC@WT{#2$7%L*-a4fSmU*~BcZg>omK<5VM& z_D66qQ5VtBE#l3;d*g=(1SIcoRY`(<${|wr@71~n8d`}$L3qq-XEi!(M3GTwNAA0vP>gt&(=Akoy1jHun~JKaa7u>Vflp5T+?t6=DcTu=BB(2)KggGL&WhB zH@D3k&m@XUIy{iFKl{bsV zlTptHnkUal_}L)y_Hbv^W0RR5OMF2@ju+od>v7WsFXqzeZUKtnCzb1Hua(G6^c4}| zDlTa8RdcG_$Mv8!?tfvR<3r7xaEZzeGao&i=H~klBiIO6B z=x&03n2{`hEsMOaOb3Tnes=XgyuOg{Klnbug0Mw#M$KuvItS zmVylQ8|2ra*6%42RqjHi%J_BgY7k0L1KiVI*^%0U7+9K*k0LZFtjO*BtTK|Or>2x9 zdtwr>`XV-SY7#A-6a_7b!mq8)C+@NG7LAIf1iFPR`3D2gTVG=}K`Q%Gt%(*y!e#-Q zi*T%lTSG^cr`bm4i=!hR;0P;bZ|Hd}=CL<~Hv~%V{GQIjvOd|P9OvQm@;hx=5s(De z*OZZ4ee;QR+nD?C1R%#!6*)OywT0qv*9%8N?Mo)QwhkkDPU&IIY zP*oc4HO|_oqOr6v$vf$=Jym9N45Hk8X|UO-rubor0aW2}R)A0Eb^Z+B7;T{5pOPfux38!#a3lRT3X-+FJY9eNy>j}xfLw(u#Q>U`N&|3?O!gi_+IN`e5VYhPL3#vsM}n? zZq|FfeNkfmF7KeD&ePk&rKD=P`sLf&j|ZB3Tx{bQ!dhAt!)NOQ71i6T0xDzz+nXx5 z{W8@@3VJ`n^ylv;MEtW6eVgi~NICs#0o?O5CHROHwiY|C%??8++f@zY^v9gxJY`kN znAGrx%xYrPW5uq65~8KJ((zZS75J4SG7V#U%inV_S0@aCJjNAxVwkc)v-W4*DB)oET>5vAwFWFoOhk=uSY}=*6jNJe{IEK#gB@eCf+Azd!XI z_mPOZCTY&cvHcWckG`x3O3LNlB2XV%Z2QAJzC+5gbsUMm0gAWZ$Qll?K1G=fJ;=+t zOH4hH{e4LgD(j;b)@abmCj}2=KTog7k%nJ6w&48?~k7BI*k{`F-{C%N+7-D{Rrz&ncrf5=K}YLMq+%`g$f6TJ$OR-#!8#GS;o9 z+E_oH$@78?=muZgznMy=ySz=Qv+_{CK=1k_xMABkvG>K_iCTBCFyX(LJdjJ&EiS{) zs}1^a4pAP_bCzL1<*JNW)gL&&v+=5x^;^05Q2sT3x-%znLVkgO*Tr1mFoeFKszEE< zbSd^&txK^cz*IPNPm-!J??Y9gx>E+vh=*qOYokxrBXt2-n*2`#Z4xO;3{7OdyMm&F zs#mDSPXawxo+)6<_#EJKW5Tbr(1*i;RztF5Z@4^9q?%SBwwzLfPG9u^}N5$q4awSnpRu??KwPgZ;C#wAaz@>WI2G{u~4c z0zHg2(U--99@wf<*R4xI`=S8QA7G3&J6hc*gf~sNO@Nu!`$o`o)XKz+aG~ z`zr8;W-qA)MM1$W{`-3Lc_XwP1%(1d3i46)i~ioct1j*(G3wD~8LsJ+&PT--J-Qqo z`$IKXQsKfv?Mi2j!hBn+`E=*QMps6LgGL8RJk+$W){Ud~mVxm`hVG^S$Q; z7dJycovxhpTt3Ie$Cm)Q1&ZQHM^_i@%a^14>8H1UM+6jtCmp>1s-^qzp#D?)6otL{ zuS>x=DNxc@?XRicOSRJxq^pF4^{Z5YPxvzN0I5wkn9LtpMSQ(tdL zgq=IDyYozNRlN!w&=-os`Ha zB~Al&hm9WyZ#@q@Q3y9z$bnYwLe;$q)JCPulYNhlzw|?Pk8I%G=220)9b3iBSB3>1{5AAcv07iUtNj7vMVsV8Jf-{hK>^_x_G`qHe~1=CY-elKZ`;f9-B&`u_q_3L=%;k6AU30?o<6-)GP zRea-m!*UMG>Up4n-&0lA!?jOlW`~+ZA|YhLvbChKwo|8%m>TLhG7tPqCOcsoG>}zsW%6$l7D|#iL**j)6ZL>UZ+OX&|PHlbT zX$^howUxgJWjXNrmb78R8=L_2kjHV~K0t)}rIah72!1jghm(?B< zo_+5r%GU>?zQ0mWODLsL^GrOWPf+AMUmJDNJt5gCb9Qd`Bd+C%_-Vxsgu42jrFGIA z6@>csZt0O%h(h&B{WY$O@7AP&KwX{b#Q1!D7`aemRRh>6Fc|7(-rhL5Xj~~+!{KT^ z%Lux;lzTw|2G6rHKUSX$>^~UqXh7$0a&|acbR`#_`pm!qj}z;#R1sBXuQg#*8i)qd#)lF-V)Eye-9a#s`rg>4mf?+Nhq}<#_-Gyz`UItaN&X&k|c46nl&O!!H_cgNYf&BZ5=obN718KIc zXuffiBcwqpxFD*ZE+yf|s4pq4W$aiGQp}8@akb{-Cs%rRBmr;VpGkJT3Ucdz&uyfQ zkyQTBVLPwcY4SmlzOQW*?qVcGZMkq0yf_r+3~uCILh z1$6Rldgo95yL*ag$dPQdwVIckWLeM*`3`E*6Gi@_I?*H;_J6&78G!tR-%}+t$z$lMTj%i&S!8=o#`8k1?F|qXTCrzzG2i|kx%%N!A70}u#j z9xNj%pZl07A8~6VqZyRi6q8K#AT)$rxP!^vb0^j}^gG**V=~L*3^#UQI1V4CD-zYr zoXSAHjjA6txfcj}&xXzSVms5OopmgQe=LSe+RkqD22@IeL?KE1leug2w6vlyw}F;m zau#Uh1-AKpZhR=yhMDEK+l z`tA=R0-iVa;?*$&uIeWUpo@&65)&KTPEEl(^YztnafIGT17E;BQ8a#|Ki_<~^@mZq z&+?ez5C<_YeqUOhkWcUZHK+H8G$aO=5~w1PbmMlgFMqo{M-ZMFC;78rc$@9BN`C^dp9T~T+f3#-CIX3( z1!tr-fqnHV-Q}9{R5n}B%jxXq8XWd}<9?UxW^W{IzQ=n_^|Oks%G%T5zMq$$vzPB> zIDF-RWmEp^*_8uH>^fZ1QVZr6Hr~SjKF%WSRg+p}wC|iuKLr>!`{Tq)fwj4c^Pk~H zEq+5zwEE9#kPJERd*`lKx=OKx{mgTM*MYq{Se84Ere>Pry@la-e8D)90t^!`au#d! zG`Pd|CRgrMsQBvR#!Xo6uVy=iBWlJD|A+kc>g;Q~*DPef!Sx9!}os3-`8nA?`gBH$I^{PCYNG)k#~KyGaExci*g+Z{Vm< zISM`<)QyAECn?6fKIM?=fj~0m-$S>~qG4c_vLa|CedgTvrADao;TG?goDfY4>=!hS zxWuTjmgfl?4*jb?w?7}*{kr%LBg`m>+6{zcvza>4`N7-9iAW=z#S#^*t)|kmd%g^q zh=lNgd3e5a$Kxc6K)%U@hK`(RRXj*%g_<}M8oILh%-5E9^%Ot4!#_-z{Q)Q0WnJL- z$h}fc`hHs*92ij3EWC1mFNeq)+qt^@<{KLE{h)7~Vt_Cj>c)NpZtQj<1)i^MEi1?!>#OL36xNs|(cWuI23NZhzRXp8>+*@f z&qNDajRvZgaKsdNT)K}Om+(%!Kk5$0H5*87bh@&H$PyuTzH2;`*lW&`>&XV>jCW`D z`^%yWxty)#E(OK1E@Hw&A;m@3SEikpbpElMhr=HpDGlm_f2)q7T7S_;Khj&ts=u$4Fj=e}yNLlL;7${havpcITqhM5A0D zuP?HrKpm5v9z-LU;Kd-Gq&A+5FISIXzBorXW9oDl*j(4PWzTZkzs#(Q0jI6LEW!p+ zMI{MW*_x-wt2L6Sq?q*Yq5T4P)r#N{?@f=?vsNE{T27?4nLx-YG;kdolKi!Z6=e|t za(Swp(b!6sV<)J21^fz4wLDE??K5QZ@}v(QOxUxWD$)UO&(HJVX9eDfSUOq{ZjZUP zXyT$jnO37z7dAS=W-~s7H(R^+!Ys2Tmm912{#k14e1raUxWkL6t}Jofo_#)zA$(^^ zwZ`*tR#@cE?s_>Ju6H@Bj~?+waZ!PjXpbkY-s_4b+&lJOVJ%Xkpx}uoYlXJc)UB-* z9AZA`{k3Lq%Y5i&H~VV4i#MQhdg0yH@pgAj9Hz*LNhXSWJ-8<)5xB{etxo*yyupm8=uLcbywBz)tMPjN2UaM!PUvRSEo>#=?fATf$7CJ4&4}+(L04C8 zrQ5?g^vZ%K9kWtb2I5`yk|U1e&#ZvWWSW+%GCR@}2%tUCyB!lF*d<~&4arbY&?5-y zYz9cY!r{`DClB2`5|I1mJ*1^*bOQb1LxaBaQPuwTkDLCv+>xD?Wc|hav%2LRRV`cO znb@j8`9Vsn%Dw;m=i-SZC9X|jZgzoWS~FtCVKl#JHAJZ))q*DhCkVKVP^G5N(ojb`zF?k4?v?u(Gx zQU!zJIh#Kh-xlT^qmN;*#G=~sfmxrfu0NQ9S%+vy3o~LXLeSN##R(gOkbSI`&qcP| zbB-^$d*8{{TijSBNWl{?i*F~2A9~Nua!Li`L&xnD)}|d6C?s&fL`|^mZ`yas8K!%Q zW3Jh)qKvZh+C?|y54J46W*V@Cjz4r+DZyhI&57KG1RyjY+Wov4lA6~tDURrPC`-b- zjas29A~<@f^4pJ4z7C30IA~rr&sLZIcfTZL|bP;2AqgE4T zHk4tk!Mn*1xINECN)w7n?xEuT*J^vwwBX!;eAj+EI;KXVhMC>Esk3IvO+tyYs9@*oa zIK`dn^EWHfd&>_8q5n zI?8m%uc^%JYHRX@Cx6>pf;>)sSzv7G&JH)}!kUHX0EuCutPxWjvdc1YnOqie@H_a?}2nmJeWb zbo4s+a|XMyxw+fOf#J^o07poJRscEr&~vW{hW$M=hE@GynUYaJ8R zV^dFo004yaAE;PO3G26ace|5=e9=_z-YHV!=r#P>y}ruG$N;{)*qa_LK~8^i0br!x zYrT?9x|8+uDrys-@6HIsd7K94=`kIXbAT_&>EFM1Sp5@1Pfvdx=%qh^Z5KK)Hdf(! zxbWtUR(30X{dcoXpU+)H`oow2v_b<{+!;yFHxL&QQC3#YlP(-blP%cGM{<*Mdykep zFS@k_Je?P8aecG1H_Pq*goK1q3Nch*EUd8L;Nb3V$?G$%Q23Z-rE=W)*`%xC-_Zeu z;w87l=I(BSSpQ)m}J^l}LD4p|t zFsq~Te;Ob zr?QGWf$RZ!F}+xvqJQ2s@RAahF&=(Jj5m<;yb-HOmPMsrN{qNwL#?m~BVWn2=bXw; z0@ritRjTIGXL>cRhoy!zl$7+8l-mo9U9TBqUSbq{=21oQ13i5TK$ijVoQTHn2G_wy z@=uT_c)SB~^>>aNvaapY+GEiZuZfeJj&2_0L#7C}ta+XSxJ+Cr6LG$&cWpe9f+Z4O z2csvd?-pPdgPd`Egq~!&>zL0>=bTMB%@=brTN}$h3YX6gu$h2<^y{|08ixLO+*p&Q zPFnft)9P?SX!Uj#NxJt5pvl3x#c5}ew7FIJdqF#~4A9Evcsd%9q7|oiGsaJu$=%jD! ziMdkZnb2-7r359#yCet$%I3%|x3XeO{^UoEEWXNeyr23HhF|Vlrk<|bCiFzAtxj^H zjKK9DHGN{P5#uv+#G5fVwOauU<*N0}*Gv)+k+{|F%1s1)2dg}W-1zH@U^y!o48|W+ z@LJEkE;RbrWDmDQn;AZy)ADq=q>RjIvf%7^zQzxPBgELsO0QTy1h}B39WM-fLx|@@ zdFg_J@=#_3heC|Eb>iTvc1GvXR{Z#0^L>NEe?*vY614ayt!5uu?!MgR`0H95oZCZ& z@?0K8M`f}3X6k*ou?zF3*(Qcd=7(y&%X7^fdF5C-_9xeR^DtXjl4UPFT! zyZoy?>`!L7*a)UPjy)G9FfaRg&)WSyU}C8q%h8?r_dS1os!^Mpf3oOozGZF05))tJ zK1p)BTZf#R+z=FOs)II4bD1j3__HkrYlZ(_C+`&A;CzDep|l1R*_!m3x6;oyHgij< z!E`Ru=lM+<@m>&_EB&%k!ykk)N2T90P*R9=GjQjk5dI@jW>?dO8ezC&|6Fa*o53E> zN2D}9Bs=qIF_m$BkZtUts-{pPan+iEwQ# zM5gKZS%S}fWuD3>PAjPISVvidH{u!0cH6%ue>x$_ovq$g6dE@+le?Fg9dNDmHZLc~ z{D1_ZUP!d_Bau=^XBVgeco8ft$ca?Xt7yQwRg=8ir7^`-w z>b5Ci)@-a;wHLxr$*NW~x%F&t6zX}Wc$6LLyk4;0+p-nJXcbiz{!7zi+(_N)kOSqN zt#xW9goP4pby#@&CF1LreJWCr<2XLsXtVt4O2wTudi?R-_m=w`h0S4yEXD-2&XKPUHr8h`wHhsUS8^BQ z(4Q%vYNN#$2sZF=^{BqZhBM82oZd|-wI`@Ssll`HPZmrqYyC<{MSU=+xad#&e}aTD z54MZ2bu=oe(ynJy95D|)`+=v3P_`~Y)9x@~{W3x;#*-kHu;fxs@W;dBizYXM*q*Yz z6IjprMN^y;O?Y$TBRx|OPIk2R7c*EXo(K0b_a%>9<0Ppsonp}U89Da&?LXC{u!19g zsRwim6#XNT&iFFZ22DfQ}U&?p3|3a3V2}` z4BiygJ({~tHotZ`TfDiO7PA=$JSwsIs2Ie zb|LilgdMe)O{RZgUOtkb-0I8zNTh6xNtb>wcc0^&_h;5WwWp}hzXrPn{VW|eF zw)evIv3K>g#2`|){1x?awCsMd$G$eFFexqae&;wle{Yla7u2(h8D-NF#@~j{?2Xa6 z2P#|rwW@6=zdy4|OaFZJq*hF#3)nEz`MN{}e76%NIH9u)`MvQRnjNWvTII^U9h& z837`H^P3Jde!EYGDC3hWE7W{jZEN*zpp1!seEvJA+aS|wx~;QT3dFlut52q$4Cga& zD=dbPpi`&C;HPWGczV{Nf}+XYKMMDj6>w4YYB5B`-;^^ELvOqxs%~@6?S8YP`ARN{ zjD1$mfynPG!kRB;yp+k#GW3R(0v4sSZubz{S7AoH5oV{A{ayE`b15;^&!=a|D~Ahu zIwnLN0stSSqFN1ZY9tnMl+LwWYsSHywfyDzxJt3Vbx*$?r{V_Wv>h>8Ux235&M?}a zBR>I;hE~ZZ%;xymHYdl$i;aLA#Z*@dZ9Q<_Svv-CsiNU569d)e-6{*Nlq^Fgu~*-4 zZsVE}?v344o9E8b%G}c*gCcwUf7KuQv#wh3;xrrkzM=h*sBN6#Q#STp^vZ;)?c@0j zO46FN4=Z!)36CInH+##C{t9jF$wD=*H@CS|kPMl@+U^fV2dwNh_6lz+>A-S%esI;& zdLy<<^lwfxQS`i|5c6D@=>Kp59wZ6Wvu8+>_+~o$N|IB=W3FNFa7juq*Z@}B1m?oU z4QCORfUsW7)1}S)Xgp7cP-F9BxNsz4I~)f{N4gwwfjq~%=1WqY!al@*`Juy7Gzp}3 zX+k6qCSV=G3sk1&BWbLtDX*?~kryGegSJU(r_#uvuGu~xEkXq&{jQG@&`-EM^YFLq z$D&2Qo0@sQ!`Z@^QyjVI2)5YL0^Xi)1zZmO7_cyEPv_)qLK2c!k|1s9DduD!@w$|PR8+j_e7JH(N&ak_)%+Vh zx`AY&w&LCu9scKuNzLho6S(d^Mze|iLIdSvvf!D^**?!(&`1u|8G?=9Lz$HRE0P>6}y17wnz4ycY?~gw`JUt5w3mY36>Rb=KZjlZ#%wxm=0RNf8AsT16YN%r9 zX-Kv5nZy%DZ&WnV4(uy_$$Rrp>xFo}wB}X5S=$MxqYY^^2+QWhpSxQv0riAZkTc-*;9`5PIpAcBoye@`j z|CIRM3g>sX*dm2ITl}WLFZz9 zcerz}zwh*4d9fejgwx8Uv%dL2QKdCKCU$;df3qmR8}xoMraIxh-9STo(a4IhO-tQK zTOjR<1S9``KQC3(JXe~Vs^0{xMHgIl61Qu|;@OZFbg$$bM}K+!;KW>iW$>k+<_)4u zC0pKRrov)-B-3?o3PeQYzSbSy($Z4;xvR={o{y4pviu%Ehx9mgq`sy{!D$U-)^O&n zg%Rwedjn1-3HxR}Cbd12I00{4l(hS+eoxo(AxwY0c$V#T^kC7`WFCD_Rd#Sty3UMh zfCn$!aAL3-x?hISg25xgY6Z7B^vaK*H4=vjXwznaW!vR^Sh{T98)zH2BsCAGB&7Qc z>Og2B5t=x_KHS;SAn3Tp0a7c_92g!B6~6s=z+_u~_Ayc8aKGInYBjV_Bk*Z+mPS3aV^5Ozo3;-=vo^v^yHaIX3mDG%-q&-1-iwqA`qR2`U1!QfJMPze z@0%pK8Q=YhwH0zYtn#8ux#En~gl-N9dLWPXXRG)3%3gg@S64Sd!~mZT6@>4`^3?K| zmOh2&AQ!)&ppeA<^wZ!9lA9ESBlf)cit1z2N`v}Fl_8K+wD?HY@wtY?;^;45OxU%W zQeXja*~B^nZO>`%mJ#1}J{B@VrHR>g<$;F#O+!e5GzAA?({Y;j1v`dNgpHog46aa? ze7fj@yhP|h` zLO49vb^+TOT^dz%;99vLT$NiZd4a{6htQ#Z!5aD0j^o~pKL&b0>=d|~zElVs6n4!M zc6Y^6usv%Raz0wHxHUw1Cw_}tbQ-$|-CQ`|nVYG)f8A$nlnPl^u999XZI;OB;Fa>F zeRWs!+%>MdqbPfs7R`_fp0g8`a4l`xyUN>MAM08k8R$bB^U7KKa@v_$TUh%S>T7{_ zHNI!(4$%QylV(!a(ra-Wkg;3YiO2)Zn2@HXY=Z>%i>eu`<)sBl5#>GjFQ zf?WP|96~lKwD6vLe^~fs&r&UP??(UB`y&M66A~h4Y&_7MN0}r)S)f%;BU6@a@d)K8 zV9UwcDc+?m)5kSMx#f;~Sy{v>UOo2my$>tPTCu~TmtH5LAHwiPT9!oS#_8UruM}p7 z30n{>q7l4_#z?kTIr@RlkvH_fnMZ+-W^7t@{bRE631Wsj$I^raKhT6_Jr66nisfVE zd0;J-<8+gj!fXGPHbDh}!H0#LGyBHJWU3z^8@9NAqXBev2*=S7`<*(UoFknCuAgC+ zu1C9Rb9!4CD_ViBG)qkF7j;r0D^cYO;;$-4*{=>hK3mSy9gH131s*3F-Bv7yPnx;| zPdm+Sk;mGFE(3|YkhAOaT}n~Er>Lm)b#*K{Reg(#De!@0!JAP9;rW{I^RK8VUln{z zv?^n4JB)Adz<2t(;sw$Y5H81$VvJI_8Wx;70kV>^Le>0!4`n$yTc}tf1`Tj&NlCy# zmw{?%NEjFtukdx1{S;VRF+VM$x8piRMOkX56B5$TRXxd{#@_tR1IVP+{p}S1iH~nP zaav7Sk7o4)CZR~Tmd$+VH$JQWJB-M_9v7oWBv5XArmoHzYDt5mM7EceC4BY$-QV92U;leIiV)cf2_9Xvv`I~G z*G{q$qU0}E@JpLo+$|2u2Yu|#CER!cw-X?797-;1Yh)w> zDK{Hz^18b&GeP{#PXR^I2@XBVoon{?1||>C`c}*4+5l{?*ueYx%)<8dKlca$fT#yU zzD6+_n=w2j1QV3R<6v~W(rGrB?Cj*Ub_w8k02+zf+P|`_QtN(h+3tr~yZ)L{y)T{< z(b-Ak`tqMvJb3=jwAyyw(b>7O>~Hy-FmUCT0S5wkIv)Gq(b3VBmFE}xvrsz#TmuUE zV~1CPD!{ma;V3|Ks%=980*=qm*LPZ5TR(pMXjJ-Tqc0A~V6e~q>wX~&V0Fp?Lj-8T z%l%ny0Rdf#ZucKF)YMMfBPPIREP7t*9RN5JP>>(sP{rGLE}J^X^|tPa zh`6kIEXQ(y4LH^LXI@L9%L6e-QWbWK`kBgqWdc}dpq+W-@#=fle+aOO4ZuRH0Dxk> zcA@Qj-8rzhKmWB|fu!waOwG>~J;(&z*Y@}Oi~k|fexL+swT#iyUYx}LrptanQ?pO} zCvW|CX#YDb+P^*hpQZ&Mf7!oZ!)2tT0R63;KYk0W%vbLKSz2~(Zf;J_bu15(ziAC* zT1RJRt|~*OGLZd8eg-;th^VNjKq8UB!59Do@_tI9r6&eJOx7i(q?B@12L=YZ9RU$c zdy9u|W@Z*G9UT$TMt<|+FJlNT@TyWf#0}{1 zZ7CkQ*s=ah$p0A=`OCq-*vTJQhKC()m4~ONUvE-vocI9bx_`=lVKgr_uh>WmZ;&dN zTiyx*6Mk%BY~19An-Ct}Lyp|D-v=7I)qs%IDL`I7A({z*Hud8n8Xft7rWWX^sMz0b zd3boFDO-RDG&R7WQ+}azthl6`nSqYVV~{QH!SW?WyLG5MVqW=an5%sL^7dO$Kwm-P zW%If)SdiKM<_lrsCj3;}E zTz6OZnrbZ+2DY3=r>|2xO7jcBt{R3GBV=QHyqsEeMY9#rya~#aB5j8N|1!KmHYuLv zmH`CfmG-$d5vO>WqrnIZ8PCYq7icIy4YNRXArpMKHF6$JoFjQK*UA?5CqWKK7y#K? z)`bDMac)^adFwYI2lV^sOlx3%etfW4`wQ|E5o`DSS<(ak=2jrdrZPCzQnM29Pqr`K_=!sRan}wpH^>V;!a+f4dRIVuub9}|Aff=cr6?bkb?cl|Qr6+!?d>6O z7K0|Y?UDZL^Ye1)6t!@LDh~$=&9_wtHiL3q+c6EYF1FLZCRM%^(8j?F@_3I?0|P!- z-<(#dLC#K)*6r@wWb2jN;d(R7988Z%iL)o>lL6sdHX(IDnjA6bf zH$cxP%R4)oh1y~)2nPXyxyO$!>+1N3oIKTiL!hzGuN)^c)JPoE60X!K@!nyyziWFJ zz0v9@>}M!XlW|&22~G>n_-WwpvA=4`_*%v$vDby*-S)(6!N8-?tQZq7y0qO@26haU z^-bd1DkfTG6O~8p=3|C_o#<3yPOhA=*8(m_!}xyA$qBQY6=(V8sXx1AnH%#sNv>uG zf?bPifSvjL^XLd0B&fx{6~@>z{$#eIX!UMwB)qlI<9Pwvay6g=);inU3jt%;kQNk# z%Pn_V{C2M=rl`mE|iF!ydmiJ_@GBdwUtVF&Iz zwf%*iA;>~NwXAgNkI}zQ+evpNNf`;hVL9!O=6t>5S$%Nh{-nMk*W%((_Y~NfqxS?c z%xxZ#wEN$tGCWRK2g5j_G-)!6R}+f`G76qii$S}d!*M{N<_8F$oGvje7B^SD$AWd;H)#wYLJl$jqSfC1!=Qh0 z`eW0%hLCm1{`R)*tsP*^mYSLP_(BaB`1tu5y>hqw^N`3dnaVxIrijndg(y9&vA9Zu zc@uLxJbF$md4_GR(lxKl+>Amg1<^fFs+hG)BVF5N*zN4p1O=4G0a?=#d* zKAniwpZ62?Y6+lmz+KwoRF5XPIT}beE*u!ETo1Q!6QHTOYHQxLg9_IdZYC;)bg5S^ zhh$l3>6yw7-Tksv+YgYWD4TIOPo5cgt@R3JDQKC0Dpp;{!}A*R?@^JjAO>v?x29dk zfzN1~{p3pYnS7gk0mF(j2_f1s&KC1Y8g`@YNpP;FUUz+6LrwQSvr`=B+)P8_d==D9 z9@y^kOPxcayRN?GyR8q&)tPVLq%I^xJ!N$k{ns6hrzCYBp?o_WQi6HBF-5xGLsN06 z-w!1PdZ&IZ%l`sw%?@5hbT=wvj&81ZcWFoN06->r|!Nhe?{IXWH-+bU2) zxiMgb7E*?nti{RfX~Ez{DajkY(FbcC2IdX(@_^QcR5rnh#p&t_XnNi-<)->T(ooaK z*E0SmxD&domB7j<{Zh@=#%!L!k6^W;!qj}t|nULQvzOL6&~82CDt#%MO^EN^mm2QrIFLguc$9Jz7AAW4}>e< zOD&H_rqJSs%LQC9R4i7BuH&r`H&@Qx3dC`%=HC5GqO+r>fh6;mSnRcgo**U4n+gRV zQmFL-z$D5;)L)e%t?38%*5IEnFsr-C*|s$E7c((4*JS(Sf~r4R zSS)W|zHUB;E}NCy)>M$Ol`3_Q<*Fpe#c}x7WA$G0$1-~0-||H-#`kv=h5d}XIXQZz zy=Vf&!6%_xyG9}tr6+7Et@*9!|e9B_EWMWgm_ZW?Zg8xTL7Dc+s=rYnVE>Yh%x-us#=0&Z;u3&2`Qvadlg+~JLtG= z92M~SL6@`^Aa0&o&CoRKp51NSTpMjQ4XY&6YP!F&$z|H}R1|s=#zIUtQ6hse`@8rB zr1$RBOXnJP8RWoA7k&?A4~0u>^j`j912mZtT1OSJt)TV^RM;Q6>)n@9zr9tco%HwBA(2lrM@|;|9aS@UF3qic=Bo1Jeo_K9EeLCbZT5nx->z3K4}<67Y-G=& z*;dfw%Y7*xW43aVzbv7kg)HZ6nq2?-7!MHqYFdh3Au;(`I4RP$m_tHNk+S% zM!MUo`y;>10K&&G?nAG1?-VwhoLub9HDHSYKh0H&+6V^I@j72rtmuLR`x#{{=E=nf zcmv77>+e^@YW_{zL6HsxCt9QZ^P?k!pPL=pX#aoi;op1yi>v;X)nArYMn>kJ!${J8 z6%`zD1?FK(EChf3d=K8f{{Gd~)hji?myDnk5?Yv>OEkFqx3~L_lQSBz9v&Y4EBy(| zR~#BZw%FK|Sz;67<4?MT9{&?ZprCx}11L%n5fNjSoZdk9O9tS`9-viW3Iss7`d3In zMg>TM0g;NzC>D=CV6zEG|1+Qe?Q?p67f4*HgB5rqs0G-}KnPr^-A@jDM88d=LtB_1CZg(~rWC&Sayf5BR?qS}}k8SM1*< zmPu8_JItK_pE{n{?dXgMey%2fhf_Mzq+0(7mz>t@gx^s{p@#jcK6HVFi>(x5p;6~H z7`~~WdF&oorvQjS+h@&~^+{kwf>pkJsqyzmZPw;-jd3kzGp>(=B?*!4=73oWXJPsW zL*TWPADI~&&^8J*E(iHWOo)418_GAM44T)zZ$E=0A)_D+7LAFH1s z!8b)}ZZ&r`Gy* z2p@e^HYle5)A*>xTg!AOiB|Z4t@IFy9G<3W?$>I(*$WY_&lD%MxkRXWSykcQ)#(Lj zTxz?X_NK}~&HA;<`H`&)DQu%650kc>lShwk0L}9@0^noAahu)v)JS+?>*HoSC*x0u zZq#t-1m+sdBfJT#LHWhRF5(99oBH{?eyd@YmHUD_*{z(UINSq-`b|3z=&wYAKd1}q zB+YQj%=Q8&#yFwKNs}Fq2fp;*m~Ja%!S?y{`-hXak@|ts1xLfp$zR=_8DRC|{<@mi zGR-HL;#Pqq?;fH2_PI9e8u}$`(_ZXHay-S<4~Da{w3!HvC&EK+A1^!BitZ5%d-2-5u-{wsz- z-$6+C!FXk5_{+`-esUUPjVT*Z1{|fkOsuolWD)_2)X>e>tK{T|Yw6T!YzB5Kn6D{z z9A&_kj<>wtzlVS*3p>2>Qe9v0e0<$+!V!GEu_m+d(_tttEiKJxW%TNN1)5Ry1SE%~ z3m0xFvm#x!m+Q`TDKRl>sRPQ9e-@^;7oUpT&gk)#U zZ-fy(`_=~lNPm>uil3l()b8ay=!>(U>v8v#5WrwgKH4f?V-WE5u5Tp zAbwdYX>Gc%TWs_2gT|1YtKF!ay- z^lY)5AYEpzrsc|-Qtf1kR;opOTkuIy((J}(D$e|v>y^Eq1K&a?HgIZd!@Tpw{KcR$PJg}9qa*5~_V2kYX6#OFG%Kv4cb5EBz~7IvcTZf4fODIc zjz~gpirLwptq@}!H&UQl-VPjcF7L9q|4=2MP_;%alpq38H;Hw~KMspc2zm+@%Po51 z7kcBiS3R$z34aRkW9mTdW!4={L^{QbWG*B7LG?tMd#O!{dss7R_< z^Opw#y+r)NwcRhT49Ae+qB}JSAf@{4%^IcgS*i=1)Q$q(MM^3<`P*8F@<52O)`5-< zrMSwXH7)q^BD+S<=Dg~SGzmkTl!p$cc7x?8dGo`b4cL_6IE_xrtY?QKz_V8eq!f3Z zBoRtF&N<|7=;LM57w}eyeb+}Pxh=&ySLs2eOMBo&1}6VGDf_|Z@}lQzVH7~dc#mJ} z_uU)+z*t75ngN5VV5FwK<=eyQRl8J*_`&GI$}_=MEyo6fi?gkRF< z&B1ETcp$A&fL4E^EkIA=TCt}9an6wr1Uvjk;Uu#9CC1Qa0X2?GEt4QPO!vtv-V_r*HDLH0>k*=y|0F*Gx{q~TCXe;3;3IJmgD1#V&cW} znEY&TsO#n!by^m}cDq_mp}~;qO>dN3%{Z_rECcU@?Prd?Ym{unWp#*oL3+~HKKQ7Q zKLn^Py;q(cQl_oU8T2GS+tFnOThz zS&q9f@US=8ln-#iWv7F61Z&L@Bb_h|Vvam}a2Z3rpU!$Gugx`rlvty1E}EV9PubqA zzaYHZPHdstba^FlIf;1}b*yk@pY{_0_++mFvItNGBYM>*$(WNwQ;wo2lh_V;GEiX}<&^%bHv#528;}8H-oKGY&2-|D2#$dr6A2M5BJs$!4n!1#5e8 zhrO@LE#yy$q_ga!+etlmNmuApZp#jjK zUjm}NbKP~Xwi8=+_+6gqd9FtUIu@%kSU(Rd!m=VS5fqyBzTMbTxV1@( zHfEBg1Iurj&g|VD{2qWj>xISQ6w%OR&&f78-d}2hjs85|b=5i&<6L}6{1Kw%ii?Y5 zmqksdCsX5e{RIz1__9|32u{bSlX=3;-TPOMX+p;nu9`=oLt9s?H=3@v{LW5mee0mU z-}jU$!{MQ}&7u(BVd6K5 zc-m>=dbFTS@y=oG=8bY8=NrqVxs-8Dt}||h*&0$ip-nr_y`Qzd z-|t%M{dql$Qu=%CFx*tBj0m32%%c!JhW_j_)0~xsLM|jm?}~med8QxxE;}1K-^X&t z&Ah={sY1ZXjN#9Ts|4c-;?&5hMp@`&&b2t{2)`G-{H2kr56isKrz*UqRUwk*bCR~_ z9rl5Y+hIzN4QcN$Gug?9;?&4f6XraT+2uuv)Xu`)u4egZtwZC%U)RTCHNv0{B*39a{xxb~^V9*sIhn20I9lkc2! zg)i%C4t#CdKGRyk5f$clIcl@5|EQr>d=EoWGY;jh4&#=WC9WVoMJsIse?Q}icY^GS!2%?y#~|xW$GHrm-uJlr}Hgo4vWaZ zo0s&s)rKh0tln$}>LPXZF96T-)I}lc{OuG$z6;V7+;>pOyB=+`ICDBFbZFuhKyKB? z4s+@7l0@4)9<@`YgR8$X4yR_m3GnFYzng2?=QcDWiCP@$wFr(U4$qNyTF`e5H3=prvmox1H($utO5g-HowK8o- z%<^stUM6kS!#Q&!gX!A#267M?A7-$D|fy|NJwPr=IsT6 ziRsS{(#gtjUmfG6zKo~}MiG_mH9YW8kRxnuK%Mt*LR@^qsMP8|aUA6G_s*xdHlM_4 zu4DSYPktCoX%6)998AS|;~KYYd^8=$uE-N`U({7)bCuij*jbw?TK*>#ZhsZLI*c~v zS|^RrXl=*r*-|JY?Zy`CCz|}iH5)CC=bL;>F>!I-Ca-9d>#h777Hf$KA(X7|Tdldp zL1sOoO-9GSjqs`!_S%@B_tJw$@^v?OMdA&N6fXV&nyREZA9o}>PfEVAnG@p#4WnxJ zT=!ax4?sr$t;4CRgv<}*v03u%K}@STDGK=;?P<^b#r4uSwxEKC7!ka?d)~!SE?s}k z?{Bz^*1FG(sOzIUu`S(;@~(aC9cH`A7~!=rh2%ASQ2(Y?A9*=>L1sDDc}w1PRMpMl zNd#=XSCNYE2t4Kyq`;bO-#Tj^>0vf_v5S|GUAOs{LLDVQ zoJ{!L_P2EoynIwV=Ze>R?tS|7 z=Huh_HJNB7|IjW5Zk!X=!)MI~e2eMlBXudXxJX1v#@(GWd8ca-=l`++Zk(zo+nO5` zv@kgINz@jq4G-JjU-ui-WUPE@PVIx3v(enD2z^PA6O$h2K&e*7p{tsjJpGzO7rIRf zYKaWi>q44LA8CU0eu9-|Kl~~qK~^mNMv1u3rNXQ`S}DjuAKvv}TT-8_OA}&!K0N~R z$UK{`5ki5`QMJS3UWf z{!c>N0>G#a57#~pq=K-{KpOxH0SE-%0K^9Acmx~TCLH8XNt1uu=jiy}TJwJA`{%4Y zxBmZtLb#l+dOos-f0nQqy3pC=oUo+(@^or5Y^Waa?)UVVna||^ z1Xhqy1+V7TAs}8`(S8(nyYAOPkAncWDOY<2ZdP*_XT=zsG0qEvs{P{wTxsoJrpyW;JYGGQvrp)y*o8vQlj35)*KTko%7q;=YJErm zM&yq1Wk!EUNXW*(YVtlH0G*%n;y0*ArZCYvKcJCkJT3Ctz diff --git a/common/README.md b/common/README.md index 148fb67..32880bb 100644 --- a/common/README.md +++ b/common/README.md @@ -1,49 +1 @@ -The `setenv-sh` script sets the following environment options -* `NTIMEFRAMES`: Number of time frames to process. -* `TFDELAY`: Delay in seconds between publishing time frames (1 / rate). -* `NGPUS`: Number of GPUs to use, data distributed round-robin. -* `GPUTYPE`: GPU Tracking backend to use, can be CPU / CUDA / HIP / OCL / OCL2. -* `SHMSIZE`: Size of the global shared memory segment. -* `DDSHMSIZE`: Size of shared memory unmanaged region for DataDistribution Input. -* `GPUMEMSIZE`: Size of allocated GPU memory (if GPUTYPE != CPU) -* `HOSTMEMSIZE`: Size of allocated host memory for GPU reconstruction (0 = default). - * For `GPUTYPE = CPU`: TPC Tracking scratch memory size. (Default 0 -> dynamic allocation.) - * Otherwise : Size of page-locked host memory for GPU processing. (Defauls 0 -> 1 GB.) -* `CREATECTFDICT`: Create CTF dictionary. -* `SAVECTF`: Save the CTF to a root file. - * 0: Read `ctf_dictionary.root` as input. - * 1: Create `ctf_dictionary.root`. Note that this was already done automatically if the raw data was simulated with `full_system_test.sh`. -* `SYNCMODE`: Run only reconstruction steps of the synchronous reconstruction. - * Note that there is no `ASYNCMODE` but instead the `CTFINPUT` option already enforces asynchronous processing. -* `NUMAGPUIDS`: NUMAID-aware GPU id selection. Needed for the full EPN configuration with 8 GPUs, 2 NUMA domains, 4 GPUs per domain. - In this configuration, 2 instances of `dpl-workflow.sh` must run in parallel. - To be used in combination with `NUMAID` to select the id per workflow. - `start_tmux.sh` will set up these variables automatically. -* `NUMAID`: SHM segment id to use for shipping data as well as set of GPUs to use (use `0` / `1` for 2 NUMA domains, 0 = GPUS `0` to `NGPUS - 1`, 1 = GPUS `NGPUS` to `2 * NGPUS - 1`) -* 0: Runs all reconstruction steps, of sync and of async reconstruction, using raw data input. -* 1: Runs only the steps of synchronous reconstruction, using raw data input. -* `EXTINPUT`: Receive input from raw FMQ channel instead of running o2-raw-file-reader. - * 0: `dpl-workflow.sh` can run as standalone benchmark, and will read the input itself. - * 1: To be used in combination with either `datadistribution.sh` or `raw-reader.sh` or with another DataDistribution instance. -* `CTFINPUT`: Read input from CTF ROOT file. This option is incompatible to EXTINPUT=1. The CTF ROOT file can be stored via SAVECTF=1. -* `NHBPERTF`: Time frame length (in HBF) -* `GLOBALDPLOPT`: Global DPL workflow options appended to o2-dpl-run. -* `EPNPIPELINES`: Set default EPN pipeline multiplicities. - Normally the workflow will start 1 dpl device per processor. - For some of the CPU parts, this is insufficient to keep step with the GPU processing rate, e.g. one ITS-TPC matcher on the CPU is slower than the TPC tracking on multiple GPUs. - This option adds some multiplicies for CPU processes using DPL's pipeline feature. - The settings were tuned for EPN processing with 4 GPUs (i.e. the default multiplicities are per NUMA domain). - The multiplicities are scaled with the `NGPUS` setting, i.e. with 1 GPU only 1/4th are applied. - You can pass an option different to 1, and than it will be applied as factor on top of the multiplicities. - It is auto-selected by `start-tmux.sh`. -* `SEVERITY`: Log verbosity (e.g. info or error, default: info) -* `INFOLOGGER_SEVERITY`: Min severity for messages sent to Infologger. (default: `$SEVERITY`) -* `SHMTHROW`: Throw exception when running out of SHM memory. - It is suggested to leave this enabled (default) on tests on the laptop to get an actual error when it runs out of memory. - This is disabled in `start_tmux.sh`, to avoid breaking the processing while there is a chance that another process might free memory and we can continue. -* `NORATELOG`: Disable FairMQ Rate Logging. -* `INRAWCHANNAME`: FairMQ channel name used by the raw proxy, must match the name used by DataDistribution. -* `WORKFLOWMODE`: run (run the workflow (default)), print (print the command to stdout), dds (create partial DDS topology) -* `FILEWORKDIR`: directory for all input / output files. E.g. grp / geometry / dictionaries etc. are read from here, and dictionaries / ctf / etc. are written to there. - Some files have more fine grained control via other environment variables (e.g. to store the CTF to somewhere else). Such variables are initialized to `$FILEWORKDIR` by default but can be overridden. -* `EPNSYNCMODE`: Specify that this is a workflow running on the EPN for synchronous processing, e.g. logging goes to InfoLogger, DPL metrics to to the AliECS monitoring, etc. +The O2DataProcessing repository has moved, please find the instructions you are looking for [here](https://github.com/AliceO2Group/O2DPG/blob/master/DATA/comon/README.md)! diff --git a/common/setenv.sh b/common/setenv.sh deleted file mode 100755 index 1bf61f1..0000000 --- a/common/setenv.sh +++ /dev/null @@ -1,205 +0,0 @@ -#!/bin/bash - -# Make sure we can open sufficiently many files / allocate enough memory -if [ "0$SETENV_NO_ULIMIT" != "01" ]; then - ulimit -S -n 4096 && ulimit -S -m unlimited && ulimit -S -v unlimited && [ -z "$GPUTYPE" ] || [ "$GPUTYPE" == "CPU" ] || ulimit -S -l unlimited - if [ $? != 0 ]; then - echo Error setting ulimits - exit 1 - fi -fi - -LIST_OF_DETECTORS="ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS,CPV,ZDC,FDD,HMP,FV0,TRD,MCH,CTP" - -LIST_OF_GLORECO="ITSTPC,TPCTRD,ITSTPCTRD,TPCTOF,ITSTPCTOF,MFTMCH,PRIMVTX,SECVTX,AOD" - -# Detectors used in the workflow / enabled parameters -if [ -z "${WORKFLOW_DETECTORS+x}" ] || [ "0$WORKFLOW_DETECTORS" == "0ALL" ]; then export WORKFLOW_DETECTORS=$LIST_OF_DETECTORS; fi -if [ -z "${WORKFLOW_DETECTORS_QC+x}" ] || [ "0$WORKFLOW_DETECTORS_QC" == "0ALL" ]; then export WORKFLOW_DETECTORS_QC=$WORKFLOW_DETECTORS; fi -if [ -z "${WORKFLOW_DETECTORS_CALIB+x}" ] || [ "0$WORKFLOW_DETECTORS_CALIB" == "0ALL" ]; then export WORKFLOW_DETECTORS_CALIB=$WORKFLOW_DETECTORS; fi -if [ -z "${WORKFLOW_DETECTORS_RECO+x}" ] || [ "0$WORKFLOW_DETECTORS_RECO" == "0ALL" ]; then export WORKFLOW_DETECTORS_RECO=$WORKFLOW_DETECTORS; fi -if [ -z "${WORKFLOW_DETECTORS_CTF+x}" ] || [ "0$WORKFLOW_DETECTORS_CTF" == "0ALL" ]; then export WORKFLOW_DETECTORS_CTF=$WORKFLOW_DETECTORS; fi -if [ "0$WORKFLOW_DETECTORS_FLP_PROCESSING" == "0ALL" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING=$WORKFLOW_DETECTORS; fi -if [ -z "$WORKFLOW_PARAMETERS" ]; then export WORKFLOW_PARAMETERS=; fi - -if [ -z "$TFLOOP" ]; then export TFLOOP=0; fi # loop over timeframes -if [ -z "$NTIMEFRAMES" ]; then export NTIMEFRAMES=-1; fi # max number of time frames to process, <=0 : unlimited -if [ -z "$CTFDICT_NTF" ]; then export CTFDICT_NTF=100; fi # auto-save CTF dictionary after each CTFDICT_NTF TFs (if > 0) -if [ -z "$CTF_MAXDETEXT" ]; then export CTF_MAXDETEXT=0; fi # extend CTF output dir.name by detectors names if their number does not exceed this -if [ -z "$TFDELAY" ]; then export TFDELAY=100; fi # Delay in seconds between publishing time frames -if [ -z "$GPUTYPE" ]; then export GPUTYPE=CPU; fi # GPU Tracking backend to use, can be CPU / CUDA / HIP / OCL / OCL2 -if [ -z "$DDSHMSIZE" ]; then export DDSHMSIZE=$(( 8 << 10 )); fi # Size of shared memory for DD Input -if [ -z "$GPUMEMSIZE" ]; then export GPUMEMSIZE=$(( 24 << 30 )); fi # Size of allocated GPU memory (if GPUTYPE != CPU) -if [ -z "$HOSTMEMSIZE" ]; then export HOSTMEMSIZE=0; fi # Size of allocated host memory for GPU reconstruction (0 = default) -if [ -z "$CREATECTFDICT" ]; then export CREATECTFDICT=0; fi # Create CTF dictionary -if [ -z "$SAVECTF" ]; then export SAVECTF=0; fi # Save the CTF to a ROOT file -if [ -z "$SYNCMODE" ]; then export SYNCMODE=0; fi # Run only reconstruction steps of the synchronous reconstruction -if [ -z "$NUMAID" ]; then export NUMAID=0; fi # SHM segment id to use for shipping data as well as set of GPUs to use (use 0 / 1 for 2 NUMA domains) -if [ -z "$NUMAGPUIDS" ]; then export NUMAGPUIDS=0; fi # NUMAID-aware GPU id selection -if [ -z "$CTFINPUT" ]; then export CTFINPUT=0; fi # Read input from CTF using o2-ctf-reader (incompatible to EXTINPUT=1 and RAWTFINPUT) -if [ -z "$RAWTFINPUT" ]; then export RAWTFINPUT=0; fi # Read input from raw TFs using o2-raw-tf-reader (incompatible to EXTINPUT=1 and CTFINPUT=1) -if [ -z "$DIGITINPUT" ]; then export DIGITINPUT=0; fi # Read input from digit files (incompatible to EXTINPUT / CTFINPUT / RAWTFINPUT) -if [ -z "$NHBPERTF" ]; then export NHBPERTF=128; fi # Time frame length (in HBF) -if [ -z "$GLOBALDPLOPT" ]; then export GLOBALDPLOPT=; fi # Global DPL workflow options appended at the end -if [ -z "$SEVERITY" ]; then export SEVERITY="info"; fi # Log verbosity -if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable FairMQ Rate Logging -if [ -z "$INRAWCHANNAME" ]; then export INRAWCHANNAME=stfb-to-dpl; fi # Raw channel name used to communicate with DataDistribution -if [ -z "$WORKFLOWMODE" ]; then export WORKFLOWMODE=run; fi # Workflow mode, must be run, print, od dds -if [ -z "$FILEWORKDIR" ]; then export FILEWORKDIR=`pwd`; fi # Override folder where to find grp, etc. -if [ -z "$RAWINPUTDIR" ]; then export RAWINPUTDIR=$FILEWORKDIR; fi # Directory where to find input files (raw files / raw tf files / ctf files) -if [ -z "$EPNSYNCMODE" ]; then export EPNSYNCMODE=0; fi # Is this workflow supposed to run on EPN? Will enable InfoLogger / metrics / ... -if [ -z "$BEAMTYPE" ]; then export BEAMTYPE=PbPb; fi # Beam type, must be PbPb, pp, pPb, cosmic, technical -if [ -z "$EDJSONS_DIR" ]; then export EDJSONS_DIR="jsons"; fi # output directory for ED json files -if [ $EPNSYNCMODE == 0 ]; then - if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 8 << 30 )); fi # Size of shared memory for messages - if [ -z "$NGPUS" ]; then export NGPUS=1; fi # Number of GPUs to use, data distributed round-robin - if [ -z "$EXTINPUT" ]; then export EXTINPUT=0; fi # Receive input from raw FMQ channel instead of running o2-raw-file-reader - if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=0; fi # Set default EPN pipeline multiplicities - if [ -z "$SHMTHROW" ]; then export SHMTHROW=1; fi # Throw exception when running out of SHM - if [ -z "${WORKFLOW_DETECTORS_FLP_PROCESSING+x}" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING=""; fi # No FLP processing by default when we do not run the sync EPN workflow, e.g. full system test will also run full FLP processing -else # Defaults when running on the EPN - if [ -z "$SHMSIZE" ]; then export SHMSIZE=$(( 256 << 30 )); fi - if [ -z "$NGPUS" ]; then export NGPUS=4; fi - if [ -z "$EXTINPUT" ]; then export EXTINPUT=1; fi - if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=1; fi - if [ -z "$SHMTHROW" ]; then export SHMTHROW=0; fi - if [ -z "$TIMEFRAME_SHM_LIMIT" ]; then export TIMEFRAME_SHM_LIMIT=$(( 64 << 30 )); fi - if [ -z "$TIMEFRAME_RATE_LIMIT" ]; then export TIMEFRAME_RATE_LIMIT=0; fi - if [ -z "${WORKFLOW_DETECTORS_FLP_PROCESSING+x}" ]; then export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF"; fi # Current default in sync processing is that FLP processing is only enabled for TOF -fi -# Some more options for running on the EPN -if [ -z "$INFOLOGGER_SEVERITY" ]; then export INFOLOGGER_SEVERITY="warning"; fi -if [ -z "$MULTIPLICITY_FACTOR_RAWDECODERS" ]; then export MULTIPLICITY_FACTOR_RAWDECODERS=1; fi -if [ -z "$MULTIPLICITY_FACTOR_CTFENCODERS" ]; then export MULTIPLICITY_FACTOR_CTFENCODERS=1; fi -if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then export MULTIPLICITY_FACTOR_REST=1; fi - -[ -z "${SEVERITY_TPC+x}" ] && SEVERITY_TPC="info" # overrides severity for the tpc workflow -[ -z "${DISABLE_MC+x}" ] && DISABLE_MC="--disable-mc" -[ -z "${DISABLE_ROOT_OUTPUT+x}" ] && DISABLE_ROOT_OUTPUT="--disable-root-output" - -if [[ $(( $EXTINPUT + $CTFINPUT + $RAWTFINPUT + $DIGITINPUT )) -ge 2 ]]; then - echo Only one of EXTINPUT / CTFINPUT / RAWTFINPUT / DIGITINPUT must be set - exit 1 -fi -if [ $SAVECTF == 1 ] && [ $CTFINPUT == 1 ]; then - echo SAVECTF and CTFINPUT are incompatible - exit 1 -fi -if [ $SYNCMODE == 1 ] && [ $CTFINPUT == 1 ]; then - echo SYNCMODE and CTFINPUT are incompatible - exit 1 -fi -if [ $WORKFLOWMODE != "run" ] && [ $WORKFLOWMODE != "print" ] && [ $WORKFLOWMODE != "dds" ]; then - echo Invalid workflow mode - exit 1 -fi - -has_detector() -{ - [[ $WORKFLOW_DETECTORS =~ (^|,)"$1"(,|$) ]] -} - -has_detector_calib() -{ - has_detector $1 && [[ $WORKFLOW_DETECTORS_CALIB =~ (^|,)"$1"(,|$) ]] -} - -has_detector_reco() -{ - has_detector $1 && [[ $WORKFLOW_DETECTORS_RECO =~ (^|,)"$1"(,|$) ]] -} - -has_detector_ctf() -{ - has_detector $1 && [[ $WORKFLOW_DETECTORS_CTF =~ (^|,)"$1"(,|$) ]] -} - -has_detector_flp_processing() -{ - has_detector $1 && [[ $WORKFLOW_DETECTORS_FLP_PROCESSING =~ (^|,)"$1"(,|$) ]] -} - -has_detector_matching() -{ - [[ $WORKFLOW_DETECTORS_MATCHING =~ (^|,)"ALL"(,|$) ]] || [[ $WORKFLOW_DETECTORS_MATCHING =~ (^|,)"$1"(,|$) ]] -} - -has_detector_qc() -{ - has_detector $1 && [[ $WORKFLOW_DETECTORS_QC =~ (^|,)"$1"(,|$) ]] -} - -has_matching_qc() -{ - has_detector_matching $1 && [[ $WORKFLOW_DETECTORS_QC =~ (^|,)"$1"(,|$) ]] -} - -workflow_has_parameter() -{ - [[ $WORKFLOW_PARAMETERS =~ (^|,)"$1"(,|$) ]] -} - -_check_multiple() -{ - CHECKER=$1 - shift - while true; do - if [[ "0$1" == "0" ]]; then return 0; fi - if ! $CHECKER $1; then return 1; fi - shift - done -} - -has_detectors() -{ - _check_multiple has_detector $@ -} - -has_detectors_qc() -{ - _check_multiple has_detector_qc $@ -} - -has_detectors_calib() -{ - _check_multiple has_detector_calib $@ -} - -has_detectors_reco() -{ - _check_multiple has_detector_reco $@ -} - -has_detectors_ctf() -{ - _check_multiple has_detector_ctf $@ -} - -has_detectors_flp_processing() -{ - _check_multiple has_detector_flp_processing $@ -} - -workflow_has_parameters() -{ - _check_multiple workflow_has_parameter $@ -} - -add_comma_separated() -{ - if (( $# < 2 )); then - echo "$# parameters received" - echo "Function name: ${FUNCNAME} expects at least 2 parameters:" - echo "it concatenates the string in 1st parameter by the following" - echo "ones, forming comma-separated string. $# parameters received" - exit 1 - fi - - for ((i = 2; i <= $#; i++ )); do - if [[ -z ${!1} ]]; then - eval $1+="${!i}" - else - eval $1+=",${!i}" - fi - done -} diff --git a/production/README.md b/production/README.md index 0bc72a9..49209ed 100644 --- a/production/README.md +++ b/production/README.md @@ -1,101 +1 @@ -# Production workflows -This folder stores the production workflows for global runs, in the description library file `production.desc`. -There are currently 2 workflows: -- `synchronous-workflow`: the default workflow using 8 GPUs and 2 NUMA domains. (Note that this workflow currently does not terminate correctly: https://alice.its.cern.ch/jira/browse/O2-2375) -- `synchronous-workflow-1numa`: workfloy using only 4 GPUs without NUMA pinning. (Fully sufficient for pp) - -Standalone calibration workflows are contained in `standalone-calibration.desc`. - -If processing is to be disabled, please use the `no-processing` workflow in `no-processing.desc`. - -# Configuration options -You can use the following options to change the workflow behavior: -- `DDMODE` (default `processing`) : Must be `processing` (synchronous processing) or `processing-disk` (synchronous processing + storing of raw time frames to disk, not that this is the raw time frame not the CTF!). The `DDMODE` `discard` and `disk` are not compatible with the synchronous processing workflow, you must use the `no-processing.desc` workflow instead!. -- `WORKFLOW_DETECTORS` (default `ALL`) : Comma-separated list of detectors for which the processing is enabled. If these are less detectors than participating in the run, data of the other detectors is ignored. If these are more detectors than participating in the run, the processes for the additional detectors will be started but will not do anything. -- `WORKFLOW_DETECTORS_QC` (default `ALL`) : Comma-separated list of detectors for which to run QC, can be a subset of `WORKFLOW_DETECTORS` (for standalone detectors QC) and `WORKFLOW_DETECTORS_MATCHING` (for matching/vertexing QC). If a detector (matching/vertexing step) is not listed in `WORKFLOW_DETECTORS` (`WORKFLOW_DETECTORS_MATCHING`), the QC is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=QC` is set. -- `WORKFLOW_DETECTORS_CALIB` (default `ALL`) : Comma-separated list of detectors for which to run calibration, can be a subset of `WORKFLOW_DETECTORS`. If a detector is not listed in `WORKFLOW_DETECTORS`, the calibration is automatically disabled for that detector. Only active if the `WORKFLOW_PARAMETER=CALIB` is set. -- `WORKFLOW_DETECTORS_FLP_PROCESSING` (default `TOF` for sync processing on EPN, `NONE` otherwise) : Signals that these detectors have processing on the FLP enabled. The corresponding steps are thus inactive in the EPN epl-workflow, and the raw-proxy is configured to receive the FLP-processed data instead of the raw data in that case. -- `WORKFLOW_DETECTORS_RECO` (default `ALL`) : Comma-separated list of detectors for which to run reconstruction. -- `WORKFLOW_DETECTORS_CTF` (default `ALL`) : Comma-separated list of detectors to include in CTF. -- `WORKFLOW_DETECTORS_MATCHING` (default selected corresponding to default workflow for sync or async mode respectively) : Comma-separated list of matching / vertexing algorithms to run. Use `ALL` to enable all of them. Currently supported options (see LIST_OF_GLORECO in common/setenv.h): `ITSTPC`, `TPCTRD`, `ITSTPCTRD`, `TPCTOF`, `ITSTPCTOF`, `MFTMCH`, `PRIMVTX`, `SECVTX`. -- `WORKFLOW_EXTRA_PROCESSING_STEPS` Enable additional processing steps not in the preset for the SYNC / ASYNC mode. Possible values are: `MID_RECO` `MCH_RECO` `MFT_RECO` `FDD_RECO` `FV0_RECO` `ZDC_RECO` `ENTROPY_ENCODER` `MATCH_ITSTPC` `MATCH_TPCTRD` `MATCH_ITSTPCTRD` `MATCH_TPCTOF` `MATCH_ITSTPCTOF` `MATCH_MFTMCH` `MATCH_MFTMCH` `MATCH_PRIMVTX` `MATCH_SECVTX`. (Here `_RECO` means full async reconstruction, and can be used to enable it also in sync mode.) -- `WORKFLOW_PARAMETERS` (default `NONE`) : Comma-separated list, enables additional features of the workflow. Currently the following features are available: - - `GPU` : Performs the TPC processing on the GPU, otherwise everything is processed on the CPU. - - `CTF` : Write the CTF to disk (CTF creation is always enabled, but if this parameter is missing, it is not stored). - - `EVENT_DISPLAY` : Enable JSON export for event display. - - `QC` : Enable QC. - - `CALIB` : Enable calibration (not yet working!) -- `RECO_NUM_NODES_OVERRIDE` (default `0`) : Overrides the number of EPN nodes used for the reconstruction (`0` or empty means default). -- `MULTIPLICITY_FACTOR_RAWDECODERS` (default `1`) : Scales the number of parallel processes used for raw decoding by this factor. -- `MULTIPLICITY_FACTOR_CTFENCODERS` (default `1`) : Scales the number of parallel processes used for CTF encoding by this factor. -- `MULTIPLICITY_FACTOR_REST` (default `1`) : Scales the number of other reconstruction processes by this factor. -- `QC_JSON_EXTRA` (default `NONE`) : extra QC jsons to add (if does not fit to those defined in WORKFLOW_DETECTORS_QC & (WORKFLOW_DETECTORS | WORKFLOW_DETECTORS_MATCHING) -Most of these settings are configurable in the AliECS GUI. But some of the uncommon settings (`WORKFLOW_DETECTORS_FLP_PROCESSING`, `WORKFLOW_DETECTORS_CTF`, `WORKFLOW_DETECTORS_RECO`, `WORKFLOW_DETECTORS_MATCHING`, `WORKFLOW_EXTRA_PROCESSING_STEPS`, advanced `MULTIPLICITY_FACTOR` settings) can only be set via the "Additional environment variables field" in the GUI using bash syntax, e.g. `WORKFLOW_DETECTORS_FLP_PROCESSING=TPC`. - -# Process multiplicity factors -- The production workflow has internally a default value how many instances of a process to run in parallel (which was tuned for Pb-Pb processing) -- Some critical processes for synchronous pp processing are automatically scaled by the inverse of the number of nodes, i.e. the multiplicity is increased by a factor of 2 if 125 instead of 250 nodes are used, to enable the processing using only a subset of the nodes. -- Factors can be provided externally to scale the multiplicity of processes further. All these factors are multiplied. - - One factor can be provided based on the type of the processes: raw decoder (`MULTIPLICITY_FACTOR_RAWDECODERS`), CTF encoder (`MULTIPLICITY_FACTOR_CTFENCODERS`), or other reconstruction process (`MULTIPLICITY_FACTOR_REST`) - - One factor can be provided per detector via `MULTIPLICITY_FACTOR_DETECTOR_[DET]` using the 3 character detector representation, or `MATCH` for the global matching and vertexing workflows. -- The multiplicity of an individual process can be overridden externally (this is an override, no scaling factor) by using `MULTIPLICITY_FACTOR_PROCESS_[PROCESS_NAME]`. In the process name, dashes `-` must be replaced by underscores `_`. -- For example, creating the workflow with `MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_DETECTOR_ITS=3 MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=5` will scale the number of ITS raw decoders by 6, of other ITS processes by 3, of other raw decoders by 2, and will run exactly 5 `mft-stf-decoder` processes. - -# Additional custom control variables -For user modification of the workflow settings, the folloing *EXTRA* environment variables exist: -- `ARGS_ALL_EXTRA` : Extra command line options added to all workflows -- `ALL_EXTRA_CONFIG` : Extra config key values added to all workflows -- `GPU_EXTRA_CONFIG` : Extra options added to the configKeyValues of the GPU workflow -- `ARGS_EXTRA_PROCESS_[WORKFLOW_NAME]` : Extra command line arguments for the workflow binary `WORKFLOW_NAME`. Dashes `-` must be replaced by underscores `_` in the name! E.g. `ARGS_EXTRA_PROCESS_o2_tof_reco_workflow="--output-type clusters"` -- `CONFIG_EXTRA_PROCESS_[WORKFLOW_NAME]` : Extra `--configKeyValues` arguments for the workflow binary `WORKFLOW_NAME`. Dashes `-` must be replaced by underscores `_` in the name! E.g. `CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow="GPU_proc.debugLevel=1;GPU_proc.ompKernels=0;"` - -In case the CTF dictionaries were created from the data drastically different from the one being compressed, the default memory allocation for the CTF buffer might be insufficient. One can apply scaling factor to the buffer size estimate (default=1.5) of particular detector by defining variable e.g. `TPC_ENC_MEMFACT=3.5` - -# File input for ctf-reader / raw-tf-reader -- The variable `$INPUT_FILE_LIST` can be a comma-seperated list of file, or a file with a file-list of CTFs/raw TFs. -- The variable `$INPUT_FILE_COPY_CMD` can provide a custom copy command (default is to fetch the files from EOS). - -# Remarks on QC -The JSON files for the individual detectors are merged into one JSON file, which is cached during the run on the shared EPN home folder. -The default JSON file per detector is defined in `qc-workflow.sh`. -JSONs per detector can be overridden by exporting `QC_JSON_[DETECTOR_NAME]`, e.g. `QC_JSON_TPC`, when creating the workflow. -The global section of the merged qc JSON config is taken from qc_global.json - -# run-workflow-on-inputlist.sh -`O2/prodtests/full-system-test/run-workflow-on-inputlist.sh` is a small tool to run the `dpl-workflow.sh` on a list of files. -Technically, it is a small wrapper which just launches `dpl-workflow.sh`, and optionally the `StfBuilder` in parallel. - -*NOTE*: Currently it uses the `dpl-workflow.sh` in the O2 repo, not the O2DataProcessing repo. During development, there are 2 copies of this script. This will be cleaned up soon. - -The syntax is: -``` -run-workflow-on-inputlist.sh [CTF | DD | TF] [name of file with list of files to be processed] [Timeout in seconds (optional: default = disabled)] [Log to stdout (optional: default = enabled)] -``` -The modes are: -- DD: Read raw timeframes using DataDistribution / StfBuilder -- TF: Read raw timeframes using o2-raw-tf-reader-workflow -- CTF: Read CTFs using the o2-ctf-reader-workflow - -> **NOTE:** The DD mode does not support a list of local files as input. For processing a few local files one should use the TF mode. - -The second argument is the name of a list-files containing a list of files to be processed. -In the CTF and TF modes, it can also be a comma-separated list, but this is not supported in the DD mode. -- (The work `LOCAL` may be used to fetch files from the local folder.) -- (In case the copy command must be adjusted, use `$INPUT_FILE_COPY_CMD`) - -The third parameter is an optional timeout in seconds, after which the processing is aborted. - -The forth parameter enables writing of all workflow output to stdout in addition. -In any case the output is logged to files log_[date]_*.log. - -The tool passes all env variables on to `dpl-workflow.sh` thus it can be used in the same way. -*Note* Not that when running in `DD` mode, the SHM size for the StfBuilder must be provided. *NOTE* that this is in MB not in bytes. - -An example command line is: -``` -EPNSYNCMODE=1 WORKFLOW_DETECTORS=TPC XrdSecSSSKT=~/.eos/my.key TFDELAY=10 NTIMEFRAMES=10 SHMSIZE=32000000000 DDSHMSIZE=32000 ~/alice/O2/prodtests/full-system-test/run-workflow-on-inputlist.sh DD file_list.txt 500 1 -``` - -# Local QC testing -For testing a workflow with QC locally, the sending of data to QC mergers must be disabled. For this, the qc-workflow.sh supports the option `QC_REDIRECT_MERGER_TO_LOCALHOST=1` which redirects all messages to the remote machines to `localhost`. -Since the channels are `pub/sub` they are non-blocking. +The O2DataProcessing repository has moved, please find the instructions you are looking for [here](https://github.com/AliceO2Group/O2DPG/blob/master/DATA/production/README.md)! \ No newline at end of file diff --git a/production/calib/its-noise-aggregator.sh b/production/calib/its-noise-aggregator.sh deleted file mode 100755 index 2a63382..0000000 --- a/production/calib/its-noise-aggregator.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -source common/setenv.sh - -# --------------------------------------------------------------------------------------------------------------------- -# Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" - -PROXY_INSPEC="A:ITS/COMPCLUSTERS/0;B:ITS/PATTERNS/0;C:ITS/CLUSTERSROF/0;eos:***/INFORMATION" - -WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name its-noise-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=its-noise-input-proxy,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " -WORKFLOW+="o2-calibration-its-calib-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --prob-threshold 1e-5 | " -WORKFLOW+="o2-calibration-ccdb-populator-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ccdb-path=\"http://ccdb-test.cern.ch:8080\" | " -WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi diff --git a/production/calib/its-noise-processing.sh b/production/calib/its-noise-processing.sh deleted file mode 100755 index 273f5b1..0000000 --- a/production/calib/its-noise-processing.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -source common/setenv.sh - -# --------------------------------------------------------------------------------------------------------------------- -# Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" - -PROXY_INSPEC="A:ITS/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" -PROXY_OUTSPEC="downstreamA:ITS/COMPCLUSTERS/0;downstreamB:ITS/PATTERNS/0;downstreamC:ITS/CLUSTERSROF/0" - -WORKFLOW="o2-dpl-raw-proxy ${ARGS_ALL} --dataspec \"$PROXY_INSPEC\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " -WORKFLOW+="o2-itsmft-stf-decoder-workflow ${ARGS_ALL} --configKeyValues \"$ARGS_ALL_CONFIG\" --nthreads 4 | " -WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --proxy-channel-name its-noise-input-proxy --channel-config \"name=its-noise-input-proxy,method=connect,type=push,transport=zeromq,rateLogging=0\" | " -WORKFLOW+="o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi diff --git a/production/calib/tof-diagn-aggregator.sh b/production/calib/tof-diagn-aggregator.sh deleted file mode 100755 index 01de0bb..0000000 --- a/production/calib/tof-diagn-aggregator.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -source common/setenv.sh - -# --------------------------------------------------------------------------------------------------------------------- -# Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -ARGS_ALL_CONFIG="keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" - -PROXY_INSPEC="diagWords:TOF/DIAFREQ/0;eos:***/INFORMATION" - -WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name tof-diagn-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=tof-diagn-input-proxy,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " -WORKFLOW+="o2-calibration-tof-diagnostic-workflow --tf-per-slot 25000 --max-delay 10 $ARGS_ALL | " -WORKFLOW+="o2-calibration-ccdb-populator-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ccdb-path=\"http://ccdb-test.cern.ch:8080\" | " -WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi diff --git a/production/calib/tof-standalone-cosmic-reco-time-calib.sh b/production/calib/tof-standalone-cosmic-reco-time-calib.sh deleted file mode 100755 index 87c4ee5..0000000 --- a/production/calib/tof-standalone-cosmic-reco-time-calib.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -source common/setenv.sh - -# --------------------------------------------------------------------------------------------------------------------- -# Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" - -PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" -NTHREADS=1 -PROXY_OUTSPEC="calclus:TOF/INFOCALCLUS;cosmics:TOF/INFOCOSMICS;trkcos:TOF/INFOTRACKCOS;trksiz:TOF/INFOTRACKSIZE" -MYDIR="$(dirname $(readlink -f $0))/../../testing/detectors/TOF" - -WORKFLOW="o2-dpl-raw-proxy ${ARGS_ALL} --dataspec \"$PROXY_INSPEC\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " -WORKFLOW+="o2-tof-reco-workflow --input-type raw --output-type clusters ${ARGS_ALL} --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics --pipeline \"tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS}\" | " -WORKFLOW+="o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn | " -WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --proxy-channel-name tof-time-calib-input-proxy --channel-config \"name=tof-time-calib-input-proxy,method=connect,type=push,transport=zeromq,rateLogging=0\" | " -WORKFLOW+="o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi diff --git a/production/calib/tof-standalone-reco.sh b/production/calib/tof-standalone-reco.sh deleted file mode 100755 index 185ff11..0000000 --- a/production/calib/tof-standalone-reco.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -source common/setenv.sh - -# --------------------------------------------------------------------------------------------------------------------- -# Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" - -PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" -NTHREADS=1 -PROXY_OUTSPEC="diagWords:TOF/DIAFREQ" -MYDIR="$(dirname $(readlink -f $0))/../../testing/detectors/TOF" - -WORKFLOW="o2-dpl-raw-proxy ${ARGS_ALL} --dataspec \"$PROXY_INSPEC\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " -WORKFLOW+="o2-tof-reco-workflow --input-type raw --output-type clusters ${ARGS_ALL} --configKeyValues \"$ARGS_ALL_CONFIG\" --disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics --pipeline \"tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS}\" | " -WORKFLOW+="o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn | " -WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --proxy-channel-name tof-diagn-input-proxy --channel-config \"name=tof-diagn-input-proxy,method=connect,type=push,transport=zeromq,rateLogging=0\" | " -WORKFLOW+="o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi diff --git a/production/calib/tof-time-calib-aggregator.sh b/production/calib/tof-time-calib-aggregator.sh deleted file mode 100755 index de0b1af..0000000 --- a/production/calib/tof-time-calib-aggregator.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -source common/setenv.sh - -# --------------------------------------------------------------------------------------------------------------------- -# Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -ARGS_ALL_CONFIG="keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" - -PROXY_INSPEC="calclus:TOF/INFOCALCLUS/0;cosmics:TOF/INFOCOSMICS/0;trkcos:TOF/INFOTRACKCOS/0;trksiz:TOF/INFOTRACKSIZE/0;eos:***/INFORMATION" - -WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name tof-time-calib-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=tof-time-calib-input-proxy,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " -WORKFLOW+="o2-calibration-tof-calib-workflow --cosmics --do-channel-offset --min-entries 1000 $ARGS_ALL | " -WORKFLOW+="o2-calibration-ccdb-populator-workflow $ARGS_ALL --configKeyValues \"$ARGS_ALL_CONFIG\" --ccdb-path=\"http://ccdb-test.cern.ch:8080\" | " -WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi diff --git a/production/dpl-workflow.sh b/production/dpl-workflow.sh deleted file mode 100755 index 24922ff..0000000 --- a/production/dpl-workflow.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -if [ "0$O2_ROOT" == "0" ]; then - echo O2 environment not loaded 1>&2 - exit 1 -fi - -source $O2_ROOT/prodtests/full-system-test/dpl-workflow.sh diff --git a/production/full-system-test.desc b/production/full-system-test.desc deleted file mode 100644 index f1c2165..0000000 --- a/production/full-system-test.desc +++ /dev/null @@ -1,3 +0,0 @@ -#Full system test workflows -full-system-test-async: O2PDPSuite reco,128,126,"CTFINPUT=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" -full-system-test-sync: O2PDPSuite reco,128,126,"SYNCMODE=1 SHMSIZE=64000000000 HOSTMEMSIZE=30000000000 production/full-system-test/dpl-workflow.sh" diff --git a/production/full-system-test/setenv.sh b/production/full-system-test/setenv.sh deleted file mode 120000 index e5f7f7e..0000000 --- a/production/full-system-test/setenv.sh +++ /dev/null @@ -1 +0,0 @@ -../../common/setenv.sh \ No newline at end of file diff --git a/production/no-processing.desc b/production/no-processing.desc deleted file mode 100644 index 836bb6f..0000000 --- a/production/no-processing.desc +++ /dev/null @@ -1,3 +0,0 @@ -# Empty workflow for no processing at all -no-processing: "O2PDPSuite" -minimal-dpl: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=NONE WORKFLOW_PARAMETERS=NONE SYNCMODE=1 SHMSIZE=2000000000 SYNCMODE=1 production/dpl-workflow.sh" diff --git a/production/production.desc b/production/production.desc deleted file mode 100644 index cad8925..0000000 --- a/production/production.desc +++ /dev/null @@ -1,2 +0,0 @@ -synchronous-workflow: "O2PDPSuite" reco,128,128,"GPU_NUM_MEM_REG_CALLBACKS=5 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=0 SHMSIZE=128000000000 production/dpl-workflow.sh" reco,128,128,"GPU_NUM_MEM_REG_CALLBACKS=5 SYNCMODE=1 NUMAGPUIDS=1 NUMAID=1 SHMSIZE=128000000000 production/dpl-workflow.sh" -synchronous-workflow-1numa: "O2PDPSuite" reco,128,128,"SYNCMODE=1 production/dpl-workflow.sh" diff --git a/production/qc-async/ft0.json b/production/qc-async/ft0.json deleted file mode 100644 index fe92796..0000000 --- a/production/qc-async/ft0.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFT0": { - "active": "true", - "className": "o2::quality_control_modules::ft0::DigitQcTask", - "moduleName": "QcFT0", - "detectorName": "FT0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - } - } - } - }, - "dataSamplingPolicies": [ - ] -} diff --git a/production/qc-async/fv0.json b/production/qc-async/fv0.json deleted file mode 100644 index 433a90e..0000000 --- a/production/qc-async/fv0.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFV0": { - "active": "true", - "className": "o2::quality_control_modules::fv0::DigitQcTask", - "moduleName": "QcFV0", - "detectorName": "FV0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - } - } - } - }, - "dataSamplingPolicies": [ - ] -} diff --git a/production/qc-async/its.json b/production/qc-async/its.json deleted file mode 100644 index 7e00031..0000000 --- a/production/qc-async/its.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs:8500" - }, - "conditionDB": { - "url": "alio2-cr1-hv-qcdb1.cern.ch:8083" - } - }, - "tasks": { - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "taskParameters" : { - "runNumberPath" : "/home/its/QC/workdir/infiles/RunNumber.dat", - "vertexXYsize" : "0.1", - "vertexZsize": "15", - "vertexRsize": "0.1" - } - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query" : "Vertices:ITS/VERTICES/0;tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - } - ] -} diff --git a/production/qc-async/itstpc.json b/production/qc-async/itstpc.json deleted file mode 100644 index 087da7d..0000000 --- a/production/qc-async/itstpc.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "qc" : { - "config" : { - "database" : { - "implementation" : "CCDB", - "host" : "ali-qcdb.cern.ch:8083", - "username" : "not_applicable", - "password" : "not_applicable", - "name" : "not_applicable" - }, - "Activity" : { - "number" : "42", - "type" : "2" - }, - "monitoring" : { - "url" : "influxdb-unix:///tmp/telegraf.sock" - }, - "consul" : { - "url" : "" - }, - "conditionDB" : { - "url" : "ali-qcdb.cern.ch:8083" - }, - "infologger" : { "" : "Configuration of the Infologger (optional).", - "filterDiscardDebug" : "1", - "" : "Set to true to discard debug and trace messages (default: false)", - "filterDiscardLevel" : "21", - "" : "Message at this level or above are discarded (default: 21 - Trace)" } - }, - "tasks" : { - "MatchedTracksITSTPC" : { - "active" : "true", - "className" : "o2::quality_control_modules::glo::ITSTPCMatchingTask", - "moduleName" : "QcGLO", - "detectorName" : "GLO", - "cycleDurationSeconds" : "3600", - "maxNumberCycles" : "-1", - "dataSource" : { - "type" : "direct", - "query_comment" : "checking every matched track", - "query" : "trackITSTPC:GLO/TPCITS/0;trackITSTPCABREFS:GLO/TPCITSAB_REFS/0;trackITSTPCABCLID:GLO/TPCITSAB_CLID/0;trackTPC:TPC/TRACKS;trackTPCClRefs:TPC/CLUSREFS" - }, - "taskParameters" : { - "GID" : "ITS-TPC,ITS", - "verbose" : "false", - "minPtCut" : "0.1f", - "etaCut" : "1.4f", - "minNTPCClustersCut" : "40", - "minDCACut" : "100.f", - "minDCACutY" : "10.f", - "grpFileName" : "o2sim_grp.root", - "geomFileName" : "o2sim_geometry.root" - }, - "saveObjectsToFile" : "ITSTPCmatched.root", - "" : "For debugging, path to the file where to save. If empty or missing it won't save." - } - } - }, - "dataSamplingPolicies" : [ - ] -} - diff --git a/production/qc-async/itstpctof.json b/production/qc-async/itstpctof.json deleted file mode 100644 index 3cfc016..0000000 --- a/production/qc-async/itstpctof.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "MatchingTOF": { - "active": "true", - "className": "o2::quality_control_modules::tof::TOFMatchedTracks", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query_comment": "checking every matched track", - "query": "matchITSTPCTOF:TOF/MTC_ITSTPC/0;matchTPCTOF:TOF/MTC_TPC/0;trackTPCTOF:TOF/TOFTRACKS_TPC/0;trackITSTPC:GLO/TPCITS/0;trackITSTPCABREFS:GLO/TPCITSAB_REFS/0;trackITSTPCABCLID:GLO/TPCITSAB_CLID/0;trackTPC:TPC/TRACKS/0;trackTPCClRefs:TPC/CLUSREFS/0;tofcluster:TOF/CLUSTERS/0" - }, - "taskParameters": { - "GID": "ITS-TPC,TPC,ITS-TPC-TOF,TPC-TOF", - "verbose": "false", - "minPtCut": "0.1f", - "etaCut": "1.4f", - "minNTPCClustersCut": "40", - "minDCACut": "100.f", - "minDCACutY": "10.f", - "grpFileName": "o2sim_grp.root", - "geomFileName": "o2sim_geometry.root" - }, - "saveObjectsToFile": "TOFmatchedITSTPCTOF_TPCTOF.root", - "": "For debugging, path to the file where to save. If empty or missing it won't save." - } - } - }, - "dataSamplingPolicies": [ - { - "id": "digi-local", - "active": "true", - "machines": [], - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} - diff --git a/production/qc-async/mft.json b/production/qc-async/mft.json deleted file mode 100644 index 5895293..0000000 --- a/production/qc-async/mft.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "QcMFTAsync": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTAsyncTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-async" - }, - "taskParameters": { - "ROFLengthInBC": "198", - "MaxTrackROFSize": "1000", - "MaxClusterROFSize": "5000", - "MaxDuration": "60000", - "TimeBinSize": "0.1", - "RefOrbit": "0" - } - } - }, - "checks": {} - }, - "dataSamplingPolicies": [ - { - "id": "mft-async", - "active": "true", - "machines": [], - "query": "tracks:MFT/TRACKS/0;tracksrofs:MFT/MFTTrackROF/0;clusters:MFT/COMPCLUSTERS/0;clustersrofs:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.05", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/production/qc-async/mid.json b/production/qc-async/mid.json deleted file mode 100644 index 56a9fca..0000000 --- a/production/qc-async/mid.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ali-qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "null:8500" - }, - "conditionDB": { - "url": "null:8083" - } - }, - "tasks": { - "QcTaskMIDDigits": { - "active": "true", - "className": "o2::quality_control_modules::mid::DigitsQcTask", - "moduleName": "QcMID", - "detectorName": "MID", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "digits:MID/DATA/0;digitrofs:MID/DATAROF/0;calib:MID/DATA/1;calibrofs:MID/DATAROF/1;fet:MID/DATA/2;fetrofs:MID/DATAROF/2" - } - } - } - }, - "dataSamplingPolicies": [ - ] -} diff --git a/production/qc-async/primvtx.json b/production/qc-async/primvtx.json deleted file mode 100644 index 5a88f2e..0000000 --- a/production/qc-async/primvtx.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "qc" : { - "config" : { - "database" : { - "implementation" : "CCDB", - "host" : "ali-qcdb.cern.ch:8083", - "username" : "not_applicable", - "password" : "not_applicable", - "name" : "not_applicable" - }, - "Activity" : { - "number" : "42", - "type" : "2" - }, - "monitoring" : { - "url" : "influxdb-unix:///tmp/telegraf.sock" - }, - "consul" : { - "url" : "" - }, - "conditionDB" : { - "url" : "ali-qcdb.cern.ch:8083" - }, - "infologger" : { "" : "Configuration of the Infologger (optional).", - "filterDiscardDebug" : "1", - "" : "Set to true to discard debug and trace messages (default: false)", - "filterDiscardLevel" : "21", - "" : "Message at this level or above are discarded (default: 21 - Trace)" } - }, - "tasks" : { - "Vertexing" : { - "active" : "true", - "className" : "o2::quality_control_modules::glo::VertexingQcTask", - "moduleName" : "QcGLO", - "detectorName" : "GLO", - "cycleDurationSeconds" : "60", - "maxNumberCycles" : "-1", - "dataSource" : { - "type" : "direct", - "query": "pvtx:GLO/PVTX/0" - }, - "taskParameters" : { - "isMC": "false" - } - } - } - }, - "dataSamplingPolicies" : [ - ] -} - diff --git a/production/qc-async/tof.json b/production/qc-async/tof.json deleted file mode 100644 index 87e1717..0000000 --- a/production/qc-async/tof.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "TaskDigits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskDigits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "digi-local" - } - } - }, - "checks": { - "CheckRawMultiplicity": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", - "moduleName": "QcTOF", - "policy": "OnAny", - "detectorName": "TOF", - "dataSource": [ - { - "type": "Task", - "name": "TaskDigits", - "MOs": [ - "TOFRawsMulti" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - { - "id": "digi-local", - "active": "true", - "machines": [ - "epn", - "localhost" - ], - "port": "30333", - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} - diff --git a/production/qc-async/tpc.json b/production/qc-async/tpc.json deleted file mode 100644 index b391e10..0000000 --- a/production/qc-async/tpc.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "aaa", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "infologger": { - "filterDiscardDebug": "true", - "filterDiscardLevel": "1" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "Clusters": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "60", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputClus:TPC/CLUSTERNATIVE" - }, - "taskParameters": { - "mergeableOutput": "true", - "NClustersNBins": "100", "NClustersXMin": "0", "NClustersXMax": "100", - "QmaxNBins": "200", "QmaxXMin": "0", "QmaxXMax": "200", - "QtotNBins": "600", "QtotXMin": "10", "QtotXMax": "600", - "SigmaPadNBins": "200", "SigmaPadXMin": "0", "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", "SigmaTimeXMin": "0", "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", "TimeBinXMin": "0", "TimeBinXMax": "100000" - } - }, - "PID": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "60", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query" : "inputTracks:TPC/TRACKS/0" - } - }, - "Tracks": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "60", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query" : "inputTracks:TPC/TRACKS/0" - } - } - } - }, - "dataSamplingPolicies": [ - ] -} diff --git a/production/qc-sync/emc.json b/production/qc-sync/emc.json deleted file mode 100644 index b0bf738..0000000 --- a/production/qc-sync/emc.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "infologger": { - "filterDiscardDebug": "true", - "filterDiscardLevel": "1" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawTask": { - "active": "true", - "className": "o2::quality_control_modules::emcal::RawTask", - "moduleName": "QcEMCAL", - "detectorName": "EMC", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "emcrawdata" - }, - "location": "local", - "localMachines": [ - "epn" - ], - "remoteMachine": "alio2-cr1-qc02.cern.ch", - "remotePort": "47701", - "mergingMode": "delta", - "localControl": "odc" - }, - "DigitsTask": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitsQcTask", - "moduleName": "QcEMCAL", - "detectorName": "EMC", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "emccells" - }, - "taskParameters": { - "nothing": "rien" - }, - "location": "local", - "localMachines": [ - "epn" - ], - "remoteMachine": "alio2-cr1-qc02.cern.ch", - "remotePort": "47702", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "RawBunchMinAmplitude": { - "active": "true", - "className": "o2::quality_control_modules::emcal::RawCheck", - "moduleName": "QcEMCAL", - "policy": "OnEachSeparately", - "dataSource": [ - { - "type": "Task", - "name": "RawTask", - "MOs": ["BunchMinRawAmplitudeFull_PHYS", "BunchMinRawAmplitudeEMCAL_PHYS", "BunchMinRawAmplitudeDCAL_PHYS", - "BunchMinRawAmplitude_SM0_PHYS", "BunchMinRawAmplitude_SM1_PHYS", "BunchMinRawAmplitude_SM2_PHYS", - "BunchMinRawAmplitude_SM3_PHYS", "BunchMinRawAmplitude_SM4_PHYS", "BunchMinRawAmplitude_SM5_PHYS", - "BunchMinRawAmplitude_SM6_PHYS", "BunchMinRawAmplitude_SM7_PHYS", "BunchMinRawAmplitude_SM8_PHYS", - "BunchMinRawAmplitude_SM9_PHYS", "BunchMinRawAmplitude_SM10_PHYS", "BunchMinRawAmplitude_SM11_PHYS", - "BunchMinRawAmplitude_SM12_PHYS", "BunchMinRawAmplitude_SM13_PHYS", "BunchMinRawAmplitude_SM14_PHYS", - "BunchMinRawAmplitude_SM15_PHYS", "BunchMinRawAmplitude_SM16_PHYS", "BunchMinRawAmplitude_SM17_PHYS", - "BunchMinRawAmplitude_SM18_PHYS", "BunchMinRawAmplitude_SM19_PHYS" - ] - } - ] - }, - "RawErrorCheck": { - "active": "true", - "className": "o2::quality_control_modules::emcal::RawCheck", - "moduleName": "QcEMCAL", - "policy": "OnEachSeparately", - "dataSource": [ - { - "type": "Task", - "name": "RawTask", - "MOs": ["ErrorTypePerSM"] - } - ] - }, - "DigitsCheckAmplitude": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnEachSeparately", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": ["digitAmplitudeEMCAL_CAL", "digitAmplitudeEMCAL_PHYS", "digitAmplitudeDCAL_CAL", "digitAmplitudeDCAL_PHYS", - "digitAmplitude_CAL", "digitAmplitude_PHYS" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - { - "id": "emcrawdata", - "active": "true", - "machines": ["epn"], - "query": "readout:EMC/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1248" - } - ], - "blocking": "false" - }, - { - "id": "emccells", - "active": "true", - "machines": ["epn"], - "query": "emcal-digits:EMC/CELLS;emcal-triggerecords:EMC/CELLSTRGR", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1248" - } - ], - "blocking": "false" - } - ] - } \ No newline at end of file diff --git a/production/qc-sync/fdd.json b/production/qc-sync/fdd.json deleted file mode 100644 index 5855c29..0000000 --- a/production/qc-sync/fdd.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFDD": { - "active": "true", - "className": "o2::quality_control_modules::fdd::DigitQcTask", - "moduleName": "QcFDD", - "detectorName": "FDD", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "mergerCycleMultiplier": "2", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "fdd-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47720", - "mergingMode": "delta", - "localControl": "odc" - - } - } - }, - "dataSamplingPolicies": [ - { - "id": "fdd-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - } - ] -} \ No newline at end of file diff --git a/production/qc-sync/ft0.json b/production/qc-sync/ft0.json deleted file mode 100644 index 088321f..0000000 --- a/production/qc-sync/ft0.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFT0": { - "active": "true", - "className": "o2::quality_control_modules::ft0::DigitQcTask", - "moduleName": "QcFT0", - "detectorName": "FT0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "ft0-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47721", - "mergingMode": "delta", - "mergerCycleMultiplier": "2", - "localControl": "odc" - - } - } - }, - "dataSamplingPolicies": [ - { - "id": "ft0-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - } - ] -} \ No newline at end of file diff --git a/production/qc-sync/fv0.json b/production/qc-sync/fv0.json deleted file mode 100644 index 8020f8d..0000000 --- a/production/qc-sync/fv0.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFV0": { - "active": "true", - "className": "o2::quality_control_modules::fv0::DigitQcTask", - "moduleName": "QcFV0", - "detectorName": "FV0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "mergerCycleMultiplier": "2", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "fv0-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47722", - "mergingMode": "delta", - "localControl": "odc" - } - } - }, - "dataSamplingPolicies": [ - { - "id": "fv0-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - } - ] -} \ No newline at end of file diff --git a/production/qc-sync/its.json b/production/qc-sync/its.json deleted file mode 100644 index 055cc99..0000000 --- a/production/qc-sync/its.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs:8500" - }, - "conditionDB": { - "url": "alio2-cr1-hv-qcdb1.cern.ch:8083" - } - }, - "tasks": { - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - }, - "localMachines": [ - "localhost", "epn" - ], - "localControl": "odc", - "remotePort": "47705", - "remoteMachine": "alio2-cr1-qme04.cern.ch" - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "taskParameters" : { - "runNumberPath" : "/home/its/QC/workdir/infiles/RunNumber.dat", - "vertexXYsize" : "0.1", - "vertexZsize": "15", - "vertexRsize": "0.1" - }, - "localMachines": [ - "localhost", "epn" - ], - "localControl": "odc", - "remotePort": "47706", - "remoteMachine": "alio2-cr1-qme04.cern.ch" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query" : "Vertices:ITS/VERTICES/0;tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - } - ] -} - diff --git a/production/qc-sync/mch.json b/production/qc-sync/mch.json deleted file mode 100644 index 51bc1a4..0000000 --- a/production/qc-sync/mch.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "null:8500" - }, - "conditionDB": { - "url": "null:8083" - } - }, - "tasks": { - "Digits": { - "active": "true", - "className": "o2::quality_control_modules::muonchambers::PhysicsTaskDigits", - "moduleName": "QcMuonChambers", - "detectorName": "MCH", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mch-digits" - }, - "location": "local", - "mergingMode": "delta", - "localControl": "odc", - "localMachines": [ - "epn", - "localhost" - ], - "remotePort": "47790", - "remoteMachine": "alio2-cr1-qc01.cern.ch" - } - }, - "checks": { - "QcCheckMCHPhysics": { - "active": "true", - "className": "o2::quality_control_modules::muonchambers::PhysicsOccupancyCheck", - "moduleName": "QcMuonChambers", - "policy": "OnAll", - "detectorName": "MCH", - "dataSource": [ - { - "type": "Task", - "name": "Digits", - "MOs": "all" - } - ] - } - } - }, - "dataSamplingPolicies": [ - { - "id": "mch-digits", - "active": "true", - "machines": [], - "query": "digits:MCH/DIGITS/0;orbits:MCH/ORBITS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.5", - "seed": "1441" - } - ], - "blocking": "false" - } - ] -} diff --git a/production/qc-sync/mft.json b/production/qc-sync/mft.json deleted file mode 100644 index c4b7f64..0000000 --- a/production/qc-sync/mft.json +++ /dev/null @@ -1,154 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ali-qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-head01:8500" - }, - "conditionDB": { - "url": "http://localhost:8084" - } - }, - "tasks": { - "QcMFTReadoutTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTReadoutTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "filter:MFT/RAWDATA" - }, - "location": "local", - "localMachines": [ - "flp" - ], - "remoteMachine": "any", - "remotePort": "47798" - }, - "QcMFTDigitTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTDigitTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "randomdigit:MFT/DIGITS/0" - }, - "taskParameters": { - "FLP": "0", - "TaskLevel": "1" - }, - "location": "local", - "localMachines": [ - "flp" - ], - "remoteMachine": "any", - "remotePort": "47799" - }, - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme05.cern.ch", - "remotePort": "47797", - "localControl": "odc" - } - }, - "checks": { - "QcMFTReadoutCheck": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTReadoutCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnEachSeparately", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTReadoutTask", - "MOs": [ - "mMFTSummaryLaneStatus" - ] - } - ] - }, - "QcMFTDigitCheck": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTDigitCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnEachSeparately", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTDigitTask" - } - ] - }, - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": [ - "mMFTClusterSensorIndex" - ] - } - ], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - } - } - }, - "dataSamplingPolicies": [ - { - "id": "mft-clusters", - "active": "true", - "machines": [ - "epn", - "localhost" - ], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/production/qc-sync/mid.json b/production/qc-sync/mid.json deleted file mode 100644 index d270a68..0000000 --- a/production/qc-sync/mid.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ali-qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "null:8500" - }, - "conditionDB": { - "url": "null:8083" - } - }, - "tasks": { - "QcTaskMIDDigits": { - "active": "true", - "className": "o2::quality_control_modules::mid::DigitsQcTask", - "moduleName": "QcMID", - "detectorName": "MID", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "middigits" - }, - "location": "local", - "mergingMode": "delta", - "localControl": "odc", - "localMachines": [ - "epn", - "localhost" - ], - "remotePort": "47780", - "remoteMachine": "alio2-cr1-qme02.cern.ch" - } - } - }, - "dataSamplingPolicies": [ - { - "id": "middigits", - "active": "true", - "machines": [], - "query": "digits:MID/DATA/0;digitrofs:MID/DATAROF/0;calib:MID/DATA/1;calibrofs:MID/DATAROF/1;fet:MID/DATA/2;fetrofs:MID/DATAROF/2", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1", - "seed": "1441" - } - ], - "blocking": "false" - } - ] -} \ No newline at end of file diff --git a/production/qc-sync/pvtx.json b/production/qc-sync/pvtx.json deleted file mode 100644 index 1d31a86..0000000 --- a/production/qc-sync/pvtx.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "qc" : { - "config" : { - "database" : { - "implementation" : "CCDB", - "host" : "ali-qcdb.cern.ch:8083", - "username" : "not_applicable", - "password" : "not_applicable", - "name" : "not_applicable" - }, - "Activity" : { - "number" : "42", - "type" : "2" - }, - "monitoring" : { - "url" : "influxdb-unix:///tmp/telegraf.sock" - }, - "consul" : { - "url" : "" - }, - "conditionDB" : { - "url" : "ali-qcdb.cern.ch:8083" - }, - "infologger" : { "" : "Configuration of the Infologger (optional).", - "filterDiscardDebug" : "1", - "" : "Set to true to discard debug and trace messages (default: false)", - "filterDiscardLevel" : "21", - "" : "Message at this level or above are discarded (default: 21 - Trace)" } - }, - "tasks" : { - "Vertexing" : { - "active" : "true", - "className" : "o2::quality_control_modules::glo::VertexingQcTask", - "moduleName" : "QcGLO", - "detectorName" : "GLO", - "cycleDurationSeconds" : "10", - "maxNumberCycles" : "-1", - "" : "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource" : { - "type" : "dataSamplingPolicy", - "name" : "tst-raw" - }, - "taskParameters" : { - "myOwnKey" : "myOwnValue" - }, - "location" : "local", - "localMachines": [ "localhost", "epn" ], - "remoteMachine": "alio2-cr1-qme04.cern.ch", - "remotePort": "47706" - } - }, - "checks" : { - "QcCheck" : { - "active" : "false", - "className" : "o2::quality_control_modules::skeleton::SkeletonCheck", - "moduleName" : "QcSkeleton", - "policy" : "OnAny", - "detectorName" : "GLO", - "dataSource" : [ { - "type" : "Task", - "name" : "Vertexing", - "MOs" : ["example"] - } ] - } - } - }, - "dataSamplingPolicies" : [ - { - "id" : "tst-raw", - "active" : "true", - "machines" : [], - "query" : "pvtx:GLO/PVTX/0", - "samplingConditions" : [ - { - "condition" : "random", - "fraction" : "0.1", - "seed" : "1234" - } - ], - "blocking" : "false" - } - ] -} diff --git a/production/qc-sync/tof.json b/production/qc-sync/tof.json deleted file mode 100644 index 08b5d68..0000000 --- a/production/qc-sync/tof.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "TaskRaw": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskRaw", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "raw-local" - }, - "location": "local", - "localMachines": [ - "alio2-cr1-flp178", - "alio2-cr1-flp179" - ], - "remoteMachine": "localhost", - "remotePort": "30132", - "mergingMode": "delta" - }, - "TaskDigits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskDigits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "digi-local" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qc03.cern.ch", - "remotePort": "47708", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "postprocessing": { - "TOFTrendingHits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TrendingHits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "dataSources": [ - { - "type": "repository", - "path": "qc/TOF/MO/TaskDigits", - "names": [ - "TOFRawsMulti" - ], - "reductorName": "o2::quality_control_modules::common::TH1Reductor", - "moduleName": "QcCommon" - } - ], - "plots": [ - { - "name": "mean_of_hits", - "title": "Mean trend of TOF hits", - "varexp": "TOFRawsMulti.mean:time", - "selection": "", - "option": "*L" - } - ], - "initTrigger": [ - "userorcontrol" - ], - "updateTrigger": [ - "newobject:qcdb:qc/TOF/MO/TaskDigits/TOFRawsMulti" - ], - "stopTrigger": [ - "userorcontrol" - ] - } - }, - "checks": { - "CheckDiagnostics": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckDiagnostics", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "RDHCounterCrate0" - ] - } - ] - }, - "CheckCompressedData": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckCompressedData", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "checkParameters": { - "DiagnosticThresholdPerSlot": "10" - }, - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "hDiagnostic" - ] - } - ] - }, - "CheckRawMultiplicity": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", - "moduleName": "QcTOF", - "policy": "OnAny", - "detectorName": "TOF", - "dataSource": [ - { - "type": "Task", - "name": "TaskDigits", - "MOs": [ - "TOFRawsMulti" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - { - "id": "raw-local", - "active": "true", - "machines": [ - "alio2-cr1-flp178", - "alio2-cr1-flp179" - ], - "query": "dataframe:TOF/CRAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ], - "dataSamplingPolicies": [ - { - "id": "digi-local", - "active": "true", - "machines": [ - "epn", - "localhost" - ], - "port": "30333", - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/production/qc-sync/tpc.json b/production/qc-sync/tpc.json deleted file mode 100644 index 694e6c6..0000000 --- a/production/qc-sync/tpc.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "al-qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "infologger": { - "filterDiscardDebug": "true", - "filterDiscardLevel": "1" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "60", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": { - "NRawDigitsNBins": "100", "NRawDigitsXMin": "0", "NRawDigitsXMax": "100", - "QmaxNBins": "200", "QmaxXMin": "0", "QmaxXMax": "200", - "TimeBinNBins": "600", "TimeBinXMin": "0", "TimeBinXMax": "600" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "DummyTask": { - "active": "true", - "className": "o2::quality_control_modules::skeleton::SkeletonTask", - "moduleName": "Dummy", - "detectorName": "TST", - "cycleDurationSeconds": "10000000", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata-om" - }, - "location": "remote", - "remoteMachine": "tpc-login-ib" - }, - "Clusters": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "60", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue", - "NClustersNBins": "100", "NClustersXMin": "0", "NClustersXMax": "100", - "QmaxNBins": "200", "QmaxXMin": "0", "QmaxXMax": "200", - "QtotNBins": "600", "QtotXMin": "10", "QtotXMax": "600", - "SigmaPadNBins": "200", "SigmaPadXMin": "0", "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", "SigmaTimeXMin": "0", "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", "TimeBinXMin": "0", "TimeBinXMax": "100000" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "60", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query" : "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "60", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query" : "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - } - } - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.001", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata-om", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32629", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS2/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.0005", - "seed": "0" - } - ], - "blocking": "false" - } - ] -} diff --git a/production/qc-workflow.sh b/production/qc-workflow.sh deleted file mode 100644 index d2f952c..0000000 --- a/production/qc-workflow.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/bash - -if [[ -z "$WORKFLOW" ]] || [[ -z "$MYDIR" ]]; then - echo This script must be called from the dpl-workflow.sh and not standalone 1>&2 - exit 1 -fi - -if [[ -z $QC_JSON_FROM_OUTSIDE ]]; then - if [[ $SYNCMODE == 1 ]] && [[ $EPNMODE == 1 ]]; then - [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=/home/rmunzer/odc/config/tpcQCTasks_multinode_ALL.json - [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json - [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=/home/epn/odc/files/qc-mft-cluster-merger-raw-digit-cluster.json - [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=/home/fnoferin/public/tof-qc-globalrun.json - [[ -z "$QC_JSON_FDD" ]] && QC_JSON_FDD=/home/afurs/O2DataProcessing/testing/detectors/FDD/fdd-digits-ds.json - [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=/home/afurs/O2DataProcessing/testing/detectors/FT0/ft0-digits-ds.json - [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=/home/afurs/O2DataProcessing/testing/detectors/FV0/fv0-digits-ds.json - [[ -z "$QC_JSON_EMC" ]] && QC_JSON_EMC=/home/mfasel/alice/O2DataProcessing/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json - [[ -z "$QC_JSON_MCH" ]] && QC_JSON_MCH=/home/laphecet/qc_configs/mch-qc-physics.json - [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=/home/dstocco/config/mid-qcmn-epn-digits.json - [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=/home/shahoian/jsons/vertexing-qc.json - elif [[ $SYNCMODE == 1 ]]; then - [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=$O2DATAPROCESSING_ROOT/production/qc-sync/tpc.json - [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=$O2DATAPROCESSING_ROOT/production/qc-sync/its.json - [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=$O2DATAPROCESSING_ROOT/production/qc-sync/mft.json - [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=$O2DATAPROCESSING_ROOT/production/qc-sync/tof.json - [[ -z "$QC_JSON_FDD" ]] && QC_JSON_FDD=$O2DATAPROCESSING_ROOT/production/qc-sync/fdd.json - [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=$O2DATAPROCESSING_ROOT/production/qc-sync/ft0.json - [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=$O2DATAPROCESSING_ROOT/production/qc-sync/fv0.json - [[ -z "$QC_JSON_EMC" ]] && QC_JSON_EMC=$O2DATAPROCESSING_ROOT/production/qc-sync/emc.json - [[ -z "$QC_JSON_MCH" ]] && QC_JSON_MCH=$O2DATAPROCESSING_ROOT/production/qc-sync/mch.json - [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=$O2DATAPROCESSING_ROOT/production/qc-sync/mid.json - [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=$O2DATAPROCESSING_ROOT/production/qc-sync/pvtx.json - else - [[ -z "$QC_JSON_TPC" ]] && QC_JSON_TPC=$O2DATAPROCESSING_ROOT/production/qc-async/tpc.json - [[ -z "$QC_JSON_ITS" ]] && QC_JSON_ITS=$O2DATAPROCESSING_ROOT/production/qc-async/its.json - [[ -z "$QC_JSON_MFT" ]] && QC_JSON_MFT=$O2DATAPROCESSING_ROOT/production/qc-async/mft.json - [[ -z "$QC_JSON_TOF" ]] && QC_JSON_TOF=$O2DATAPROCESSING_ROOT/production/qc-async/tof.json - [[ -z "$QC_JSON_FT0" ]] && QC_JSON_FT0=$O2DATAPROCESSING_ROOT/production/qc-async/ft0.json - [[ -z "$QC_JSON_FV0" ]] && QC_JSON_FV0=$O2DATAPROCESSING_ROOT/production/qc-async/fv0.json - [[ -z "$QC_JSON_MID" ]] && QC_JSON_MID=$O2DATAPROCESSING_ROOT/production/qc-async/mid.json - [[ -z "$QC_JSON_GLO" ]] && QC_JSON_GLO=$O2DATAPROCESSING_ROOT/production/qc-async/glo.json - [[ -z "$QC_JSON_PRIMVTX" ]] && QC_JSON_PRIMVTX=$O2DATAPROCESSING_ROOT/production/qc-async/primvtx.json - [[ -z "$QC_JSON_ITSTPC" ]] && QC_JSON_ITSTPC=$O2DATAPROCESSING_ROOT/production/qc-async/itstpc.json - [[ -z "$QC_JSON_ITSTPCTOF" ]] && QC_JSON_ITSTPCTOF=$O2DATAPROCESSING_ROOT/production/qc-async/itstpctof.json - fi - - if [[ -z "$GEN_TOPO_WORKDIR" ]]; then - echo This script must be run via the gen_topo scripts, or a GEN_TOPO_WORKDIR must be provided where merged JSONS are stored 1>&2 - exit 1 - fi - - JSON_FILES= - OUTPUT_SUFFIX= - for i in `echo $LIST_OF_DETECTORS | sed "s/,/ /g"`; do - DET_JSON_FILE="QC_JSON_$i" - if has_detector_qc $i && [ ! -z "${!DET_JSON_FILE}" ]; then - JSON_FILES+=" ${!DET_JSON_FILE}" - OUTPUT_SUFFIX+="-$i" - fi - done - - # matching / vertexing QC - for i in `echo $LIST_OF_GLORECO | sed "s/,/ /g"`; do - GLO_JSON_FILE="QC_JSON_$i" - if has_detector_matching $i && has_matching_qc $i && [ ! -z "${!GLO_JSON_FILE}" ]; then - JSON_FILES+=" ${!GLO_JSON_FILE}" - OUTPUT_SUFFIX+="-$i" - fi - done - - # arbitrary extra QC - if [[ ! -z "$QC_JSON_EXTRA" ]]; then - JSON_FILES+=" ${QC_JSON_EXTRA}" - OUTPUT_SUFFIX+="-EXTRA" - fi - - if [[ ! -z "$JSON_FILES" ]]; then - mkdir -p $GEN_TOPO_WORKDIR/json_cache - if [[ "0$GEN_TOPO_ONTHEFLY" == "01" ]]; then - find $GEN_TOPO_WORKDIR/json_cache/ -maxdepth 1 -type f -mtime +30 | xargs rm -f - fi - MERGED_JSON_FILENAME=$GEN_TOPO_WORKDIR/json_cache/`date +%Y%m%d-%H%M%S`-$$-$RANDOM-$OUTPUT_SUFFIX.json - jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' $MYDIR/qc_global.json $JSON_FILES > $MERGED_JSON_FILENAME - if [[ $? != 0 ]]; then - echo Merging QC workflow with JSON files $JSON_FILES failed 1>&2 - exit 1 - fi - MERGED_JSON_FILENAME=`realpath $MERGED_JSON_FILENAME` - - if [[ "0$QC_REDIRECT_MERGER_TO_LOCALHOST" == "01" ]]; then - sed -i -E 's/( *)"remoteMachine" *: *".*"(,|) *$/\1"remoteMachine": "127.0.0.1"\2/' $MERGED_JSON_FILENAME - fi - QC_JSON_FROM_OUTSIDE="$MERGED_JSON_FILENAME" - fi -fi - -if [[ ! -z "$QC_JSON_FROM_OUTSIDE" ]]; then - add_W o2-qc "--config json://$QC_JSON_FROM_OUTSIDE ${QC_CONFIG_PARAM:---local --host ${QC_HOST:-localhost}}" "" 0 -fi diff --git a/production/qc_global.json b/production/qc_global.json deleted file mode 100644 index 6f5b448..0000000 --- a/production/qc_global.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ali-qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "" - }, - "conditionDB": { - "url": "http://localhost:8084" - }, - "infologger": { - "filterDiscardDebug": "true", - "filterDiscardLevel": "1" - } - } - } -} diff --git a/production/setenv.sh b/production/setenv.sh deleted file mode 120000 index e25923b..0000000 --- a/production/setenv.sh +++ /dev/null @@ -1 +0,0 @@ -../common/setenv.sh \ No newline at end of file diff --git a/production/standalone-calibration.desc b/production/standalone-calibration.desc deleted file mode 100644 index 1e9af1d..0000000 --- a/production/standalone-calibration.desc +++ /dev/null @@ -1,5 +0,0 @@ -ITS-noise-calibration: "O2PDPSuite" reco,10,10,"production/calib/its-noise-processing.sh" calib,10,"production/calib/its-noise-aggregator.sh" - -TOF-diagnostic-calibration: "O2PDPSuite" reco,10,10,"SHMSIZE=64000000000 production/calib/tof-standalone-reco.sh" calib,4,"production/calib/tof-diagn-aggregator.sh" - -TOF-time-calibration: "O2PDPSuite" reco,10,10,"SHMSIZE=64000000000 production/calib/tof-standalone-cosmic-reco-time-calib.sh" calib,4,"production/calib/tof-time-calib-aggregator.sh" diff --git a/testing/detectors/CPV/workflows.desc b/testing/detectors/CPV/workflows.desc deleted file mode 100644 index e69de29..0000000 diff --git a/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json b/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json deleted file mode 100644 index b0bf738..0000000 --- a/testing/detectors/EMC/qc/emcQCTasksAll_multinode.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "alio2-cr1-hv-qcdb1.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "infologger": { - "filterDiscardDebug": "true", - "filterDiscardLevel": "1" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawTask": { - "active": "true", - "className": "o2::quality_control_modules::emcal::RawTask", - "moduleName": "QcEMCAL", - "detectorName": "EMC", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "emcrawdata" - }, - "location": "local", - "localMachines": [ - "epn" - ], - "remoteMachine": "alio2-cr1-qc02.cern.ch", - "remotePort": "47701", - "mergingMode": "delta", - "localControl": "odc" - }, - "DigitsTask": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitsQcTask", - "moduleName": "QcEMCAL", - "detectorName": "EMC", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "emccells" - }, - "taskParameters": { - "nothing": "rien" - }, - "location": "local", - "localMachines": [ - "epn" - ], - "remoteMachine": "alio2-cr1-qc02.cern.ch", - "remotePort": "47702", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "RawBunchMinAmplitude": { - "active": "true", - "className": "o2::quality_control_modules::emcal::RawCheck", - "moduleName": "QcEMCAL", - "policy": "OnEachSeparately", - "dataSource": [ - { - "type": "Task", - "name": "RawTask", - "MOs": ["BunchMinRawAmplitudeFull_PHYS", "BunchMinRawAmplitudeEMCAL_PHYS", "BunchMinRawAmplitudeDCAL_PHYS", - "BunchMinRawAmplitude_SM0_PHYS", "BunchMinRawAmplitude_SM1_PHYS", "BunchMinRawAmplitude_SM2_PHYS", - "BunchMinRawAmplitude_SM3_PHYS", "BunchMinRawAmplitude_SM4_PHYS", "BunchMinRawAmplitude_SM5_PHYS", - "BunchMinRawAmplitude_SM6_PHYS", "BunchMinRawAmplitude_SM7_PHYS", "BunchMinRawAmplitude_SM8_PHYS", - "BunchMinRawAmplitude_SM9_PHYS", "BunchMinRawAmplitude_SM10_PHYS", "BunchMinRawAmplitude_SM11_PHYS", - "BunchMinRawAmplitude_SM12_PHYS", "BunchMinRawAmplitude_SM13_PHYS", "BunchMinRawAmplitude_SM14_PHYS", - "BunchMinRawAmplitude_SM15_PHYS", "BunchMinRawAmplitude_SM16_PHYS", "BunchMinRawAmplitude_SM17_PHYS", - "BunchMinRawAmplitude_SM18_PHYS", "BunchMinRawAmplitude_SM19_PHYS" - ] - } - ] - }, - "RawErrorCheck": { - "active": "true", - "className": "o2::quality_control_modules::emcal::RawCheck", - "moduleName": "QcEMCAL", - "policy": "OnEachSeparately", - "dataSource": [ - { - "type": "Task", - "name": "RawTask", - "MOs": ["ErrorTypePerSM"] - } - ] - }, - "DigitsCheckAmplitude": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnEachSeparately", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": ["digitAmplitudeEMCAL_CAL", "digitAmplitudeEMCAL_PHYS", "digitAmplitudeDCAL_CAL", "digitAmplitudeDCAL_PHYS", - "digitAmplitude_CAL", "digitAmplitude_PHYS" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - { - "id": "emcrawdata", - "active": "true", - "machines": ["epn"], - "query": "readout:EMC/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1248" - } - ], - "blocking": "false" - }, - { - "id": "emccells", - "active": "true", - "machines": ["epn"], - "query": "emcal-digits:EMC/CELLS;emcal-triggerecords:EMC/CELLSTRGR", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1248" - } - ], - "blocking": "false" - } - ] - } \ No newline at end of file diff --git a/testing/detectors/EMC/qc/emcQCTasks_multinode.json b/testing/detectors/EMC/qc/emcQCTasks_multinode.json deleted file mode 100644 index 7d4e533..0000000 --- a/testing/detectors/EMC/qc/emcQCTasks_multinode.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "alio2-cr1-hv-qcdb1-gpn.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "infologger": { - "filterDiscardDebug": "true", - "filterDiscardLevel": "1" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "DigitsTask": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitsQcTask", - "moduleName": "QcEMCAL", - "detectorName": "EMC", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "emcal-digits:EMC/CELLS;emcal-triggerecords:EMC/CELLSTRGR" - }, - "taskParameters": { - "nothing": "rien" - }, - "location": "local", - "localMachines": [ - "epn" - ], - "remoteMachine": "alio2-cr1-qc02.cern.ch", - "remotePort": "47702", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "DigitsCheckAmplitude": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnEachSeparately", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": ["digitAmplitudeEMCAL_CAL", "digitAmplitudeEMCAL_PHYS", "digitAmplitudeDCAL_CAL", "digitAmplitudeDCAL_PHYS", - "digitAmplitude_CAL", "digitAmplitude_PHYS" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - ] - } \ No newline at end of file diff --git a/testing/detectors/EMC/qc/emcQCTasks_singlenode.json b/testing/detectors/EMC/qc/emcQCTasks_singlenode.json deleted file mode 100644 index d77c703..0000000 --- a/testing/detectors/EMC/qc/emcQCTasks_singlenode.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "alio2-cr1-hv-qcdb1-gpn.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "infologger": { - "filterDiscardDebug": "true", - "filterDiscardLevel": "1" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "DigitsTask": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitsQcTask", - "moduleName": "QcEMCAL", - "detectorName": "EMC", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "emcal-digits:EMC/CELLS;emcal-triggerecords:EMC/CELLSTRGR" - }, - "taskParameters": { - "nothing": "rien" - }, - "location": "remote" - } - }, - "checks": { - "DigitsCheckAmplitude": { - "active": "true", - "className": "o2::quality_control_modules::emcal::DigitCheck", - "moduleName": "QcEMCAL", - "policy": "OnEachSeparately", - "detectorName": "EMC", - "dataSource": [ - { - "type": "Task", - "name": "DigitsTask", - "MOs": ["digitAmplitudeEMCAL_CAL", "digitAmplitudeEMCAL_PHYS", "digitAmplitudeDCAL_CAL", "digitAmplitudeDCAL_PHYS", - "digitAmplitude_CAL", "digitAmplitude_PHYS" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - ] - } \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPileline.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPileline.sh deleted file mode 100755 index d4c1842..0000000 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPileline.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -NCPU=12 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') -ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" -#HOST='$(hostname -s)-ib' - -INFOLOGGER_SEVERITY_RAWPROXY=warning -SEVERITY_RAWPROXY=warning -INFOLOGGER_SEVERITY=warning -SEVERITY=warning - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ - --severity $INFOLOGGER_SEVERITY_RAWPROXY \ - --infologger-severity $SEVERITY_RAWPROXY \ - | o2-emcal-reco-workflow $ARGS_ALL \ - --input-type raw \ - --output-type cells \ - --disable-root-input \ - --disable-root-output \ - --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ - --disable-mc \ - --severity $SEVERITY \ - --infologger-severity $INFOLOGGER_SEVERITY \ - --pipeline EMCALRawToCellConverterSpec:$NCPU \ - | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh deleted file mode 100755 index 8584a1c..0000000 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineCTF.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env bash - -source /home/mfasel/alice/O2DataProcessing/common/setenv.sh - -DISPLAY=0 - -PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -### Comment: MAKE SURE the channels match address=ipc://@tf-builder-pipe-0 - -hash=$1 - -VERBOSE="" -NCPU=12 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') -ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" -#HOST='$(hostname -s)-ib' - -# CTF compression dictionary -CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" -# min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="500000000" -CTF_MAX_PER_FILE=10000 - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ - --severity info \ - --infologger-severity info \ - | o2-emcal-reco-workflow $ARGS_ALL \ - --input-type raw \ - --output-type cells \ - --disable-root-input \ - --disable-root-output \ - --disable-mc \ - --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ - --severity warning \ - --infologger-severity warning \ - --pipeline EMCALRawToCellConverterSpec:8 \ - | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ - --ctf-dict "${CTF_DICT}" \ - --mem-factor 5 \ - --severity info \ - --infologger-severity warning \ - | o2-ctf-writer-workflow $ARGS_ALL \ - --configKeyValues "${CONFKEYVAL}" \ - --no-grp \ - --onlyDet $WORKFLOW_DETECTORS \ - --ctf-dict "${CTF_DICT}" \ - --output-dir $CTF_DIR \ - --meta-output-dir ${CTF_METAFILES_DIR} \ - --min-file-size "${CTF_MINSIZE}" \ - --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ - | o2-dpl-run $ARGS_ALL --dds \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh deleted file mode 100755 index 167877e..0000000 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash - -source /home/mfasel/alice/O2DataProcessing/common/setenv.sh - -PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -NCPU=20 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') -ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" -#HOST='$(hostname -s)-ib' -HOST=epn - -QC_CONFIG=consul-json://aliecs.cern.ch:8500/o2/components/qc/ANY/any/emc-qcmn-epnall -#QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json -INFOLOGGER_SEVERITY_RAWPROXY=warning -SEVERITY_RAWPROXY=warning -INFOLOGGER_SEVERITY=warning -SEVERITY=warning -INFOLOGGER_SEVERITY_QC=warning -SEVERITY_QC=warning - -# CTF compression dictionary -CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" -# min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="500000000" -CTF_MAX_PER_FILE=10000 - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ - --severity $SEVERITY_RAWPROXY \ - --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ - | o2-emcal-reco-workflow $ARGS_ALL \ - --input-type raw \ - --output-type cells \ - --disable-root-input \ - --disable-root-output \ - --disable-mc \ - --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ - --severity $SEVERITY \ - --infologger-severity $INFOLOGGER_SEVERITY \ - --pipeline EMCALRawToCellConverterSpec:$NCPU \ - | o2-qc $ARGS_ALL \ - --config $QC_CONFIG \ - --local \ - --host $HOST \ - --severity $SEVERITY_QC \ - --infologger-severity $INFOLOGGER_SEVERITY_QC \ - | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ - --ctf-dict "${CTF_DICT}" \ - --mem-factor 5 \ - --severity info \ - --infologger-severity warning \ - | o2-ctf-writer-workflow $ARGS_ALL \ - --configKeyValues "${CONFKEYVAL}" \ - --no-grp \ - --onlyDet $WORKFLOW_DETECTORS \ - --ctf-dict "${CTF_DICT}" \ - --output-dir $CTF_DIR \ - --meta-output-dir ${CTF_METAFILES_DIR} \ - --min-file-size "${CTF_MINSIZE}" \ - --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ - | o2-dpl-run $ARGS_ALL --dds - \ No newline at end of file diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocal.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocal.sh deleted file mode 100755 index 3e30c0d..0000000 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocal.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -source /home/mfasel/alice/O2DataProcessing/common/setenv.sh - -PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -NCPU=12 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') -ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" -#HOST='$(hostname -s)-ib' -HOST=epn - -QC_CONFIG=consul-json:///aliecs.cern.ch:8500/o2/components/qc/ANY/any/emc-qcmn-epn -#QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json -INFOLOGGER_SEVERITY_RAWPROXY=warning -SEVERITY_RAWPROXY=warning -INFOLOGGER_SEVERITY=warning -SEVERITY=warning - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ - --severity $SEVERITY_RAWPROXY \ - --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ - | o2-emcal-reco-workflow $ARGS_ALL \ - --input-type raw \ - --output-type cells \ - --disable-root-input \ - --disable-root-output \ - --disable-mc \ - --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ - --severity $SEVERITY \ - --infologger-severity $INFOLOGGER_SEVERITY \ - --pipeline EMCALRawToCellConverterSpec:$NCPU \ - | o2-qc $ARGS_ALL $QC_CONFIG --local --host $HOST \ - | o2-dpl-run $ARGS_ALL --dds diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh deleted file mode 100755 index 5bcb14d..0000000 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTF.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash - -source /home/mfasel/alice/O2DataProcessing/common/setenv.sh - -PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -NCPU=20 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') -ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" -#HOST='$(hostname -s)-ib' -HOST=epn - -QC_CONFIG=consul-json://aliecs.cern.ch:8500/o2/components/qc/ANY/any/emc-qcmn-flpepn -#QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json -INFOLOGGER_SEVERITY_RAWPROXY=warning -SEVERITY_RAWPROXY=warning -INFOLOGGER_SEVERITY=warning -SEVERITY=warning -INFOLOGGER_SEVERITY_QC=warning -SEVERITY_QC=warning - -# CTF compression dictionary -CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" -# min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="500000000" -CTF_MAX_PER_FILE=10000 - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ - --severity $SEVERITY_RAWPROXY \ - --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ - | o2-emcal-reco-workflow $ARGS_ALL \ - --input-type raw \ - --output-type cells \ - --disable-root-input \ - --disable-root-output \ - --disable-mc \ - --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ - --severity $SEVERITY \ - --infologger-severity $INFOLOGGER_SEVERITY \ - --pipeline EMCALRawToCellConverterSpec:$NCPU \ - | o2-qc $ARGS_ALL \ - --config $QC_CONFIG \ - --local \ - --host $HOST \ - --severity $SEVERITY_QC \ - --infologger-severity $INFOLOGGER_SEVERITY_QC \ - | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ - --ctf-dict "${CTF_DICT}" \ - --mem-factor 5 \ - --severity info \ - --infologger-severity warning \ - | o2-ctf-writer-workflow $ARGS_ALL \ - --configKeyValues "${CONFKEYVAL}" \ - --no-grp \ - --onlyDet $WORKFLOW_DETECTORS \ - --ctf-dict "${CTF_DICT}" \ - --output-dir $CTF_DIR \ - --meta-output-dir ${CTF_METAFILES_DIR} \ - --min-file-size "${CTF_MINSIZE}" \ - --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ - | o2-dpl-run $ARGS_ALL --dds diff --git a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh b/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh deleted file mode 100755 index f9a0dc7..0000000 --- a/testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQClocalCTFSingle.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env bash - -PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -NCPU=12 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') -ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" -#HOST='$(hostname -s)-ib' -HOST=epn - -#QC_CONFIG=consul-json://alio2-cr1-hv-aliecs:8500/o2/components/qc/ANY/any/emc-qcmn-epn -QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json -INFOLOGGER_SEVERITY_RAWPROXY=warning -SEVERITY_RAWPROXY=warning -INFOLOGGER_SEVERITY=warning -SEVERITY=warning -INFOLOGGER_SEVERITY_QC=warning -SEVERITY_QC=warning - -# CTF compression dictionary -CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" -# min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="500000000" -CTF_MAX_PER_FILE=10000 - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ - --severity $SEVERITY_RAWPROXY \ - --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ - | o2-emcal-reco-workflow $ARGS_ALL \ - --input-type raw \ - --output-type cells \ - --disable-root-input \ - --disable-root-output \ - --disable-mc \ - --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ - --severity $SEVERITY \ - --infologger-severity $INFOLOGGER_SEVERITY \ - --pipeline EMCALRawToCellConverterSpec:$NCPU \ - | o2-qc $ARGS_ALL \ - --config $QC_CONFIG \ - --severity $SEVERITY_QC \ - --infologger-severity $INFOLOGGER_SEVERITY_QC \ - | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ - --ctf-dict "${CTF_DICT}" \ - --mem-factor 5 \ - --severity info \ - --infologger-severity warning \ - | o2-ctf-writer-workflow $ARGS_ALL \ - --configKeyValues "${CONFKEYVAL}" \ - --no-grp \ - --onlyDet $WORKFLOW_DETECTORS \ - --ctf-dict "${CTF_DICT}" \ - --output-dir $CTF_DIR \ - --meta-output-dir ${CTF_METAFILES_DIR} \ - --min-file-size "${CTF_MINSIZE}" \ - --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ - | o2-dpl-run $ARGS_ALL --dds diff --git a/testing/detectors/EMC/workflows.desc b/testing/detectors/EMC/workflows.desc deleted file mode 100644 index 5a74b4f..0000000 --- a/testing/detectors/EMC/workflows.desc +++ /dev/null @@ -1,8 +0,0 @@ -emc-qcall-ctf-3: "O2PDPSuite" reco,3,3,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-4: "O2PDPSuite" reco,4,4,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-6: "O2PDPSuite" reco,6,6,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-7: "O2PDPSuite" reco,7,7,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-8: "O2PDPSuite" reco,8,8,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-13: "O2PDPSuite" reco,13,13,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/detectors/EMC/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file diff --git a/testing/detectors/FDD/fdd-ctf.sh b/testing/detectors/FDD/fdd-ctf.sh deleted file mode 100755 index 1d09bcc..0000000 --- a/testing/detectors/FDD/fdd-ctf.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" - -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FDD/fdd-digits-ctf.sh b/testing/detectors/FDD/fdd-digits-ctf.sh deleted file mode 100755 index 49e2856..0000000 --- a/testing/detectors/FDD/fdd-digits-ctf.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" - -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fdd-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fdd-datareader-dpl:$NTHREADS \ -| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FDD/fdd-digits-ds.json b/testing/detectors/FDD/fdd-digits-ds.json deleted file mode 100644 index 5855c29..0000000 --- a/testing/detectors/FDD/fdd-digits-ds.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFDD": { - "active": "true", - "className": "o2::quality_control_modules::fdd::DigitQcTask", - "moduleName": "QcFDD", - "detectorName": "FDD", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "mergerCycleMultiplier": "2", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "fdd-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47720", - "mergingMode": "delta", - "localControl": "odc" - - } - } - }, - "dataSamplingPolicies": [ - { - "id": "fdd-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - } - ] -} \ No newline at end of file diff --git a/testing/detectors/FDD/fdd-digits-qc-ctf.sh b/testing/detectors/FDD/fdd-digits-qc-ctf.sh deleted file mode 100755 index 3ec1532..0000000 --- a/testing/detectors/FDD/fdd-digits-qc-ctf.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" - -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fdd-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fdd-datareader-dpl:$NTHREADS \ -| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/fdd-digits-ds.json \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FDD/run_fdd_ctf.sh b/testing/detectors/FDD/run_fdd_ctf.sh deleted file mode 100755 index 80b6e52..0000000 --- a/testing/detectors/FDD/run_fdd_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/detectors/FDD/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=fdd-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FDD # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FDD # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/fdd-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/detectors/FDD/run_fdd_digits_ctf.sh b/testing/detectors/FDD/run_fdd_digits_ctf.sh deleted file mode 100755 index 9db8f74..0000000 --- a/testing/detectors/FDD/run_fdd_digits_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/detectors/FDD/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=fdd-digits-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FDD # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FDD # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/fdd-digits-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/detectors/FDD/run_fdd_digits_qc_ctf.sh b/testing/detectors/FDD/run_fdd_digits_qc_ctf.sh deleted file mode 100755 index 91b8301..0000000 --- a/testing/detectors/FDD/run_fdd_digits_qc_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/detectors/FDD/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=fdd-digits-qc-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FDD # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FDD # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/fdd-digits-qc-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/detectors/FDD/workflows.desc b/testing/detectors/FDD/workflows.desc deleted file mode 100644 index d199afd..0000000 --- a/testing/detectors/FDD/workflows.desc +++ /dev/null @@ -1,3 +0,0 @@ -fdd-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FDD/fdd-ctf.sh" -fdd-digits-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FDD/fdd-digits-ctf.sh" -fdd-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FDD/fdd-digits-qc-ctf.sh" diff --git a/testing/detectors/FT0/ft0-ctf.sh b/testing/detectors/FT0/ft0-ctf.sh deleted file mode 100755 index 898a5bc..0000000 --- a/testing/detectors/FT0/ft0-ctf.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" - -MYDIR="$(dirname $(readlink -f $0))" - -PROXY_INSPEC="digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FT0/ft0-digits-ctf.sh b/testing/detectors/FT0/ft0-digits-ctf.sh deleted file mode 100755 index 965c18a..0000000 --- a/testing/detectors/FT0/ft0-digits-ctf.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" - -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FT0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-ft0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline ft0-datareader-dpl:$NTHREADS \ -| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FT0/ft0-digits-ds.json b/testing/detectors/FT0/ft0-digits-ds.json deleted file mode 100644 index 088321f..0000000 --- a/testing/detectors/FT0/ft0-digits-ds.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFT0": { - "active": "true", - "className": "o2::quality_control_modules::ft0::DigitQcTask", - "moduleName": "QcFT0", - "detectorName": "FT0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "ft0-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47721", - "mergingMode": "delta", - "mergerCycleMultiplier": "2", - "localControl": "odc" - - } - } - }, - "dataSamplingPolicies": [ - { - "id": "ft0-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - } - ] -} \ No newline at end of file diff --git a/testing/detectors/FT0/ft0-digits-qc-ctf.sh b/testing/detectors/FT0/ft0-digits-qc-ctf.sh deleted file mode 100755 index 0429441..0000000 --- a/testing/detectors/FT0/ft0-digits-qc-ctf.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" - -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FT0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-ft0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline ft0-datareader-dpl:$NTHREADS \ -| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/ft0-digits-ds.json \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FT0/run_ft0_ctf.sh b/testing/detectors/FT0/run_ft0_ctf.sh deleted file mode 100755 index 253029a..0000000 --- a/testing/detectors/FT0/run_ft0_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -# export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -# export GEN_TOPO_SOURCE=v1.3 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/detectors/FT0/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=ft0-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FT0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FT0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/ft0-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/detectors/FT0/run_ft0_digits_ctf.sh b/testing/detectors/FT0/run_ft0_digits_ctf.sh deleted file mode 100755 index c6f1011..0000000 --- a/testing/detectors/FT0/run_ft0_digits_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/detectors/FT0/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=ft0-digits-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FT0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FT0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/ft0-digits-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/detectors/FT0/run_ft0_digits_qc_ctf.sh b/testing/detectors/FT0/run_ft0_digits_qc_ctf.sh deleted file mode 100755 index 70a9a35..0000000 --- a/testing/detectors/FT0/run_ft0_digits_qc_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/detectors/FT0/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=ft0-digits-qc-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FT0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FT0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/ft0-digits-qc-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/detectors/FT0/workflows.desc b/testing/detectors/FT0/workflows.desc deleted file mode 100644 index 9fe3dfb..0000000 --- a/testing/detectors/FT0/workflows.desc +++ /dev/null @@ -1,3 +0,0 @@ -ft0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-ctf.sh" -ft0-digits-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-digits-ctf.sh" -ft0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FT0/ft0-digits-qc-ctf.sh" diff --git a/testing/detectors/FV0/fv0-ctf.sh b/testing/detectors/FV0/fv0-ctf.sh deleted file mode 100755 index cbe00d5..0000000 --- a/testing/detectors/FV0/fv0-ctf.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" - -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FV0/fv0-digits-ctf.sh b/testing/detectors/FV0/fv0-digits-ctf.sh deleted file mode 100755 index 7a7dd2d..0000000 --- a/testing/detectors/FV0/fv0-digits-ctf.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" - -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fv0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fv0-datareader-dpl:$NTHREADS \ -| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FV0/fv0-digits-ds.json b/testing/detectors/FV0/fv0-digits-ds.json deleted file mode 100644 index 8020f8d..0000000 --- a/testing/detectors/FV0/fv0-digits-ds.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFV0": { - "active": "true", - "className": "o2::quality_control_modules::fv0::DigitQcTask", - "moduleName": "QcFV0", - "detectorName": "FV0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "mergerCycleMultiplier": "2", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "fv0-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47722", - "mergingMode": "delta", - "localControl": "odc" - } - } - }, - "dataSamplingPolicies": [ - { - "id": "fv0-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - } - ] -} \ No newline at end of file diff --git a/testing/detectors/FV0/fv0-digits-qc-ctf.sh b/testing/detectors/FV0/fv0-digits-qc-ctf.sh deleted file mode 100755 index ab76ab5..0000000 --- a/testing/detectors/FV0/fv0-digits-qc-ctf.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" - -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fv0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fv0-datareader-dpl:$NTHREADS \ -| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/fv0-digits-ds.json \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/FV0/run_fv0_ctf.sh b/testing/detectors/FV0/run_fv0_ctf.sh deleted file mode 100755 index 77c4fc3..0000000 --- a/testing/detectors/FV0/run_fv0_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/detectors/FV0/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=fv0-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FV0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/fv0-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/detectors/FV0/run_fv0_digits_ctf.sh b/testing/detectors/FV0/run_fv0_digits_ctf.sh deleted file mode 100755 index fa4c508..0000000 --- a/testing/detectors/FV0/run_fv0_digits_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/detectors/FV0/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=fv0-digits-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FV0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/fv0-digits-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/detectors/FV0/run_fv0_digits_qc_ctf.sh b/testing/detectors/FV0/run_fv0_digits_qc_ctf.sh deleted file mode 100755 index aac6d08..0000000 --- a/testing/detectors/FV0/run_fv0_digits_qc_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/detectors/FV0/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=fv0-digits-qc-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FV0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/fv0-digits-qc-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/detectors/FV0/workflows.desc b/testing/detectors/FV0/workflows.desc deleted file mode 100644 index f149aae..0000000 --- a/testing/detectors/FV0/workflows.desc +++ /dev/null @@ -1,3 +0,0 @@ -fv0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-ctf.sh" -fv0-digits-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-digits-ctf.sh" -fv0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/detectors/FV0/fv0-digits-qc-ctf.sh" diff --git a/testing/detectors/HMP/workflows.desc b/testing/detectors/HMP/workflows.desc deleted file mode 100644 index e69de29..0000000 diff --git a/testing/detectors/ITS/workflows.desc b/testing/detectors/ITS/workflows.desc deleted file mode 100644 index e69de29..0000000 diff --git a/testing/detectors/MCH/workflows.desc b/testing/detectors/MCH/workflows.desc deleted file mode 100644 index e69de29..0000000 diff --git a/testing/detectors/MFT/workflows.desc b/testing/detectors/MFT/workflows.desc deleted file mode 100644 index e69de29..0000000 diff --git a/testing/detectors/MID/workflows.desc b/testing/detectors/MID/workflows.desc deleted file mode 100644 index e69de29..0000000 diff --git a/testing/detectors/PHS/workflows.desc b/testing/detectors/PHS/workflows.desc deleted file mode 100644 index e69de29..0000000 diff --git a/testing/detectors/TOF/qc-full.json b/testing/detectors/TOF/qc-full.json deleted file mode 100644 index 75c2da1..0000000 --- a/testing/detectors/TOF/qc-full.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8083" - } - }, - "tasks": { - "TaskRaw": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskRaw", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "raw-local" - }, - "location": "local", - "localMachines": [ - "alio2-cr1-flp178-ib", - "alio2-cr1-flp179-ib" - ], - "remoteMachine": "localhost", - "remotePort": "30132", - "mergingMode": "delta" - }, - "TaskDigits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskDigits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "digi-local" - }, - "location": "local", - "localMachines": [ - "epn" - ], - "remoteMachine": "alio2-cr1-qc03.cern.ch", - "remotePort": "47708", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "CheckDiagnostics": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckDiagnostics", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "RDHCounterCrate0" - ] - } - ] - }, - "CheckCompressedData": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckCompressedData", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "checkParameters": { - "DiagnosticThresholdPerSlot": "10" - }, - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "hDiagnostic" - ] - } - ] - }, - "CheckRawMultiplicity": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", - "moduleName": "QcTOF", - "policy": "OnAny", - "detectorName": "TOF", - "dataSource": [ - { - "type": "Task", - "name": "TaskDigits", - "MOs": [ - "TOFRawsMulti" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - { - "id": "digi-local", - "active": "true", - "machines": [ - "epn" - ], - "port": "30333", - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/detectors/TOF/tof-epn-cosmics-dig.sh b/testing/detectors/TOF/tof-epn-cosmics-dig.sh deleted file mode 100755 index 6f06250..0000000 --- a/testing/detectors/TOF/tof-epn-cosmics-dig.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -calibration_node="epn007-ib:30453" - -SEVERITY=warning -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -CTFOUT="/home/fnoferin/public/out/" -MYDIR="$(dirname $(readlink -f $0))" -OUT_CHANNEL="name=downstream,method=connect,address=tcp://${calibration_node},type=push,transport=zeromq" -PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;dig:TOF/DIGITS;head:TOF/DIGITHEADER;row:TOF/READOUTWINDOW;patt:TOF/PATTERNS" - - -o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ ---readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ -| o2-tof-reco-workflow --input-type raw --output-type digits --disable-root-output \ -${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" \ ---pipeline "tof-compressed-decoder:${NTHREADS}" \ -| o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn \ -| o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh b/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh deleted file mode 100755 index e52163a..0000000 --- a/testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -calibration_node="epn003-ib:30453" - -SEVERITY=warning -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -CTFOUT="/home/fnoferin/public/out/" -MYDIR="$(dirname $(readlink -f $0))" -OUT_CHANNEL="name=downstream,method=connect,address=tcp://${calibration_node},type=push,transport=zeromq" -PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;dig:TOF/DIGITS;head:TOF/DIGITHEADER;row:TOF/READOUTWINDOW;patt:TOF/PATTERNS" - - -o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ ---readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ -| o2-tof-reco-workflow --input-type raw --output-type digits --disable-root-output \ -${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" \ ---pipeline "tof-compressed-decoder:${NTHREADS}" \ -| o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/tof-epn-cosmics.sh b/testing/detectors/TOF/tof-epn-cosmics.sh deleted file mode 100755 index 46e3e23..0000000 --- a/testing/detectors/TOF/tof-epn-cosmics.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -calibration_node="epn003-ib:30453" - -SEVERITY=warning -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" -NTHREADS=1 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -CTFOUT="/home/fnoferin/public/out/" -MYDIR="$(dirname $(readlink -f $0))" -OUT_CHANNEL="name=downstream,method=connect,address=tcp://${calibration_node},type=push,transport=zeromq" -PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;calclus:TOF/INFOCALCLUS;cosmics:TOF/INFOCOSMICS;trkcos:TOF/INFOTRACKCOS;trksiz:TOF/INFOTRACKSIZE" - - -o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ ---readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ -| o2-tof-reco-workflow --input-type raw --output-type clusters \ -${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" \ ---disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics \ ---pipeline "tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS},tof-entropy-encoder:${NTHREADS}" \ -| o2-qc ${ARGS_ALL} --config json://${MYDIR}/qc-full.json --local --host epn \ -| o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh b/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh deleted file mode 100755 index 1b0c7c4..0000000 --- a/testing/detectors/TOF/tof-epn-cosmicsNoQC.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -calibration_node="epn003-ib:30453" - -SEVERITY=warning -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="HBFUtils.nHBFPerTF=128;NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -PROXY_INSPEC="x:TOF/CRAWDATA;dd:FLP/DISTSUBTIMEFRAME/0" -NTHREADS=1 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -CTFOUT="/home/fnoferin/public/out/" -MYDIR="$(dirname $(readlink -f $0))" -OUT_CHANNEL="name=downstream,method=connect,address=tcp://${calibration_node},type=push,transport=zeromq" -PROXY_OUTSPEC="dd:FLP/DISTSUBTIMEFRAME;calclus:TOF/INFOCALCLUS;cosmics:TOF/INFOCOSMICS;trkcos:TOF/INFOTRACKCOS;trksiz:TOF/INFOTRACKSIZE" - - -o2-dpl-raw-proxy ${ARGS_ALL} --dataspec "${PROXY_INSPEC}" \ ---readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ -| o2-tof-reco-workflow --input-type raw --output-type clusters \ -${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" \ ---disable-root-output --calib-cluster --cluster-time-window 10000 --cosmics \ ---pipeline "tof-compressed-decoder:${NTHREADS},TOFClusterer:${NTHREADS},tof-entropy-encoder:${NTHREADS}" \ -| o2-dpl-output-proxy ${ARGS_ALL} --channel-config ${OUT_CHANNEL} --dataspec ${PROXY_OUTSPEC} \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds # option instead iof run to export DDS xml file diff --git a/testing/detectors/TOF/workflows.desc b/testing/detectors/TOF/workflows.desc deleted file mode 100644 index 15216c5..0000000 --- a/testing/detectors/TOF/workflows.desc +++ /dev/null @@ -1,4 +0,0 @@ -tof-cosmics: "O2PDPSuite" reco,20,20,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics.sh" -tof-cos-dig: "O2PDPSuite" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-dig.sh" -tof-cosmicsNoQC: "O2PDPSuite" reco,20,20,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmicsNoQC.sh" -tof-cos-digNoQC: "O2PDPSuite" reco,10,10,"SHMSIZE=64000000000 testing/detectors/TOF/tof-epn-cosmics-digNoQC.sh" diff --git a/testing/detectors/TPC/tpc-workflow.sh b/testing/detectors/TPC/tpc-workflow.sh deleted file mode 100755 index ff97cb0..0000000 --- a/testing/detectors/TPC/tpc-workflow.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -if [ $EPNSYNCMODE == 1 ]; then - ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" - #ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" - ARGS_ALL+=" --monitoring-backend no-op://" -else - ARGS_ALL+=" --monitoring-backend no-op://" -fi -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -if [ $NUMAGPUIDS != 0 ]; then - ARGS_ALL+=" --child-driver 'numactl --membind $NUMAID --cpunodebind $NUMAID'" -fi -if [ $GPUTYPE != "CPU" ]; then - ARGS_ALL+=" --shm-mlock-segment-on-creation 1" -fi -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" - -if [ $GPUTYPE == "HIP" ]; then - if [ $NUMAID == 0 ] || [ $NUMAGPUIDS == 0 ]; then - export TIMESLICEOFFSET=0 - else - export TIMESLICEOFFSET=$NGPUS - fi - GPU_CONFIG_KEY+="GPU_proc.deviceNum=0;GPU_global.mutexMemReg=true;" - GPU_CONFIG+=" --environment \"ROCR_VISIBLE_DEVICES={timeslice${TIMESLICEOFFSET}}\"" - export HSA_NO_SCRATCH_RECLAIM=1 - #export HSA_TOOLS_LIB=/opt/rocm/lib/librocm-debug-agent.so.2 -else - GPU_CONFIG_KEY+="GPU_proc.deviceNum=-2;" -fi - -if [ $GPUTYPE != "CPU" ]; then - GPU_CONFIG_KEY+="GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;" - if [ $HOSTMEMSIZE == "0" ]; then - HOSTMEMSIZE=$(( 1 << 30 )) - fi -fi -if [ $HOSTMEMSIZE != "0" ]; then - GPU_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;" -fi - -PROXY_INSPEC="A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" -CALIB_INSPEC="A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ - | o2-tpc-raw-to-digits-workflow $ARGS_ALL \ - --input-spec "$CALIB_INSPEC" \ - --remove-duplicates \ - --pipeline tpc-raw-to-digits-0:6 \ - --configKeyValues "$ARGS_ALL_CONFIG;TPCDigitDump.LastTimeBin=1000;" \ - | o2-tpc-reco-workflow $ARGS_ALL \ - --input-type digitizer \ - --output-type clusters,tracks,encoded-clusters disable-writer \ - --disable-mc \ - --pipeline tpc-tracker:4 \ - $GPU_CONFIG \ - --configKeyValues "$ARGS_ALL_CONFIG;$GPU_CONFIG_KEY;align-geom.mDetectors=none;GPU_global.deviceType=$GPUTYPE;GPU_proc.tpcIncreasedMinClustersPerRow=500000;GPU_proc.ignoreNonFatalGPUErrors=1;" \ - | o2-eve-display $ARGS_ALL --display-tracks TPC --display-clusters TPC --disable-mc --jsons-folder /home/ed/jsons --eve-dds-collection-index 0 --configKeyValues "$ARGS_ALL_CONFIG" \ - | o2-ctf-writer-workflow $ARGS_ALL --configKeyValues "$ARGS_ALL_CONFIG" --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf --onlyDet TPC \ - | o2-dpl-run $ARGS_ALL --dds - -#HOST=localhost -#| o2-qc $ARGS_ALL --config json:///home/epn/odc/files/tpcQCTasks_multinode_ALL.json --local --host $HOST \ - diff --git a/testing/detectors/TPC/workflows.desc b/testing/detectors/TPC/workflows.desc deleted file mode 100644 index 9b4ab72..0000000 --- a/testing/detectors/TPC/workflows.desc +++ /dev/null @@ -1,2 +0,0 @@ -ctf-and-display: "DataDistribution QualityControl" reco,128,128,"SHMSIZE=128000000000 INFOLOGGER_SEVERITY=warning testing/detectors/TPC/tpc-workflow.sh" -ctf-and-display-gpu: "DataDistribution QualityControl" reco,128,128,"GPUTYPE=HIP SHMSIZE=128000000000 INFOLOGGER_SEVERITY=warning testing/detectors/TPC/tpc-workflow.sh" diff --git a/testing/detectors/TRD/workflows.desc b/testing/detectors/TRD/workflows.desc deleted file mode 100644 index e69de29..0000000 diff --git a/testing/detectors/ZDC/workflows.desc b/testing/detectors/ZDC/workflows.desc deleted file mode 100644 index e69de29..0000000 diff --git a/testing/examples/calib-workflows.desc b/testing/examples/calib-workflows.desc deleted file mode 100644 index 78aa0ce..0000000 --- a/testing/examples/calib-workflows.desc +++ /dev/null @@ -1 +0,0 @@ -ITS-noise-calibration: "O2PDPSuite" reco,10,10,"testing/examples/example-calib-processing.sh" calib,10,"testing/examples/example-calib-aggregator.sh" diff --git a/testing/examples/example-calib-aggregator.sh b/testing/examples/example-calib-aggregator.sh deleted file mode 100755 index 01f15ec..0000000 --- a/testing/examples/example-calib-aggregator.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -source common/setenv.sh - -# --------------------------------------------------------------------------------------------------------------------- -# Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" - -PROXY_INSPEC="A:ITS/COMPCLUSTERS/0;B:ITS/PATTERNS/0;C:ITS/CLUSTERSROF/0;eos:***/INFORMATION" - -WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --proxy-name its-noise-input-proxy --dataspec \"$PROXY_INSPEC\" --network-interface ib0 --channel-config \"name=its-noise-input-proxy,method=bind,type=pull,rateLogging=0,transport=zeromq\" | " -WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi diff --git a/testing/examples/example-calib-processing.sh b/testing/examples/example-calib-processing.sh deleted file mode 100755 index 273f5b1..0000000 --- a/testing/examples/example-calib-processing.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -source common/setenv.sh - -# --------------------------------------------------------------------------------------------------------------------- -# Set general arguments -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE $ARGS_ALL_EXTRA" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 60" -if [ $SHMTHROW == 0 ]; then - ARGS_ALL+=" --shm-throw-bad-alloc 0" -fi -if [ $NORATELOG == 1 ]; then - ARGS_ALL+=" --fairmq-rate-logging 0" -fi -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null;$ALL_EXTRA_CONFIG" - -PROXY_INSPEC="A:ITS/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" -PROXY_OUTSPEC="downstreamA:ITS/COMPCLUSTERS/0;downstreamB:ITS/PATTERNS/0;downstreamC:ITS/CLUSTERSROF/0" - -WORKFLOW="o2-dpl-raw-proxy ${ARGS_ALL} --dataspec \"$PROXY_INSPEC\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=0\" | " -WORKFLOW+="o2-itsmft-stf-decoder-workflow ${ARGS_ALL} --configKeyValues \"$ARGS_ALL_CONFIG\" --nthreads 4 | " -WORKFLOW+="o2-dpl-output-proxy ${ARGS_ALL} --dataspec \"$PROXY_OUTSPEC\" --proxy-channel-name its-noise-input-proxy --channel-config \"name=its-noise-input-proxy,method=connect,type=push,transport=zeromq,rateLogging=0\" | " -WORKFLOW+="o2-dpl-run ${ARGS_ALL} ${GLOBALDPLOPT}" - -if [ $WORKFLOWMODE == "print" ]; then - echo Workflow command: - echo $WORKFLOW | sed "s/| */|\n/g" -else - # Execute the command we have assembled - WORKFLOW+=" --$WORKFLOWMODE" - eval $WORKFLOW -fi diff --git a/testing/examples/example-workflow.sh b/testing/examples/example-workflow.sh deleted file mode 100755 index 263d8dc..0000000 --- a/testing/examples/example-workflow.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=warning -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-size $SHMSIZE" -if [ $EPNSYNCMODE == 1 ]; then - ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" - ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock --resources-monitoring 15" -elif [ "0$ENABLE_METRICS" != "01" ]; then - ARGS_ALL+=" --monitoring-backend no-op://" -fi -[ $NORATELOG == 1 ] && ARGS_ALL+=" --fairmq-rate-logging 0" - -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" - -PROXY_INSPEC="A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ - | o2-tpc-raw-to-digits-workflow $ARGS_ALL \ - --input-spec "$PROXY_INSPEC" \ - --remove-duplicates \ - --configKeyValues "$ARGS_ALL_CONFIG;TPCDigitDump.LastTimeBin=1000;" \ - | o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/examples/workflows.desc b/testing/examples/workflows.desc deleted file mode 100644 index 0150ffa..0000000 --- a/testing/examples/workflows.desc +++ /dev/null @@ -1 +0,0 @@ -example-workflow: "O2PDPSuite" reco,10,10,"SHMSIZE=128000000000 testing/examples/example-workflow.sh" diff --git a/testing/private/README.md b/testing/private/README.md deleted file mode 100644 index 2cb0e2d..0000000 --- a/testing/private/README.md +++ /dev/null @@ -1 +0,0 @@ -This folder is for private workflows of users diff --git a/testing/private/afurs/fdd-ft0-fv0-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-ctf.sh deleted file mode 100755 index 18309a7..0000000 --- a/testing/private/afurs/fdd-ft0-fv0-ctf.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#CTFOUT="/home/afurs/public/out/" -#CTFOUT="${EPN_DATA_DIR}" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#CTFOUT=$FILEWORKDIR -#CTFOUT=$FILEWORKDIR -#FILEWORKDIR=$CTFOUT -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -# ARGS_CTF="" - -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="digfdd:FDD/DIGITSBC/0;chanfdd:FDD/DIGITSCH/0;digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD,FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/private/afurs/fdd-ft0-fv0-digits-ds.json b/testing/private/afurs/fdd-ft0-fv0-digits-ds.json deleted file mode 100644 index 54a5681..0000000 --- a/testing/private/afurs/fdd-ft0-fv0-digits-ds.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFDD": { - "active": "true", - "className": "o2::quality_control_modules::fdd::DigitQcTask", - "moduleName": "QcFDD", - "detectorName": "FDD", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "fdd-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47720", - "mergingMode": "delta", - "mergerCycleMultiplier": "2", - "localControl": "odc" - }, - "DigitQcTaskFT0": { - "active": "true", - "className": "o2::quality_control_modules::ft0::DigitQcTask", - "moduleName": "QcFT0", - "detectorName": "FT0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "ft0-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47721", - "mergingMode": "delta", - "mergerCycleMultiplier": "2", - "localControl": "odc" - }, - "DigitQcTaskFV0": { - "active": "true", - "className": "o2::quality_control_modules::fv0::DigitQcTask", - "moduleName": "QcFV0", - "detectorName": "FV0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "fv0-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47722", - "mergingMode": "delta", - "mergerCycleMultiplier": "2", - "localControl": "odc" - } - } - }, - "dataSamplingPolicies": [ - { - "id": "fdd-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FDD/DIGITSBC/0;channels:FDD/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - }, - { - "id": "ft0-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - }, - { - "id": "fv0-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - } - ] -} \ No newline at end of file diff --git a/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh deleted file mode 100755 index 4738f06..0000000 --- a/testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#CTFOUT="/home/afurs/public/out/" -#CTFOUT="${EPN_DATA_DIR}" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#CTFOUT=$FILEWORKDIR -#CTFOUT=$FILEWORKDIR -#FILEWORKDIR=$CTFOUT -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=1 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -# ARGS_CTF="" - -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;z:FDD/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fdd-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fdd-datareader-dpl:$NTHREADS \ -| o2-ft0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline ft0-datareader-dpl:$NTHREADS \ -| o2-fv0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fv0-datareader-dpl:$NTHREADS \ -| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/fdd-ft0-fv0-digits-ds.json \ -| o2-fdd-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FDD,FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds - -# | o2-qc ${ARGS_ALL} --local --host epn ---config json://${MYDIR}/ft0-digits-ds.json \ diff --git a/testing/private/afurs/ft0-fv0-ctf.sh b/testing/private/afurs/ft0-fv0-ctf.sh deleted file mode 100755 index d54659b..0000000 --- a/testing/private/afurs/ft0-fv0-ctf.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#CTFOUT="/home/afurs/public/out/" -#CTFOUT="${EPN_DATA_DIR}" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#CTFOUT=$FILEWORKDIR -#CTFOUT=$FILEWORKDIR -#FILEWORKDIR=$CTFOUT -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=2 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -# ARGS_CTF="" - -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="digft0:FT0/DIGITSBC/0;chanft0:FT0/DIGITSCH/0;digfv0:FV0/DIGITSBC/0;chanfv0:FV0/DIGITSCH/0;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/testing/private/afurs/ft0-fv0-digits-ds.json b/testing/private/afurs/ft0-fv0-digits-ds.json deleted file mode 100644 index 17c2da3..0000000 --- a/testing/private/afurs/ft0-fv0-digits-ds.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-hv-aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "DigitQcTaskFT0": { - "active": "true", - "className": "o2::quality_control_modules::ft0::DigitQcTask", - "moduleName": "QcFT0", - "detectorName": "FT0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "ft0-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47721", - "mergingMode": "delta", - "mergerCycleMultiplier": "2", - "localControl": "odc" - }, - "DigitQcTaskFV0": { - "active": "true", - "className": "o2::quality_control_modules::fv0::DigitQcTask", - "moduleName": "QcFV0", - "detectorName": "FV0", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "resetAfterCycles": "1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "fv0-digits" - }, - "taskParameters": { - "ChannelIDs": "0,1,2,3,4,5,6,7,8,9,10,11" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "alio2-cr1-qme02.cern.ch", - "remotePort": "47722", - "mergingMode": "delta", - "mergerCycleMultiplier": "2", - "localControl": "odc" - } - } - }, - "dataSamplingPolicies": [ - { - "id": "ft0-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FT0/DIGITSBC/0;channels:FT0/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - }, - { - "id": "fv0-digits", - "active": "true", - "machines": [], - "query_comment" : "query is in the format of binding1:origin1/description1/subSpec1[;binding2:...]", - "query": "digits:FV0/DIGITSBC/0;channels:FV0/DIGITSCH/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "1.", - "seed": "4533" - } - ], - "blocking": "false" - } - - ] -} \ No newline at end of file diff --git a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh b/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh deleted file mode 100755 index d1e17ec..0000000 --- a/testing/private/afurs/ft0-fv0-digits-qc-ctf.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=WARNING -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $SEVERITY" -#CTFOUT="/home/afurs/public/out/" -#CTFOUT="${EPN_DATA_DIR}" -if [ -z $CTF_DIR ]; then CTF_DIR=$FILEWORKDIR; fi # Directory where to store dictionary files -#CTFOUT=$FILEWORKDIR -#CTFOUT=$FILEWORKDIR -#FILEWORKDIR=$CTFOUT -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" -CTF_DICT="--ctf-dict $FILEWORKDIR/ctf_dictionary.root" -NTHREADS=1 -# Output directory for the CTF, to write to the current dir., remove `--output-dir $CTFOUT` from o2-ctf-writer-workflow or set to `CTFOUT=\"""\"` -# The directory must exist -# ARGS_CTF="" - -ARGS_CTF="--min-file-size 500000000 --max-ctf-per-file 10000 --meta-output-dir /data/epn2eos_tool/epn2eos --append-det-to-period 0" -MYDIR="$(dirname $(readlink -f $0))" -PROXY_INSPEC="x:FT0/RAWDATA;y:FV0/RAWDATA;eos:***/INFORMATION;dd:FLP/DISTSUBTIMEFRAME/0" -IN_CHANNEL="--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" - -o2-dpl-raw-proxy ${ARGS_ALL} --readout-proxy "${IN_CHANNEL}" --dataspec "${PROXY_INSPEC}" \ -| o2-fv0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline fv0-datareader-dpl:$NTHREADS \ -| o2-ft0-flp-dpl-workflow --disable-root-output ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" --pipeline ft0-datareader-dpl:$NTHREADS \ -| o2-qc ${ARGS_ALL} --local --host epn --config json://${MYDIR}/ft0-fv0-digits-ds.json \ -| o2-ft0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-fv0-entropy-encoder-workflow ${ARGS_ALL} --configKeyValues "$ARGS_ALL_CONFIG;" ${CTF_DICT} \ -| o2-ctf-writer-workflow ${ARGS_ALL} ${ARGS_CTF} --configKeyValues "$ARGS_ALL_CONFIG;" --onlyDet FT0,FV0 --output-dir $CTF_DIR --ctf-dict-dir $FILEWORKDIR --output-type ctf \ -| o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds - -# | o2-qc ${ARGS_ALL} --local --host epn ---config json://${MYDIR}/ft0-digits-ds.json \ diff --git a/testing/private/afurs/run_fdd_ft0_fv0_ctf.sh b/testing/private/afurs/run_fdd_ft0_fv0_ctf.sh deleted file mode 100755 index fdec7d2..0000000 --- a/testing/private/afurs/run_fdd_ft0_fv0_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=fdd-ft0-fv0-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/fdd-ft0-fv0-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/private/afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh b/testing/private/afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh deleted file mode 100755 index 8569e18..0000000 --- a/testing/private/afurs/run_fdd_ft0_fv0_digits_qc_ctf.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard -# Use these settings to fetch the Workflow Repository using a hash / tag -export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -export GEN_TOPO_SOURCE=v1.3 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=fdd-ft0-fv0-digits-qc-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FDD,FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/fdd-ft0-fv0-digits-qc-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi diff --git a/testing/private/afurs/run_ft0_fv0_ctf.sh b/testing/private/afurs/run_ft0_fv0_ctf.sh deleted file mode 100755 index 7f0c5a2..0000000 --- a/testing/private/afurs/run_ft0_fv0_ctf.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=ft0-fv0-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/ft0-fv0-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi - - diff --git a/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh b/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh deleted file mode 100755 index 7cdff9c..0000000 --- a/testing/private/afurs/run_ft0_fv0_digits_qc_ctf.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard -# Use these settings to fetch the Workflow Repository using a hash / tag -export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -export GEN_TOPO_SOURCE=v1.3 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/afurs/O2DataProcessing # Path to O2DataProcessing repository -export GEN_TOPO_IGNORE_ERROR=1 -export GEN_TOPO_LIBRARY_FILE=testing/private/afurs/workflows.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=ft0-fv0-digits-qc-ctf # Name of workflow in topology description library -export WORKFLOW_DETECTORS=FT0,FV0 # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=FT0,FV0 # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=$HOME/topologies/ft0-fv0-digits-qc-ctf.xml - -/home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -if [ $? == 0 ]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi diff --git a/testing/private/afurs/workflows.desc b/testing/private/afurs/workflows.desc deleted file mode 100644 index 29600e6..0000000 --- a/testing/private/afurs/workflows.desc +++ /dev/null @@ -1,5 +0,0 @@ -ft0-fv0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-ctf.sh" -ft0-fv0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/ft0-fv0-digits-qc-ctf.sh" -fdd-ft0-fv0-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/fdd-ft0-fv0-ctf.sh" -fdd-ft0-fv0-digits-qc-ctf: "O2PDPSuite" reco,2,2,"SHMSIZE=20000000000 testing/private/afurs/fdd-ft0-fv0-digits-qc-ctf.sh" - diff --git a/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh b/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh deleted file mode 100755 index e09fa91..0000000 --- a/testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash - -source /home/mfasel/alice/O2DataProcessing/common/setenv.sh - -PROXY_INSPEC="A:EMC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -NCPU=20 #$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}') -ARGS_ALL="-b --session default --shm-segment-size $SHMSIZE" -#HOST='$(hostname -s)-ib' -HOST=epn - -QC_CONFIG=consul-json://aliecs.cern.ch:8500/o2/components/qc/ANY/any/emc-qcmn-epnall-work -#QC_CONFIG=json:///home/epn/odc/files/emcQCTasks_multinode.json -INFOLOGGER_SEVERITY_RAWPROXY=warning -SEVERITY_RAWPROXY=warning -INFOLOGGER_SEVERITY=warning -SEVERITY=warning -INFOLOGGER_SEVERITY_QC=warning -SEVERITY_QC=warning - -# CTF compression dictionary -CTF_DICT="${FILEWORKDIR}/ctf_dictionary.root" -# min file size for CTF (accumulate CTFs until it is reached) -CTF_MINSIZE="500000000" -CTF_MAX_PER_FILE=10000 - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@tf-builder-pipe-0,transport=shmem,rateLogging=1'" \ - --severity $SEVERITY_RAWPROXY \ - --infologger-severity $INFOLOGGER_SEVERITY_RAWPROXY \ - | o2-emcal-reco-workflow $ARGS_ALL \ - --input-type raw \ - --output-type cells \ - --disable-root-input \ - --disable-root-output \ - --disable-mc \ - --EMCALRawToCellConverterSpec "--fitmethod=\"gamma2\" --maxmessage=10" \ - --severity $SEVERITY \ - --infologger-severity $INFOLOGGER_SEVERITY \ - --pipeline EMCALRawToCellConverterSpec:$NCPU \ - | o2-qc $ARGS_ALL \ - --config $QC_CONFIG \ - --local \ - --host $HOST \ - --severity $SEVERITY_QC \ - --infologger-severity $INFOLOGGER_SEVERITY_QC \ - | o2-emcal-entropy-encoder-workflow $ARGS_ALL \ - --ctf-dict "${CTF_DICT}" \ - --mem-factor 5 \ - --severity info \ - --infologger-severity warning \ - | o2-ctf-writer-workflow $ARGS_ALL \ - --configKeyValues "${CONFKEYVAL}" \ - --no-grp \ - --onlyDet $WORKFLOW_DETECTORS \ - --ctf-dict "${CTF_DICT}" \ - --output-dir $CTF_DIR \ - --meta-output-dir ${CTF_METAFILES_DIR} \ - --min-file-size "${CTF_MINSIZE}" \ - --max-ctf-per-file "${CTF_MAX_PER_FILE}" \ - | o2-dpl-run $ARGS_ALL --dds - \ No newline at end of file diff --git a/testing/private/mfasel/workflows.desc b/testing/private/mfasel/workflows.desc deleted file mode 100644 index 2004a0a..0000000 --- a/testing/private/mfasel/workflows.desc +++ /dev/null @@ -1,8 +0,0 @@ -emc-qcall-ctf-3: "O2PDPSuite" reco,3,3,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-4: "O2PDPSuite" reco,4,4,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-5: "O2PDPSuite" reco,5,5,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-6: "O2PDPSuite" reco,6,6,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-7: "O2PDPSuite" reco,7,7,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-8: "O2PDPSuite" reco,8,8,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-9: "O2PDPSuite" reco,9,9,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" -emc-qcall-ctf-13: "O2PDPSuite" reco,13,13,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=EMC SHMSIZE=64000000000 testing/private/mfasel/runEMCRawToDigitsRecoPilelineQCAlllocalCTF.sh" \ No newline at end of file diff --git a/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json b/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json deleted file mode 100644 index 9495a89..0000000 --- a/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-flp187:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - }, - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32640", - "localControl": "odc" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - }, - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": [ - "mMFTClusterSensorIndex" - ] - } - ], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "mft-clusters", - "active": "true", - "machines": [], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc-itsEPNv2-tofglobalrun.json b/testing/private/shahoian/qc/qc-itsEPNv2-tofglobalrun.json deleted file mode 100644 index d9a9862..0000000 --- a/testing/private/shahoian/qc/qc-itsEPNv2-tofglobalrun.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-flp187:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - }, - "TaskRaw": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskRaw", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "raw-local" - }, - "location": "local", - "localMachines": [ - "alio2-cr1-flp178-ib", - "alio2-cr1-flp179-ib" - ], - "remoteMachine": "localhost", - "remotePort": "30132", - "mergingMode": "delta" - }, - "TaskDigits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskDigits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "digi-local" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "47708", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - }, - "CheckDiagnostics": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckDiagnostics", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "RDHCounterCrate0" - ] - } - ] - }, - "CheckCompressedData": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckCompressedData", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "checkParameters": { - "DiagnosticThresholdPerSlot": "10" - }, - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "hDiagnostic" - ] - } - ] - }, - "CheckRawMultiplicity": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", - "moduleName": "QcTOF", - "policy": "OnAny", - "detectorName": "TOF", - "dataSource": [ - { - "type": "Task", - "name": "TaskDigits", - "MOs": [ - "TOFRawsMulti" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "digi-local", - "active": "true", - "machines": [ - "epn", - "localhost" - ], - "port": "30333", - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json deleted file mode 100644 index e7248f6..0000000 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": { - "NRawDigitsNBins": "100", - "NRawDigitsXMin": "0", - "NRawDigitsXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "TimeBinNBins": "600", - "TimeBinXMin": "0", - "TimeBinXMax": "600" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "Clusters": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue", - "NClustersNBins": "100", - "NClustersXMin": "0", - "NClustersXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "QtotNBins": "600", - "QtotXMin": "0", - "QtotXMax": "600", - "SigmaPadNBins": "200", - "SigmaPadXMin": "0", - "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", - "SigmaTimeXMin": "0", - "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", - "TimeBinXMin": "0", - "TimeBinXMax": "100000" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - }, - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "300", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32640", - "localControl": "odc" - }, - "TaskRaw": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskRaw", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "raw-local" - }, - "location": "local", - "localMachines": [ - "alio2-cr1-flp178-ib", - "alio2-cr1-flp179-ib" - ], - "remoteMachine": "localhost", - "remotePort": "30132", - "mergingMode": "delta" - }, - "TaskDigits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskDigits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "digi-local" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "47708", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - }, - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": [ - "mMFTClusterSensorIndex" - ] - } - ], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - }, - "CheckDiagnostics": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckDiagnostics", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "RDHCounterCrate0" - ] - } - ] - }, - "CheckCompressedData": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckCompressedData", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "checkParameters": { - "DiagnosticThresholdPerSlot": "10" - }, - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "hDiagnostic" - ] - } - ] - }, - "CheckRawMultiplicity": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", - "moduleName": "QcTOF", - "policy": "OnAny", - "detectorName": "TOF", - "dataSource": [ - { - "type": "Task", - "name": "TaskDigits", - "MOs": [ - "TOFRawsMulti" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.001", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "mft-clusters", - "active": "true", - "machines": [], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "digi-local", - "active": "true", - "machines": [ - "epn", - "localhost" - ], - "port": "30333", - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json deleted file mode 100644 index 2f3b2b2..0000000 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json +++ /dev/null @@ -1,332 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": { - "NRawDigitsNBins": "100", - "NRawDigitsXMin": "0", - "NRawDigitsXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "TimeBinNBins": "600", - "TimeBinXMin": "0", - "TimeBinXMax": "600" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "Clusters": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue", - "NClustersNBins": "100", - "NClustersXMin": "0", - "NClustersXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "QtotNBins": "600", - "QtotXMin": "0", - "QtotXMax": "600", - "SigmaPadNBins": "200", - "SigmaPadXMin": "0", - "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", - "SigmaTimeXMin": "0", - "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", - "TimeBinXMin": "0", - "TimeBinXMax": "100000" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - }, - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "300", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32640", - "localControl": "odc" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - }, - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": [ - "mMFTClusterSensorIndex" - ] - } - ], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.001", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "mft-clusters", - "active": "true", - "machines": [], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json deleted file mode 100644 index 5b28da5..0000000 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json +++ /dev/null @@ -1,391 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": { - "NRawDigitsNBins": "100", - "NRawDigitsXMin": "0", - "NRawDigitsXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "TimeBinNBins": "600", - "TimeBinXMin": "0", - "TimeBinXMax": "600" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "Clusters": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue", - "NClustersNBins": "100", - "NClustersXMin": "0", - "NClustersXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "QtotNBins": "600", - "QtotXMin": "0", - "QtotXMax": "600", - "SigmaPadNBins": "200", - "SigmaPadXMin": "0", - "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", - "SigmaTimeXMin": "0", - "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", - "TimeBinXMin": "0", - "TimeBinXMax": "100000" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - }, - "TaskRaw": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskRaw", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "raw-local" - }, - "location": "local", - "localMachines": [ - "alio2-cr1-flp178-ib", - "alio2-cr1-flp179-ib" - ], - "remoteMachine": "localhost", - "remotePort": "30132", - "mergingMode": "delta" - }, - "TaskDigits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskDigits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "digi-local" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "47708", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - }, - "CheckDiagnostics": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckDiagnostics", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "RDHCounterCrate0" - ] - } - ] - }, - "CheckCompressedData": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckCompressedData", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "checkParameters": { - "DiagnosticThresholdPerSlot": "10" - }, - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "hDiagnostic" - ] - } - ] - }, - "CheckRawMultiplicity": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", - "moduleName": "QcTOF", - "policy": "OnAny", - "detectorName": "TOF", - "dataSource": [ - { - "type": "Task", - "name": "TaskDigits", - "MOs": [ - "TOFRawsMulti" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.001", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "digi-local", - "active": "true", - "machines": [ - "epn", - "localhost" - ], - "port": "30333", - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json b/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json deleted file mode 100644 index 3bdae9c..0000000 --- a/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json +++ /dev/null @@ -1,279 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": { - "NRawDigitsNBins": "100", - "NRawDigitsXMin": "0", - "NRawDigitsXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "TimeBinNBins": "600", - "TimeBinXMin": "0", - "TimeBinXMax": "600" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "Clusters": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue", - "NClustersNBins": "100", - "NClustersXMin": "0", - "NClustersXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "QtotNBins": "600", - "QtotXMin": "0", - "QtotXMax": "600", - "SigmaPadNBins": "200", - "SigmaPadXMin": "0", - "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", - "SigmaTimeXMin": "0", - "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", - "TimeBinXMin": "0", - "TimeBinXMax": "100000" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.001", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json deleted file mode 100644 index 41ac1ae..0000000 --- a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": { - "NRawDigitsNBins": "100", - "NRawDigitsXMin": "0", - "NRawDigitsXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "TimeBinNBins": "600", - "TimeBinXMin": "0", - "TimeBinXMax": "600" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "Clusters": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue", - "NClustersNBins": "100", - "NClustersXMin": "0", - "NClustersXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "QtotNBins": "600", - "QtotXMin": "0", - "QtotXMax": "600", - "SigmaPadNBins": "200", - "SigmaPadXMin": "0", - "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", - "SigmaTimeXMin": "0", - "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", - "TimeBinXMin": "0", - "TimeBinXMax": "100000" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "300", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32640", - "localControl": "odc" - }, - "TaskRaw": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskRaw", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "raw-local" - }, - "location": "local", - "localMachines": [ - "alio2-cr1-flp178-ib", - "alio2-cr1-flp179-ib" - ], - "remoteMachine": "localhost", - "remotePort": "30132", - "mergingMode": "delta" - }, - "TaskDigits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskDigits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "digi-local" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "47708", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": [ - "mMFTClusterSensorIndex" - ] - } - ], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - }, - "CheckDiagnostics": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckDiagnostics", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "RDHCounterCrate0" - ] - } - ] - }, - "CheckCompressedData": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckCompressedData", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "checkParameters": { - "DiagnosticThresholdPerSlot": "10" - }, - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "hDiagnostic" - ] - } - ] - }, - "CheckRawMultiplicity": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", - "moduleName": "QcTOF", - "policy": "OnAny", - "detectorName": "TOF", - "dataSource": [ - { - "type": "Task", - "name": "TaskDigits", - "MOs": [ - "TOFRawsMulti" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.001", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "mft-clusters", - "active": "true", - "machines": [], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "digi-local", - "active": "true", - "machines": [ - "epn", - "localhost" - ], - "port": "30333", - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json b/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json deleted file mode 100644 index 00be51a..0000000 --- a/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": { - "NRawDigitsNBins": "100", - "NRawDigitsXMin": "0", - "NRawDigitsXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "TimeBinNBins": "600", - "TimeBinXMin": "0", - "TimeBinXMax": "600" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "Clusters": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue", - "NClustersNBins": "100", - "NClustersXMin": "0", - "NClustersXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "QtotNBins": "600", - "QtotXMin": "0", - "QtotXMax": "600", - "SigmaPadNBins": "200", - "SigmaPadXMin": "0", - "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", - "SigmaTimeXMin": "0", - "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", - "TimeBinXMin": "0", - "TimeBinXMax": "100000" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "300", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32640", - "localControl": "odc" - } - }, - "checks": { - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": [ - "mMFTClusterSensorIndex" - ] - } - ], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.001", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "mft-clusters", - "active": "true", - "machines": [], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json b/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json deleted file mode 100644 index b09d9a1..0000000 --- a/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": { - "NRawDigitsNBins": "100", - "NRawDigitsXMin": "0", - "NRawDigitsXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "TimeBinNBins": "600", - "TimeBinXMin": "0", - "TimeBinXMax": "600" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "Clusters": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "1", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue", - "NClustersNBins": "100", - "NClustersXMin": "0", - "NClustersXMax": "100", - "QmaxNBins": "200", - "QmaxXMin": "0", - "QmaxXMax": "200", - "QtotNBins": "600", - "QtotXMin": "0", - "QtotXMax": "600", - "SigmaPadNBins": "200", - "SigmaPadXMin": "0", - "SigmaPadXMax": "2", - "SigmaTimeNBins": "200", - "SigmaTimeXMin": "0", - "SigmaTimeXMax": "2", - "TimeBinNBins": "1000", - "TimeBinXMin": "0", - "TimeBinXMax": "100000" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "TaskRaw": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskRaw", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "raw-local" - }, - "location": "local", - "localMachines": [ - "alio2-cr1-flp178-ib", - "alio2-cr1-flp179-ib" - ], - "remoteMachine": "localhost", - "remotePort": "30132", - "mergingMode": "delta" - }, - "TaskDigits": { - "active": "true", - "className": "o2::quality_control_modules::tof::TaskDigits", - "moduleName": "QcTOF", - "detectorName": "TOF", - "cycleDurationSeconds": "10", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "digi-local" - }, - "location": "local", - "localMachines": [ - "epn", - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "47708", - "mergingMode": "delta", - "localControl": "odc" - } - }, - "checks": { - "CheckDiagnostics": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckDiagnostics", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "RDHCounterCrate0" - ] - } - ] - }, - "CheckCompressedData": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckCompressedData", - "moduleName": "QcTOF", - "detectorName": "TOF", - "policy": "OnAny", - "checkParameters": { - "DiagnosticThresholdPerSlot": "10" - }, - "dataSource": [ - { - "type": "Task", - "name": "TaskRaw", - "MOs": [ - "hDiagnostic" - ] - } - ] - }, - "CheckRawMultiplicity": { - "active": "true", - "className": "o2::quality_control_modules::tof::CheckRawMultiplicity", - "moduleName": "QcTOF", - "policy": "OnAny", - "detectorName": "TOF", - "dataSource": [ - { - "type": "Task", - "name": "TaskDigits", - "MOs": [ - "TOFRawsMulti" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.001", - "seed": "0" - } - ], - "blocking": "false" - }, - { - "id": "digi-local", - "active": "true", - "machines": [ - "epn", - "localhost" - ], - "port": "30333", - "query": "tofdigits:TOF/DIGITS/0;readoutwin:TOF/READOUTWINDOW/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc_ITS_MFT.json b/testing/private/shahoian/qc/qc_ITS_MFT.json deleted file mode 100644 index 34df6f7..0000000 --- a/testing/private/shahoian/qc/qc_ITS_MFT.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "influxdb-unix:///tmp/telegraf.sock" - }, - "consul": { - "url": "alio2-cr1-flp187:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, -"tasks": { - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "remote", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "remote" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - } - } - }, - "dataSamplingPolicies": [ - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1441" - } - ], - "blocking": "false" - } - ] -} - -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "qcdb.cern.ch:8083", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "aliecs.cern.ch:8500" - }, - "conditionDB": { - "url": "qcdb.cern.ch:8083" - } - }, - "tasks": { - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "remote" - } - }, - "checks": { - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [{ - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": ["mMFTClusterSensorIndex"] - }], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - } - } - }, - "dataSamplingPolicies": [ - { - "id": "mft-clusters", - "active": "true", - "machines": [], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc_its_tpc.json b/testing/private/shahoian/qc/qc_its_tpc.json deleted file mode 100644 index 003c3f2..0000000 --- a/testing/private/shahoian/qc/qc_its_tpc.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": {}, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "Clusters_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "remote", - "remoteMachine": "epn102-ib" - }, - "PID_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.005", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc_its_tpcNoClus.json b/testing/private/shahoian/qc/qc_its_tpcNoClus.json deleted file mode 100644 index 890cf45..0000000 --- a/testing/private/shahoian/qc/qc_its_tpcNoClus.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits_EPN": { - "active": "false", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": {}, - "location": "remote" - }, - "Clusters_EPN": { - "active": "false", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "remoteMachine": "epn102-ib", - "location": "remote" - }, - "PID_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "false", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc_its_tpcNoDigi.json b/testing/private/shahoian/qc/qc_its_tpcNoDigi.json deleted file mode 100644 index 151a200..0000000 --- a/testing/private/shahoian/qc/qc_its_tpcNoDigi.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits_EPN": { - "active": "false", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": {}, - "location": "remote" - }, - "Clusters_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "remoteMachine": "epn102-ib", - "location": "remote" - }, - "PID_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32630", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn102-ib", - "remotePort": "32631" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.3", - "seed": "1441" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc_tpc_its_mft.json b/testing/private/shahoian/qc/qc_tpc_its_mft.json deleted file mode 100644 index fa43196..0000000 --- a/testing/private/shahoian/qc/qc_tpc_its_mft.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": {}, - "location": "remote" - }, - "Clusters_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "remote" - }, - "PID_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn160-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn160-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "ITSClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "180", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "compclus" - }, - "location": "remote", - "taskParameters": { - "layer": "1111111", - "clusterDictionaryPath": "/home/epn/odc/files/ITSdictionary.bin", - "runNumberPath": "/home/its/QC/workdir/infiles/RunNumber.dat", - "geomPath": "/home/epn/odc/files/o2sim_geometry.root", - "nThreads": "4" - } - }, - "ITSTrackTask": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackTask", - "moduleName": "QcITS", - "detectorName": "ITS", - "cycleDurationSeconds": "30", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "tracks" - }, - "location": "remote" - }, - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "remote" - } - }, - "checks": { - "ITSClusterCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSClusterCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSClusterTask", - "MOs": [ - "Layer0/AverageClusterSize" - ] - } - ] - }, - "ITSTrackCheck": { - "active": "true", - "className": "o2::quality_control_modules::its::ITSTrackCheck", - "moduleName": "QcITS", - "policy": "OnAny", - "detectorName": "ITS", - "dataSource": [ - { - "type": "Task", - "name": "ITSTrackTask", - "MOs": [ - "NClusters" - ] - } - ] - }, - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": [ - "mMFTClusterSensorIndex" - ] - } - ], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "compclus", - "active": "true", - "machines": [], - "query": "compclus:ITS/COMPCLUSTERS/0;clustersrof:ITS/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "tracks", - "active": "true", - "machines": [], - "query": "tracks:ITS/TRACKS/0;rofs:ITS/ITSTrackROF/0;compclus:ITS/COMPCLUSTERS/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1441" - } - ], - "blocking": "false" - }, - { - "id": "mft-clusters", - "active": "true", - "machines": [], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/qc/qc_tpc_mft.json b/testing/private/shahoian/qc/qc_tpc_mft.json deleted file mode 100644 index 46d4b16..0000000 --- a/testing/private/shahoian/qc/qc_tpc_mft.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "qc": { - "config": { - "database": { - "implementation": "CCDB", - "host": "ccdb-test.cern.ch:8080", - "username": "not_applicable", - "password": "not_applicable", - "name": "not_applicable" - }, - "Activity": { - "number": "42", - "type": "2" - }, - "monitoring": { - "url": "infologger:///debug?qc" - }, - "consul": { - "url": "http://consul-test.cern.ch:8500" - }, - "conditionDB": { - "url": "ccdb-test.cern.ch:8080" - } - }, - "tasks": { - "RawDigits_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::RawDigits", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-rawdata" - }, - "taskParameters": {}, - "location": "remote" - }, - "Clusters_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Clusters", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "random-cluster" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "remote" - }, - "PID_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::PID", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn160-ib", - "remotePort": "32625", - "mergingMode": "delta" - }, - "Tracks_EPN": { - "active": "true", - "className": "o2::quality_control_modules::tpc::Tracks", - "moduleName": "QcTPC", - "detectorName": "TPC", - "cycleDurationSeconds": "30", - "resetAfterCycles": "10", - "maxNumberCycles": "-1", - "dataSource": { - "type": "direct", - "query": "inputTracks:TPC/TRACKS/0" - }, - "taskParameters": {}, - "location": "local", - "localMachines": [ - "localhost" - ], - "remoteMachine": "epn160-ib", - "remotePort": "32626", - "mergingMode": "delta" - }, - "QcMFTClusterTask": { - "active": "true", - "className": "o2::quality_control_modules::mft::QcMFTClusterTask", - "moduleName": "QcMFT", - "detectorName": "MFT", - "cycleDurationSeconds": "60", - "maxNumberCycles": "-1", - "dataSource_comment": "The other type of dataSource is \"direct\", see basic-no-sampling.json.", - "dataSource": { - "type": "dataSamplingPolicy", - "name": "mft-clusters" - }, - "taskParameters": { - "myOwnKey": "myOwnValue" - }, - "location": "remote" - } - }, - "checks": { - "QcMFTClusterCheck": { - "active": "true", - "dataSource": [ - { - "type": "Task", - "name": "QcMFTClusterTask", - "MOs": [ - "mMFTClusterSensorIndex" - ] - } - ], - "className": "o2::quality_control_modules::mft::QcMFTClusterCheck", - "moduleName": "QcMFT", - "detectorName": "MFT", - "policy": "OnAny" - } - }, - "externalTasks": null, - "postprocessing": null - }, - "dataSamplingPolicies": [ - { - "id": "random-cluster", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32627", - "query": "inputClus:TPC/CLUSTERNATIVE", - "outputs": "sampled-clusters:DS/CLUSTERNATIVE", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "random-rawdata", - "active": "true", - "machines": [ - "localhost" - ], - "port": "32628", - "query": "inputRaw:TPC/RAWDATA", - "outputs": "sampled-rawdata:DS/RAWDATA", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.1", - "seed": "1234" - } - ], - "blocking": "false" - }, - { - "id": "mft-clusters", - "active": "true", - "machines": [], - "query": "randomcluster:MFT/COMPCLUSTERS/0;clustersrof:MFT/CLUSTERSROF/0", - "samplingConditions": [ - { - "condition": "random", - "fraction": "0.01", - "seed": "1234" - } - ], - "blocking": "false" - } - ] -} diff --git a/testing/private/shahoian/reproc_CTF b/testing/private/shahoian/reproc_CTF deleted file mode 100755 index e5ce55f..0000000 --- a/testing/private/shahoian/reproc_CTF +++ /dev/null @@ -1 +0,0 @@ -cat workflows_dpl.desc | grep -v '#' | grep -v '\-TF\-' | cut -d':' -f1 | xargs ./run_ext_dpl.sh diff --git a/testing/private/shahoian/reproc_TF_CTF b/testing/private/shahoian/reproc_TF_CTF deleted file mode 100755 index 4bf2e4c..0000000 --- a/testing/private/shahoian/reproc_TF_CTF +++ /dev/null @@ -1 +0,0 @@ -cat workflows_dpl.desc | grep -v '#' | grep '\-TF\-' | cut -d':' -f1 | xargs ./runTF_ext_dpl.sh diff --git a/testing/private/shahoian/runTF_PB.sh b/testing/private/shahoian/runTF_PB.sh deleted file mode 100755 index dcd495f..0000000 --- a/testing/private/shahoian/runTF_PB.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard -#export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository - -export EXTINPUT=1 -export EPNSYNCMODE=1 -export SYNCMODE=1 -export SHMSIZE=128000000000 -export INFOLOGGER_SEVERITY=warning - -export EDJSONS_DIR="/home/ed/jsons" - -export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_PB.desc # Topology description library file to load: Pilot Beam -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF -export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" - -export GEN_TOPO_IGNORE_ERROR=1 - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 -export MULTIPLICITY_FACTOR_CTFENCODERS=1 -export MULTIPLICITY_FACTOR_REST=1 - -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=1.5;GPU_global.synchronousProcessing=0" -export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" -export PVERTEX_EXTRA_CONFIG="pvertexer.nSigmaTimeCut=100;pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" -export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 -export MULTIPLICITY_FACTOR_PROCESS_its_stf_decoder=4 -export MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=2 -export MULTIPLICITY_FACTOR_PROCESS_itstpc_track_matcher=2 -export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 -export MULTIPLICITY_FACTOR_PROCESS_mch_data_decoder=5 - -export ITS_CONFIG=" --tracking-mode sync_misaligned " -#export ITS_CONFIG=" --tracking-mode cosmics " - -export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO,MATCH_TPCTRD,MATCH_TPCTOF" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" -export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF,FT0,FV0,FDD" -#export WORKFLOW_DETECTORS_MATCHING= -export ARGS_EXTRA_PROCESS_o2_tpcits_match_workflow=" --ignore-bc-check " - -export ED_TRACKS="ITS,TPC,ITS-TPC,ITS-TPC-TOF,TPC-TOF,MFT" -export ED_CLUSTERS="ITS,TPC,TOF,MFT" - -for wf in "$@" -do - export GEN_TOPO_WORKFLOW_NAME=$wf - EXT="xml" - [ ! -z $WORKFLOWMODE ] && [ $WORKFLOWMODE == "print" ] && EXT="sh" - /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" -done diff --git a/testing/private/shahoian/runTF_ext_dpl.sh b/testing/private/shahoian/runTF_ext_dpl.sh deleted file mode 100755 index 8a49817..0000000 --- a/testing/private/shahoian/runTF_ext_dpl.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard -#export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository - -export EXTINPUT=1 -export EPNSYNCMODE=1 -export SYNCMODE=1 -export SHMSIZE=128000000000 -export INFOLOGGER_SEVERITY=warning - -export EDJSONS_DIR="/home/ed/jsons" - -export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF -export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" -#export GPU_EXTRA_CONFIG="" -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" - -export GEN_TOPO_IGNORE_ERROR=1 - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 -export MULTIPLICITY_FACTOR_CTFENCODERS=1 -export MULTIPLICITY_FACTOR_REST=1 - -for wf in "$@" -do - export GEN_TOPO_WORKFLOW_NAME=$wf - EXT="xml" - [ ! -z $WORKFLOWMODE ] && [ $WORKFLOWMODE == "print" ] && EXT="sh" - /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" -done diff --git a/testing/private/shahoian/run_PB.sh b/testing/private/shahoian/run_PB.sh deleted file mode 100755 index 6694ec6..0000000 --- a/testing/private/shahoian/run_PB.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -#export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository - -export EXTINPUT=1 -export EPNSYNCMODE=1 -export SYNCMODE=1 -export SHMSIZE=128000000000 -export INFOLOGGER_SEVERITY=warning - -export EDJSONS_DIR="/home/ed/jsons" - -export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_PB.desc # Topology description library file to load: Pilot Beam -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF -export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" - -export GEN_TOPO_IGNORE_ERROR=1 - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 -export MULTIPLICITY_FACTOR_CTFENCODERS=1 -export MULTIPLICITY_FACTOR_REST=1 - -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;GPU_proc.memoryScalingFactor=1.5" -export ITSTPC_EXTRA_CONFIG="tpcitsMatch.maxVDriftUncertainty=0.2;tpcitsMatch.safeMarginTimeCorrErr=10.;tpcitsMatch.cutMatchingChi2=1000;tpcitsMatch.crudeAbsDiffCut[0]=5;tpcitsMatch.crudeAbsDiffCut[1]=5;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=10;tpcitsMatch.crudeNSigma2Cut[0]=200;tpcitsMatch.crudeNSigma2Cut[1]=200;tpcitsMatch.crudeNSigma2Cut[2]=200;tpcitsMatch.crudeNSigma2Cut[3]=200;tpcitsMatch.crudeNSigma2Cut[4]=900;" -export PVERTEX_EXTRA_CONFIG="pvertexer.nSigmaTimeCut=100;pvertexer.dbscanMaxDist2=30;pvertexer.dcaTolerance=3.;pvertexer.pullIniCut=100;pvertexer.addZSigma2=0.1;pvertexer.tukey=20.;pvertexer.addZSigma2Debris=0.01;pvertexer.addTimeSigma2Debris=1.;pvertexer.maxChi2Mean=30;" -export MULTIPLICITY_FACTOR_PROCESS_its_tracker=4 -export MULTIPLICITY_FACTOR_PROCESS_its_stf_decoder=4 -export MULTIPLICITY_FACTOR_PROCESS_mft_stf_decoder=2 -export MULTIPLICITY_FACTOR_PROCESS_itstpc_track_matcher=2 -export MULTIPLICITY_FACTOR_PROCESS_tof_matcher=2 -export MULTIPLICITY_FACTOR_PROCESS_mch_data_decoder=5 - -export ITS_CONFIG=" --tracking-mode sync_misaligned " -#export ITS_CONFIG=" --tracking-mode cosmics " - -export WORKFLOW_EXTRA_PROCESSING_STEPS="MFT_RECO,MATCH_TPCTRD,MATCH_TPCTOF" #,MATCH_ITSTPC,MATCH_TPCTRD,MATCH_ITSTPCTRD,MATCH_TPCTOF,MATCH_ITSTPCTOF" -export WORKFLOW_DETECTORS_FLP_PROCESSING="TOF,FT0,FV0,FDD" -#export WORKFLOW_DETECTORS_MATCHING= -export ARGS_EXTRA_PROCESS_o2_tpcits_match_workflow=" --ignore-bc-check " - -for wf in "$@" -do - export GEN_TOPO_WORKFLOW_NAME=$wf - EXT="xml" - [ ! -z $WORKFLOWMODE ] && [ $WORKFLOWMODE == "print" ] && EXT="sh" - /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/PB/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" -done diff --git a/testing/private/shahoian/run_ext.sh b/testing/private/shahoian/run_ext.sh deleted file mode 100755 index b3bf684..0000000 --- a/testing/private/shahoian/run_ext.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository - -export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows.desc # Topology description library file to load -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC= # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS= # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=256 # Number of HBF per TF - -export GEN_TOPO_IGNORE_ERROR=1 - -##--------------- -jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2.json -jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json /home/epn/odc/files/qc-mft-cluster.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus.json -jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/odc/files/qc-mft-cluster.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus.json -jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json /home/epn/odc/files/qc-mft-cluster.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-mftClus-tofglobalrun.json -jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/jliu/itsEPNv2.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-itsEPNv2-tofglobalrun.json -#jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/jliu/itsEPNv2.json /home/epn/odc/files/qc-mft-cluster.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-itsEPNv2-mftClus.json -jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-tofglobalrun.json -jq -n 'reduce inputs as $s (input; .qc.tasks += ($s.qc.tasks) | .qc.checks += ($s.qc.checks) | .qc.externalTasks += ($s.qc.externalTasks) | .qc.postprocessing += ($s.qc.postprocessing)| .dataSamplingPolicies += ($s.dataSamplingPolicies))' /home/epn/odc/files/tpcQCTasks_multinode_ALL.json /home/epn/odc/files/qc-mft-cluster.json /home/fnoferin/public/tof-qc-globalrun.json > /home/shahoian/alice/O2DataProcessing/testing/private/shahoian/qc/qc-tpcMNAll-mftClus-tofglobalrun.json - -for wf in "$@" -do - export GEN_TOPO_WORKFLOW_NAME=$wf - /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/test/${GEN_TOPO_WORKFLOW_NAME}.xml -done diff --git a/testing/private/shahoian/run_ext_dpl.sh b/testing/private/shahoian/run_ext_dpl.sh deleted file mode 100755 index 9666f7e..0000000 --- a/testing/private/shahoian/run_ext_dpl.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -#export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository - -export EXTINPUT=1 -export EPNSYNCMODE=1 -export SYNCMODE=1 -export SHMSIZE=128000000000 -export INFOLOGGER_SEVERITY=warning - -export EDJSONS_DIR="/home/ed/jsons" - -export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF -export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" -#export GPU_EXTRA_CONFIG="" -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" - -export GEN_TOPO_IGNORE_ERROR=1 - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 -export MULTIPLICITY_FACTOR_CTFENCODERS=1 -export MULTIPLICITY_FACTOR_REST=1 - -#[ -z $WORKFLOWMODE ] && export WORKFLOWMODE="dds" - -for wf in "$@" -do - export GEN_TOPO_WORKFLOW_NAME=$wf - EXT="xml" - [ ! -z $WORKFLOWMODE ] && [ $WORKFLOWMODE == "print" ] && EXT="sh" - /home/epn/pdp/gen_topo.sh > "$HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.${EXT}" -done diff --git a/testing/private/shahoian/run_test.sh b/testing/private/shahoian/run_test.sh deleted file mode 100755 index 5f93ab9..0000000 --- a/testing/private/shahoian/run_test.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -#export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository - -export EXTINPUT=1 -export EPNSYNCMODE=1 -export SYNCMODE=0 -export CTFINPUT=0 -export SHMSIZE=128000000000 -export INFOLOGGER_SEVERITY=warning - -export EDJSONS_DIR="/home/ed/jsons" - -export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_test.desc # Topology description library file to load -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF -export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" -#export GPU_EXTRA_CONFIG="" -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" - -export GEN_TOPO_IGNORE_ERROR=1 - -export CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 -export MULTIPLICITY_FACTOR_CTFENCODERS=1 -export MULTIPLICITY_FACTOR_REST=1 - -export WORKFLOWMODE=print - -for wf in "$@" -do - export GEN_TOPO_WORKFLOW_NAME=$wf - /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/test/${GEN_TOPO_WORKFLOW_NAME}.xml -done diff --git a/testing/private/shahoian/workflows_PB.desc b/testing/private/shahoian/workflows_PB.desc deleted file mode 100644 index a92a31e..0000000 --- a/testing/private/shahoian/workflows_PB.desc +++ /dev/null @@ -1,52 +0,0 @@ -#its-pvtx-CTF-QC-its-pvtx-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -#its-mftTR-tpc-trd-tof-pvtx-CTF-QC-its-mft-tpc-tof-pvtx-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,PRIMVTX WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MATCH_PRIMVTX N_ITSTRK=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -#ctf_itsCOSM-tpcCPU-trd-tof_A: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=0 RAWTFINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" -#ctf_itsCOSM-tpcCPU-trd-tof_B: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" -#ctf_itsCOSM-tpcCPU-trd-tof_C: "O2PDPSuite" reco,1,1,"SYNCMODE=0 EXTINPUT=0 CTFINPUT=1 BEAMTYPE=cosmic WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TRD,TOF N_ITSTRK=2 production/dpl-workflow.sh" - -async-ED-75: "O2PDPSuite" reco,75,75,"EXTINPUT=0 SYNCMODE=0 CTFINPUT=1 BEAMTYPE=pp WORKFLOW_PARAMETERS=CTF,CPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO N_ITSTRK=3 production/dpl-workflow.sh" - -mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=MFT ED_CLUSTERS=MFT production/dpl-workflow.sh" -ft0-fv0-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0 WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=MFT ED_CLUSTERS=MFT production/dpl-workflow.sh" -ft0-fv0-fdd-mftTR-TF-CTF-QC-mft-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=MFT ED_CLUSTERS=MFT production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140-NOQC: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch-ft0-fv0-fdd-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0,FV0,FDD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-mid-mch-ft0-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-140: "O2PDPSuite" reco,140,140,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH,FT0 WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" - -mch-TF-CTF-QC-mch-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MCH WORKFLOW_DETECTORS_QC=MCH production/dpl-workflow.sh" - -its-mftTR-tpcCPU-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" - -its-mftTR-tpcCPU-trd-tof-mid-mch-PV-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-160: "O2PDPSuite" reco,160,160,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS+=,MATCH_PRIMVTX production/dpl-workflow.sh" diff --git a/testing/private/shahoian/workflows_dpl.desc b/testing/private/shahoian/workflows_dpl.desc deleted file mode 100644 index e0e4804..0000000 --- a/testing/private/shahoian/workflows_dpl.desc +++ /dev/null @@ -1,251 +0,0 @@ -#tpc-ctf-qcTPC-59mon: "O2PDPSuite" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" - -tpc-ctf-qcTPC-59: "O2PDPSuite" reco,59,59," WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" -tof-ctf-qcTOF-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=TOF production/dpl-workflow.sh" -its-ctf-qcITS-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS production/dpl-workflow.sh" - - - -its-ctf-qcITSMRG-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS=ITS QC_HOST=epn QC_JSON_ITS=/home/jian/jliu/itsEPN-merger.json production/dpl-workflow.sh" - -mftHR891bc-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=891 WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" -mftHR198bc-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=198 WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" -mftHR891bcNM-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=891 CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow=\"MFTClustererParam.maxBCDiffToMaskBias=-100;\" WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" -mftHR198bcNM-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=198 CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow=\"MFTClustererParam.maxBCDiffToMaskBias=-100;\" WORKFLOW_DETECTORS=MFT MULTIPLICITY_FACTOR_CTFENCODERS=3 MULTIPLICITY_FACTOR_RAWDECODERS=3 production/dpl-workflow.sh" - -mft891bc-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=891 WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" -mft198bc-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=198 WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" -mft891bcNM-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=891 CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow=\"MFTClustererParam.maxBCDiffToMaskBias=-100;\" WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" -mft198bcNM-ctf-qcMFT-30: "O2PDPSuite" reco,30,30,"MFT_STROBE=198 CONFIG_EXTRA_PROCESS_o2_itsmft_stf_decoder_workflow=\"MFTClustererParam.maxBCDiffToMaskBias=-100;\" WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" - - -its-mft-tpc-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -mft-tpc-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -its-mft-tpc-tof-CTF-QC-its-mft-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh" -mft-tpc-tof-CTF-QC-mft-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" - - -#tpcCPU-ctf-qcTPC-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" -its-mft-tpcCPU-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -mft-tpcCPU-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -its-mft-tpcCPU-tof-CTF-QC-its-mft-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF production/dpl-workflow.sh" -mft-tpcCPU-tof-CTF-QC-mft-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TPC,TOF production/dpl-workflow.sh" -mft-tof-CTF-QC-mft-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,TOF WORKFLOW_DETECTORS_QC=MFT,TOF production/dpl-workflow.sh" - - -tpcCPU-ctf-qcTPC-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" -its-tof-CTF-QC-its-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,TOF production/dpl-workflow.sh" - -its-tpc-tof-CTF-QC-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=TPC production/dpl-workflow.sh" -its-tpc-tof-CTF-QC-its-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh" - -its-tpc-CTF-QC-its-tpc-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" - -its-tpc-CTF-QC-its-tpc-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" -its-tpc-CTF-QC-its-tpc-50-nomon: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" -#its-tpc-nomatch-CTF-QC-its-tpc-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC production/dpl-workflow.sh" - -mch-mid-CTF-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS=MCH,MID production/dpl-workflow.sh" - -mid-TF-CTF-QC-mid-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF,QC WORKFLOW_DETECTORS=MID WORKFLOW_DETECTORS_QC=MID production/dpl-workflow.sh" -mid-CTF-QC-mid-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF,QC WORKFLOW_DETECTORS=MID WORKFLOW_DETECTORS_QC=MID production/dpl-workflow.sh" - -trd-ctf-20: "O2PDPSuite" reco,20,20,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=TRD production/dpl-workflow.sh" -tpc-trd-ctf-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=TPC,TRD production/dpl-workflow.sh" - - -its-tpc-tof-trd-CTF-QC-its-tpc-tof-59: "O2PDPSuite" reco,59,59,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" -its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" -tpc-ctf-qcTPC-ED-59: "O2PDPSuite" reco,59,59,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" - -its-tpc-tof-trd-CTF-QC-its-tpc-tof-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" - -its-tpc-tof-trd-CTF-QC-its-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF,TRD production/dpl-workflow.sh" -its-tpc-tof-CTF-QC-its-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY ED_TRACKS=ITS,TPC,ITS-TPC ED_CLUSTERS=ITS,TPC WORKFLOW_DETECTORS=ITS,TPC,TOF production/dpl-workflow.sh" -its-tpc-CTF-QC-its-tpc-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC ED_TRACKS=ITS,TPC,ITS-TPC ED_CLUSTERS=ITS,TPC production/dpl-workflow.sh" -tpc-ctf-qcTPC-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" - -tpc-ctf-qcTPCnodig-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC QC_JSON_TPC=/home/epn/odc/files/tpcQCTasks_multinode_ALL_nodigi.json ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" - -tpc-tof-CTF-QC-tpc-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC,TOF ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" - -tpc-ctf-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=TPC ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" -tpc-ctf-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=TPC production/dpl-workflow.sh" - -its-mft-mid-mch-CTF-QC-its-mft-20: "O2PDPSuite" reco,20,20,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT production/dpl-workflow.sh" -#its-mft-mid-mch-TF-CTF-QC-its-mft-20: "O2PDPSuite" reco,20,20,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT production/dpl-workflow.sh" - -ft0-CTF-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FT0 MULTIPLICITY_FACTOR_RAWDECODERS=4 MULTIPLICITY_FACTOR_CTFENCODERS=4 production/dpl-workflow.sh" -fv0-CTF-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FV0 MULTIPLICITY_FACTOR_RAWDECODERS=4 MULTIPLICITY_FACTOR_CTFENCODERS=4 production/dpl-workflow.sh" -ft0-fv0-CTF-2: "O2PDPSuite" reco,2,2,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FT0,FV0 MULTIPLICITY_FACTOR_RAWDECODERS=4 MULTIPLICITY_FACTOR_CTFENCODERS=4 production/dpl-workflow.sh" - -ft0-TF-CTF-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FT0 MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_CTFENCODERS=2 production/dpl-workflow.sh" -fv0-TF-CTF-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FV0 MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_CTFENCODERS=2 production/dpl-workflow.sh" -ft0-fv0-TF-CTF-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=FT0,FV0 MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_CTFENCODERS=2 production/dpl-workflow.sh" -ft0-fv0-mft-mid-mch-TF-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=FT0,FV0,MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT MULTIPLICITY_FACTOR_RAWDECODERS=2 MULTIPLICITY_FACTOR_CTFENCODERS=2 production/dpl-workflow.sh" - -mft-mid-mch-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -mft-mid-mch-TF-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" - -mft-mid-mch-CTF-QC-mft-10: "O2PDPSuite" reco,10,10,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -mft-mid-mch-TF-CTF-QC-mft-10: "O2PDPSuite" reco,10,10,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" - -mft-mch-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -mft-mch-TF-CTF-QC-mft-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" - -mft-mch-CTF-QC-mft-10: "O2PDPSuite" reco,10,10,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -mft-mch-TF-CTF-QC-mft-10: "O2PDPSuite" reco,10,10,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" - - -mft-mid-mch-TF-CTF-QC-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" -mft-mch-TF-CTF-QC-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT,MCH WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" - -mft-TF-CTF-QC-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=MFT WORKFLOW_DETECTORS_QC=MFT production/dpl-workflow.sh" - -ft0-fv0-mft-mid-mch-TF-CTF-QC-mft-ft0-fv0-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=FT0,FV0,MFT,MID,MCH WORKFLOW_DETECTORS_QC=MFT,FT0,FV0 production/dpl-workflow.sh" -ft0-fv0-mft-mch-TF-CTF-QC-mft-ft0-fv0-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=FT0,FV0,MFT,MCH WORKFLOW_DETECTORS_QC=MFT,FT0,FV0 production/dpl-workflow.sh" - -ft0-fv0-TF-CTF-QC-ft0-fv0-5: "O2PDPSuite" reco,5,5,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=FT0,FV0 WORKFLOW_DETECTORS_QC=FT0,FV0 production/dpl-workflow.sh" - -mft-tpc-CTF-QC-mft-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,TPC WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" -mft-tpc-CTF-QC-mft-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=MFT,TPC WORKFLOW_DETECTORS_QC=MFT ED_TRACKS=TPC ED_CLUSTERS=TPC production/dpl-workflow.sh" - -its-ctf-qcITS-notracking-20: "O2PDPSuite" reco,20,20,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" - -#its_notracking-mft-tpc-CTF-QC-its-mft-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -#its_notracking-tpc-CTF-QC-its-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC WORKFLOW_DETECTORS_QC=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -#its_notracking-tpc-CTF-QC-its-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC WORKFLOW_DETECTORS_QC=ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" - -#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" - -#its_notracking-tpc-tof-CTF-QC-its-tof-ED-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -#its_notracking-tpc-tof-CTF-QC-its-tof-ED-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" - -#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-70: "O2PDPSuite" reco,70,70,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" - -#its_notracking-mft-tpc-tof-CTF-QC-its-mft-tof-50-ctfmeta: "O2PDPSuite" reco,50,50,"CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF,GPU WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=MFT,ITS,TOF QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" - -#its_notracking-mft-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS_RECO= WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" -#its_notracking-mft-TF-CTF-QC-its-mft-50: "O2PDPSuite" reco,50,50,"WORKFLOW_DETECTORS_RECO= WORKFLOW_PARAMETERS=QC,CTF WORKFLOW_DETECTORS=ITS,MFT WORKFLOW_DETECTORS_QC=MFT,ITS QC_JSON_ITS=/home/epn/jliu/itsCluster.json production/dpl-workflow.sh" - -#--- - -itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-mid-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-CTF-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-tof-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -ft0-fv0-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED_noits-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=MFT,MCH ED_CLUSTERS=MFT,MCH production/dpl-workflow.sh" -ft0FLP-fv0FLP-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED_noits-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=MFT,MCH ED_CLUSTERS=MFT,MCH production/dpl-workflow.sh" - -ft0-fv0-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,MCH ED_CLUSTERS=ITS,MFT,MCH production/dpl-workflow.sh" -ft0FLP-fv0FLP-its-mftTR-mid-mch-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,MCH ED_CLUSTERS=ITS,MFT,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-5: "O2PDPSuite" reco,5,5,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-10: "O2PDPSuite" reco,10,10,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch-TF-CTF-QC-its-mft-tpc-tof-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MCH_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC,MCH ED_CLUSTERS=ITS,MFT,TPC,MCH production/dpl-workflow.sh" - -ft0-fv0-its-mftTR-mid-mch_noreco-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT ED_CLUSTERS=ITS,MFT production/dpl-workflow.sh" -ft0FLP-fv0FLP-its-mftTR-mid-mch_noreco-TF-CTF-QC-its-mft-ED-50: "O2PDPSuite" reco,50,50,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,FT0,FV0,MCH,MID WORKFLOW_DETECTORS_QC=ITS,MFT WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO WORKFLOW_DETECTORS_FLP_PROCESSING=FT0,FV0 MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT ED_CLUSTERS=ITS,MFT production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-midTR-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO,MID_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -itsCOSM-mftTR-tpcCPU-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF_CTF-QC-its-mft-tpc-tof-mid-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF_CTF-QC-its-mft-tpc-tof-mid-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-5: "O2PDPSuite" reco,5,5,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-10: "O2PDPSuite" reco,10,10,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-30: "O2PDPSuite" reco,30,30,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-ED-110: "O2PDPSuite" reco,110,110,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - - - -#--- tof QC suppressed - -itsCOSM-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos production/dpl-workflow.sh" -its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -its-mftTR-tpc-tof-TF-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - - -its-mftTR-tpc-tof-CTF-QC-its-mft-tpc-ED-75: "O2PDPSuite" reco,75,75,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -itsCOSM-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS MULTIPLICITY_FACTOR_PROCESS_its_tracker=25 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" -itsCOSM-TF-CTF-QC-its-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS WORKFLOW_DETECTORS_QC=ITS MULTIPLICITY_FACTOR_PROCESS_its_tracker=25 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root production/dpl-workflow.sh" - -#---- -#mft_decoder2digits_for_noise_calib-30: "O2PDPSuite" reco,30,30,"testing/private/shahoian/mft_decoder2digits_for_noise_calib.sh" - -its-mftTR-tpc-trd-tof-TF-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-CTF-QC-its-mft-tpc-tof-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-mid-TF-CTF-QC-its-mft-tpc-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID WORKFLOW_DETECTORS_QC=ITS,MFT,TPC WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=10 production/dpl-workflow.sh" - -#---------------------- -mft-ctf-qc-raw-cluster-MFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" -mft-ctf-qc-raw-digit-cluster-MFT-30: "O2PDPSuite" reco,30,30,"WORKFLOW_DETECTORS=MFT production/dpl-workflow.sh" - -hmp-TF-CTF-1: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" -hmp-TF-CTF-2: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" - -hmp-CTF-1: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" -hmp-CTF-2: "O2PDPSuite" reco,1,1,"WORKFLOW_DETECTORS=HMP WORKFLOW_PARAMETERS=CTF production/dpl-workflow.sh" - -ctf_itsCOSM-mftTR-tpc-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -ctf_itsCOSM-mftTR-tpcCPU-trd-tof-mid-ED-1: "O2PDPSuite" reco,1,1,"BEAMTYPE=cosmic SYNCMODE=0 EXTINPUT=0 WORKFLOW_PARAMETERS=EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID CTFINPUT=1 WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -#--------------- -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-120: "O2PDPSuite" reco,120,120,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -its-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-its-mft-tpc-tof-mid-mch-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -its-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-110: "O2PDPSuite" reco,110,110,"BEAMTYPE=pp WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-TF-CTF-QC-its-mft-tpc-tof-mid-mch-ED-110: "O2PDPSuite" reco,110,110,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=ITS,MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-mft-tpc-tof-mid-mch-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" - -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-mft-tpc-tof-mid-mch-ED-100: "O2PDPSuite" reco,100,100,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-mft-tpc-tof-mid-mch-ED-65: "O2PDPSuite" reco,65,65,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" -itsCOSM-mftTR-tpc-trd-tof-mid-mch_noreco-CTF-QC-mft-tpc-tof-mid-mch-ED-20: "O2PDPSuite" reco,20,20,"BEAMTYPE=cosmic WORKFLOW_PARAMETERS=QC,CTF,GPU,EVENT_DISPLAY WORKFLOW_DETECTORS=ITS,MFT,TPC,TOF,TRD,MID,MCH WORKFLOW_DETECTORS_QC=MFT,TPC,TOF,MID,MCH WORKFLOW_EXTRA_PROCESSING_STEPS=MFT_RECO MULTIPLICITY_FACTOR_PROCESS_its_tracker=12 ITS_NOISE=/home/epn/odc/files/ITS_noise_230921.root ED_TRACKS=ITS,MFT,TPC,ITS-TPC ED_CLUSTERS=ITS,MFT,TPC production/dpl-workflow.sh" diff --git a/testing/private/zampolli/calib/run.sh b/testing/private/zampolli/calib/run.sh deleted file mode 100755 index 46277a0..0000000 --- a/testing/private/zampolli/calib/run.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.13 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository - -export GEN_TOPO_LIBRARY_FILE=production/standalone-calibration.desc # Topology description library file to load -export WORKFLOW_DETECTORS=TOF # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=TOF # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB=TOF # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_DETECTORS_RECO=TOF # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_DETECTORS_FLP_PROCESSING= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=QC,CALIB # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -for wf in "$@" -do - echo - echo - echo Processing workflow $wf - export GEN_TOPO_WORKFLOW_NAME=$wf - export WORKFLOWMODE=dds - /home/epn/pdp/gen_topo.sh > $HOME/gen_topo_calib/dplTest/${GEN_TOPO_WORKFLOW_NAME}.xml - # export WORKFLOWMODE=print - # /home/epn/pdp/gen_topo.sh > $HOME/gen_topo_calib/dpl/${GEN_TOPO_WORKFLOW_NAME}.sh - -done - diff --git a/testing/private/zampolli/reproc_CTF b/testing/private/zampolli/reproc_CTF deleted file mode 100755 index 1eb2db3..0000000 --- a/testing/private/zampolli/reproc_CTF +++ /dev/null @@ -1 +0,0 @@ -cat ../shahoian/workflows_dpl.desc | grep -v '#' | grep -v '\-TF\-' | grep 'tof' | cut -d':' -f1 | xargs ./run_ext_dpl.sh diff --git a/testing/private/zampolli/reproc_TF_CTF b/testing/private/zampolli/reproc_TF_CTF deleted file mode 100755 index 5cdd690..0000000 --- a/testing/private/zampolli/reproc_TF_CTF +++ /dev/null @@ -1 +0,0 @@ -cat ../shahoian/workflows_dpl.desc | grep -v '#' | grep '\-TF\-' | grep 'tof' | cut -d':' -f1 | xargs ./runTF_ext_dpl.sh diff --git a/testing/private/zampolli/runTF_ext_dpl.sh b/testing/private/zampolli/runTF_ext_dpl.sh deleted file mode 100755 index 543986b..0000000 --- a/testing/private/zampolli/runTF_ext_dpl.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard -#export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/shahoian/alice/O2DataProcessing # Path to O2DataProcessing repository - -export EXTINPUT=1 -export EPNSYNCMODE=1 -export SYNCMODE=1 -export SHMSIZE=128000000000 -export INFOLOGGER_SEVERITY=warning - -export EDJSONS_DIR="/home/ed/jsons" - -export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF -export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" -#export GPU_EXTRA_CONFIG="" -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" - -export GEN_TOPO_IGNORE_ERROR=1 - - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 -export MULTIPLICITY_FACTOR_CTFENCODERS=1 -export MULTIPLICITY_FACTOR_REST=1 - -for wf in "$@" -do - echo - echo - echo Processing workflow $wf - export GEN_TOPO_WORKFLOW_NAME=$wf - /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.xml -done diff --git a/testing/private/zampolli/run_ext_dpl.sh b/testing/private/zampolli/run_ext_dpl.sh deleted file mode 100755 index 13d7e46..0000000 --- a/testing/private/zampolli/run_ext_dpl.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -#export DDMODE=processing-disk # DataDistribution mode - possible options: processing, disk, processing-disk, discard -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.5 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=/home/zampolli/alice/O2DataProcessing # Path to O2DataProcessing repository - -export EXTINPUT=1 -export EPNSYNCMODE=1 -export SYNCMODE=1 -export SHMSIZE=128000000000 -export INFOLOGGER_SEVERITY=warning - -export EDJSONS_DIR="/home/ed/jsons" - -export GEN_TOPO_LIBRARY_FILE=testing/private/shahoian/workflows_dpl.desc # Topology description library file to load -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=QC,CTF,GPU # Additional paramters for the workflow: QC, CTF, GPU -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF -export ALL_EXTRA_CONFIG="HBFUtils.nHBFPerTF=$NHBPERTF" -#export GPU_EXTRA_CONFIG="" -export GPU_EXTRA_CONFIG="GPU_proc.debugLevel=1;" - -export GEN_TOPO_IGNORE_ERROR=1 - -export MULTIPLICITY_FACTOR_RAWDECODERS=1 -export MULTIPLICITY_FACTOR_CTFENCODERS=1 -export MULTIPLICITY_FACTOR_REST=1 - - -for wf in "$@" -do - - echo - echo - echo Processing workflow $wf - export GEN_TOPO_WORKFLOW_NAME=$wf - export WORKFLOWMODE=dds - /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dplTest/${GEN_TOPO_WORKFLOW_NAME}.xml -# export WORKFLOWMODE=print -# /home/epn/pdp/gen_topo.sh > $HOME/gen_topo/dpl/${GEN_TOPO_WORKFLOW_NAME}.sh - -done diff --git a/testing/private/zampolli/workflows.desc b/testing/private/zampolli/workflows.desc deleted file mode 100644 index f2e03e4..0000000 --- a/testing/private/zampolli/workflows.desc +++ /dev/null @@ -1 +0,0 @@ -zampolli-workflow: "DataDistribution QualityControl" reco,20,20,"SHMSIZE=64000000000 testing/private/zampolli/zampolli-workflow.sh" diff --git a/testing/private/zampolli/zampolli-workflow.sh b/testing/private/zampolli/zampolli-workflow.sh deleted file mode 100755 index 44bcedc..0000000 --- a/testing/private/zampolli/zampolli-workflow.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -source common/setenv.sh - -SEVERITY=warning -ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE" -ARGS_ALL+=" --infologger-severity $INFOLOGGER_SEVERITY" -#ARGS_ALL+=" --monitoring-backend influxdb-unix:///tmp/telegraf.sock" -ARGS_ALL_CONFIG="NameConf.mDirGRP=$FILEWORKDIR;NameConf.mDirGeom=$FILEWORKDIR;NameConf.mDirCollContext=$FILEWORKDIR;NameConf.mDirMatLUT=$FILEWORKDIR;keyval.input_dir=$FILEWORKDIR;keyval.output_dir=/dev/null" - -PROXY_INSPEC="A:TPC/RAWDATA;dd:FLP/DISTSUBTIMEFRAME/0;eos:***/INFORMATION" - -o2-dpl-raw-proxy $ARGS_ALL \ - --dataspec "$PROXY_INSPEC" \ - --readout-proxy "--channel-config 'name=readout-proxy,type=pull,method=connect,address=ipc://@$INRAWCHANNAME,transport=shmem,rateLogging=1'" \ - | o2-tpc-raw-to-digits-workflow $ARGS_ALL \ - --input-spec "$PROXY_INSPEC" \ - --remove-duplicates \ - --configKeyValues "$ARGS_ALL_CONFIG;TPCDigitDump.LastTimeBin=1000;" \ - | o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --dds diff --git a/tools/datadistribution_workflows/dd-discard.xml b/tools/datadistribution_workflows/dd-discard.xml deleted file mode 100644 index 26028c4..0000000 --- a/tools/datadistribution_workflows/dd-discard.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - /home/epn/odc/tfbuilder.sh standalone - - TfBuilderRequirement - - -

- - TfBuilderTask - -
- diff --git a/tools/datadistribution_workflows/dd-disk.xml b/tools/datadistribution_workflows/dd-disk.xml deleted file mode 100644 index b7d427a..0000000 --- a/tools/datadistribution_workflows/dd-disk.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - /home/epn/odc/tfbuilder.sh disk2G - - TfBuilderRequirement - - -
- - TfBuilderTask - -
-
diff --git a/tools/datadistribution_workflows/dd-processing-disk.xml b/tools/datadistribution_workflows/dd-processing-disk.xml deleted file mode 100644 index 0f0ddd5..0000000 --- a/tools/datadistribution_workflows/dd-processing-disk.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - /home/epn/odc/tfbuilder.sh disk2G_data - - TfBuilderRequirement - - -
- - TfBuilderTask - -
-
diff --git a/tools/datadistribution_workflows/dd-processing.xml b/tools/datadistribution_workflows/dd-processing.xml deleted file mode 100644 index fd531b8..0000000 --- a/tools/datadistribution_workflows/dd-processing.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - /home/epn/odc/tfbuilder.sh data - - TfBuilderRequirement - - -
- - TfBuilderTask - -
-
diff --git a/tools/epn/gen_topo.sh b/tools/epn/gen_topo.sh deleted file mode 100755 index 26f4fc3..0000000 --- a/tools/epn/gen_topo.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -# Settings coming from AliECS via env variables -if [ -z $GEN_TOPO_PARTITION ]; then echo \$GEN_TOPO_PARTITION missing; exit 1; fi # Partition -if [ -z $GEN_TOPO_HASH ]; then echo \$GEN_TOPO_HASH missing; exit 1; fi # Flag whether source is a hash or a folder -if [ -z $GEN_TOPO_SOURCE ]; then echo \$GEN_TOPO_SOURCE missing; exit 1; fi # O2DataProcessing repository source, either a commit hash or a path -if [ -z $GEN_TOPO_LIBRARY_FILE ]; then echo \$GEN_TOPO_LIBRARY_FILE missing; exit 1; fi # Topology description library file in O2DataProcessing repository -if [ -z $GEN_TOPO_WORKFLOW_NAME ]; then echo \$GEN_TOPO_WORKFLOW_NAME missing; exit 1; fi # Workflow name in library file -if [ -z ${WORKFLOW_DETECTORS+x} ]; then echo \$WORKFLOW_DETECTORS missing; exit 1; fi # Comma-separated list of detectors to run processing for -if [ -z ${WORKFLOW_DETECTORS_QC+x} ]; then echo \$WORKFLOW_DETECTORS_QC missing; exit 1; fi # Comma-separated list of detectors to run QC for -if [ -z ${WORKFLOW_DETECTORS_CALIB+x} ]; then echo \$WORKFLOW_DETECTORS_CALIB missing; exit 1; fi # Comma-separated list of detectors to run calibration for -if [ -z ${WORKFLOW_PARAMETERS+x} ]; then echo \$WORKFLOW_PARAMETERS missing; exit 1; fi # Additional parameters for workflow -if [ -z ${RECO_NUM_NODES_OVERRIDE+x} ]; then echo \$RECO_NUM_NODES_OVERRIDE missing; exit 1; fi # Override number of nodes -if [ -z $DDMODE ] && [ -z $DDWORKFLOW ]; then echo Either \$DDMODE or \$DDWORKFLOW must be set; exit 1; fi # Select data distribution workflow -if [ -z "$MULTIPLICITY_FACTOR_RAWDECODERS" ]; then echo \$MULTIPLICITY_FACTOR_RAWDECODERS missing; exit 1; fi # Process multiplicity scaling parameter -if [ -z "$MULTIPLICITY_FACTOR_CTFENCODERS" ]; then echo \$MULTIPLICITY_FACTOR_CTFENCODERS missing; exit 1; fi # Process multiplicity scaling parameter -if [ -z "$MULTIPLICITY_FACTOR_REST" ]; then echo \$MULTIPLICITY_FACTOR_REST missing; exit 1; fi # Process multiplicity scaling parameter - -# Settings for some EPN paths / names / etc. -[ -z "$FILEWORKDIR" ] && export FILEWORKDIR=/home/epn/odc/files # Path to common grp / geometry / etc files -[ -z "$INRAWCHANNAME" ] && export INRAWCHANNAME=tf-builder-pipe-0 # Pipe name to get data from TfBuilder -[ -z "$CTF_DIR" ] && export CTF_DIR=/data/tf/compressed # Output directory for CTFs -[ -z "$CTF_METAFILES_DIR" ] && [ "0$WORKFLOWMODE" != "0print" ] && export CTF_METAFILES_DIR=/data/epn2eos_tool/epn2eos #CTF Metafiles directory -[ -z "$GEN_TOPO_WORKDIR" ] && export GEN_TOPO_WORKDIR=$HOME/gen_topo/${GEN_TOPO_PARTITION}_${GEN_TOPO_ONTHEFLY} # Persistent working directory for checkout O2DataProcessing repository and for XML cache. Must be per partition. This script must not run twice in parallel with the same workdir -[ -z "$GEN_TOPO_STDERR_LOGGING" ] && export GEN_TOPO_STDERR_LOGGING=1 - -if [[ "0$GEN_TOPO_RUN_HOME" == "01" ]]; then - [[ $WORKFLOWMODE != "print" ]] && { echo "ERROR: GEN_TOPO_RUN_HOME is only supported with WORKFLOWMODE=print!" 1>&2; exit 1; } -else - # Load required module and run gen_topo_o2dataprocessing (PDP part of this script) - module load ODC O2DataProcessing 1>&2 || { echo Error loading ODC / O2DataProcessing 1>&2; exit 1; } -fi -$O2DATAPROCESSING_ROOT/tools/epn/gen_topo_o2dataprocessing.sh -if [ $? != 0 ]; then - echo topology generation failed 1>&2 - exit 1 -fi diff --git a/tools/epn/gen_topo_o2dataprocessing.sh b/tools/epn/gen_topo_o2dataprocessing.sh deleted file mode 100755 index 02c0d3b..0000000 --- a/tools/epn/gen_topo_o2dataprocessing.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -mkdir -p $GEN_TOPO_WORKDIR/cache || { echo Error creating directory 1>&2; exit 1; } -if [ $GEN_TOPO_HASH == 1 ]; then - cd $GEN_TOPO_WORKDIR || { echo Cannot enter work dir 1>&2; exit 1; } - if [ ! -d O2DataProcessing ]; then git clone https://github.com/AliceO2Group/O2DataProcessing.git 1>&2 || { echo O2DataProcessing checkout failed 1>&2; exit 1; }; fi - if [ "0$GEN_TOPO_ONTHEFLY" == "01" ]; then - export GEN_TOPO_CACHEABLE=1 - fi - CACHE_HASH=`echo $GEN_TOPO_PARTITION $GEN_TOPO_SOURCE $GEN_TOPO_LIBRARY_FILE $GEN_TOPO_WORKFLOW_NAME $WORKFLOW_DETECTORS $WORKFLOW_DETECTORS_QC $WORKFLOW_DETECTORS_CALIB $WORKFLOW_PARAMETERS $RECO_NUM_NODES_OVERRIDE $DDMODE $DDWORKFLOW $INRAWCHANNAME $FILEWORKDIR $CTF_DIR | md5sum | awk '{print $1}'` - if [ -f cache/$CACHE_HASH ]; then - echo Reusing cached XML topology 1>&2 - touch cache/$CACHE_HASH - cat cache/$CACHE_HASH - exit 0 - fi - cd O2DataProcessing - git checkout $GEN_TOPO_SOURCE &> /dev/null - if [ $? != 0 ]; then - git fetch origin 1>&2 || { echo Repository update failed 1>&2; exit 1; } - git checkout $GEN_TOPO_SOURCE &> /dev/null || { echo commit does not exist 1>&2; exit 1; } - fi - if ! git describe --exact-match --tags HEAD; then - unset GEN_TOPO_CACHEABLE - fi -else - cd $GEN_TOPO_SOURCE || { echo Directory missing 1>&2; exit 1; } -fi -export EPNSYNCMODE=1 -export O2DATAPROCESSING_ROOT=`pwd` -echo Running topology generation to temporary file $GEN_TOPO_WORKDIR/output.xml 1>&2 -./tools/parse "$GEN_TOPO_LIBRARY_FILE" $GEN_TOPO_WORKFLOW_NAME $GEN_TOPO_WORKDIR/output.xml 1>&2 || { echo Error during workflow description parsing 1>&2; exit 1; } -if [ "0$GEN_TOPO_CACHEABLE" == "01" ]; then - cd $GEN_TOPO_WORKDIR - if [ `ls cache/ | wc -l` -ge 100 ]; then - ls -t cache/* | tail -n +100 | xargs rm - fi - cp $GEN_TOPO_WORKDIR/output.xml cache/$CACHE_HASH -fi -cat $GEN_TOPO_WORKDIR/output.xml -echo Removing temporary output file $GEN_TOPO_WORKDIR/output.xml 1>&2 -rm $GEN_TOPO_WORKDIR/output.xml diff --git a/tools/epn/run.sh b/tools/epn/run.sh deleted file mode 100755 index 0ef5638..0000000 --- a/tools/epn/run.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -export GEN_TOPO_PARTITION=test # ECS Partition -export DDMODE=processing # DataDistribution mode - possible options: processing, disk, processing-disk, discard - -# Use these settings to fetch the Workflow Repository using a hash / tag -#export GEN_TOPO_HASH=1 # Fetch O2DataProcessing repository using a git hash -#export GEN_TOPO_SOURCE=v0.13 # Git hash to fetch - -# Use these settings to specify a path to the workflow repository in your home dir -export GEN_TOPO_HASH=0 # Specify path to O2DataProcessing repository -export GEN_TOPO_SOURCE=$HOME/alice/O2DataProcessing # Path to O2DataProcessing repository - -export GEN_TOPO_LIBRARY_FILE=production/production.desc # Topology description library file to load -export GEN_TOPO_WORKFLOW_NAME=synchronous-workflow # Name of workflow in topology description library -export WORKFLOW_DETECTORS=ALL # Optional parameter for the workflow: Detectors to run reconstruction for (comma-separated list) -export WORKFLOW_DETECTORS_QC=ALL # Optional parameter for the workflow: Detectors to run QC for -export WORKFLOW_DETECTORS_CALIB=ALL # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_DETECTORS_RECO=ALL # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_DETECTORS_FLP_PROCESSING= # Optional parameters for the workflow: Detectors to run calibration for -export WORKFLOW_PARAMETERS=QC,CALIB,GPU,CTF,EVENT_DISPLAY # Additional paramters for the workflow -export RECO_NUM_NODES_OVERRIDE=0 # Override the number of EPN compute nodes to use (default is specified in description library file) -export NHBPERTF=128 # Number of HBF per TF -export MULTIPLICITY_FACTOR_RAWDECODERS=1 # Factor to scale number of raw decoders with -export MULTIPLICITY_FACTOR_CTFENCODERS=1 # Factor to scale number of CTF encoders with -export MULTIPLICITY_FACTOR_REST=1 # Factor to scale number of other processes with - -export OUTPUT_FILE_NAME=gen_topo_output.xml -if [[ "0$GEN_TOPO_RUN_HOME" == "01" ]]; then - [[ -z $O2DATAPROCESSING_ROOT || -z $O2_ROOT ]] && { echo "ERROR: O2 and O2DataProcessing must be in the environment!"; exit 1; } - $O2DATAPROCESSING_ROOT/tools/epn/gen_topo.sh > $OUTPUT_FILE_NAME -else - [[ ! -f /home/epn/pdp/gen_topo.sh ]] && { echo "ERROR: EPN installation of gen_topo.sh missing. Are you trying to run at home? Then please set GEN_TOPO_RUN_HOME=1!"; exit 1; } - /home/epn/pdp/gen_topo.sh > $OUTPUT_FILE_NAME -fi -if [[ $? == 0 ]]; then - echo Generated XML topology $OUTPUT_FILE_NAME -fi diff --git a/tools/monitoring_workflows/epnstderrlog.xml b/tools/monitoring_workflows/epnstderrlog.xml deleted file mode 100644 index b359058..0000000 --- a/tools/monitoring_workflows/epnstderrlog.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - o2-epn-stderr-monitor -P odc --infologger 1 - - EPNstderrMonitorRequirement - - -
- - ErrorMonitorTask - -
-
diff --git a/tools/parse b/tools/parse deleted file mode 100755 index 77f2983..0000000 --- a/tools/parse +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/env python -import os -import sys -import shlex -import tempfile -if 'EPNSYNCMODE' in os.environ and int(os.environ['EPNSYNCMODE']): - sys.path.insert(0, '/usr/share/Modules/init') - import python as mod - -if len(sys.argv) != 4: - print("Incorrect number of arguments provided, syntax is parse [description library file] [topology name] [output file name]") - exit(1) - -if not "FILEWORKDIR" in os.environ: - print("$FILEWORKDIR env variable missing") - exit(1) - -if not "DDWORKFLOW" in os.environ and not "DDMODE" in os.environ: - print("Need either $DDWORKFLOW or $DDMODE env variable") - exit(1) - -NO_PROCESSING_MODE=0 -if not "DDWORKFLOW" in os.environ: - os.environ['DDWORKFLOW'] = "tools/datadistribution_workflows/dd-" + os.environ['DDMODE'] + ".xml" - if os.environ['DDMODE'] == 'discard' or os.environ['DDMODE'] == 'disk': - NO_PROCESSING_MODE=1 - -print("Using topology", sys.argv[2], "of library", sys.argv[1]) - -if 'WORKFLOWMODE' in os.environ: - if not os.environ['WORKFLOWMODE'] in ['dds', 'print']: - print("Invalid WORKFLOWMODE provided") - raise -else: - os.environ['WORKFLOWMODE'] = 'dds' - -if 'RECO_NUM_NODES_OVERRIDE' in os.environ and os.environ['RECO_NUM_NODES_OVERRIDE'] != "" and int(os.environ['RECO_NUM_NODES_OVERRIDE']) > 0: - reco_num_nodes_override = int(os.environ['RECO_NUM_NODES_OVERRIDE']) - os.environ['RECO_NUM_NODES_WORKFLOW'] = str(reco_num_nodes_override) -else: - reco_num_nodes_override = 0 - -f = open(sys.argv[1], "r") -for line in f: - line = line.strip() - if len(line) == 0: - continue - if line[0] == '#': - continue - args = shlex.split(line) - if len(args) <= 1: - print("Toplogy must have at least name and O2 version") - raise - if len(args[0]) == 0: - print("Empty topology name forbitten") - raise - if not args[0].endswith(':'): - print("Topology name ", args[0], "not followed by ':'") - raise - if args[0] == sys.argv[2] + ":": - reconodes = 0 - reconodesmin = 0 - recoworkflows = [] - calibworkflows = [] - print("Found topology", sys.argv[2], "-", args) - if 'EPNSYNCMODE' in os.environ and int(os.environ['EPNSYNCMODE']) and (not 'GEN_TOPO_RUN_HOME' in os.environ or not int(os.environ['GEN_TOPO_RUN_HOME'])): - for i in args[1].split(): - if "GEN_TOPO_CACHEABLE" in os.environ and os.environ['GEN_TOPO_CACHEABLE'] == "1": - if i.find("/") == -1 or i.find("/latest") != -1: - print("Must not use non-versioned module", i, "in cacheable workflow (i.e. with repository hash)") - raise - print("Loading module", i) - mod.module('load', i) - if len(args) > 2 and not 'O2_ROOT' in os.environ: - print("O2 not loaded") - raise - with tempfile.TemporaryDirectory(prefix="o2_workflow_") as tmpdir: - if NO_PROCESSING_MODE and len(args) > 2: - print("Cannot use DPL workflow together with DD mode", os.environ['DDMODE']) - raise - for i in range(2, len(args)): - filename = tmpdir + "/wf" + str(i) + ".dds" - if args[i].startswith("reco"): - wf = args[i].split(",", 3) - recoworkflows.append(filename) - elif args[i].startswith("calib"): - wf = args[i].split(",", 2) - wf.append(wf[2]) - wf[2] = wf[1] - calibworkflows.append(filename) - else: - print("Invalid workflow type", args[i]) - raise - print("Adding", wf[0], "workflow (", wf[2], "-", wf[1], "nodes):", wf[3]) - reconodes = max(reconodes, int(wf[1])) - reconodesmin = max(reconodesmin, int(wf[2])) - if 'GEN_TOPO_IGNORE_ERROR' in os.environ and int(os.environ['GEN_TOPO_IGNORE_ERROR']): - command_log_filter = "\"^\[\"" - else: - command_log_filter = "\"^\[INFO\"" - command = "GLOBALDPLOPT+=\" -b --dds-workflow-suffix _" + wf[0] + str(i) + "\" " + wf[3] + " | grep -v " + command_log_filter + " > " + filename + " && [ `grep \"^\[\" " + filename + " | wc -l` == 0 ]" - print("Running DPL command", command) - if reco_num_nodes_override == 0: - os.environ['RECO_NUM_NODES_WORKFLOW'] = wf[1] - if os.system(command) != 0: - print("Error running command", command) - ftmp = open(filename, 'r') - print(ftmp.read()) - raise - if reco_num_nodes_override > 0: - reconodes = reco_num_nodes_override - if os.environ['WORKFLOWMODE'] == 'dds': - odccommand = "odc-epn-topo" - if reconodes: - odccommand += " --dd " + os.environ['DDWORKFLOW'] - if len(recoworkflows): - odccommand += " --recown 'wn_(?!online-calib).*_.*' --reco " + " ".join(recoworkflows) - odccommand += " --n " + str(reconodes) - if len(calibworkflows): - odccommand += " --calibwn 'wn_online-calib_.*' --calib " + " ".join(calibworkflows) - if "GEN_TOPO_STDERR_LOGGING" in os.environ and int(os.environ['GEN_TOPO_STDERR_LOGGING']): - odccommand += " --mon tools/monitoring_workflows/epnstderrlog.xml" - if args[1] != "": - odccommand += " --prependexe \"module load " + args[1] + " 2>&1 ; \"" - odccommand += " -o " + sys.argv[3] - if os.system(odccommand) != 0: - print("\nError running odc: ", odccommand) - raise - else: - outf = open(sys.argv[3], "w+") - for i in recoworkflows: - outf.write("# RECO workflow\n\n" + open(i, 'r').read() + "\n\n") - for i in calibworkflows: - outf.write("# CALIB workflow\n\n" + open(i, 'r').read() + "\n\n") - print("Done") - exit(0) - -print("Could not find workflow", sys.argv[2]) -exit(1)