Skip to content

Commit 4bfcf53

Browse files
authored
Merge b784736 into sapling-pr-archive-ehellbar
2 parents b8cdf49 + b784736 commit 4bfcf53

17 files changed

Lines changed: 1950 additions & 313 deletions

DATA/production/configurations/asyncReco/async_pass.sh

Lines changed: 27 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -412,67 +412,46 @@ fi
412412
echo "SETTING_ROOT_OUTPUT = $SETTING_ROOT_OUTPUT"
413413

414414
# Enabling GPUs
415-
if [[ -n "$ALIEN_JDL_USEGPUS" && $ALIEN_JDL_USEGPUS != 0 ]] ; then
416-
echo "Enabling GPUS"
417-
[[ -z ${GPUTYPE:-} ]] && export GPUTYPE="HIP"
418-
[[ -z ${GPUMEMSIZE:-} ]] && export GPUMEMSIZE=$((25 << 30))
419-
if [[ "0$ASYNC_PASS_NO_OPTIMIZED_DEFAULTS" != "01" ]]; then
415+
if [[ $ASYNC_PASS_NO_OPTIMIZED_DEFAULTS != 1 ]]; then
416+
export OPTIMIZED_PARALLEL_ASYNC_AUTO_SHM_LIMIT=1
417+
if [[ $ALIEN_JDL_USEGPUS == 1 ]] ; then
418+
echo "Enabling GPUS"
419+
if [[ -z $ALIEN_JDL_SITEARCH ]]; then echo "ERROR: Must set ALIEN_JDL_SITEARCH to define GPU architecture!"; exit 1; fi
420+
if [[ $ALIEN_JDL_SITEARCH == "NERSC" ]]; then # Disable mlock / ulimit / gpu memory registration - has performance impact, but doesn't work at NERSC for now
421+
export SETENV_NO_ULIMIT=1
422+
export CONFIG_EXTRA_PROCESS_o2_gpu_reco_workflow+="GPU_proc.noGPUMemoryRegistration=1;"
423+
fi
424+
ALIEN_JDL_SITEARCH_TMP=$ALIEN_JDL_SITEARCH
425+
if [[ $ALIEN_JDL_SITEARCH == "EPN_MI100" ]]; then
426+
ALIEN_JDL_SITEARCH_TMP=EPN
427+
export EPN_NODE_MI100=1
428+
elif [[ $ALIEN_JDL_SITEARCH == "EPN_MI50" ]]; then
429+
ALIEN_JDL_SITEARCH_TMP=EPN
430+
fi
420431
if [[ "ALIEN_JDL_USEFULLNUMADOMAIN" == 0 ]]; then
421432
if [[ $keep -eq 0 ]]; then
422433
if [[ $ALIEN_JDL_UNOPTIMIZEDGPUSETTINGS != 1 ]]; then
423-
export OPTIMIZED_PARALLEL_ASYNC=pp_1gpu # sets the multiplicities to optimized defaults for this configuration (1 job with 1 gpu on EPNs)
424-
export OPTIMIZED_PARALLEL_ASYNC_AUTO_SHM_LIMIT=1
434+
export OPTIMIZED_PARALLEL_ASYNC=pp_1gpu_${ALIEN_JDL_SITEARCH_TMP} # (16 cores, 1 gpu per job, pp)
425435
else
426-
# forcing multiplicities to be 1
427-
export MULTIPLICITY_PROCESS_tof_matcher=1
428-
export MULTIPLICITY_PROCESS_mch_cluster_finder=1
429-
export MULTIPLICITY_PROCESS_tpc_entropy_decoder=1
430-
export MULTIPLICITY_PROCESS_itstpc_track_matcher=1
431-
export MULTIPLICITY_PROCESS_its_tracker=1
432-
export OMP_NUM_THREADS=4
433-
export TIMEFRAME_RATE_LIMIT=8
434-
export SHMSIZE=30000000000
436+
export OPTIMIZED_PARALLEL_ASYNC=pp_1gpu_${ALIEN_JDL_SITEARCH_TMP}_unoptimized # (16 cores, 1 gpu per job, pp, low CPU multiplicities)
435437
fi
436438
else
437-
export TIMEFRAME_RATE_LIMIT=4
438-
export SHMSIZE=30000000000
439+
export OPTIMIZED_PARALLEL_ASYNC=keep_root
439440
fi
440441
else
441442
if [[ $BEAMTYPE == "pp" ]]; then
442-
export OPTIMIZED_PARALLEL_ASYNC=pp_4gpu # sets the multiplicities to optimized defaults for this configuration (1 Numa, pp)
443-
export OPTIMIZED_PARALLEL_ASYNC_AUTO_SHM_LIMIT=1
443+
export OPTIMIZED_PARALLEL_ASYNC=pp_4gpu_${ALIEN_JDL_SITEARCH_TMP} # (64 cores, 1 NUMA, 4 gpu per job, pp)
444444
else # PbPb
445-
export OPTIMIZED_PARALLEL_ASYNC=PbPb_4gpu # sets the multiplicities to optimized defaults for this configuration (1 Numa, PbPb)
446-
export OPTIMIZED_PARALLEL_ASYNC_AUTO_SHM_LIMIT=1
445+
export OPTIMIZED_PARALLEL_ASYNC=PbPb_4gpu_${ALIEN_JDL_SITEARCH_TMP} # (64 cores, 1 NUMA 4 gpu per job, PbPb)
447446
fi
448447
fi
449-
fi
450-
else
451-
# David, Oct 13th
452-
# the optimized settings for the 8 core GRID queue without GPU are
453-
# (overwriting the values above)
454-
#
455-
if [[ "0$ASYNC_PASS_NO_OPTIMIZED_DEFAULTS" != "01" ]]; then
456-
if [[ "$ALIEN_JDL_EPNFULLNUMACPUONLY" != 1 ]]; then
457-
if [[ $BEAMTYPE == "pp" ]]; then
458-
if (( $(echo "$RUN_IR > 800000" | bc -l) )); then
459-
export TIMEFRAME_RATE_LIMIT=1
460-
elif (( $(echo "$RUN_IR < 50000" | bc -l) )); then
461-
export TIMEFRAME_RATE_LIMIT=6
462-
else
463-
export TIMEFRAME_RATE_LIMIT=3
464-
fi
465-
export OPTIMIZED_PARALLEL_ASYNC=pp_8cpu # sets the multiplicities to optimized defaults for this configuration (grid)
466-
export SHMSIZE=16000000000
467-
else # PbPb
468-
export TIMEFRAME_RATE_LIMIT=2
469-
export OPTIMIZED_PARALLEL_ASYNC=pp_8cpu
470-
export SHMSIZE=16000000000
471-
export SVERTEX_THREADS=5
472-
fi
448+
else
449+
export SETENV_NO_ULIMIT=1
450+
export DPL_DEFAULT_PIPELINE_LENGTH=16 # to avoid memory issues - affects performance, so don't do with GPUs
451+
if [[ $ALIEN_JDL_EPNFULLNUMACPUONLY != 1 ]]; then
452+
export OPTIMIZED_PARALLEL_ASYNC=8cpu # (8 cores per job, grid)
473453
else
474-
export OPTIMIZED_PARALLEL_ASYNC=pp_64cpu # to use EPNs with full NUMA domain but without GPUs
475-
export OPTIMIZED_PARALLEL_ASYNC_AUTO_SHM_LIMIT=1
454+
export OPTIMIZED_PARALLEL_ASYNC=pp_64cpu # (64 cores per job, 1 NUMA, EPN)
476455
fi
477456
fi
478457
fi

