Skip to content

Commit ad9af57

Browse files
authored
Merge branch 'AliceO2Group:master' into tpc_laster_qc_change
2 parents 1aa1359 + 3be71b2 commit ad9af57

29 files changed

Lines changed: 1301 additions & 117 deletions

DATA/production/configurations/CTFSkimming/ctf-skim-workflow.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ done
8989

9090
if [[ -z ${IRFRAMES:-} ]] || [[ -z ${CTFLIST:-} ]] ; then
9191
echo "Format: ${0##*/} -f <IRFramesFile> -c <CTFsList>"
92-
exit 1
92+
exit 1
9393
fi
9494

9595
[[ "0${ALLOW_MISSING_DET:-}" == "00" ]] && ALLOW_MISSING_DET= || ALLOW_MISSING_DET="--allow-missing-detectors"
@@ -107,12 +107,12 @@ add_W o2-ctf-reader-workflow "--ctf-data-subspec 1 --ir-frames-files $IRFRAMES $
107107

108108
if [[ -z ${NO_ITSMFT_MASKING:-} ]] ; then
109109
has_detector_ctf ITS && add_W o2-its-reco-workflow "--digits-from-upstream --disable-mc --disable-tracking --disable-root-output --pipeline $(get_N its-tracker ITS REST 1 ITSTRK)" "ITSClustererParam.maxBCDiffToMaskBias=10;"
110-
has_detector_ctf MFT && add_W o2-mft-reco-workflow "--digits-from-upstream --disable-mc --disable-tracking --disable-root-output --pipeline $(get_N mft-tracker MFT REST 1 MFTTRK)" "MFTClustererParam.maxBCDiffToMaskBias=10;"
110+
has_detector_ctf MFT && add_W o2-mft-reco-workflow "--digits-from-upstream --disable-mc --disable-tracking --disable-root-output --pipeline $(get_N mft-tracker MFT REST 1 MFTTRK)" "MFTClustererParam.maxBCDiffToMaskBias=10;"
111111
fi
112112

113113
has_detector_ctf ITS && add_W o2-itsmft-entropy-encoder-workflow "$RANS_OPT --select-ir-frames --irframe-margin-bwd ${ITS_MARGIN_BWD:-$DEF_MARGIN_BWD} --irframe-margin-fwd ${ITS_MARGIN_FWD:-$DEF_MARGIN_FWD} --mem-factor ${ITS_ENC_MEMFACT:-1.5} --pipeline $(get_N its-entropy-encoder ITS CTF 1)"
114114
has_detector_ctf MFT && add_W o2-itsmft-entropy-encoder-workflow "$RANS_OPT --select-ir-frames --irframe-margin-bwd ${MFT_MARGIN_BWD:-$DEF_MARGIN_BWD} --irframe-margin-fwd ${MFT_MARGIN_FWD:-$DEF_MARGIN_FWD} --mem-factor ${MFT_ENC_MEMFACT:-1.5} --runmft true --pipeline $(get_N mft-entropy-encoder MFT CTF 1)"
115-
has_detector_ctf TPC && add_W o2-tpc-reco-workflow "$RANS_OPT --select-ir-frames --irframe-margin-bwd ${TPC_MARGIN_BWD:-$DEF_MARGIN_BWD} --irframe-margin-fwd ${TPC_MARGIN_FWD:-$DEF_MARGIN_FWD} --mem-factor ${TPC_ENC_MEMFACT:-1.} --input-type compressed-clusters-flat --output-type encoded-clusters,disable-writer --pipeline $(get_N tpc-entropy-encoder TPC CTF 1 TPCENT)"
115+
has_detector_ctf TPC && add_W o2-tpc-reco-workflow "$RANS_OPT --select-ir-frames --irframe-margin-bwd ${TPC_MARGIN_BWD:-$DEF_MARGIN_BWD} --irframe-margin-fwd ${TPC_MARGIN_FWD:-$DEF_MARGIN_FWD} --mem-factor ${TPC_ENC_MEMFACT:-1.} --input-type compressed-clusters-flat-for-encode --output-type encoded-clusters,disable-writer --pipeline $(get_N tpc-entropy-encoder TPC CTF 1 TPCENT)"
116116
has_detector_ctf TRD && add_W o2-trd-entropy-encoder-workflow "$RANS_OPT --select-ir-frames --irframe-margin-bwd ${TRD_MARGIN_BWD:-$DEF_MARGIN_BWD} --irframe-margin-fwd ${TRD_MARGIN_FWD:-$DEF_MARGIN_FWD} --mem-factor ${TRD_ENC_MEMFACT:-1.5} --pipeline $(get_N trd-entropy-encoder TRD CTF 1 TRDENT)"
117117
has_detector_ctf TOF && add_W o2-tof-entropy-encoder-workflow "$RANS_OPT --select-ir-frames --irframe-margin-bwd ${TOF_MARGIN_BWD:-$DEF_MARGIN_BWD} --irframe-margin-fwd ${TOF_MARGIN_FWD:-$DEF_MARGIN_FWD} --mem-factor ${TOF_ENC_MEMFACT:-1.5} --pipeline $(get_N tof-entropy-encoder TOF CTF 1)"
118118
has_detector_ctf FT0 && add_W o2-ft0-entropy-encoder-workflow "$RANS_OPT --select-ir-frames --irframe-margin-bwd ${FT0_MARGIN_BWD:-$DEF_MARGIN_BWD} --irframe-margin-fwd ${FT0_MARGIN_FWD:-$DEF_MARGIN_FWD} --mem-factor ${FT0_ENC_MEMFACT:-1.5} --pipeline $(get_N ft0-entropy-encoder FT0 CTF 1)"

