Skip to content

Commit 51c88a5

Browse files
authored
Merge branch 'master' into swenzel/mc-data-embedding-impr
2 parents 7164798 + 4eee7fb commit 51c88a5

22 files changed

+1272
-119
lines changed

DATA/production/configurations/asyncReco/async_pass.sh

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,12 @@ WORKFLOW_DETECTORS_EXCLUDE_QC_SCRIPT=${ALIEN_JDL_WORKFLOWDETECTORSEXCLUDEQC:-}
492492
# print workflow
493493
if [[ $ALIEN_JDL_SSPLITWF != "1" ]]; then
494494
env $SETTING_ROOT_OUTPUT IS_SIMULATED_DATA=0 WORKFLOWMODE=print TFDELAY=$TFDELAYSECONDS WORKFLOW_DETECTORS_EXCLUDE_QC=$WORKFLOW_DETECTORS_EXCLUDE_QC_SCRIPT ./run-workflow-on-inputlist.sh $INPUT_TYPE list.list > workflowconfig.log
495+
exitcode=$?
496+
if [[ $exitcode -ne 0 ]]; then
497+
echo "exit code from printing workflow is $exitcode" > validation_error.message
498+
echo "exit code from printing workflow is $exitcode"
499+
exit $exitcode
500+
fi
495501
# run it
496502
if [[ "0$RUN_WORKFLOW" != "00" ]]; then
497503
timeStart=`date +%s`
@@ -532,6 +538,12 @@ else
532538
export WORKFLOW_PARAMETERS=$(echo $WORKFLOW_PARAMETERS | sed -e "s/,$i,/,/g" -e "s/^$i,//" -e "s/,$i"'$'"//" -e "s/^$i"'$'"//")
533539
done
534540
env DISABLE_ROOT_OUTPUT=0 IS_SIMULATED_DATA=0 WORKFLOWMODE=print TFDELAY=$TFDELAYSECONDS WORKFLOW_DETECTORS=TPC,CTP WORKFLOW_DETECTORS_MATCHING= ./run-workflow-on-inputlist.sh $INPUT_TYPE list.list >> workflowconfig.log
541+
exitcode=$?
542+
if [[ $exitcode -ne 0 ]]; then
543+
echo "exit code from printing workflow (Step 1) is $exitcode" > validation_error.message
544+
echo "exit code from printing workflow (Step 1) is $exitcode"
545+
exit $exitcode
546+
fi
535547
# run it
536548
if [[ "0$RUN_WORKFLOW" != "00" ]]; then
537549
timeStart=`date +%s`
@@ -570,6 +582,12 @@ else
570582
export WORKFLOW_PARAMETERS=$(echo $WORKFLOW_PARAMETERS | sed -e "s/,$i,/,/g" -e "s/^$i,//" -e "s/,$i"'$'"//" -e "s/^$i"'$'"//")
571583
done
572584
env DISABLE_ROOT_OUTPUT=0 IS_SIMULATED_DATA=0 WORKFLOWMODE=print TFDELAY=$TFDELAYSECONDS WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_EXCLUDE=TPC,$DETECTORS_EXCLUDE WORKFLOW_DETECTORS_MATCHING= ./run-workflow-on-inputlist.sh $INPUT_TYPE list.list >> workflowconfig.log
585+
exitcode=$?
586+
if [[ $exitcode -ne 0 ]]; then
587+
echo "exit code from printing workflow (Step 2) is $exitcode" > validation_error.message
588+
echo "exit code from printing workflow (Step 2) is $exitcode"
589+
exit $exitcode
590+
fi
573591
# run it
574592
if [[ "0$RUN_WORKFLOW" != "00" ]]; then
575593
timeStart=`date +%s`
@@ -655,6 +673,12 @@ else
655673
STEP_3_ROOT_OUTPUT=$SETTING_ROOT_OUTPUT
656674
fi
657675
env $STEP_3_ROOT_OUTPUT IS_SIMULATED_DATA=0 WORKFLOWMODE=print TFDELAY=$TFDELAYSECONDS WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_EXCLUDE=$DETECTORS_EXCLUDE WORKFLOW_DETECTORS_USE_GLOBAL_READER_TRACKS=$READ_TRACKS WORKFLOW_DETECTORS_USE_GLOBAL_READER_CLUSTERS=$READ_CLUSTERS WORKFLOW_DETECTORS_EXCLUDE_GLOBAL_READER_TRACKS=HMP WORKFLOW_DETECTORS_EXCLUDE_QC=$WORKFLOW_DETECTORS_EXCLUDE_QC_SCRIPT,$DETECTORS_EXCLUDE ./run-workflow-on-inputlist.sh $INPUT_TYPE list.list >> workflowconfig.log
676+
exitcode=$?
677+
if [[ $exitcode -ne 0 ]]; then
678+
echo "exit code from printing workflow (Step 3) is $exitcode" > validation_error.message
679+
echo "exit code from printing workflow (Step 3) is $exitcode"
680+
exit $exitcode
681+
fi
658682
# run it
659683
if [[ "0$RUN_WORKFLOW" != "00" ]]; then
660684
timeStart=`date +%s`
@@ -693,6 +717,12 @@ else
693717
WORKFLOW_DETECTORS_EXCLUDE_QC_SCRIPT+=",CPV"
694718
echo "QC_JSON_FROM_OUTSIDE = $QC_JSON_FROM_OUTSIDE"
695719
env $SETTING_ROOT_OUTPUT IS_SIMULATED_DATA=0 WORKFLOWMODE=print TFDELAY=$TFDELAYSECONDS WORKFLOW_DETECTORS=ALL WORKFLOW_DETECTORS_EXCLUDE=$DETECTORS_EXCLUDE WORKFLOW_DETECTORS_USE_GLOBAL_READER_TRACKS=$READ_TRACKS WORKFLOW_DETECTORS_USE_GLOBAL_READER_CLUSTERS=$READ_CLUSTERS WORKFLOW_DETECTORS_EXCLUDE_GLOBAL_READER_TRACKS= WORKFLOW_DETECTORS_EXCLUDE_QC=$WORKFLOW_DETECTORS_EXCLUDE_QC_SCRIPT,$DETECTORS_EXCLUDE ./run-workflow-on-inputlist.sh $INPUT_TYPE list.list >> workflowconfig.log
720+
exitcode=$?
721+
if [[ $exitcode -ne 0 ]]; then
722+
echo "exit code from printing workflow (Step 4) is $exitcode" > validation_error.message
723+
echo "exit code from printing workflow (Step 4) is $exitcode"
724+
exit $exitcode
725+
fi
696726
# run it
697727
if [[ "0$RUN_WORKFLOW" != "00" ]]; then
698728
timeStart=`date +%s`