DATA/production/configurations/asyncReco/setenv_extra.sh

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,6 @@
33

44
# process flags passed to the script
55

6-
if [[ -z "$ALIEN_JDL_USEGPUS" || $ALIEN_JDL_USEGPUS != 1 ]]; then
7-
export SETENV_NO_ULIMIT=1
8-
fi
9-
10-
# to avoid memory issues - we don't do this on the EPNs, since it can affect the performance
11-
if [[ $ALIEN_JDL_USEGPUS != 1 ]]; then
12-
export DPL_DEFAULT_PIPELINE_LENGTH=16
13-
fi
14-
156
# check if this is a production on skimmed data
167
if grep -q /skimmed/ wn.xml ; then
178
export ON_SKIMMED_DATA=1;

DATA/production/workflow-multiplicities.sh

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,23 @@ if [[ ! -z ${OPTIMIZED_PARALLEL_ASYNC:-} ]]; then
5353
[[ ! -z ${TIMEFRAME_RATE_LIMIT:-} ]] && unset TIMEFRAME_RATE_LIMIT
5454
[[ ! -z ${SHMSIZE:-} ]] && unset SHMSIZE
5555
fi
56-
if [[ $OPTIMIZED_PARALLEL_ASYNC == "pp_8cpu" ]]; then
56+
if [[ $OPTIMIZED_PARALLEL_ASYNC == "8cpu" ]]; then
5757
[[ -z ${TIMEFRAME_RATE_LIMIT:-} ]] && TIMEFRAME_RATE_LIMIT=3
5858
[[ -z ${SHMSIZE:-} ]] && SHMSIZE=16000000000
5959
NGPURECOTHREADS=5
60-
elif [[ $OPTIMIZED_PARALLEL_ASYNC == "pp_16cpu" ]]; then
60+
if [[ $BEAMTYPE == "pp" ]]; then
61+
if (( $(echo "$RUN_IR > 800000" | bc -l) )); then
62+
TIMEFRAME_RATE_LIMIT=1
63+
elif (( $(echo "$RUN_IR < 50000" | bc -l) )); then
64+
TIMEFRAME_RATE_LIMIT=6
65+
else
66+
TIMEFRAME_RATE_LIMIT=3
67+
fi
68+
else # PbPb
69+
TIMEFRAME_RATE_LIMIT=2
70+
SVERTEX_THREADS=5
71+
fi
72+
elif [[ $OPTIMIZED_PARALLEL_ASYNC == "16cpu" ]]; then
6173
[[ -z ${TIMEFRAME_RATE_LIMIT:-} ]] && TIMEFRAME_RATE_LIMIT=8
6274
[[ -z ${SHMSIZE:-} ]] && SHMSIZE=22000000000
6375
NGPURECOTHREADS=9
@@ -78,20 +90,28 @@ if [[ ! -z ${OPTIMIZED_PARALLEL_ASYNC:-} ]]; then
7890
N_MCHCL=3
7991
N_TOFMATCH=2
8092
N_TPCENTDEC=3
81-
elif [[ $OPTIMIZED_PARALLEL_ASYNC == "pp_1gpu" ]]; then
93+
elif [[ $OPTIMIZED_PARALLEL_ASYNC == "pp_1gpu_EPN" || $OPTIMIZED_PARALLEL_ASYNC == "pp_1gpu_EPN_unoptimized" ]]; then
8294
[[ -z ${TIMEFRAME_RATE_LIMIT:-} ]] && TIMEFRAME_RATE_LIMIT=8
8395
[[ -z ${SHMSIZE:-} ]] && SHMSIZE=30000000000
84-
N_TOFMATCH=2
85-
N_MCHCL=3
86-
N_TPCENTDEC=2
87-
N_TPCITS=3
96+
NGPUS=1
97+
GPUTYPE=HIP
98+
GPUMEMSIZE=$((25 << 30))
8899
N_MCHTRK=2
89-
N_ITSTRK=3
90-
NGPURECOTHREADS=8
100+
N_TPCTRK=$NGPUS
101+
if [[ $OPTIMIZED_PARALLEL_ASYNC == "pp_1gpu_EPN" ]]; then
102+
N_TOFMATCH=2
103+
N_MCHCL=3
104+
N_TPCENTDEC=2
105+
N_TPCITS=3
106+
N_ITSTRK=3
107+
NGPURECOTHREADS=8
108+
else
109+
NGPURECOTHREADS=4
110+
fi
91111
NTRDTRKTHREADS=3
92112
ITSTRK_THREADS=2
93113
ITSTPC_THREADS=2
94-
elif [[ $OPTIMIZED_PARALLEL_ASYNC =~ ^pp_4gpu(_|$) ]]; then
114+
elif [[ $OPTIMIZED_PARALLEL_ASYNC == "pp_gpu_NERSC" || $OPTIMIZED_PARALLEL_ASYNC == "pp_4gpu_EPN" ]]; then
95115
if [[ -z ${TIMEFRAME_RATE_LIMIT:-} ]]; then
96116
if [[ ! -z ${ALIEN_JDL_LPMANCHORYEAR} && ${ALIEN_JDL_LPMANCHORYEAR} -lt 2023 ]]; then
97117
TIMEFRAME_RATE_LIMIT=45
@@ -100,19 +120,21 @@ if [[ ! -z ${OPTIMIZED_PARALLEL_ASYNC:-} ]]; then
100120
fi
101121
fi
102122
[[ -z ${SHMSIZE:-} ]] && SHMSIZE=100000000000
103-
if [[ $OPTIMIZED_PARALLEL_ASYNC == "pp_4gpu_NERSC" ]]; then
123+
if [[ $OPTIMIZED_PARALLEL_ASYNC == "pp_gpu_NERSC" ]]; then
104124
NGPUS=1
105125
GPUTYPE=CUDA
106126
else
107127
NGPUS=4
128+
GPUTYPE=HIP
108129
fi
130+
GPUMEMSIZE=$((25 << 30))
109131
NGPURECOTHREADS=8
110132
NTRDTRKTHREADS=2
111133
ITSTRK_THREADS=2
112134
ITSTPC_THREADS=2
113135
SVERTEX_THREADS=4
114136
TPCTIMESERIES_THREADS=2
115-
N_TPCTRK=4
137+
N_TPCTRK=$NGPUS
116138
N_FWDMATCH=2
117139
N_PRIMVTXMATCH=1
118140
N_PRIMVTX=1
@@ -128,16 +150,18 @@ if [[ ! -z ${OPTIMIZED_PARALLEL_ASYNC:-} ]]; then
128150
N_ITSTRK=12
129151
N_ITSCL=2
130152
export DPL_SMOOTH_RATE_LIMITING=1
131-
elif [[ $OPTIMIZED_PARALLEL_ASYNC =~ ^PbPb_4gpu(_|$) ]]; then
153+
elif [[ $OPTIMIZED_PARALLEL_ASYNC == "PbPb_gpu_NERSC" || $OPTIMIZED_PARALLEL_ASYNC == "PbPb_4gpu_EPN" ]]; then
132154
[[ -z ${TIMEFRAME_RATE_LIMIT:-} ]] && TIMEFRAME_RATE_LIMIT=35
133155
[[ -z ${SHMSIZE:-} ]] && SHMSIZE=100000000000 # SHM_LIMIT 3/4
134156
[[ -z ${TIMEFRAME_SHM_LIMIT:-} ]] && TIMEFRAME_SHM_LIMIT=$(($SHMSIZE / 3))
135-
if [[ $OPTIMIZED_PARALLEL_ASYNC == "PbPb_4gpu_NERSC" ]]; then
157+
if [[ $OPTIMIZED_PARALLEL_ASYNC == "PbPb_gpu_NERSC" ]]; then
136158
NGPUS=1
137159
GPUTYPE=CUDA
138160
else
139161
NGPUS=4
162+
GPUTYPE=HIP
140163
fi
164+
GPUMEMSIZE=$((25 << 30))
141165
NGPURECOTHREADS=8
142166
NTRDTRKTHREADS=8
143167
ITSTRK_THREADS=5
@@ -172,6 +196,9 @@ if [[ ! -z ${OPTIMIZED_PARALLEL_ASYNC:-} ]]; then
172196
N_MCHTRK=1
173197
N_TOFMATCH=9
174198
N_TPCTRK=6
199+
elif [[ $OPTIMIZED_PARALLEL_ASYNC == "keep_root" ]]; then
200+
TIMEFRAME_RATE_LIMIT=4
201+
SHMSIZE=30000000000
175202
else
176203
echo "Invalid optimized setting '$OPTIMIZED_PARALLEL_ASYNC'" 1>&2
177204
exit 1