DATA/production/configurations/asyncReco/setenv_extra.sh

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -349,12 +349,7 @@ if [[ $ALIGNLEVEL == 0 ]]; then
349349
elif [[ $ALIGNLEVEL == 1 ]]; then
350350
ERRIB="100e-8"
351351
ERROB="100e-8"
352-
if [[ $ALIEN_JDL_LPMANCHORYEAR == "2026" ]] ; then
353-
[[ -z $TPCITSTIMEERR ]] && TPCITSTIMEERR="0.05"
354-
EXTRA_PRIMVTX_TimeMargin="pvertexer.timeMarginVertexTime=0.3"
355-
else
356-
[[ -z $TPCITSTIMEERR ]] && TPCITSTIMEERR="0.2"
357-
fi
352+
[[ -z $TPCITSTIMEERR ]] && TPCITSTIMEERR="0.2"
358353
if [[ $ALIEN_JDL_LPMANCHORYEAR == "2023" && $BEAMTYPE == "PbPb" && $ANCHORED_PASS_NUMBER -lt 5 ]] || [[ $PERIOD == "LHC24al" ]] ; then
359354
[[ $ALIEN_JDL_LPMANCHORYEAR == "2023" ]] && [[ $BEAMTYPE == "PbPb" ]] && CUT_MATCH_CHI2=80 || CUT_MATCH_CHI2=100
360355
export ITSTPCMATCH="tpcitsMatch.safeMarginTimeCorrErr=2.;tpcitsMatch.XMatchingRef=60.;tpcitsMatch.cutMatchingChi2=$CUT_MATCH_CHI2;;tpcitsMatch.crudeAbsDiffCut[0]=6;tpcitsMatch.crudeAbsDiffCut[1]=6;tpcitsMatch.crudeAbsDiffCut[2]=0.3;tpcitsMatch.crudeAbsDiffCut[3]=0.3;tpcitsMatch.crudeAbsDiffCut[4]=2.5;tpcitsMatch.crudeNSigma2Cut[0]=64;tpcitsMatch.crudeNSigma2Cut[1]=64;tpcitsMatch.crudeNSigma2Cut[2]=64;tpcitsMatch.crudeNSigma2Cut[3]=64;tpcitsMatch.crudeNSigma2Cut[4]=64;"
@@ -558,18 +553,21 @@ export ITSEXTRAERR="ITSCATrackerParam.sysErrY2[0]=$ERRIB;ITSCATrackerParam.sysEr
558553
# ad-hoc options for ITS reco workflow
559554
EXTRA_ITSRECO_CONFIG=
560555
if [[ $BEAMTYPE == "PbPb" ]]; then
561-
EXTRA_ITSRECO_CONFIG="ITSCATrackerParam.deltaRof=0;ITSVertexerParam.clusterContributorsCut=16;ITSVertexerParam.lowMultBeamDistCut=0;ITSCATrackerParam.nROFsPerIterations=12;ITSCATrackerParam.perPrimaryVertexProcessing=false;ITSCATrackerParam.fataliseUponFailure=false;ITSCATrackerParam.dropTFUponFailure=true;ITSCATrackerParam.maxMemory=21474836480;"
556+
# tracker memory
557+
EXTRA_ITSRECO_CONFIG=";ITSCATrackerParam.perPrimaryVertexProcessing=false;ITSCATrackerParam.fataliseUponFailure=false;ITSCATrackerParam.dropTFUponFailure=true;ITSCATrackerParam.maxMemory=21474836480;"
562558
if [[ -z "$ALIEN_JDL_DISABLE_UPC" || $ALIEN_JDL_DISABLE_UPC != 1 ]]; then
563559
EXTRA_ITSRECO_CONFIG+=";ITSVertexerParam.nIterations=2;ITSCATrackerParam.doUPCIteration=true;"
564560
fi
565561
if [[ $LOWFIELD == "1" ]]; then
566-
EXTRA_ITSRECO_CONFIG+=";ITSCATrackerParam.minPt=2.5;"
562+
EXTRA_ITSRECO_CONFIG+=";ITSCATrackerParam.minPt=2.5;" # disables B-field scaling
567563
fi
568564
elif [[ $BEAMTYPE == "pp" || $LIGHTNUCLEI == "1" ]]; then
569-
EXTRA_ITSRECO_CONFIG="ITSVertexerParam.phiCut=0.5;ITSVertexerParam.clusterContributorsCut=3;ITSVertexerParam.tanLambdaCut=0.2;"
570-
EXTRA_ITSRECO_CONFIG+=";ITSCATrackerParam.startLayerMask[0]=127;ITSCATrackerParam.startLayerMask[1]=127;ITSCATrackerParam.startLayerMask[2]=127;"
565+
# allowed start layers
566+
EXTRA_ITSRECO_CONFIG=";ITSCATrackerParam.startLayerMask[0]=127;ITSCATrackerParam.startLayerMask[1]=127;ITSCATrackerParam.startLayerMask[2]=127;"
567+
# low pt-cutoffs
571568
EXTRA_ITSRECO_CONFIG+=";ITSCATrackerParam.minPtIterLgt[0]=0.05;ITSCATrackerParam.minPtIterLgt[1]=0.05;ITSCATrackerParam.minPtIterLgt[2]=0.05;ITSCATrackerParam.minPtIterLgt[3]=0.05;ITSCATrackerParam.minPtIterLgt[4]=0.05;ITSCATrackerParam.minPtIterLgt[5]=0.05;ITSCATrackerParam.minPtIterLgt[6]=0.05;ITSCATrackerParam.minPtIterLgt[7]=0.05;ITSCATrackerParam.minPtIterLgt[8]=0.05;ITSCATrackerParam.minPtIterLgt[9]=0.09;ITSCATrackerParam.minPtIterLgt[10]=0.167;ITSCATrackerParam.minPtIterLgt[11]=0.125;"
572-
EXTRA_ITSRECO_CONFIG+=";ITSCATrackerParam.deltaRof=1;ITSVertexerParam.deltaRof=1;" # enable delta-rof tracking
569+
# enable delta-rof tracking
570+
EXTRA_ITSRECO_CONFIG+=";ITSCATrackerParam.addTimeError[0]=30;ITSCATrackerParam.addTimeError[1]=30;ITSCATrackerParam.addTimeError[2]=30;ITSCATrackerParam.addTimeError[3]=30;ITSCATrackerParam.addTimeError[4]=30;ITSCATrackerParam.addTimeError[5]=30;ITSCATrackerParam.addTimeError[6]=30;ITSVertexerParam.seedMemberRadiusTime=1;"
573571
# this is to impose old pp pT cuts (overriding hardcoded pbpb24 apass1 settings)
574572
# EXTRA_ITSRECO_CONFIG+=";ITSCATrackerParam.minPtIterLgt[0]=0.05;ITSCATrackerParam.minPtIterLgt[1]=0.05;ITSCATrackerParam.minPtIterLgt[2]=0.05;ITSCATrackerParam.minPtIterLgt[3]=0.05;ITSCATrackerParam.minPtIterLgt[4]=0.05;ITSCATrackerParam.minPtIterLgt[5]=0.05;ITSCATrackerParam.minPtIterLgt[6]=0.05;ITSCATrackerParam.minPtIterLgt[7]=0.05;ITSCATrackerParam.minPtIterLgt[8]=0.05;ITSCATrackerParam.minPtIterLgt[9]=0.05;ITSCATrackerParam.minPtIterLgt[10]=0.05;ITSCATrackerParam.minPtIterLgt[11]=0.05;"
575573
fi

