111 LOG(warning) <<
"No primary generator instance; Cannot setup";
117 auto makeBoxGen = [](
int pdgid,
int mult,
double etamin,
double etamax,
double pmin,
double pmax,
double phimin,
double phimax) {
121#ifdef GENERATORS_WITH_PYTHIA8
122 auto makePythia8Gen = [](std::string& config) {
125 .
config = config.size() > 0 ? config : singleton.config,
126 .hooksFileName = singleton.hooksFileName,
127 .hooksFuncName = singleton.hooksFuncName,
128 .includePartonEvent = singleton.includePartonEvent,
129 .particleFilter = singleton.particleFilter,
130 .verbose = singleton.verbose,
133 if (!config.empty()) {
134 LOG(info) <<
"Setting \'Pythia8\' base configuration: " << config << std::endl;
135 gen->setConfig(config);
145#if defined(GENERATORS_WITH_PYTHIA8) && defined(GENERATORS_WITH_HEPMC3)
146 std::string hyperloopExtHybridConfigFile;
147 if (genconfig.compare(
"external") == 0 || genconfig.compare(
"extgen") == 0) {
149 LOG(info) <<
"Switching external generator to hybrid mode";
150 genconfig =
"hybrid";
155 LOG(info) <<
"IS_HYPERLOOP detected: expanding external generator into "
158 genconfig =
"hybrid";
162 LOG(info) <<
"** Generator to use: '" << genconfig <<
"'";
163 if (genconfig.compare(
"boxgen") == 0) {
166 LOG(info) <<
"Init generic box generator with following parameters";
167 LOG(info) << boxparam;
168 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]);
169 primGen->AddGenerator(boxGen);
170 }
else if (genconfig.compare(
"fwmugen") == 0) {
172 LOG(info) <<
"Init box forward muons generator";
173 auto boxGen = makeBoxGen(13, 1, -4, -2.5, 50., 50., 0., 360);
174 primGen->AddGenerator(boxGen);
175 }
else if (genconfig.compare(
"hmpidgun") == 0) {
177 LOG(info) <<
"Init hmpid gun generator";
178 auto boxGen = makeBoxGen(-211, 100, -0.5, -0.5, 2, 5, -5, 60);
179 primGen->AddGenerator(boxGen);
180 }
else if (genconfig.compare(
"fwpigen") == 0) {
182 LOG(info) <<
"Init box forward pions generator";
183 auto boxGen = makeBoxGen(-211, 10, -4, -2.5, 7, 7, 0, 360);
184 primGen->AddGenerator(boxGen);
185 }
else if (genconfig.compare(
"fwrootino") == 0) {
187 LOG(info) <<
"Init box forward rootinos generator";
188 auto boxGen = makeBoxGen(0, 1, -4, -2.5, 1, 5, 0, 360);
189 primGen->AddGenerator(boxGen);
190 }
else if (genconfig.compare(
"zdcgen") == 0) {
192 LOG(info) <<
"Init box forward/backward zdc generator";
193 auto boxGenC = makeBoxGen(2112 , 1, -8, -9999, 500, 1000, 0., 360.);
194 auto boxGenA = makeBoxGen(2112 , 1, 8, 9999, 500, 1000, 0., 360.);
195 primGen->AddGenerator(boxGenC);
196 primGen->AddGenerator(boxGenA);
197 }
else if (genconfig.compare(
"emcgenele") == 0) {
199 LOG(info) <<
"Init box generator for electrons in EMCAL";
201 auto elecgen = makeBoxGen(11, 1, -0.67, 0.67, 15, 15, 80, 187);
202 primGen->AddGenerator(elecgen);
203 }
else if (genconfig.compare(
"emcgenphoton") == 0) {
204 LOG(info) <<
"Init box generator for photons in EMCAL";
205 auto photongen = makeBoxGen(22, 1, -0.67, 0.67, 15, 15, 80, 187);
206 primGen->AddGenerator(photongen);
207 }
else if (genconfig.compare(
"fddgen") == 0) {
208 LOG(info) <<
"Init box FDD generator";
209 auto boxGenFDC = makeBoxGen(13, 1000, -7, -4.8, 10, 500, 0, 360.);
210 auto boxGenFDA = makeBoxGen(13, 1000, 4.9, 6.3, 10, 500, 0., 360);
211 primGen->AddGenerator(boxGenFDA);
212 primGen->AddGenerator(boxGenFDC);
213 }
else if (genconfig.compare(
"extkin") == 0) {
219 primGen->AddGenerator(extGen);
220 LOG(info) <<
"using external kinematics";
221 }
else if (genconfig.compare(
"extkinO2") == 0) {
224 auto name1 = singleton.fileName;
228 .continueMode = singleton.continueMode,
229 .roundRobin = singleton.roundRobin,
230 .randomize = singleton.randomize,
231 .rngseed = singleton.rngseed,
232 .randomphi = singleton.randomphi,
233 .fileName = name1.size() > 0 ? name1.c_str() : name2.c_str()};
236 primGen->AddGenerator(extGen);
237 if (pars.continueMode) {
243 LOG(info) <<
"using external O2 kinematics";
244 }
else if (genconfig.compare(
"evtpool") == 0) {
249 primGen->AddGenerator(extGen);
250 LOG(info) <<
"using the eventpool generator";
251 }
else if (genconfig.compare(
"tparticle") == 0) {
256 LOG(info) <<
"Init 'GeneratorTParticle' with the following parameters";
260 tgen->setup(param0,
param, conf);
261 primGen->AddGenerator(tgen);
262#ifdef GENERATORS_WITH_HEPMC3
263 }
else if (genconfig.compare(
"hepmc") == 0) {
268 LOG(info) <<
"Init \'GeneratorHepMC\' with following parameters";
272 hepmcGen->setup(param0,
param, conf);
273 primGen->AddGenerator(hepmcGen);
275#ifdef GENERATORS_WITH_PYTHIA8
276 }
else if (genconfig.compare(
"alldets") == 0) {
281 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_inel.cfg";
282 auto py8 = makePythia8Gen(py8config);
283 primGen->AddGenerator(py8);
285 auto muon = makeBoxGen(13, 100, -2.5, -4.0, 100, 100, 0., 360);
286 primGen->AddGenerator(muon);
287 }
else if (genconfig.compare(
"pythia8") == 0) {
288 auto py8config = std::string();
289 auto py8 = makePythia8Gen(py8config);
290 primGen->AddGenerator(py8);
291 }
else if (genconfig.compare(
"pythia8pp") == 0) {
292 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_inel.cfg";
293 auto py8 = makePythia8Gen(py8config);
294 primGen->AddGenerator(py8);
295 }
else if (genconfig.compare(
"pythia8hf") == 0) {
298 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_hf.cfg";
299 auto py8 = makePythia8Gen(py8config);
300 primGen->AddGenerator(py8);
301 }
else if (genconfig.compare(
"pythia8hi") == 0) {
305 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_hi.cfg";
306 auto py8 = makePythia8Gen(py8config);
307 primGen->AddGenerator(py8);
308 }
else if (genconfig.compare(
"pythia8powheg") == 0) {
310 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_powheg.cfg";
311 auto py8 = makePythia8Gen(py8config);
312 primGen->AddGenerator(py8);
314 }
else if (genconfig.compare(
"external") == 0 || genconfig.compare(
"extgen") == 0) {
317 LOG(info) <<
"Setting up external generator with following parameters";
319 auto extgen_filename =
params.fileName;
320 auto extgen_func =
params.funcName;
321 auto extgen = o2::conf::GetFromMacro<FairGenerator*>(extgen_filename, extgen_func,
"FairGenerator*",
"extgen");
323 LOG(fatal) <<
"Failed to retrieve \'extgen\': problem with configuration ";
325 primGen->AddGenerator(extgen);
326 }
else if (genconfig.compare(
"toftest") == 0) {
327 LOG(info) <<
"Init tof test generator -> 1 muon per sector and per module";
328 for (
int i = 0;
i < 18;
i++) {
329 for (
int j = 0;
j < 5;
j++) {
330 auto boxGen = makeBoxGen(13 , 1, -0.8 + 0.32 *
j + 0.15, -0.8 + 0.32 *
j + 0.17, 9, 10, 10 + 20. *
i - 1, 10 + 20. *
i + 1);
331 primGen->AddGenerator(boxGen);
334#if defined(GENERATORS_WITH_PYTHIA8) && defined(GENERATORS_WITH_HEPMC3)
335 }
else if (genconfig.compare(
"hybrid") == 0) {
336 LOG(info) <<
"Init hybrid generator";
339 if (config.empty()) {
340 LOG(fatal) <<
"No configuration file provided for hybrid generator";
344 primGen->AddGenerator(&hybrid);
347 LOG(fatal) <<
"Invalid generator";
356 if (!(genconfig.compare(
"hybrid") == 0)) {
358 if (trgconfig.empty()) {
360 }
else if (trgconfig.compare(
"particle") == 0) {
362 }
else if (trgconfig.compare(
"external") == 0) {
365 LOG(info) <<
"Setting up external trigger with following parameters";
367 auto external_trigger_filename =
params.fileName;
368 auto external_trigger_func =
params.funcName;
369 trigger = o2::conf::GetFromMacro<o2::eventgen::Trigger>(external_trigger_filename, external_trigger_func,
"o2::eventgen::Trigger",
"trigger");
371 LOG(info) <<
"Trying to retrieve a \'o2::eventgen::DeepTrigger\' type" << std::endl;
372 deeptrigger = o2::conf::GetFromMacro<o2::eventgen::DeepTrigger>(external_trigger_filename, external_trigger_func,
"o2::eventgen::DeepTrigger",
"deeptrigger");
374 if (!trigger && !deeptrigger) {
375 LOG(fatal) <<
"Failed to retrieve \'external trigger\': problem with configuration ";
378 LOG(fatal) <<
"Invalid trigger";
382 auto generators = primGen->GetListOfGenerators();
383 for (
int igen = 0; igen < generators->GetEntries(); ++igen) {
386 LOG(fatal) <<
"request to add a trigger to an unsupported generator";
391 generator->addTrigger(trigger);
394 generator->addDeepTrigger(deeptrigger);