DATA/production/qc-async/tpc.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
"query": "inputTracks:TPC/TRACKS/0;inputClusters:TPC/CLUSTERNATIVE;inputClusRefs:TPC/CLUSREFS/0"
8484
},
8585
"taskParameters": {
86-
"cutAbsEta": "1.",
86+
"cutAbsEta": "1.5",
8787
"cutMinNCluster": "60",
8888
"cutMindEdxTot": "20.",
8989
"seed": "0",

DATA/production/qc-sync/tpc.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
"name": "tpc-tracks"
107107
},
108108
"taskParameters": {
109-
"cutAbsEta": "1.",
109+
"cutAbsEta": "1.5",
110110
"cutMinNCluster": "60",
111111
"cutMindEdxTot": "20."
112112
},

MC/bin/o2dpg_sim_workflow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ def getDPL_global_options(bigshm=False, ccdbbackend=True, runcommand=True):
617617
# No vertexing for event pool generation; otherwise the vertex comes from CCDB and later from CollContext
618618
# (Note that the CCDB case covers the kDiamond case, since this is picked up in GRP_TASK)
619619
vtxmode_precoll = 'kNoVertex' if args.make_evtpool else 'kCCDB'
620-
vtxmode_sgngen = 'kCollContext'
620+
vtxmode_sgngen = 'kNoVertex' if args.make_evtpool else 'kCollContext'
621621

622622
# preproduce the collision context / timeframe structure for all timeframes at once
623623
precollneeds=[GRP_TASK['name']]

