Skip to content

Commit db78833

Browse files
Adding code to run pp ref simulations (#2053)
Co-authored-by: Lucamicheletti93 <luca.mike93@gmail.com>
1 parent bc937bf commit db78833

4 files changed

+205
-0
lines changed
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
// usage
2+
// o2-sim -j 4 -n 10 -g external -o sgn --configKeyValues "GeneratorExternal.fileName=GeneratorCocktailPromptCharmoniaToMuonEvtGen_pp5TeV.C;GeneratorExternal.funcName=GeneratorCocktailPromptCharmoniaToMuonEvtGen_pp5TeV()"
3+
//
4+
R__ADD_INCLUDE_PATH($O2DPG_MC_CONFIG_ROOT/MC/config/PWGDQ/EvtGen)
5+
R__ADD_INCLUDE_PATH($O2DPG_MC_CONFIG_ROOT/MC/config/PWGDQ/PromptQuarkonia)
6+
R__LOAD_LIBRARY(libpythia6)
7+
#include "GeneratorCocktail.C"
8+
#include "GeneratorEvtGen.C"
9+
10+
namespace o2
11+
{
12+
namespace eventgen
13+
{
14+
15+
class O2_GeneratorParamJpsi : public GeneratorTGenerator
16+
{
17+
18+
public:
19+
O2_GeneratorParamJpsi() : GeneratorTGenerator("ParamJpsi")
20+
{
21+
paramJpsi = new GeneratorParam(1, -1, PtJPsipp5TeV, YJPsipp5TeV, V2JPsipp5TeV, IpJPsipp5TeV);
22+
paramJpsi->SetMomentumRange(0., 1.e6);
23+
paramJpsi->SetPtRange(0, 999.);
24+
paramJpsi->SetYRange(-4.2, -2.3);
25+
paramJpsi->SetPhiRange(0., 360.);
26+
paramJpsi->SetDecayer(new TPythia6Decayer());
27+
paramJpsi->SetForceDecay(kNoDecay); // particle left undecayed
28+
// - - paramJpsi->SetTrackingFlag(1); // (from AliGenParam) -> check this
29+
setTGenerator(paramJpsi);
30+
};
31+
32+
~O2_GeneratorParamJpsi()
33+
{
34+
delete paramJpsi;
35+
};
36+
37+
Bool_t Init() override
38+
{
39+
GeneratorTGenerator::Init();
40+
paramJpsi->Init();
41+
return true;
42+
}
43+
44+
void SetNSignalPerEvent(Int_t nsig) { paramJpsi->SetNumberParticles(nsig); }
45+
46+
//-------------------------------------------------------------------------//
47+
static Double_t PtJPsipp5TeV(const Double_t* px, const Double_t* /*dummy*/)
48+
{
49+
// jpsi pT in pp at 5.02 TeV, tuned on https://www.hepdata.net/record/ins1935680
50+
Double_t x = *px;
51+
Float_t p0, p1, p2, p3;
52+
p0 = 1;
53+
p1 = 4.30923;
54+
p2 = 1.82061;
55+
p3 = 4.37563;
56+
return p0 * x / TMath::Power(1. + TMath::Power(x / p1, p2), p3);
57+
}
58+
59+
//-------------------------------------------------------------------------//
60+
static Double_t YJPsipp5TeV(const Double_t* py, const Double_t* /*dummy*/)
61+
{
62+
// jpsi y in pp at 5.02 TeV, tuned on https://www.hepdata.net/record/ins1935680
63+
Double_t y = *py;
64+
Float_t p0, p1, p2;
65+
p0 = 1;
66+
p1 = 0.0338222;
67+
p2 = 2.96748;
68+
return p0 * TMath::Exp(-(1. / 2.) * TMath::Power(((y - p1) / p2), 2));
69+
}
70+
71+
//-------------------------------------------------------------------------//
72+
static Double_t V2JPsipp5TeV(const Double_t* /*dummy*/, const Double_t* /*dummy*/)
73+
{
74+
// jpsi v2
75+
return 0.;
76+
}
77+
78+
//-------------------------------------------------------------------------//
79+
static Int_t IpJPsipp5TeV(TRandom*)
80+
{
81+
return 443;
82+
}
83+
84+
private:
85+
GeneratorParam* paramJpsi = nullptr;
86+
};
87+
88+
class O2_GeneratorParamPsi : public GeneratorTGenerator
89+
{
90+
91+
public:
92+
O2_GeneratorParamPsi() : GeneratorTGenerator("ParamPsi")
93+
{
94+
paramPsi = new GeneratorParam(1, -1, PtPsipp5TeV, YPsipp5TeV, V2Psipp5TeV, IpPsipp5TeV);
95+
paramPsi->SetMomentumRange(0., 1.e6);
96+
paramPsi->SetPtRange(0, 999.);
97+
paramPsi->SetYRange(-4.2, -2.3);
98+
paramPsi->SetPhiRange(0., 360.);
99+
paramPsi->SetDecayer(new TPythia6Decayer());
100+
paramPsi->SetForceDecay(kNoDecay); // particle left undecayed
101+
// - - paramJpsi->SetTrackingFlag(1); // check this
102+
setTGenerator(paramPsi);
103+
};
104+
105+
~O2_GeneratorParamPsi()
106+
{
107+
delete paramPsi;
108+
};
109+
110+
Bool_t Init() override
111+
{
112+
GeneratorTGenerator::Init();
113+
paramPsi->Init();
114+
return true;
115+
}
116+
117+
void SetNSignalPerEvent(Int_t nsig) { paramPsi->SetNumberParticles(nsig); }
118+
119+
//-------------------------------------------------------------------------//
120+
static Double_t PtPsipp5TeV(const Double_t* px, const Double_t* /*dummy*/)
121+
{
122+
// psi2s pT in pp at 5.02 TeV, tuned on https://www.hepdata.net/record/ins1935680
123+
Double_t x = *px;
124+
Float_t p0, p1, p2, p3;
125+
p0 = 1;
126+
p1 = 2.6444;
127+
p2 = 6.17572;
128+
p3 = 0.701753;
129+
return p0 * x / TMath::Power(1. + TMath::Power(x / p1, p2), p3);
130+
}
131+
132+
//-------------------------------------------------------------------------//
133+
static Double_t YPsipp5TeV(const Double_t* py, const Double_t* /*dummy*/)
134+
{
135+
// psi2s y in pp at 5.02 TeV, tuned on https://www.hepdata.net/record/ins1935680
136+
Double_t y = *py;
137+
Float_t p0, p1, p2;
138+
p0 = 1;
139+
p1 = -17.4857;
140+
p2 = 2.98887;
141+
return p0 * TMath::Exp(-(1. / 2.) * TMath::Power(((y - p1) / p2), 2));
142+
}
143+
144+
//-------------------------------------------------------------------------//
145+
static Double_t V2Psipp5TeV(const Double_t* /*dummy*/, const Double_t* /*dummy*/)
146+
{
147+
// jpsi v2
148+
return 0.;
149+
}
150+
151+
//-------------------------------------------------------------------------//
152+
static Int_t IpPsipp5TeV(TRandom*)
153+
{
154+
return 100443;
155+
}
156+
157+
private:
158+
GeneratorParam* paramPsi = nullptr;
159+
};
160+
161+
} // namespace eventgen
162+
} // namespace o2
163+
164+
FairGenerator* GeneratorCocktailPromptCharmoniaToMuonEvtGen_pp5TeV()
165+
{
166+
167+
auto genCocktailEvtGen = new o2::eventgen::GeneratorEvtGen<GeneratorCocktail>();
168+
169+
auto genJpsi = new o2::eventgen::O2_GeneratorParamJpsi;
170+
genJpsi->SetNSignalPerEvent(4); // 4 J/psi generated per event by GeneratorParam
171+
auto genPsi = new o2::eventgen::O2_GeneratorParamPsi;
172+
genPsi->SetNSignalPerEvent(2); // 2 Psi(2S) generated per event by GeneratorParam
173+
genCocktailEvtGen->AddGenerator(genJpsi, 1); // 2/3 J/psi
174+
genCocktailEvtGen->AddGenerator(genPsi, 1); // 1/3 Psi(2S)
175+
176+
TString pdgs = "443;100443";
177+
std::string spdg;
178+
TObjArray* obj = pdgs.Tokenize(";");
179+
genCocktailEvtGen->SetSizePdg(obj->GetEntriesFast());
180+
for (int i = 0; i < obj->GetEntriesFast(); i++) {
181+
spdg = obj->At(i)->GetName();
182+
genCocktailEvtGen->AddPdg(std::stoi(spdg), i);
183+
printf("PDG %d \n", std::stoi(spdg));
184+
}
185+
genCocktailEvtGen->SetForceDecay(kEvtDiMuon);
186+
187+
return genCocktailEvtGen;
188+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ public:
5353
break;
5454
case 10: // generate cocktail of prompt X_1(3872) and psi2S to Jpsi pi pi at midrapidity
5555
mGeneratorParam = (Generator*)GeneratorCocktailX3872AndPsi2StoJpsi_pp13TeV();
56+
break;
57+
case 11: // generate cocktail of prompt X_1(3872) and psi2S to Jpsi pi pi at midrapidity
58+
mGeneratorParam = (Generator*)GeneratorCocktailPromptCharmoniaToMuonEvtGen_pp5TeV();
5659
break;
5760
}
5861
mGeneratorParam->Init();
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_pp5TeV.cfg
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_pythia8Onia_PromptSignals_gaptriggered.C
4+
funcName=GeneratorPromptJpsiPsi2S_EvtGenFwdY(5,-4.3,-2.3)
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/pythia8/generator/pythia8_onia_triggerGap_pp5TeV.cfg

0 commit comments

Comments
 (0)