Skip to content

Commit d7a7eb5

Browse files
committed
add more process and inject signals based on cent
1 parent 44b3ab3 commit d7a7eb5

8 files changed

Lines changed: 173 additions & 52 deletions

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

Lines changed: 73 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,92 @@ o2::eventgen::GeneratorStarlight_class* makeStarlightGenerator(std::string confi
2020
generator->selectConfiguration(configuration);
2121
generator->setCollisionSystem(energyCM, beam1Z, beam1A, beam2Z, beam2A);
2222
generator->setExtraParams(extraParams);
23-
generator->setupDpmjet(dpmjetconf);
23+
// generator->setupDpmjet(dpmjetconf);
24+
return generator;
25+
}
26+
o2::eventgen::GeneratorEvtGen* makeStarlightToEvtGenGenerator(std::string configuration,
27+
float energyCM,
28+
int beam1Z,
29+
int beam1A,
30+
int beam2Z,
31+
int beam2A,
32+
std::string extraParams = "",
33+
std::string dpmjetconf = "")
34+
{
35+
auto generator = makeStarlightGenerator(configuration, energyCM, beam1Z, beam1A, beam2Z, beam2A, extraParams, dpmjetconf);
36+
generator->SetPolarization(1); //Transversal
37+
generator->SetSizePdg(2);
38+
generator->AddPdg(443,0);
39+
generator->AddPdg(100443,1);
40+
TString pathO2 = gSystem->ExpandPathName("$O2DPG_MC_CONFIG_ROOT/MC/config/PWGUD/external/generator/DecayTablesEvtGen");
41+
if (configuration.find("Psi2sToMuPi") != std::string::npos) generator->SetDecayTable(Form("%s/PSI2S.MUMUPIPI.DEC",pathO2.Data()));
42+
else if (configuration.find("Psi2sToElPi") != std::string::npos) generator->SetDecayTable(Form("%s/PSI2S.EEPIPI.DEC",pathO2.Data()));
43+
else if (configuration.find("JpsiToElRad") != std::string::npos) gen->SetDecayTable(Form("%s/JPSI.EE.DEC",pathO2.Data()));
2444
return generator;
2545
}
2646
} // namespace
2747