DATA/production/qc-workflow.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ elif [[ -z ${QC_JSON_FROM_OUTSIDE:-} ]]; then
117117
[[ -z "${QC_JSON_CPV:-}" ]] && QC_JSON_CPV=apricot://o2/components/qc/ANY/any/cpv-physics-qcmn-epn
118118
[[ -z "${QC_JSON_TRD:-}" ]] && QC_JSON_TRD=apricot://o2/components/qc/ANY/any/trd-full-qcmn
119119
[[ -z "${QC_JSON_PHS:-}" ]] && QC_JSON_PHS=apricot://o2/components/qc/ANY/any/phos-raw-clusters-epn
120+
[[ -z "${QC_JSON_CTP:-}" ]] && QC_JSON_CTP=apricot://o2/components/qc/ANY/any/ctp-raw-qc-epn
120121
[[ -z "${QC_JSON_GLO_PRIMVTX:-}" ]] && QC_JSON_GLO_PRIMVTX=apricot://o2/components/qc/ANY/any/glo-vtx-qcmn-epn
121122
[[ -z "${QC_JSON_GLO_ITSTPC:-}" ]] && QC_JSON_GLO_ITSTPC=apricot://o2/components/qc/ANY/any/glo-itstpc-mtch-qcmn-epn
122123
if [[ -z "${QC_JSON_TOF_MATCH:-}" ]]; then

