Skip to content

Commit 52725ba

Browse files
authored
Merge branch 'AliceO2Group:master' into etatune
2 parents 026ab76 + 262c869 commit 52725ba

File tree

50 files changed

+859
-116
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+859
-116
lines changed

MC/bin/o2_hybrid_gen.py

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
#!/usr/bin/env python3
2+
3+
# This script creates a template JSON file for the configuration of the hybrid generator
4+
# The generators to be used are passed as a list of strings via the --gen flag, while the
5+
# output filename is set using --output. All the generators available in O2sim are supported.
6+
# Example:
7+
# $O2DPG_ROOT/MC/bin/o2_hybrid_gen.py --gen pythia8 boxgen external extkinO2 hepmc pythia8hf \
8+
# --output config.json
9+
10+
import argparse
11+
import json
12+
13+
def main():
14+
parser = argparse.ArgumentParser(description='Create a JSON file from command line flags.')
15+
parser.add_argument('--gen', type=str, nargs='+', required=True, help='List of generators to be used')
16+
parser.add_argument('--output', type=str, required=True, help='Output JSON file path')
17+
18+
args = parser.parse_args()
19+
20+
# put in a list all the elementes in the gen flag
21+
noConfGen = ["pythia8pp", "pythia8hf", "pythia8hi", "pythia8powheg"]
22+
gens = []
23+
for gen in args.gen:
24+
if gen == "pythia8":
25+
gens.append({
26+
'name': 'pythia8',
27+
'config': {
28+
"config": "$O2_ROOT/share/Generators/egconfig/pythia8_inel.cfg",
29+
"hooksFileName": "",
30+
"hooksFuncName": "",
31+
"includePartonEvent": False,
32+
"particleFilter": "",
33+
"verbose": 0
34+
}
35+
})
36+
elif gen == "external":
37+
gens.append({
38+
'name': 'external',
39+
'config': {
40+
"fileName": "${O2DPG_ROOT}/MC/config/PWGDQ/external/generator/GeneratorParamPromptJpsiToElectronEvtGen_pp13TeV.C",
41+
"funcName": "GeneratorParamPromptJpsiToElectronEvtGen_pp13TeV()"
42+
}
43+
})
44+
elif gen == "extkinO2":
45+
gens.append({
46+
'name': 'extkinO2',
47+
'config': {
48+
"skipNonTrackable": True,
49+
"continueMode": False,
50+
"roundRobin": False,
51+
"randomize": False,
52+
"rngseed": 0,
53+
"randomphi": False,
54+
"fileName": "/path/to/filename.root"
55+
}
56+
})
57+
elif gen == "hepmc":
58+
gens.append({
59+
"name": "hepmc",
60+
"config": {
61+
"configcmd": {
62+
"fileNames": "",
63+
"cmd": ""
64+
},
65+
"confighepmc": {
66+
"version": 2,
67+
"eventsToSkip": 0,
68+
"fileName": "/path/to/filename.hepmc",
69+
"prune": False
70+
}
71+
}
72+
})
73+
elif gen == "boxgen":
74+
gens.append({
75+
"name": "boxgen",
76+
"config": {
77+
"pdg": 13,
78+
"number": 1,
79+
"eta": [
80+
-4,
81+
-2.5
82+
],
83+
"prange": [
84+
0.1,
85+
5
86+
],
87+
"phirange": [
88+
0,
89+
360
90+
]
91+
}
92+
})
93+
elif gen in noConfGen:
94+
gens.append({
95+
"name": gen,
96+
"config": ""
97+
})
98+
else:
99+
print(f"Generator {gen} not found in the list of available generators")
100+
exit(1)
101+
102+
# fill fractions with 1 for each generator
103+
fractions = [1] * len(gens)
104+
105+
# Put gens and fractions in the data dictionary
106+
data = {
107+
"generators": gens,
108+
"fractions": fractions
109+
}
110+
111+
# Write the data dictionary to a JSON file
112+
with open(args.output, 'w') as f:
113+
json.dump(data, f, indent=2)
114+
115+
print(f"JSON file created at {args.output}")
116+
117+
if __name__ == "__main__":
118+
main()
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Decay J/psi
2+
### from DECAY.DEC
3+
1.000 e+ e- PHOTOS VLL;
4+
Enddecay
5+
Decay psi(2S)
6+
1.000 J/psi pi+ pi- VVPIPI;
7+
Enddecay
8+
End
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Decay X_1(3872)
2+
#### Breit-Wigner function for the pion distribution (S-Wave approximation)
3+
1.000 J/psi pi+ pi- XJPSIRHO0PIPI_S;
4+
Enddecay
5+
Decay J/psi
6+
### from DECAY.DEC
7+
1.000 e+ e- PHOTOS VLL;
8+
Enddecay
9+
10+
End