DATA/tools/epn/gen_topo_o2dpg.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ while true; do
9494
done
9595
git checkout $GEN_TOPO_SOURCE &> /dev/null
9696
if [[ $? != 0 ]]; then
97-
git fetch --tags origin 1>&2 || { echo Repository update failed 1>&2; exit 1; }
97+
git fetch -f --tags origin 1>&2 || { echo Repository update failed 1>&2; exit 1; }
9898
git checkout $GEN_TOPO_SOURCE &> /dev/null || { echo commit does not exist 1>&2; exit 1; }
9999
fi
100100
# At a tag, or a detached non-dirty commit, but not on a branch

MC/bin/o2dpg_sim_workflow.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,6 +1322,7 @@ def getDigiTaskName(det):
13221322
#<--------- TOF-TPC(-ITS) global track matcher workflow
13231323
toftpcmatchneeds = [TOFRECOtask['name'], TPCRECOtask['name'], ITSTPCMATCHtask['name'], TRDTRACKINGtask2['name']]
13241324
toftracksrcdefault = dpl_option_from_config(anchorConfig, 'o2-tof-matcher-workflow', 'track-sources', default_value='TPC,ITS-TPC,TPC-TRD,ITS-TPC-TRD')
1325+
tofusefit = option_if_available('o2-tof-matcher-workflow', '--use-fit', envfile=async_envfile)
13251326
TOFTPCMATCHERtask = createTask(name='toftpcmatch_'+str(tf), needs=toftpcmatchneeds, tf=tf, cwd=timeframeworkdir, lab=["RECO"], mem='1000')
13261327
tofmatcher_cmd_parts = [
13271328
'${O2_ROOT}/bin/o2-tof-matcher-workflow',
@@ -1332,9 +1333,11 @@ def getDigiTaskName(det):
13321333
'ITSCATrackerParam',
13331334
'MFTClustererParam',
13341335
'GPU_rec_tpc',
1336+
'ft0tag',
13351337
'trackTuneParams'], tpcLocalCFreco),
13361338
' --track-sources ' + toftracksrcdefault,
13371339
(' --combine-devices','')[args.no_combine_dpl_devices],
1340+
tofusefit,
13381341
tpc_corr_scaling_options,
13391342
tpc_corr_options_mc
13401343
]
@@ -1951,11 +1954,11 @@ def remove_json_prefix(path):
19511954
AOD_merge_task['cmd'] = ' set -e ; [ -f aodmerge_input.txt ] && rm aodmerge_input.txt; '
19521955
AOD_merge_task['cmd'] += ' for i in `seq 1 ' + str(NTIMEFRAMES) + '`; do echo "tf${i}/AO2D.root" >> aodmerge_input.txt; done; '
19531956
AOD_merge_task['cmd'] += ' o2-aod-merger --input aodmerge_input.txt --output AO2D_pre.root'
1954-
# produce MonaLisa event stat file
1955-
AOD_merge_task['cmd'] += ' ; ${O2DPG_ROOT}/MC/bin/o2dpg_determine_eventstat.py'
19561957
# reindex the BC + connected tables because it there could be duplicate BC entries due to the orbit-early treatment
19571958
# see https://its.cern.ch/jira/browse/O2-6227
19581959
AOD_merge_task['cmd'] += ' ; root -q -b -l "${O2DPG_ROOT}/MC/utils/AODBcRewriter.C(\\\"AO2D_pre.root\\\",\\\"AO2D.root\\\")"'
1960+
# produce MonaLisa event stat file
1961+
AOD_merge_task['cmd'] += ' ; ${O2DPG_ROOT}/MC/bin/o2dpg_determine_eventstat.py'
19591962
AOD_merge_task['alternative_alienv_package'] = "None" # we want latest software for this step
19601963
workflow['stages'].append(AOD_merge_task)
19611964

