Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#NEV_TEST> 20
### The external generator derives from GeneratorPythia8.
[GeneratorExternal]
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
funcName=GeneratorPythia8GapTriggeredBeauty(4, -4.3, -2.2)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see you have the debug output about the nMuonsInAcceptance in the test macro. As you may know, it is also possible to constrain the desired hadron within the given rapidity range in the GeneratorPythia8GapTriggeredBeauty. If that's what you want, one could also trigger based on the hadronPdgList. But I am not sure if this has been used before.

[GeneratorPythia8]
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_inel_Mode2.cfg
includePartonEvent=true

Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
int External() {

int checkPdgDecayMuon = 13;
int checkPdgQuark = 5;

float ratioTrigger = 1. / 4; // one event triggered out of 4

std::string path{"o2sim_Kine.root"};

TFile file(path.c_str(), "READ");
if (file.IsZombie()) {
std::cerr << "Cannot open ROOT file" << path << "\n";
return 1;
}

auto tree = (TTree *)file.Get("o2sim");
if (!tree) {
std::cerr << "Cannot find tree o2sim in file" << path << "\n";
return 1;
}

std::vector<o2::MCTrack> *tracks{};
tree->SetBranchAddress("MCTrack", &tracks);

o2::dataformats::MCEventHeader *eventHeader = nullptr;
tree->SetBranchAddress("MCEventHeader.", &eventHeader);

int nEventsMB{};
int nEventsInj{};
int nQuarks{};
int nMuons{};

int nMuonsInAcceptance{};

auto nEvents = tree->GetEntries();

for (int i = 0; i < nEvents; i++) {
tree->GetEntry(i);
// check subgenerator information
if (eventHeader->hasInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID)) {
bool isValid = false;
int subGeneratorId = eventHeader->getInfo<int>(
o2::mcgenid::GeneratorProperty::SUBGENERATORID, isValid);
if (subGeneratorId == 0) {
nEventsMB++;
} else if (subGeneratorId == checkPdgQuark) {
nEventsInj++;
}
} // if event header

int nmuonsev = 0;
int nmuonsevinacc = 0;

for (auto &track : *tracks) {
auto pdg = track.GetPdgCode();
if (std::abs(pdg) == checkPdgQuark) {
nQuarks++;
continue;
} // pdgquark
auto y = track.GetRapidity();
if (std::abs(pdg) == checkPdgDecayMuon) {
int igmother = track.getMotherTrackId();
auto gmTrack = (*tracks)[igmother];
int gmpdg = gmTrack.GetPdgCode();
if (int(std::abs(gmpdg) / 100.) == 5 ||
int(std::abs(gmpdg) / 1000.) == 5) {
nMuons++;
nmuonsev++;
if (-4.3 < y && y < -2.2) {
nMuonsInAcceptance++;
nmuonsevinacc++;
}
} // gmpdg

} // pdgdecay

} // loop track
// std::cout << "#muons per event: " << nmuonsev << "\n";
// std::cout << "#muons in acceptance per event: " << nmuonsev << "\n";
} // events

std::cout << "#events: " << nEvents << "\n";
std::cout << "# MB events: " << nEventsMB << "\n";
std::cout << Form("# events injected with %d quark pair: ", checkPdgQuark)
<< nEventsInj << "\n";
if (nEventsMB < nEvents * (1 - ratioTrigger) * 0.95 ||
nEventsMB > nEvents * (1 - ratioTrigger) *
1.05) { // we put some tolerance since the number of
// generated events is small
std::cerr << "Number of generated MB events different than expected\n";
return 1;
}
if (nEventsInj < nEvents * ratioTrigger * 0.95 ||
nEventsInj > nEvents * ratioTrigger * 1.05) {
std::cerr << "Number of generated events injected with " << checkPdgQuark
<< " different than expected\n";
return 1;
}
std::cout << "#muons: " << nMuons << "\n";
std::cout << "#muons in acceptance: " << nMuonsInAcceptance << "\n";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @NicoleBastid , do you have any expected numbers of these muons and those in acceptance?


return 0;
} // external
38 changes: 38 additions & 0 deletions MC/config/PWGHF/pythia8/generator/pythia8_inel_Mode2.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
### beams
Beams:idA 2212 # proton
Beams:idB 2212 # proton
Beams:eCM 13600. # GeV

### processes
SoftQCD:inelastic on # all inelastic processes

### decays
ParticleDecays:limitTau0 on
ParticleDecays:tau0Max 10.

### switching on Pythia Mode2
ColourReconnection:mode 1
ColourReconnection:allowDoubleJunRem off
ColourReconnection:m0 0.3
ColourReconnection:allowJunctions on
ColourReconnection:junctionCorrection 1.20
ColourReconnection:timeDilationMode 2
ColourReconnection:timeDilationPar 0.18
StringPT:sigma 0.335
StringZ:aLund 0.36
StringZ:bLund 0.56
StringFlav:probQQtoQ 0.078
StringFlav:ProbStoUD 0.2
StringFlav:probQQ1toQQ0join 0.0275,0.0275,0.0275,0.0275
MultiPartonInteractions:pT0Ref 2.15
BeamRemnants:remnantMode 1
BeamRemnants:saturation 5

# Correct decay lengths (wrong in PYTHIA8 decay table)
# Lb
5122:tau0 = 0.4390
# Xic0
4132:tau0 = 0.0455
# OmegaC
4332:tau0 = 0.0803

Loading