MC/config/PWGDQ/external/generator/GeneratorPromptCharmonia.C

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,75 @@ class O2_GeneratorParamPsiPbPb5TeV : public GeneratorTGenerator
638638
GeneratorParam* paramPsi = nullptr;
639639
};
640640

641+
642+
class O2_GeneratorParamX3872MidY : public GeneratorTGenerator
643+
{
644+
645+
public:
646+
O2_GeneratorParamX3872MidY() : GeneratorTGenerator("ParamX3872MidY")
647+
{
648+
paramX3872 = new GeneratorParam(1, -1, PtX3872pp13TeV, YX3872pp13TeV, V2X3872pp13TeV, IpX3872pp13TeV);
649+
paramX3872->SetMomentumRange(0., 1.e6);
650+
paramX3872->SetPtRange(0., 1000.);
651+
paramX3872->SetYRange(-1.0, 1.0);
652+
paramX3872->SetPhiRange(0., 360.);
653+
paramX3872->SetDecayer(new TPythia6Decayer()); // Pythia
654+
paramX3872->SetForceDecay(kNoDecay); // particle left undecayed
655+
setTGenerator(paramX3872);
656+
};
657+
658+
~O2_GeneratorParamX3872MidY()
659+
{
660+
delete paramX3872;
661+
};
662+
663+
Bool_t Init() override
664+
{
665+
GeneratorTGenerator::Init();
666+
paramX3872->Init();
667+
return true;
668+
}
669+
670+
void SetNSignalPerEvent(Int_t nsig) { paramX3872->SetNumberParticles(nsig); }
671+
672+
//-------------------------------------------------------------------------//
673+
static Double_t PtX3872pp13TeV(const Double_t* px, const Double_t* /*dummy*/)
674+
{
675+
// prompt X3872 pT
676+
// pp, 13TeV (tuned LHCb pp 13 TeV)
677+
//
678+
const Double_t kC = 7.64519e+00 ;
679+
const Double_t kpt0 = 5.30628e+00;
680+
const Double_t kn = 3.30887e+00;
681+
Double_t pt = px[0];
682+
return kC * pt / TMath::Power((1. + (pt / kpt0) * (pt / kpt0)), kn);
683+
}
684+
685+
//-------------------------------------------------------------------------//
686+
static Double_t YX3872pp13TeV(const Double_t* py, const Double_t* /*dummy*/)
687+
{
688+
// flat rapidity distribution assumed at midrapidity
689+
return 1.;
690+
}
691+
692+
//-------------------------------------------------------------------------//
693+
static Double_t V2X3872pp13TeV(const Double_t* /*dummy*/, const Double_t* /*dummy*/)
694+
{
695+
// X3872 v2
696+
return 0.;
697+
}
698+
699+
//-------------------------------------------------------------------------//
700+
static Int_t IpX3872pp13TeV(TRandom*)
701+
{
702+
return 9920443;
703+
}
704+
705+
private:
706+
GeneratorParam* paramX3872 = nullptr;
707+
};
708+
709+
641710
} // namespace eventgen
642711
} // namespace o2
643712

@@ -741,6 +810,31 @@ FairGenerator* GeneratorCocktailPromptCharmoniaToMuonEvtGen_pp13TeV()
741810
return genCocktailEvtGen;
742811
}
743812