MC/bin/o2dpg_sim_workflow_anchored.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
raise EnvironmentError("O2DPG_ROOT is not set in the environment.")
2424
mc_prodinfo_path = os.path.abspath(os.path.join(o2dpg_root, "MC", "prodinfo"))
2525
sys.path.append(mc_prodinfo_path)
26-
from mcprodinfo_ccdb_upload import MCProdInfo, upload_mcprodinfo_meta, query_mcprodinfo
26+
from mcprodinfo_ccdb_upload import MCProdInfo, publish_MCProdInfo
2727
import dataclasses
2828

2929
# Creates a time anchored MC workflow; positioned within a given run-number (as function of production size etc)
@@ -450,14 +450,6 @@ def parse_file(filename):
450450
print(f"This run as globally {total_excluded_fraction} of it's data marked to be exluded")
451451
return excluded
452452

453-
def publish_MCProdInfo(mc_prod_info, ccdb_url = "https://alice-ccdb.cern.ch", username = "aliprod", include_meta_into_aod=False):
454-
print("Publishing MCProdInfo")
455-
456-
# see if this already has meta-data uploaded, otherwise do nothing
457-
mc_prod_info_q = query_mcprodinfo(ccdb_url, username, mc_prod_info.RunNumber, mc_prod_info.LPMProductionTag)
458-
if mc_prod_info_q == None:
459-
# could make this depend on hash values in future
460-
upload_mcprodinfo_meta(ccdb_url, username, mc_prod_info.RunNumber, mc_prod_info.LPMProductionTag, dataclasses.asdict(mc_prod_info))
461453

