57 LOG(warning) <<
"No primary generator instance; Cannot setup";
63 auto makeBoxGen = [](
int pdgid,
int mult,
double etamin,
double etamax,
double pmin,
double pmax,
double phimin,
double phimax,
bool debug =
false) {
64 auto gen =
new FairBoxGenerator(pdgid, mult);
65 gen->SetEtaRange(etamin, etamax);
66 gen->SetPRange(pmin, pmax);
67 gen->SetPhiRange(phimin, phimax);
72#ifdef GENERATORS_WITH_PYTHIA8
73 auto makePythia8Gen = [](std::string& config) {
76 .
config = config.size() > 0 ? config : singleton.config,
77 .hooksFileName = singleton.hooksFileName,
78 .hooksFuncName = singleton.hooksFuncName,
79 .includePartonEvent = singleton.includePartonEvent,
80 .particleFilter = singleton.particleFilter,
81 .verbose = singleton.verbose,
84 if (!config.empty()) {
85 LOG(info) <<
"Setting \'Pythia8\' base configuration: " << config << std::endl;
86 gen->setConfig(config);
96#if defined(GENERATORS_WITH_PYTHIA8) && defined(GENERATORS_WITH_HEPMC3)
98 LOG(info) <<
"Switching external generator to hybrid mode";
102 LOG(info) <<
"** Generator to use: '" << genconfig <<
"'";
103 if (genconfig.compare(
"boxgen") == 0) {
106 LOG(info) <<
"Init generic box generator with following parameters";
107 LOG(info) << boxparam;
108 auto boxGen = makeBoxGen(boxparam.pdg, boxparam.number, boxparam.eta[0], boxparam.eta[1], boxparam.prange[0], boxparam.prange[1], boxparam.phirange[0], boxparam.phirange[1], boxparam.debug);
109 primGen->AddGenerator(boxGen);
110 }
else if (genconfig.compare(
"fwmugen") == 0) {
112 LOG(info) <<
"Init box forward muons generator";
113 auto boxGen = makeBoxGen(13, 1, -4, -2.5, 50., 50., 0., 360);
114 primGen->AddGenerator(boxGen);
115 }
else if (genconfig.compare(
"hmpidgun") == 0) {
117 LOG(info) <<
"Init hmpid gun generator";
118 auto boxGen = makeBoxGen(-211, 100, -0.5, -0.5, 2, 5, -5, 60);
119 primGen->AddGenerator(boxGen);
120 }
else if (genconfig.compare(
"fwpigen") == 0) {
122 LOG(info) <<
"Init box forward pions generator";
123 auto boxGen = makeBoxGen(-211, 10, -4, -2.5, 7, 7, 0, 360);
124 primGen->AddGenerator(boxGen);
125 }
else if (genconfig.compare(
"fwrootino") == 0) {
127 LOG(info) <<
"Init box forward rootinos generator";
128 auto boxGen = makeBoxGen(0, 1, -4, -2.5, 1, 5, 0, 360);
129 primGen->AddGenerator(boxGen);
130 }
else if (genconfig.compare(
"zdcgen") == 0) {
132 LOG(info) <<
"Init box forward/backward zdc generator";
133 auto boxGenC = makeBoxGen(2112 , 1, -8, -9999, 500, 1000, 0., 360.);
134 auto boxGenA = makeBoxGen(2112 , 1, 8, 9999, 500, 1000, 0., 360.);
135 primGen->AddGenerator(boxGenC);
136 primGen->AddGenerator(boxGenA);
137 }
else if (genconfig.compare(
"emcgenele") == 0) {
139 LOG(info) <<
"Init box generator for electrons in EMCAL";
141 auto elecgen = makeBoxGen(11, 1, -0.67, 0.67, 15, 15, 80, 187);
142 primGen->AddGenerator(elecgen);
143 }
else if (genconfig.compare(
"emcgenphoton") == 0) {
144 LOG(info) <<
"Init box generator for photons in EMCAL";
145 auto photongen = makeBoxGen(22, 1, -0.67, 0.67, 15, 15, 80, 187);
146 primGen->AddGenerator(photongen);
147 }
else if (genconfig.compare(
"fddgen") == 0) {
148 LOG(info) <<
"Init box FDD generator";
149 auto boxGenFDC = makeBoxGen(13, 1000, -7, -4.8, 10, 500, 0, 360.);
150 auto boxGenFDA = makeBoxGen(13, 1000, 4.9, 6.3, 10, 500, 0., 360);
151 primGen->AddGenerator(boxGenFDA);
152 primGen->AddGenerator(boxGenFDC);
153 }
else if (genconfig.compare(
"extkin") == 0) {
159 primGen->AddGenerator(extGen);
160 LOG(info) <<
"using external kinematics";
161 }
else if (genconfig.compare(
"extkinO2") == 0) {
164 auto name1 = singleton.fileName;
168 .continueMode = singleton.continueMode,
169 .roundRobin = singleton.roundRobin,
170 .randomize = singleton.randomize,
171 .rngseed = singleton.rngseed,
172 .randomphi = singleton.randomphi,
173 .fileName = name1.size() > 0 ? name1.c_str() : name2.c_str()};
176 primGen->AddGenerator(extGen);
177 if (pars.continueMode) {
183 LOG(info) <<
"using external O2 kinematics";
184 }
else if (genconfig.compare(
"evtpool") == 0) {
189 primGen->AddGenerator(extGen);
190 LOG(info) <<
"using the eventpool generator";
191 }
else if (genconfig.compare(
"tparticle") == 0) {
196 LOG(info) <<
"Init 'GeneratorTParticle' with the following parameters";
200 tgen->setup(param0,
param, conf);
201 primGen->AddGenerator(tgen);
202#ifdef GENERATORS_WITH_HEPMC3
203 }
else if (genconfig.compare(
"hepmc") == 0) {
208 LOG(info) <<
"Init \'GeneratorHepMC\' with following parameters";
212 hepmcGen->setup(param0,
param, conf);
213 primGen->AddGenerator(hepmcGen);
215#ifdef GENERATORS_WITH_PYTHIA8
216 }
else if (genconfig.compare(
"alldets") == 0) {
221 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_inel.cfg";
222 auto py8 = makePythia8Gen(py8config);
223 primGen->AddGenerator(py8);
225 auto muon = makeBoxGen(13, 100, -2.5, -4.0, 100, 100, 0., 360);
226 primGen->AddGenerator(muon);
227 }
else if (genconfig.compare(
"pythia8") == 0) {
228 auto py8config = std::string();
229 auto py8 = makePythia8Gen(py8config);
230 primGen->AddGenerator(py8);
231 }
else if (genconfig.compare(
"pythia8pp") == 0) {
232 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_inel.cfg";
233 auto py8 = makePythia8Gen(py8config);
234 primGen->AddGenerator(py8);
235 }
else if (genconfig.compare(
"pythia8hf") == 0) {
238 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_hf.cfg";
239 auto py8 = makePythia8Gen(py8config);
240 primGen->AddGenerator(py8);
241 }
else if (genconfig.compare(
"pythia8hi") == 0) {
245 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_hi.cfg";
246 auto py8 = makePythia8Gen(py8config);
247 primGen->AddGenerator(py8);
248 }
else if (genconfig.compare(
"pythia8powheg") == 0) {
250 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_powheg.cfg";
251 auto py8 = makePythia8Gen(py8config);
252 primGen->AddGenerator(py8);
254 }
else if (genconfig.compare(
"external") == 0 || genconfig.compare(
"extgen") == 0) {
257 LOG(info) <<
"Setting up external generator with following parameters";
259 auto extgen_filename =
params.fileName;
260 auto extgen_func =
params.funcName;
261 auto extgen = o2::conf::GetFromMacro<FairGenerator*>(extgen_filename, extgen_func,
"FairGenerator*",
"extgen");
263 LOG(fatal) <<
"Failed to retrieve \'extgen\': problem with configuration ";
265 primGen->AddGenerator(extgen);
266 }
else if (genconfig.compare(
"toftest") == 0) {
267 LOG(info) <<
"Init tof test generator -> 1 muon per sector and per module";
268 for (
int i = 0;
i < 18;
i++) {
269 for (
int j = 0;
j < 5;
j++) {
270 auto boxGen =
new FairBoxGenerator(13, 1);
271 boxGen->SetEtaRange(-0.8 + 0.32 *
j + 0.15, -0.8 + 0.32 *
j + 0.17);
272 boxGen->SetPRange(9, 10);
273 boxGen->SetPhiRange(10 + 20. *
i - 1, 10 + 20. *
i + 1);
274 boxGen->SetDebug(kTRUE);
275 primGen->AddGenerator(boxGen);
278#if defined(GENERATORS_WITH_PYTHIA8) && defined(GENERATORS_WITH_HEPMC3)
279 }
else if (genconfig.compare(
"hybrid") == 0) {
280 LOG(info) <<
"Init hybrid generator";
282 std::string config = hybridparam.configFile;
284 if (config.empty()) {
285 LOG(fatal) <<
"No configuration file provided for hybrid generator";
289 primGen->AddGenerator(&hybrid);
292 LOG(fatal) <<
"Invalid generator";
301 if (!(genconfig.compare(
"hybrid") == 0)) {
303 if (trgconfig.empty()) {
305 }
else if (trgconfig.compare(
"particle") == 0) {
307 }
else if (trgconfig.compare(
"external") == 0) {
310 LOG(info) <<
"Setting up external trigger with following parameters";
312 auto external_trigger_filename =
params.fileName;
313 auto external_trigger_func =
params.funcName;
314 trigger = o2::conf::GetFromMacro<o2::eventgen::Trigger>(external_trigger_filename, external_trigger_func,
"o2::eventgen::Trigger",
"trigger");
316 LOG(info) <<
"Trying to retrieve a \'o2::eventgen::DeepTrigger\' type" << std::endl;
317 deeptrigger = o2::conf::GetFromMacro<o2::eventgen::DeepTrigger>(external_trigger_filename, external_trigger_func,
"o2::eventgen::DeepTrigger",
"deeptrigger");
319 if (!trigger && !deeptrigger) {
320 LOG(fatal) <<
"Failed to retrieve \'external trigger\': problem with configuration ";
323 LOG(fatal) <<
"Invalid trigger";
327 auto generators = primGen->GetListOfGenerators();
328 for (
int igen = 0; igen < generators->GetEntries(); ++igen) {
331 LOG(fatal) <<
"request to add a trigger to an unsupported generator";
336 generator->addTrigger(trigger);
339 generator->addDeepTrigger(deeptrigger);