2848
FairGenerator* GeneratorCocktailStarlightMidy_PbPb5TeV(float energyCM = 5360, int beam1Z = 82, int beam1A = 208, int beam2Z = 82, int beam2A = 208, std::string extrapars = "",std::string dpmjetconf = "")
2949
{
3050
auto genCocktailEvtGen = new o2::eventgen::GeneratorEvtGen<GeneratorCocktail>();
31-
auto genCohJpsi = makeStarlightGenerator("kCohJpsiToElRad", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
51+
auto genCohJpsi = makeStarlightToEvtGenGenerator("kCohJpsiToElRad", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
3252
genCocktailEvtGen->AddGenerator(genCohJpsi, 1);
33-
auto genIncohJpsi = makeStarlightGenerator("kIncohJpsiToElRad", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
53+
auto genIncohJpsi = makeStarlightToEvtGenGenerator("kIncohJpsiToElRad", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
3454
genCocktailEvtGen->AddGenerator(genIncohJpsi, 1);
3555
auto genTwoGammaToEl = makeStarlightGenerator("kTwoGammaToElLow", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
3656
genCocktailEvtGen->AddGenerator(genTwoGammaToEl, 1);
37-
auto genCohPsi2S = makeStarlightGenerator("kCohPsi2sToElPi", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
57+
auto genCohPsi2S = makeStarlightToEvtGenGenerator("kCohPsi2sToElPi", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
3858
genCocktailEvtGen->AddGenerator(genCohPsi2S, 1);
39-
auto genIncohPsi2S = makeStarlightGenerator("kIncohPsi2sToElPi", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
59+
auto genIncohPsi2S = makeStarlightToEvtGenGenerator("kIncohPsi2sToElPi", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
60+
genCocktailEvtGen->AddGenerator(genIncohPsi2S, 1);
61+
62+
return genCocktailEvtGen;
63+
}
64+
65+
FairGenerator* GeneratorCocktailStarlightCoherentMidy_PbPb5TeV(float energyCM = 5360, int beam1Z = 82, int beam1A = 208, int beam2Z = 82, int beam2A = 208, std::string extrapars = "",std::string dpmjetconf = "")
66+
{
67+
auto genCocktailEvtGen = new o2::eventgen::GeneratorEvtGen<GeneratorCocktail>();
68+
auto genCohJpsi = makeStarlightToEvtGenGenerator("kCohJpsiToElRad", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
69+
genCocktailEvtGen->AddGenerator(genCohJpsi, 1);
70+
auto genTwoGammaToEl = makeStarlightGenerator("kTwoGammaToElLow", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
71+
genCocktailEvtGen->AddGenerator(genTwoGammaToEl, 1);
72+
auto genCohPsi2S = makeStarlightToEvtGenGenerator("kCohPsi2sToElPi", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
73+
genCocktailEvtGen->AddGenerator(genCohPsi2S, 1);
74+
75+
return genCocktailEvtGen;
76+
}
77+
78+
FairGenerator* GeneratorCocktailStarlightIncoherentMidy_PbPb5TeV(float energyCM = 5360, int beam1Z = 82, int beam1A = 208, int beam2Z = 82, int beam2A = 208, std::string extrapars = "",std::string dpmjetconf = "")
79+
{
80+
auto genCocktailEvtGen = new o2::eventgen::GeneratorEvtGen<GeneratorCocktail>();
81+
auto genIncohJpsi = makeStarlightToEvtGenGenerator("kIncohJpsiToElRad", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
82+
genCocktailEvtGen->AddGenerator(genIncohJpsi, 1);
83+
auto genIncohPsi2S = makeStarlightToEvtGenGenerator("kIncohPsi2sToElPi", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
84+
genCocktailEvtGen->AddGenerator(genIncohPsi2S, 1);
85+
86+
return genCocktailEvtGen;
87+
}
88+
89+
FairGenerator* GeneratorCocktailStarlightCoherentFwdy_PbPb5TeV(float energyCM = 5360, int beam1Z = 82, int beam1A = 208, int beam2Z = 82, int beam2A = 208, std::string extrapars = "",std::string dpmjetconf = "")
90+
{
91+
auto genCocktailEvtGen = new o2::eventgen::GeneratorEvtGen<GeneratorCocktail>();
92+
auto genCohJpsi = makeStarlightGenerator("kCohJpsiToMu", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
93+
genCocktailEvtGen->AddGenerator(genCohJpsi, 1);
94+
auto genTwoGammaToEl = makeStarlightGenerator("kTwoGammaToMuLow", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
95+
genCocktailEvtGen->AddGenerator(genTwoGammaToEl, 1);
96+
auto genCohPsi2S = makeStarlightToEvtGenGenerator("kCohPsi2sToMuPi", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
97+
genCocktailEvtGen->AddGenerator(genCohPsi2S, 1);
98+
99+
return genCocktailEvtGen;
100+
}
101+
102+
FairGenerator* GeneratorCocktailStarlightIncoherentFwdy_PbPb5TeV(float energyCM = 5360, int beam1Z = 82, int beam1A = 208, int beam2Z = 82, int beam2A = 208, std::string extrapars = "",std::string dpmjetconf = "")
103+
{
104+
auto genCocktailEvtGen = new o2::eventgen::GeneratorEvtGen<GeneratorCocktail>();
105+
auto genIncohJpsi = makeStarlightGenerator("kIncohJpsiToMu", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
106+
genCocktailEvtGen->AddGenerator(genIncohJpsi, 1);
107+
auto genIncohPsi2S = makeStarlightToEvtGenGenerator("kIncohPsi2sToMuPi", energyCM, beam1Z, beam1A, beam2Z, beam2A, extrapars, dpmjetconf);
40108
genCocktailEvtGen->AddGenerator(genIncohPsi2S, 1);
41109

42-
TString pdgs = "443;100443";
43-
std::string spdg;
44-
TObjArray* obj = pdgs.Tokenize(";");
45-
genCocktailEvtGen->SetSizePdg(obj->GetEntriesFast());
46-
for (int i = 0; i < obj->GetEntriesFast(); i++) {
47-
spdg = obj->At(i)->GetName();
48-
genCocktailEvtGen->AddPdg(std::stoi(spdg), i);
49-
printf("PDG %d \n", std::stoi(spdg));
50-
}
51-
genCocktailEvtGen->SetForceDecay(kEvtPsiPrimeJpsiDiElectron);
52110
return genCocktailEvtGen;
53111
}

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

Lines changed: 70 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
#include "FairGenerator.h"
22
#include "Generators/GeneratorPythia8.h"
3+
#include "Pythia8/HeavyIons.h"
34
#include "Pythia8/Pythia.h"
45
#include "TRandom.h"
56
#include "GeneratorCocktailStarlight_PbPb5TeV.C"
7+
#include <algorithm>
8+
#include <cmath>
69
#include <string>
10+
#include <vector>
711

812
using namespace o2::eventgen;
913
using namespace Pythia8;
@@ -24,10 +28,23 @@ public:
2428
GeneratorPythia8StarlightTriggeredWithGap(int inputTriggerRatio = 5, int gentype = 0) {
2529
mGeneratedEvents = 0;
2630
mInverseTriggerRatio = inputTriggerRatio;
31+
mNumSignals = 0;
2732
switch (gentype) {
28-
case 0: // generate prompt charmonia cocktail at mid rapidity at 5TeV
33+
case 0: // generate photoproduced charmonia cocktail at mid rapidity at 5TeV
2934
mGeneratorParam = (Generator*)GeneratorCocktailStarlightMidy_PbPb5TeV();
3035
break;
36+
case 1: // generate coherent charmonia cocktail at mid rapidity at 5TeV
37+
mGeneratorParam = (Generator*)GeneratorCocktailStarlightCoherentMidy_PbPb5TeV();
38+
break;
39+
case 2: // generate incoherent charmonia cocktail at mid rapidity at 5TeV
40+
mGeneratorParam = (Generator*)GeneratorCocktailStarlightIncoherentMidy_PbPb5TeV();
41+
break;
42+
case 3: // generate coherent charmonia cocktail at forward rapidity at 5TeV
43+
mGeneratorParam = (Generator*)GeneratorCocktailStarlightCoherentFwdy_PbPb5TeV();
44+
break;
45+
case 4: // generate incoherent charmonia cocktail at forward rapidity at 5TeV
46+
mGeneratorParam = (Generator*)GeneratorCocktailStarlightIncoherentFwdy_PbPb5TeV();
47+
break;
3148
}
3249
mGeneratorParam->Init();
3350

@@ -50,21 +67,22 @@ protected:
5067
Bool_t generateEvent() override
5168
{
5269
// GeneratorPythia8::generateEvent();
70+
mNumSignals = 0;
5371
bool genOk = false;
5472
if (mGeneratedEvents % mInverseTriggerRatio == 0){ // add injected prompt signals to the stack
55-
// bool found = false;
5673
std::cout<<"generating event with injected signals"<<std::endl;
5774
while (!genOk){
5875
genOk = GeneratorPythia8::generateEvent();
59-
bool found = false;
60-
while (!found) {
61-
mGeneratorParam->generateEvent();
62-
mGeneratorParam->importParticles();
63-
found = findSignalInAcceptance();
64-
mGeneratorParam->clearParticles();
65-
}
6676
}
67-
notifySubGenerator(1);
77+
double impactParameter = -1.;
78+
if (mPythia.info.hiInfo) {
79+
impactParameter = mPythia.info.hiInfo->b();
80+
mNumSignals = getNumSignalsForImpactParameter(impactParameter);
81+
} else {
82+
std::cout<<"no heavy-ion info available; embedding no signal events"<<std::endl;
83+
}
84+
std::cout<<"MB event impact parameter: "<<impactParameter<<", embedding "<<mNumSignals<<" signal events"<<std::endl;
85+
notifySubGenerator(mNumSignals > 0 ? 1 : 0);
6886
} else { // gap event
6987
while (!genOk) {
7088
genOk = GeneratorPythia8::generateEvent();
@@ -80,20 +98,24 @@ protected:
8098
{
8199
GeneratorPythia8::importParticles();
82100

83-
bool genOk = false;
84101
if ((mGeneratedEvents-1) % mInverseTriggerRatio == 0){ // add injected prompt signals to the stack
85-
mGeneratorParam->importParticles();
86-
int originalSize = mParticles.size();
87-
std::cout<<"adding "<<mGeneratorParam->getParticles().size()<<" particles to the stack"<<std::endl;
88-
for(int ipart=0; ipart < mGeneratorParam->getParticles().size(); ipart++){
89-
TParticle part = TParticle(mGeneratorParam->getParticles().at(ipart));
90-
if(part.GetFirstMother() >= 0) part.SetFirstMother(part.GetFirstMother() + originalSize);
91-
if(part.GetFirstDaughter() >= 0) part.SetFirstDaughter(part.GetFirstDaughter() + originalSize);
92-
if(part.GetLastDaughter() >= 0) part.SetLastDaughter(part.GetLastDaughter() + originalSize);
93-
mParticles.push_back(part);
94-
// encodeParticleStatusAndTracking method already called in GeneratorEvtGen.C
95-
}
96-
mGeneratorParam->clearParticles();
102+
for (int isig = 0; isig < mNumSignals; isig++) {
103+
bool found = false;
104+
while (!found) {
105+
if (!mGeneratorParam->generateEvent()) {
106+
continue;
107+
}
108+
if (!mGeneratorParam->importParticles()) {
109+
mGeneratorParam->clearParticles();
110+
continue;
111+
}
112+
found = findSignalInAcceptance();
113+
if (found) {
114+
appendCurrentSignalParticles(isig);
115+
}
116+
mGeneratorParam->clearParticles();
117+
}
118+
}
97119
}
98120

99121
return true;
@@ -117,24 +139,36 @@ protected:
117139
}
118140
}
119141
}
120-
// if (std::find(mSignalsPDGs.begin(), mSignalsPDGs.end(), part.GetPdgCode()) != mSignalsPDGs.end()) {
121-
// std::cout<<"found signal with pdg: "<<part.GetPdgCode()<<", mother: "<<part.GetFirstMother()<<std::endl;
122-
// if (part.GetFirstMother() == -1) {
123-
// std::cout<<"found signal with pdg: "<<part.GetPdgCode()<<", rapidity: "<<part.Y()<<std::endl;
124-
// if (part.Y() < mHadronRapidityMin || part.Y() > mHadronRapidityMax) {
125-
// return false;
126-
// }
127-
// }
128-
// }
129142
}
130143
std::cout<<"generated signal in acceptance"<<std::endl;
131144
return true;
132145
}
133146

147+
int getNumSignalsForImpactParameter(double impactParameter) const
148+
{
149+
return std::max(0, static_cast<int>(std::lround(5.0 + 0.886202881 * std::pow(std::max(0.0, 17.5 - impactParameter), 1.7))));
150+
}
151+
152+
void appendCurrentSignalParticles(int signalIndex)
153+
{
154+
int originalSize = mParticles.size();
155+
std::cout<<"adding "<<mGeneratorParam->getParticles().size()<<" particles from signal event "<<signalIndex<<" to the stack"<<std::endl;
156+
for(size_t ipart=0; ipart < mGeneratorParam->getParticles().size(); ipart++){
157+
TParticle part = TParticle(mGeneratorParam->getParticles().at(ipart));
158+
if(part.GetFirstMother() >= 0) part.SetFirstMother(part.GetFirstMother() + originalSize);
159+
if(part.GetSecondMother() >= 0) part.SetLastMother(part.GetSecondMother() + originalSize);
160+
if(part.GetFirstDaughter() >= 0) part.SetFirstDaughter(part.GetFirstDaughter() + originalSize);
161+
if(part.GetLastDaughter() >= 0) part.SetLastDaughter(part.GetLastDaughter() + originalSize);
162+
mParticles.push_back(part);
163+
// encodeParticleStatusAndTracking method already called in GeneratorEvtGen.C
164+
}
165+
}
166+
134167
private:
135-
Generator* mGeneratorParam;
136-
unsigned long long mGeneratedEvents;
137-
int mInverseTriggerRatio;
168+
Generator* mGeneratorParam = nullptr;
169+
unsigned long long mGeneratedEvents = 0;
170+
int mInverseTriggerRatio = 1;
171+
int mNumSignals = 0;
138172
// Pythia8::Pythia pythiaMBgen; // minimum bias event
139173
std::vector<int> mSignalsPDGs;
140174
double mHadronRapidityMin;
@@ -144,7 +178,7 @@ private:
144178
}
145179

146180
FairGenerator*
147-
GeneratorPhotoproduction_Midy(int triggerGap, int gentype = 0, double rapidityMin = -1.5, double rapidityMax = 1.5)
181+
GeneratorPhotoproduction(int triggerGap, int gentype = 0, double rapidityMin = -1.5, double rapidityMax = 1.5)
148182
{
149183
auto gen = new o2::eventgen::GeneratorPythia8StarlightTriggeredWithGap(triggerGap, gentype);
150184
gen->setRapidityRange(rapidityMin, rapidityMax);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[GeneratorExternal]
2+
fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/external/generator/generator_pythia8_StarlightTriggered_withGap.C
3+
funcName = GeneratorPhotoproduction(2, 3, 2.0, 4.5)
4+
[GeneratorPythia8]
5+
config = ${O2DPG_MC_CONFIG_ROOT}/MC/config/ALICE3/pythia8/generator/pythia8_pp_536tev.cfg
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[GeneratorExternal]
2+
fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/external/generator/generator_pythia8_StarlightTriggered_withGap.C
3+
funcName = GeneratorPhotoproduction(2, 1, -1.5, 1.5)
4+
[GeneratorPythia8]
5+
config = ${O2DPG_MC_CONFIG_ROOT}/MC/config/ALICE3/pythia8/generator/pythia8_pp_536tev.cfg
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[GeneratorExternal]
2+
fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/external/generator/generator_pythia8_StarlightTriggered_withGap.C
3+
funcName = GeneratorPhotoproduction(2, 4, 2.0, 4.5)
4+
[GeneratorPythia8]
5+
config = ${O2DPG_MC_CONFIG_ROOT}/MC/config/ALICE3/pythia8/generator/pythia8_pp_536tev.cfg
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[GeneratorExternal]
2+
fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/external/generator/generator_pythia8_StarlightTriggered_withGap.C
3+
funcName = GeneratorPhotoproduction(2, 2, -1.5, 1.5)
4+
[GeneratorPythia8]
5+
config = ${O2DPG_MC_CONFIG_ROOT}/MC/config/ALICE3/pythia8/generator/pythia8_pp_536tev.cfg
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[GeneratorExternal]
22
fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGDQ/external/generator/generator_pythia8_StarlightTriggered_withGap.C
3-
funcName = GeneratorPhotoproduction_Midy(2, 0, -1.5, 1.5)
3+
funcName = GeneratorPhotoproduction(2, 0, -1.5, 1.5)
44
[GeneratorPythia8]
55
config = ${O2DPG_MC_CONFIG_ROOT}/MC/config/ALICE3/pythia8/generator/pythia8_pp_536tev.cfg
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
### Force J/psi and psi(2S) -> e+ e-
2+
3+
### J/psi -> e+ e-
4+
443:onMode = off # switch off all decay channels
5+
443:onIfAll = 11 -11 # switch on e+ e- decay channel
6+
7+
### psi(2S) -> e+ e-
8+
100443:onMode = off # switch off all decay channels
9+
100443:onIfAll = 11 -11 # switch on e+ e- decay channel

0 commit comments

Comments
 (0)