462454

463455
def main():
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
### The external generator derives from GeneratorPythia8.
2+
[GeneratorExternal]
3+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/external/generator/generator_pythia8_withInjectedPromptSignals_gaptriggered_dq.C
4+
funcName=GeneratorPythia8InjectedPromptCharmoniaGapTriggered(5,11)
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/pythia8/generator/pythia8_inel_triggerGap_OO5TeV.cfg
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
int External()
2+
{
3+
int checkPdgSignal[] = {443,100443};
4+
int checkPdgDecay = 13;
5+
double rapiditymin = -4.3; double rapiditymax = -2.3;
6+
std::string path{"o2sim_Kine.root"};
7+
std::cout << "Check for\nsignal PDG " << checkPdgSignal << "\ndecay PDG " << checkPdgDecay << "\n";
8+
TFile file(path.c_str(), "READ");
9+
if (file.IsZombie()) {
10+
std::cerr << "Cannot open ROOT file " << path << "\n";
11+
return 1;
12+
}
13+
14+
auto tree = (TTree*)file.Get("o2sim");
15+
std::vector<o2::MCTrack>* tracks{};
16+
tree->SetBranchAddress("MCTrack", &tracks);
17+
18+
int nLeptons{};
19+
int nAntileptons{};
20+
int nLeptonPairs{};
21+
int nLeptonPairsToBeDone{};
22+
int nSignalJpsi{};
23+
int nSignalPsi2S{};
24+
int nSignalJpsiWithinAcc{};
25+
int nSignalPsi2SWithinAcc{};
26+
auto nEvents = tree->GetEntries();
27+
o2::steer::MCKinematicsReader mcreader("o2sim", o2::steer::MCKinematicsReader::Mode::kMCKine);
28+
Bool_t isInjected = kFALSE;
29+
30+
for (int i = 0; i < nEvents; i++) {
31+
tree->GetEntry(i);
32+
for (auto& track : *tracks) {
33+
auto pdg = track.GetPdgCode();
34+
auto rapidity = track.GetRapidity();
35+
auto idMoth = track.getMotherTrackId();
36+
if (pdg == checkPdgDecay) {
37+
// count leptons
38+
nLeptons++;
39+
} else if(pdg == -checkPdgDecay) {
40+
// count anti-leptons
41+
nAntileptons++;
42+
} else if (pdg == checkPdgSignal[0] || pdg == checkPdgSignal[1]) {
43+
if(idMoth < 0) {
44+
// count signal PDG
45+
pdg == checkPdgSignal[0] ? nSignalJpsi++ : nSignalPsi2S++;
46+
// count signal PDG within acceptance
47+
if(rapidity > rapiditymin && rapidity < rapiditymax) { pdg == checkPdgSignal[0] ? nSignalJpsiWithinAcc++ : nSignalPsi2SWithinAcc++;}
48+
}
49+
auto child0 = o2::mcutils::MCTrackNavigator::getDaughter0(track, *tracks);
50+
auto child1 = o2::mcutils::MCTrackNavigator::getDaughter1(track, *tracks);
51+
if (child0 != nullptr && child1 != nullptr) {
52+
// check for parent-child relations
53+
auto pdg0 = child0->GetPdgCode();
54+
auto pdg1 = child1->GetPdgCode();
55+
std::cout << "First and last children of parent " << checkPdgSignal << " are PDG0: " << pdg0 << " PDG1: " << pdg1 << "\n";
56+
if (std::abs(pdg0) == checkPdgDecay && std::abs(pdg1) == checkPdgDecay && pdg0 == -pdg1) {
57+
nLeptonPairs++;
58+
if (child0->getToBeDone() && child1->getToBeDone()) {
59+
nLeptonPairsToBeDone++;
60+
}
61+
}
62+
}
63+
}
64+
}
65+
}
66+
std::cout << "#events: " << nEvents << "\n"
67+
<< "#leptons: " << nLeptons << "\n"
68+
<< "#antileptons: " << nAntileptons << "\n"
69+
<< "#signal (prompt Jpsi): " << nSignalJpsi << "; within acceptance " << rapiditymin << " < y < " << rapiditymax << " : " << nSignalJpsiWithinAcc << "\n"
70+
<< "#signal (prompt Psi(2S)): " << nSignalPsi2S << "; within acceptance " << rapiditymin << " < y < " << rapiditymax << " : " << nSignalPsi2SWithinAcc << "\n"
71+
<< "#lepton pairs: " << nLeptonPairs << "\n"
72+
<< "#lepton pairs to be done: " << nLeptonPairs << "\n";
73+
74+
75+
if (nLeptonPairs == 0 || nLeptons == 0 || nAntileptons == 0) {
76+
std::cerr << "Number of leptons, number of anti-leptons as well as number of lepton pairs should all be greater than 1.\n";
77+
return 1;
78+
}
79+
if (nLeptonPairs != nLeptonPairsToBeDone) {
80+
std::cerr << "The number of lepton pairs should be the same as the number of lepton pairs which should be transported.\n";
81+
return 1;
82+
}
83+
84+
return 0;
85+
}

0 commit comments

Comments
 (0)