MC/config/PWGEM/external/generator/Generator_pythia8_GapTriggered_HFLepton_OO.C

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,6 @@ public:
4646
pythiaObjectSignal.readFile(pathconfigSignal.Data());
4747
pythiaObjectSignal.readString("Random:setSeed on");
4848
pythiaObjectSignal.readString("Random:seed " + std::to_string(seed));
49-
pythiaObjectSignal.readString("Beams:idA = 1000080160");
50-
pythiaObjectSignal.readString("Beams:idB = 1000080160");
51-
pythiaObjectSignal.readString("Beams:eCM = 5360.0");
52-
pythiaObjectSignal.readString("Beams:frameType = 1");
53-
pythiaObjectSignal.readString("ParticleDecays:limitTau0 = on");
54-
pythiaObjectSignal.readString("ParticleDecays:tau0Max = 10.");
55-
pythiaObjectSignal.readString("HeavyIon:SigFitNGen = 0");
56-
pythiaObjectSignal.readString("HeavyIon:SigFitDefPar = 2.15,18.42,0.33");
5749
pythiaObjectSignal.init();
5850
cout << "Initalization of signal event is complete" << endl;
5951

@@ -197,7 +189,7 @@ private:
197189
// Charm-enriched forced decay
198190
FairGenerator* GeneratorPythia8GapTriggeredCharmLepton(int inputTriggerRatio, int inputExternalID, int pdgLepton, float yMinQ = -1.5, float yMaxQ = 1.5, float yMinL = -1, float yMaxL = 1)
199191
{
200-
auto myGen = new GeneratorPythia8GapTriggeredHFLeptonOO("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/pythia8_pp_cr2_forceddecayscharm.cfg", 4, inputTriggerRatio, inputExternalID);
192+
auto myGen = new GeneratorPythia8GapTriggeredHFLeptonOO("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/pythia8_OO_536_ccbar.cfg", 4, inputTriggerRatio, inputExternalID);
201193
auto seed = (gRandom->TRandom::GetSeed() % 900000000);
202194
myGen->readString("Random:setSeed on");
203195
myGen->readString("Random:seed " + std::to_string(seed));
@@ -207,10 +199,11 @@ FairGenerator* GeneratorPythia8GapTriggeredCharmLepton(int inputTriggerRatio, in
207199
return myGen;
208200
}
209201

202+
210203
// Beauty-enriched forced decay
211204
FairGenerator* GeneratorPythia8GapTriggeredBeautyForcedDecays(int inputTriggerRatio, int inputExternalID, int pdgLepton, float yMinQ = -1.5, float yMaxQ = 1.5, float yMinL = -1, float yMaxL = 1)
212205
{
213-
auto myGen = new GeneratorPythia8GapTriggeredHFLeptonOO("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/pythia8_bbbar_forceddecayscharmbeauty.cfg", 5, inputTriggerRatio, inputExternalID);
206+
auto myGen = new GeneratorPythia8GapTriggeredHFLeptonOO("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/pythia8_bbbar_OO_536_forceddecayscharmbeauty.cfg", 5, inputTriggerRatio, inputExternalID);
214207
auto seed = (gRandom->TRandom::GetSeed() % 900000000);
215208
myGen->readString("Random:setSeed on");
216209
myGen->readString("Random:seed " + std::to_string(seed));
@@ -223,7 +216,7 @@ FairGenerator* GeneratorPythia8GapTriggeredBeautyForcedDecays(int inputTriggerRa
223216
// Beauty-enriched no forced decay
224217
FairGenerator* GeneratorPythia8GapTriggeredBeautyNoForcedDecays(int inputTriggerRatio, int inputExternalID, int pdgLepton, float yMinQ = -1.5, float yMaxQ = 1.5, float yMinL = -1, float yMaxL = 1)
225218
{
226-
auto myGen = new GeneratorPythia8GapTriggeredHFLeptonOO("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/pythia8_bbbar.cfg", 5, inputTriggerRatio, inputExternalID);
219+
auto myGen = new GeneratorPythia8GapTriggeredHFLeptonOO("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/pythia8_OO_536_bbbar.cfg", 5, inputTriggerRatio, inputExternalID);
227220
auto seed = (gRandom->TRandom::GetSeed() % 900000000);
228221
myGen->readString("Random:setSeed on");
229222
myGen->readString("Random:seed " + std::to_string(seed));
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
#include "Pythia8/Pythia.h"
2+
#include "Pythia8/HeavyIons.h"
3+
#include "FairGenerator.h"
4+
#include "FairPrimaryGenerator.h"
5+
#include "Generators/GeneratorPythia8.h"
6+
#include "TRandom3.h"
7+
#include "TParticlePDG.h"
8+
#include "TDatabasePDG.h"
9+
10+
#include <map>
11+
#include <unordered_set>
12+
13+
using namespace Pythia8;
14+
15+
class GeneratorPythia8HFLeptonpp : public o2::eventgen::GeneratorPythia8
16+
{
17+
public:
18+
/// default constructor
19+
GeneratorPythia8HFLeptonpp() = default;
20+
21+
/// constructor
22+
GeneratorPythia8HFLeptonpp(TString configsignal, int quarkPdg = 4, int lInputExternalID = 0)
23+
{
24+
25+
lGeneratedEvents = 0;
26+
lExternalID = lInputExternalID;
27+
mQuarkPdg = quarkPdg;
28+
29+
auto seed = (gRandom->TRandom::GetSeed() % 900000000);
30+
31+
int offset = (int)(gRandom->Uniform(1)); // create offset to mitigate edge effects due to small number of events per job
32+
lGeneratedEvents += offset;
33+
34+
cout << "Initalizing PYTHIA object used to generate signal events..." << endl;
35+
TString pathconfigSignal = gSystem->ExpandPathName(configsignal.Data());
36+
pythiaObjectSignal.readFile(pathconfigSignal.Data());
37+
pythiaObjectSignal.readString("Random:setSeed on");
38+
pythiaObjectSignal.readString("Random:seed " + std::to_string(seed));
39+
pythiaObjectSignal.readString("Beams:eCM = 5360.0");
40+
pythiaObjectSignal.init();
41+
cout << "Initalization of signal event is complete" << endl;
42+
43+
// flag the generators using type
44+
// addCocktailConstituent(type, "interesting");
45+
// addCocktailConstitent(0, "minbias");
46+
// Add Sub generators
47+
addSubGenerator(1, "charm lepton");
48+
addSubGenerator(2, "beauty forced decay");
49+
addSubGenerator(3, "beauty no foced decay");
50+
}
51+
52+
/// Destructor
53+
~GeneratorPythia8HFLeptonpp() = default;
54+
55+
void addTriggerOnDaughter(int nb, int pdg)
56+
{
57+
mNbDaughter = nb;
58+
mPdgDaughter = pdg;
59+
};
60+
void setQuarkRapidity(float yMin, float yMax)
61+
{
62+
mQuarkRapidityMin = yMin;
63+
mQuarkRapidityMax = yMax;
64+
};
65+
void setDaughterRapidity(float yMin, float yMax)
66+
{
67+
mDaughterRapidityMin = yMin;
68+
mDaughterRapidityMax = yMax;
69+
};
70+
71+
protected:
72+
//__________________________________________________________________
73+
Bool_t generateEvent() override
74+
{
75+
/// reset event
76+
mPythia.event.reset();
77+
78+
// Generate event of interest
79+
Bool_t lGenerationOK = kFALSE;
80+
while (!lGenerationOK) {
81+
if (pythiaObjectSignal.next()) {
82+
lGenerationOK = selectEvent(pythiaObjectSignal.event);
83+
}
84+
}
85+
mPythia.event = pythiaObjectSignal.event;
86+
notifySubGenerator(lExternalID);
87+
88+
lGeneratedEvents++;
89+
// mPythia.next();
90+
91+
return true;
92+
}
93+
94+
bool selectEvent(const Pythia8::Event& event)
95+
{
96+
bool isGoodAtPartonLevel = false, isGoodAtDaughterLevel = (mPdgDaughter != 0) ? false : true;
97+
int nbDaughter = 0;
98+
for (auto iPart{0}; iPart < event.size(); ++iPart) {
99+
// search for Q-Qbar mother with at least one Q in rapidity window
100+
if (!isGoodAtPartonLevel) {
101+
auto daughterList = event[iPart].daughterList();
102+
bool hasQ = false, hasQbar = false, atSelectedY = false;
103+
for (auto iDau : daughterList) {
104+
if (event[iDau].id() == mQuarkPdg) {
105+
hasQ = true;
106+
}
107+
if (event[iDau].id() == -mQuarkPdg) {
108+
hasQbar = true;
109+
}
110+
if ((std::abs(event[iDau].id()) == mQuarkPdg) && (event[iDau].y() > mQuarkRapidityMin) && (event[iDau].y() < mQuarkRapidityMax))
111+
atSelectedY = true;
112+
}
113+
if (hasQ && hasQbar && atSelectedY) {
114+
isGoodAtPartonLevel = true;
115+
}
116+
}
117+
// search for mNbDaughter daughters of type mPdgDaughter in rapidity window
118+
if (!isGoodAtDaughterLevel) {
119+
int id = std::abs(event[iPart].id());
120+
float rap = event[iPart].y();
121+
if (id == mPdgDaughter) {
122+
int motherindexa = event[iPart].mother1();
123+
if (motherindexa > 0) {
124+
int idmother = std::abs(event[motherindexa].id());
125+
if (int(std::abs(idmother) / 100.) == 4 || int(std::abs(idmother) / 1000.) == 4 || int(std::abs(idmother) / 100.) == 5 || int(std::abs(idmother) / 1000.) == 5) {
126+
if (rap > mDaughterRapidityMin && rap < mDaughterRapidityMax) {
127+
nbDaughter++;
128+
if (nbDaughter >= mNbDaughter) isGoodAtDaughterLevel = true;
129+
}
130+
}
131+
}
132+
}
133+
}
134+
// we send the trigger
135+
if (isGoodAtPartonLevel && isGoodAtDaughterLevel) {
136+
return true;
137+
}
138+
}
139+
return false;
140+
};
141+
142+
private:
143+
// Interface to override import particles
144+
Pythia8::Event mOutputEvent;
145+
146+
// Properties of selection
147+
int mQuarkPdg;
148+
float mQuarkRapidityMin;
149+
float mQuarkRapidityMax;
150+
int mPdgDaughter;
151+
int mNbDaughter;
152+
float mDaughterRapidityMin;
153+
float mDaughterRapidityMax;
154+
155+
Long64_t lGeneratedEvents;
156+
// ID for different generators
157+
int lExternalID;
158+
159+
// Base event generators
160+
Pythia8::Pythia pythiaObjectSignal; ///Signal collision generator
161+
};
162+
163+
// Predefined generators:
164+
165+
// Charm-enriched forced decay
166+
FairGenerator* GeneratorPythia8CharmLepton(int inputExternalID, int pdgLepton, float yMinQ = -1.5, float yMaxQ = 1.5, float yMinL = -1, float yMaxL = 1)
167+
{
168+
auto myGen = new GeneratorPythia8HFLeptonpp("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/pythia8_pp_cr2_forceddecayscharm.cfg", 4, inputExternalID);
169+
auto seed = (gRandom->TRandom::GetSeed() % 900000000);
170+
myGen->readString("Random:setSeed on");
171+
myGen->readString("Random:seed " + std::to_string(seed));
172+
myGen->setQuarkRapidity(yMinQ, yMaxQ);
173+
myGen->addTriggerOnDaughter(2, pdgLepton);
174+
myGen->setDaughterRapidity(yMinL, yMaxL);
175+
return myGen;
176+
}
177+
178+
// Beauty-enriched forced decay
179+
FairGenerator* GeneratorPythia8BeautyForcedDecays(int inputExternalID, int pdgLepton, float yMinQ = -1.5, float yMaxQ = 1.5, float yMinL = -1, float yMaxL = 1)
180+
{
181+
auto myGen = new GeneratorPythia8HFLeptonpp("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/pythia8_bbbar_forceddecayscharmbeauty.cfg", 5, inputExternalID);
182+
auto seed = (gRandom->TRandom::GetSeed() % 900000000);
183+
myGen->readString("Random:setSeed on");
184+
myGen->readString("Random:seed " + std::to_string(seed));
185+
myGen->setQuarkRapidity(yMinQ, yMaxQ);
186+
myGen->addTriggerOnDaughter(2, pdgLepton);
187+
myGen->setDaughterRapidity(yMinL, yMaxL);
188+
return myGen;
189+
}
190+
191+
// Beauty-enriched no forced decay
192+
FairGenerator* GeneratorPythia8BeautyNoForcedDecays(int inputExternalID, int pdgLepton, float yMinQ = -1.5, float yMaxQ = 1.5, float yMinL = -1, float yMaxL = 1)
193+
{
194+
auto myGen = new GeneratorPythia8HFLeptonpp("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/pythia8_bbbar.cfg", 5, inputExternalID);
195+
auto seed = (gRandom->TRandom::GetSeed() % 900000000);
196+
myGen->readString("Random:setSeed on");
197+
myGen->readString("Random:seed " + std::to_string(seed));
198+
myGen->setQuarkRapidity(yMinQ, yMaxQ);
199+
myGen->addTriggerOnDaughter(2, pdgLepton);
200+
myGen->setDaughterRapidity(yMinL, yMaxL);
201+
return myGen;
202+
}

0 commit comments

Comments
 (0)