Skip to content

Commit 77ea2a6

Browse files
knopers8sawenzel
authored andcommitted
Merge QC results over timeframes
1 parent 0905134 commit 77ea2a6

File tree

2 files changed

+96
-19
lines changed

2 files changed

+96
-19
lines changed

MC/bin/o2dpg_sim_workflow.py

Lines changed: 63 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919

2020
import sys
2121
import argparse
22-
from os import environ
23-
from os.path import join, dirname
22+
from os import environ, mkdir
23+
from os.path import join, dirname, isdir
2424
import json
2525
import array as arr
2626

@@ -123,6 +123,10 @@ def getDPL_global_options(bigshm=False):
123123
usebkgcache=args.use_bkg_from!=None
124124
includeQC=True if args.include_qc=='True' or args.include_qc==True else False
125125

126+
qcdir = "QC"
127+
if includeQC and not isdir(qcdir):
128+
mkdir(qcdir)
129+
126130
if doembedding:
127131
if not usebkgcache:
128132
# ---- do background transport task -------
@@ -602,40 +606,44 @@ def createRestDigiTask(name, det='ALLSMALLER'):
602606
# workflow['stages'].append(ITSClustersTracksQCtask)
603607

604608
### MFT
605-
# fixme: there is a bug in Check which causes a segfault, uncomment when the fix is merged
606-
# MFTDigitsQCneeds = [det_to_digitask["MFT"]['name']]
607-
# MFTDigitsQCtask = createTask(name='mftDigitsQC_'+str(tf), needs=MFTDigitsQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
608-
# MFTDigitsQCtask['cmd'] = 'o2-qc-mft-digits-root-file-reader --mft-digit-infile=mftdigits.root | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/qc-mft-digit.json ' + getDPL_global_options()
609-
# workflow['stages'].append(MFTDigitsQCtask)
609+
MFTDigitsQCneeds = [det_to_digitask["MFT"]['name']]
610+
MFTDigitsQCtask = createTask(name='mftDigitsQC_local'+str(tf), needs=MFTDigitsQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
611+
MFTDigitsQCtask['cmd'] = 'o2-qc-mft-digits-root-file-reader --mft-digit-infile=mftdigits.root | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/qc-mft-digit.json --local-batch ../' + qcdir + '/mftDigitsQC.root ' + getDPL_global_options()
612+
MFTDigitsQCtask['semaphore'] = 'mftDigitsQC'
613+
workflow['stages'].append(MFTDigitsQCtask)
610614

611615
MFTClustersQCneeds = [MFTRECOtask['name']]
612-
MFTClustersQCtask = createTask(name='mftClustersQC_'+str(tf), needs=MFTClustersQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
613-
MFTClustersQCtask['cmd'] = 'o2-qc-mft-clusters-root-file-reader --mft-cluster-infile=mftclusters.root | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/qc-mft-cluster.json ' + getDPL_global_options()
616+
MFTClustersQCtask = createTask(name='mftClustersQC_local'+str(tf), needs=MFTClustersQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
617+
MFTClustersQCtask['cmd'] = 'o2-qc-mft-clusters-root-file-reader --mft-cluster-infile=mftclusters.root | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/qc-mft-cluster.json --local-batch ../' + qcdir + '/mftClustersQC.root ' + getDPL_global_options()
618+
MFTClustersQCtask['semaphore'] = 'mftClustersQC'
614619
workflow['stages'].append(MFTClustersQCtask)
615620

616621
MFTTracksQCneeds = [MFTRECOtask['name']]
617-
MFTTracksQCtask = createTask(name='mftTracksQC_'+str(tf), needs=MFTTracksQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
618-
MFTTracksQCtask['cmd'] = 'o2-qc-mft-tracks-root-file-reader --mft-track-infile=mfttracks.root | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/qc-mft-track.json ' + getDPL_global_options()
622+
MFTTracksQCtask = createTask(name='mftTracksQC_local'+str(tf), needs=MFTTracksQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
623+
MFTTracksQCtask['cmd'] = 'o2-qc-mft-tracks-root-file-reader --mft-track-infile=mfttracks.root | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/qc-mft-track.json --local-batch ../' + qcdir + '/mftTracksQC.root ' + getDPL_global_options()
624+
MFTTracksQCtask['semaphore'] = 'mftTracksQC'
619625
workflow['stages'].append(MFTTracksQCtask)
620626

621627
### TPC
622628
TPCTrackingQCneeds = [TPCRECOtask['name']]
623-
TPCTrackingQCtask = createTask(name='tpcTrackingQC_'+str(tf), needs=TPCTrackingQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=2, mem='2000')
624-
TPCTrackingQCtask['cmd'] = 'o2-tpc-track-reader | o2-tpc-reco-workflow --input-type clusters --infile tpc-native-clusters.root --output-type disable-writer | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/tpc-qc-tracking-direct.json ' + getDPL_global_options()
625-
workflow['stages'].append(TPCTrackingQCtask)
629+
TPCTrackingQCtask = createTask(name='tpcTrackingQC_local'+str(tf), needs=TPCTrackingQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=2, mem='2000')
630+
TPCTrackingQCtask['cmd'] = 'o2-tpc-track-reader | o2-tpc-reco-workflow --input-type clusters --infile tpc-native-clusters.root --output-type disable-writer | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/tpc-qc-tracking-direct.json --local-batch ../' + qcdir + '/tpcTrackingQC.root ' + getDPL_global_options()
631+
TPCTrackingQCtask['semaphore'] = 'tpcTrackingQC'
632+
#workflow['stages'].append(TPCTrackingQCtask)
626633

627634
### TRD
628635
TRDDigitsQCneeds = [TRDDigitask['name']]
629-
TRDDigitsQCtask = createTask(name='trdDigitsQC_'+str(tf), needs=TRDDigitsQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
630-
TRDDigitsQCtask['cmd'] = 'o2-trd-trap-sim | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/trd-digits-task.json ' + getDPL_global_options()
636+
TRDDigitsQCtask = createTask(name='trdDigitsQC_local'+str(tf), needs=TRDDigitsQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
637+
TRDDigitsQCtask['cmd'] = 'o2-trd-trap-sim | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/trd-digits-task.json --local-batch ../' + qcdir + '/trdDigitsQC.root ' + getDPL_global_options()
638+
TRDDigitsQCtask['semaphore'] = 'trdDigitsQC'
631639
workflow['stages'].append(TRDDigitsQCtask)
632640

633641
### RECO
634642
vertexQCneeds = [PVFINDERtask['name']]
635-
vertexQCtask = createTask(name='vertexQC_'+str(tf), needs=vertexQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
636-
vertexQCtask['cmd'] = 'o2-primary-vertex-reader-workflow | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/vertexing-qc-direct-mc.json ' + getDPL_global_options()
643+
vertexQCtask = createTask(name='vertexQC_local'+str(tf), needs=vertexQCneeds, tf=tf, cwd=timeframeworkdir, lab=["QC"], cpu=1, mem='2000')
644+
vertexQCtask['cmd'] = 'o2-primary-vertex-reader-workflow | o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/vertexing-qc-direct-mc.json --local-batch ../' + qcdir + '/vertexQC.root ' + getDPL_global_options()
645+
vertexQCtask['semaphore'] = 'vertexQC'
637646
workflow['stages'].append(vertexQCtask)
638-
639647

640648

641649
#secondary vertexer
@@ -681,6 +689,42 @@ def createRestDigiTask(name, det='ALLSMALLER'):
681689
workflow['stages'].append(TFcleanup);
682690

683691

692+
if includeQC:
693+
#MFT
694+
MFTDigitsQCneeds = ['mftDigitsQC_local'+str(tf) for tf in range(1, NTIMEFRAMES + 1)]
695+
MFTDigitsQCtask = createTask(name='mftDigitsQC_finalize', needs=MFTDigitsQCneeds, cwd=qcdir, lab=["QC"], cpu=1, mem='2000')
696+
MFTDigitsQCtask['cmd'] = 'o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/qc-mft-digit.json --remote-batch mftDigitsQC.root ' + getDPL_global_options()
697+
workflow['stages'].append(MFTDigitsQCtask)
698+
699+
MFTClustersQCneeds = ['mftClustersQC_local'+str(tf) for tf in range(1, NTIMEFRAMES + 1)]
700+
MFTClustersQCtask = createTask(name='mftClustersQC_finalize', needs=MFTClustersQCneeds, cwd=qcdir, lab=["QC"], cpu=1, mem='2000')
701+
MFTClustersQCtask['cmd'] = 'o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/qc-mft-cluster.json --remote-batch mftClustersQC.root ' + getDPL_global_options()
702+
workflow['stages'].append(MFTClustersQCtask)
703+
704+
MFTTracksQCneeds = ['mftTracksQC_local'+str(tf) for tf in range(1, NTIMEFRAMES + 1)]
705+
MFTTracksQCtask = createTask(name='mftTracksQC_finalize', needs=MFTTracksQCneeds, cwd=qcdir, lab=["QC"], cpu=1, mem='2000')
706+
MFTTracksQCtask['cmd'] = 'o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/qc-mft-track.json --remote-batch mftTracksQC.root ' + getDPL_global_options()
707+
workflow['stages'].append(MFTTracksQCtask)
708+
709+
### TPC
710+
TPCTrackingQCneeds = ['tpcTrackingQC_local'+str(tf) for tf in range(1, NTIMEFRAMES + 1)]
711+
TPCTrackingQCtask = createTask(name='tpcTrackingQC_finalize', needs=TPCTrackingQCneeds, cwd=qcdir, lab=["QC"], cpu=1, mem='2000')
712+
TPCTrackingQCtask['cmd'] = 'o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/tpc-qc-tracking-direct.json --remote-batch tpcTrackingQC.root ' + getDPL_global_options()
713+
#workflow['stages'].append(TPCTrackingQCtask)
714+
715+
### TRD
716+
TRDDigitsQCneeds = ['trdDigitsQC_local'+str(tf) for tf in range(1, NTIMEFRAMES + 1)]
717+
TRDDigitsQCtask = createTask(name='trdDigitsQC_finalize', needs=TRDDigitsQCneeds, cwd=qcdir, lab=["QC"], cpu=1, mem='2000')
718+
TRDDigitsQCtask['cmd'] = 'o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/trd-digits-task.json --remote-batch trdDigitsQC.root ' + getDPL_global_options()
719+
workflow['stages'].append(TRDDigitsQCtask)
720+
721+
### RECO
722+
vertexQCneeds = ['vertexQC_local'+str(tf) for tf in range(1, NTIMEFRAMES + 1)]
723+
vertexQCtask = createTask(name='vertexQC_finalize', needs=vertexQCneeds, cwd=qcdir, lab=["QC"], cpu=1, mem='2000')
724+
vertexQCtask['cmd'] = 'o2-qc --config json://${O2DPG_ROOT}/MC/config/QC/json/vertexing-qc-direct-mc.json --remote-batch vertexQC.root ' + getDPL_global_options()
725+
workflow['stages'].append(vertexQCtask)
726+
727+
684728
dump_workflow(workflow["stages"], args.o)
685729

686730
exit (0)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/bin/bash
2+
3+
#
4+
# A example workflow MC->RECO->AOD for a simple pp min bias
5+
# production
6+
7+
# make sure O2DPG + O2 is loaded
8+
[ ! "${O2DPG_ROOT}" ] && echo "Error: This needs O2DPG loaded" && exit 1
9+
[ ! "${O2_ROOT}" ] && echo "Error: This needs O2 loaded" && exit 1
10+
[ ! "${QUALITYCONTROL_ROOT}" ] && echo "Error: This needs QualityControl loaded" && exit 1
11+
12+
# ----------- LOAD UTILITY FUNCTIONS --------------------------
13+
. ${O2_ROOT}/share/scripts/jobutils.sh
14+
15+
# ----------- START ACTUAL JOB -----------------------------
16+
17+
NWORKERS=${NWORKERS:-8}
18+
MODULES="--skipModules ZDC"
19+
SIMENGINE=${SIMENGINE:-TGeant4}
20+
21+
# create workflow
22+
${O2DPG_ROOT}/MC/bin/o2dpg_sim_workflow.py -eCM 14000 -col pp -gen pythia8 -proc inel -tf 3 \
23+
-ns 20 -e ${SIMENGINE} \
24+
-j ${NWORKERS} -interactionRate 500000 \
25+
--include-qc
26+
27+
# run workflow
28+
# ${O2DPG_ROOT}/MC/bin/o2_dpg_workflow_runner.py -f workflow.json -tt vertexQC
29+
${O2DPG_ROOT}/MC/bin/o2_dpg_workflow_runner.py -f workflow.json
30+
31+
# publish the current dir to ALIEN
32+
# copy_ALIEN
33+

0 commit comments

Comments
 (0)