813+
814+
FairGenerator*
815+
GeneratorParamPromptPsiToJpsiPiPiEvtGen_pp13TeV(TString pdgs = "100443")
816+
{
817+
auto gen = new o2::eventgen::GeneratorEvtGen<o2::eventgen::O2_GeneratorParamPsiMidY>();
818+
gen->SetNSignalPerEvent(1); // number of jpsis per event
819+
820+
std::string spdg;
821+
TObjArray* obj = pdgs.Tokenize(";");
822+
gen->SetSizePdg(obj->GetEntriesFast());
823+
for (int i = 0; i < obj->GetEntriesFast(); i++) {
824+
spdg = obj->At(i)->GetName();
825+
gen->AddPdg(std::stoi(spdg), i);
826+
printf("PDG %d \n", std::stoi(spdg));
827+
}
828+
TString pathO2 = gSystem->ExpandPathName("$O2DPG_ROOT/MC/config/PWGDQ/EvtGen/DecayTablesEvtgen");
829+
gen->SetDecayTable(Form("%s/PSITOJPSIPIPI.DEC", pathO2.Data()));
830+
831+
// print debug
832+
gen->PrintDebug();
833+
834+
return gen;
835+
}
836+
837+
744838
FairGenerator*
745839
GeneratorParamPromptJpsiToMuonEvtGen_pp13TeV(TString pdgs = "443")
746840
{
@@ -844,6 +938,29 @@ FairGenerator*
844938
}
845939

846940

941+
FairGenerator*
942+
GeneratorParamX3872ToJpsiEvtGen_pp13TeV(TString pdgs = "9920443")
943+
{
944+
auto gen = new o2::eventgen::GeneratorEvtGen<o2::eventgen::O2_GeneratorParamX3872MidY>();
945+
gen->SetNSignalPerEvent(1); // number of jpsis per event
946+
947+
std::string spdg;
948+
TObjArray* obj = pdgs.Tokenize(";");
949+
gen->SetSizePdg(obj->GetEntriesFast());
950+
for (int i = 0; i < obj->GetEntriesFast(); i++) {
951+
spdg = obj->At(i)->GetName();
952+
gen->AddPdg(std::stoi(spdg), i);
953+
printf("PDG %d \n", std::stoi(spdg));
954+
}
955+
TString pathO2 = gSystem->ExpandPathName("$O2DPG_ROOT/MC/config/PWGDQ/EvtGen/DecayTablesEvtgen");
956+
gen->SetDecayTable(Form("%s/X3872TOJPSIPIPI.DEC", pathO2.Data()));
957+
958+
// print debug
959+
gen->PrintDebug();
960+
961+
return gen;
962+
}
963+
847964

848965

849966

MC/config/PWGDQ/external/generator/generator_pythia8_withInjectedPromptSignals_gaptriggered_dq.C

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,12 @@ public:
4545
case 7: // generate prompt charmonia cocktail at forward rapidity at 5TeV
4646
mGeneratorParam = (Generator*)GeneratorCocktailPromptCharmoniaToMuonEvtGen_PbPb5TeV();
4747
break;
48-
48+
case 8: // generate prompt X_1(3872) to Jpsi pi pi at midrapidity
49+
mGeneratorParam = (Generator*)GeneratorParamX3872ToJpsiEvtGen_pp13TeV("9920443");
50+
break;
51+
case 9: // generate prompt psi2S to Jpsi pi pi at midrapidity
52+
mGeneratorParam = (Generator*)GeneratorParamPromptPsiToJpsiPiPiEvtGen_pp13TeV("100443");
53+
break;
4954
}
5055
mGeneratorParam->Init();
5156
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
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,9)
5+
[GeneratorPythia8]
6+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/pythia8/generator/pythia8_inel_triggerGap.cfg
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
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,8)
5+
[GeneratorPythia8]
6+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/pythia8/generator/pythia8_inel_triggerGap.cfg

0 commit comments

Comments
 (0)