MC/bin/o2dpg_sim_config.py

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,19 @@ def add(cfg, flatconfig):
2828
if 302000 <= int(args.run) and int(args.run) < 309999:
2929
add(config, {"ITSAlpideParam.roFrameLengthInBC" : 198})
3030
# ITS reco settings
31-
add(config, {"ITSVertexerParam.phiCut" : 0.5,
32-
"ITSVertexerParam.clusterContributorsCut" : 3,
33-
"ITSVertexerParam.tanLambdaCut" : 0.2})
31+
add(config, {"ITSVertexerParam.phiCut": 0.4,
32+
"ITSVertexerParam.tanLambdaCut": 0.17,
33+
"ITSVertexerParam.pairCut": 0.0317563,
34+
"ITSVertexerParam.clusterCut": 0.6640964,
35+
"ITSVertexerParam.coarseZWindow": 0.2049018,
36+
"ITSVertexerParam.seedDedupZCut": 0.0711793,
37+
"ITSVertexerParam.refitDedupZCut": 0.0680009,
38+
"ITSVertexerParam.duplicateZCut": 0.1582193,
39+
"ITSVertexerParam.finalSelectionZCut": 0.1081465,
40+
"ITSVertexerParam.duplicateDistance2Cut": 0.0117033,
41+
"ITSVertexerParam.clusterContributorsCut": 2,
42+
"ITSVertexerParam.seedMemberRadiusZ": 0,
43+
"ITSVertexerParam.nSigmaCut": 0.032841})
3444
# primary vertexing settings
3545
if 301000 <= int(args.run) and int(args.run) <= 301999:
3646
add(config, {"pvertexer.acceptableScale2" : 9,
@@ -86,10 +96,6 @@ def add(cfg, flatconfig):
8696
if args.fwdmatching_cut_4_param == True:
8797
add(config, {"FwdMatching.cutFcn" : "cut3SigmaXYAngles"})
8898

89-
# deal with larger combinatorics
90-
if args.col == "PbPb" or (args.embedding and args.colBkg == "PbPb"):
91-
add(config, {"ITSVertexerParam.lowMultBeamDistCut": "0."})
92-
9399
# FIT digitizer settings
94100
# 2023 PbPb
95101
if 543437 <= int(args.run) and int(args.run) <= 545367:
@@ -105,6 +111,29 @@ def add(cfg, flatconfig):
105111
if COLTYPEIR == "PbPb":
106112
# 4 ADC channels / MIP
107113
add(config, {"FV0DigParam.adcChannelsPerMip": "4"})
114+
# 2025
115+
# first and last run of 2025
116+
if 562260 <= int(args.run) and int(args.run) <= 568721:
117+
# 14 ADC channels / MIP for FT0
118+
add(config, {"FT0DigParam.mMip_in_V": "7", "FT0DigParam.mMV_2_Nchannels": "2", "FT0DigParam.mMV_2_NchannelsInverse": "0.5"})
119+
if COLTYPEIR == "PbPb":
120+
# 4 ADC channels / MIP
121+
add(config, {"FV0DigParam.adcChannelsPerMip": "4"})
122+
# central and semicentral FT0 thresholds
123+
add(config, {"FT0DigParam.mtrg_central_trh": "1433", "FT0DigParam.mtrg_semicentral_trh": "35"})
124+
# FV0 trigger settings
125+
add(config, {"FV0DigParam.NchannelsLevel": "2", "FV0DigParam.InnerChargeLevel": "4", "FV0DigParam.OuterChargeLevel": "4", "FV0DigParam.ChargeLevel": "1080"})
126+
if COLTYPEIR == "pp" or COLTYPEIR == "OO" or COLTYPEIR == "NeNe" or COLTYPEIR == "pO":
127+
# central and semicentral FT0 thresholds
128+
add(config, {"FT0DigParam.mtrg_central_trh": "40", "FT0DigParam.mtrg_semicentral_trh": "20"})
129+
# FV0 trigger settings
130+
add(config, {"FV0DigParam.NchannelsLevel": "2", "FV0DigParam.InnerChargeLevel": "4", "FV0DigParam.OuterChargeLevel": "4", "FV0DigParam.ChargeLevel": "8"})
131+
if COLTYPEIR == "pp":
132+
# 15 ADC channels / MIP
133+
add(config, {"FV0DigParam.adcChannelsPerMip": "15"})
134+
if COLTYPEIR == "OO" or COLTYPEIR == "NeNe" or COLTYPEIR == "pO":
135+
# 11 ADC channels / MIP
136+
add(config, {"FV0DigParam.adcChannelsPerMip": "11"})
108137

109138
return config
110139

@@ -234,4 +263,4 @@ def overwrite_config(config, mainkey, subkey, value):
234263
if mainkey not in config:
235264
# Initialize the main key in the dictionary if it does not already exist
236265
config[mainkey] = {}
237-
config[mainkey][subkey] = value
266+
config[mainkey][subkey] = value

MC/bin/o2dpg_sim_workflow.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,9 @@ def load_external_config(configfile):
302302
activeDetectors = { det:1 for det in activeDetectors.split(',') if det not in args.skipModules and det not in args.skipReadout}
303303
for det in activeDetectors:
304304
activate_detector(det)
305+
for det in args.skipModules:
306+
print(f"Skipping detector {det} in simulation")
307+
deactivate_detector(det)
305308

306309
# function to finalize detector source lists based on activeDetectors
307310
# detector source lists are comma separated lists of DET1, DET2, DET1-DET2, ...
@@ -1227,7 +1230,7 @@ def createRestDigiTask(name, det='ALLSMALLER'):
12271230
getDPL_global_options(),
12281231
f'-n {args.ns}',
12291232
simsoption,
1230-
'--onlyDet FT0,FV0,EMC,CTP',
1233+
'--onlyDet ' + ','.join([det for det in ['FT0', 'FV0', 'EMC', 'CTP'] if isActive(det)]),
12311234
f'--interactionRate {INTRATE}',
12321235
f'--incontext {CONTEXTFILE}',
12331236
f'--store-ctp-lumi {CTPSCALER}',
@@ -1387,7 +1390,6 @@ def getDigiTaskName(det):
13871390
ITSRECOtask['cmd'] = task_finalizer([
13881391
"${O2_ROOT}/bin/o2-its-reco-workflow" if args.detectorList == 'ALICE2' else "${O2_ROOT}/bin/o2-its3-reco-workflow",
13891392
getDPL_global_options(bigshm=havePbPb),
1390-
'--trackerCA' if args.detectorList == 'ALICE2' else '',
13911393
'--tracking-mode async',
13921394
putConfigValues(["ITSVertexerParam",
13931395
"ITSAlpideParam",

MC/config/PWGHF/hybrid/GeneratorHF_Non_Hfe.json

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@
33
{
44
"name": "pythia8",
55
"config": {
6-
"config": "${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg",
7-
"hooksFileName": "",
8-
"hooksFuncName": "",
9-
"includePartonEvent": true,
10-
"particleFilter": "",
11-
"verbose": 0
6+
"config": "${O2DPG_MC_CONFIG_ROOT}/MC/config/common/pythia8/generator/pythia8_NonHfe.cfg"
127
},
138
"triggers": {
149
"mode": "or",
@@ -19,9 +14,27 @@
1914
}
2015
]
2116
}
17+
},
18+
{
19+
"name": "boxgen",
20+
"config": {
21+
"pdg": 111,
22+
"prange[0]": 0.1,
23+
"prange[1]": 50.0,
24+
"eta[0]": -0.8,
25+
"eta[1]": 0.8
26+
}
27+
},
28+
{
29+
"name": "boxgen",
30+
"config": {
31+
"pdg": 221,
32+
"prange[0]": 0.1,
33+
"prange[1]": 50.0,
34+
"eta[0]": -0.8,
35+
"eta[1]": 0.8
36+
}
2237
}
2338
],
24-
"fractions": [
25-
1
26-
]
39+
"fractions": [1, 1, 1]
2740
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#NEV_TEST> 20
2+
### The external generator derives from GeneratorPythia8.
3+
[GeneratorExternal]
4+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
5+
funcName=GeneratorPythia8GapTriggeredCharmAndBeauty(5, -1.5, 1.5, -1.0, 1.0, {11})
6+
7+
[GeneratorPythia8]
8+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_HFe_Mode2_pp_ref.cfg
9+
includePartonEvent=true
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
int External() {
2+
std::string path{"o2sim_Kine.root"};
3+
4+
int checkPdgDecayElectron = 11;
5+
int checkPdgQuarkOne = 4;
6+
int checkPdgQuarkTwo = 5;
7+
float ratioTrigger = 1. / 5; // one event triggered out of 5
8+
9+
TFile file(path.c_str(), "READ");
10+
if (file.IsZombie()) {
11+
std::cerr << "Cannot open ROOT file" << path << "\n";
12+
return 1;
13+
}
14+
15+
auto tree = (TTree *)file.Get("o2sim");
16+
if (!tree) {
17+
std::cerr << "Cannot find tree o2sim in file" << path << "\n";
18+
return 1;
19+
}
20+
21+
std::vector<o2::MCTrack> *tracks{};
22+
tree->SetBranchAddress("MCTrack", &tracks);
23+
o2::dataformats::MCEventHeader *eventHeader = nullptr;
24+
tree->SetBranchAddress("MCEventHeader.", &eventHeader);
25+
26+
int nEventsMB{}, nEventsInjOne{}, nEventsInjTwo{};
27+
int nQuarksOne{}, nQuarksTwo{};
28+
int nElectrons{};
29+
auto nEvents = tree->GetEntries();
30+
31+
for (int i = 0; i < nEvents; i++) {
32+
tree->GetEntry(i);
33+
34+
// check subgenerator information
35+
if (eventHeader->hasInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID)) {
36+
bool isValid = false;
37+
int subGeneratorId = eventHeader->getInfo<int>(
38+
o2::mcgenid::GeneratorProperty::SUBGENERATORID, isValid);
39+
if (subGeneratorId == 0) {
40+
nEventsMB++;
41+
} else if (subGeneratorId == checkPdgQuarkOne) {
42+
nEventsInjOne++;
43+
} else if (subGeneratorId == checkPdgQuarkTwo) {
44+
nEventsInjTwo++;
45+
}
46+
} // if event header
47+
48+
int nelectronsev = 0;
49+
50+
for (auto &track : *tracks) {
51+
auto pdg = track.GetPdgCode();
52+
if (std::abs(pdg) == checkPdgQuarkOne) {
53+
nQuarksOne++;
54+
continue;
55+
}
56+
if (std::abs(pdg) == checkPdgQuarkTwo) {
57+
nQuarksTwo++;
58+
continue;
59+
}
60+
61+
auto y = track.GetRapidity();
62+
if (std::abs(pdg) == checkPdgDecayElectron) {
63+
int igmother = track.getMotherTrackId();
64+
auto gmTrack = (*tracks)[igmother];
65+
int gmpdg = gmTrack.GetPdgCode();
66+
if (int(std::abs(gmpdg) / 100.) == 4 ||
67+
int(std::abs(gmpdg) / 1000.) == 4 ||
68+
int(std::abs(gmpdg) / 100.) == 5 ||
69+
int(std::abs(gmpdg) / 1000.) == 5) {
70+
nElectrons++;
71+
nelectronsev++;
72+
} // gmpdg
73+
} // pdgdecay
74+
} // loop track
75+
// std::cout << "#electrons per event: " << nelectronsev << "\n";
76+
}
77+
78+
std::cout << "--------------------------------\n";
79+
std::cout << "# Events: " << nEvents << "\n";
80+
std::cout << "# MB events: " << nEventsMB << "\n";
81+
std::cout << Form("# events injected with %d quark pair: ", checkPdgQuarkOne)
82+
<< nEventsInjOne << "\n";
83+
std::cout << Form("# events injected with %d quark pair: ", checkPdgQuarkTwo)
84+
<< nEventsInjTwo << "\n";
85+
std::cout << Form("# %d (anti)quarks: ", checkPdgQuarkOne) << nQuarksOne
86+
<< "\n";
87+
std::cout << Form("# %d (anti)quarks: ", checkPdgQuarkTwo) << nQuarksTwo
88+
<< "\n";
89+
90+
if (nEventsMB < nEvents * (1 - ratioTrigger) * 0.95 ||
91+
nEventsMB > nEvents * (1 - ratioTrigger) *
92+
1.05) { // we put some tolerance since the number of
93+
// generated events is small
94+
std::cerr << "Number of generated MB events different than expected\n";
95+
return 1;
96+
}
97+
if (nEventsInjOne < nEvents * ratioTrigger * 0.5 * 0.95 ||
98+
nEventsInjOne > nEvents * ratioTrigger * 0.5 * 1.05) {
99+
std::cerr << "Number of generated events injected with " << checkPdgQuarkOne
100+
<< " different than expected\n";
101+
return 1;
102+
}
103+
if (nEventsInjTwo < nEvents * ratioTrigger * 0.5 * 0.95 ||
104+
nEventsInjTwo > nEvents * ratioTrigger * 0.5 * 1.05) {
105+
std::cerr << "Number of generated events injected with " << checkPdgQuarkTwo
106+
<< " different than expected\n";
107+
return 1;
108+
}
109+
if (nQuarksOne <
110+
nEvents *
111+
ratioTrigger) { // we expect anyway more because the same quark is
112+
// repeated several time, after each gluon radiation
113+
std::cerr << "Number of generated (anti)quarks " << checkPdgQuarkOne
114+
<< " lower than expected\n";
115+
return 1;
116+
}
117+
if (nQuarksTwo <
118+
nEvents *
119+
ratioTrigger) { // we expect anyway more because the same quark is
120+
// repeated several time, after each gluon radiation
121+
std::cerr << "Number of generated (anti)quarks " << checkPdgQuarkTwo
122+
<< " lower than expected\n";
123+
return 1;
124+
}
125+
std::cout << "#electrons: " << nElectrons << "\n";
126+
127+
return 0;
128+
} // external

0 commit comments

Comments
 (0)