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) {
67#ifdef GENERATORS_WITH_PYTHIA8
68 auto makePythia8Gen = [](std::string& config) {
71 .
config = config.size() > 0 ? config : singleton.config,
72 .hooksFileName = singleton.hooksFileName,
73 .hooksFuncName = singleton.hooksFuncName,
74 .includePartonEvent = singleton.includePartonEvent,
75 .particleFilter = singleton.particleFilter,
76 .verbose = singleton.verbose,
79 if (!config.empty()) {
80 LOG(info) <<
"Setting \'Pythia8\' base configuration: " << config << std::endl;
81 gen->setConfig(config);
91#if defined(GENERATORS_WITH_PYTHIA8) && defined(GENERATORS_WITH_HEPMC3)
93 LOG(info) <<
"Switching external generator to hybrid mode";
97 LOG(info) <<
"** Generator to use: '" << genconfig <<
"'";
98 if (genconfig.compare(
"boxgen") == 0) {
101 LOG(info) <<
"Init generic box generator with following parameters";
102 LOG(info) << boxparam;
103 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]);
104 primGen->AddGenerator(boxGen);
105 }
else if (genconfig.compare(
"fwmugen") == 0) {
107 LOG(info) <<
"Init box forward muons generator";
108 auto boxGen = makeBoxGen(13, 1, -4, -2.5, 50., 50., 0., 360);
109 primGen->AddGenerator(boxGen);
110 }
else if (genconfig.compare(
"hmpidgun") == 0) {
112 LOG(info) <<
"Init hmpid gun generator";
113 auto boxGen = makeBoxGen(-211, 100, -0.5, -0.5, 2, 5, -5, 60);
114 primGen->AddGenerator(boxGen);
115 }
else if (genconfig.compare(
"fwpigen") == 0) {
117 LOG(info) <<
"Init box forward pions generator";
118 auto boxGen = makeBoxGen(-211, 10, -4, -2.5, 7, 7, 0, 360);
119 primGen->AddGenerator(boxGen);
120 }
else if (genconfig.compare(
"fwrootino") == 0) {
122 LOG(info) <<
"Init box forward rootinos generator";
123 auto boxGen = makeBoxGen(0, 1, -4, -2.5, 1, 5, 0, 360);
124 primGen->AddGenerator(boxGen);
125 }
else if (genconfig.compare(
"zdcgen") == 0) {
127 LOG(info) <<
"Init box forward/backward zdc generator";
128 auto boxGenC = makeBoxGen(2112 , 1, -8, -9999, 500, 1000, 0., 360.);
129 auto boxGenA = makeBoxGen(2112 , 1, 8, 9999, 500, 1000, 0., 360.);
130 primGen->AddGenerator(boxGenC);
131 primGen->AddGenerator(boxGenA);
132 }
else if (genconfig.compare(
"emcgenele") == 0) {
134 LOG(info) <<
"Init box generator for electrons in EMCAL";
136 auto elecgen = makeBoxGen(11, 1, -0.67, 0.67, 15, 15, 80, 187);
137 primGen->AddGenerator(elecgen);
138 }
else if (genconfig.compare(
"emcgenphoton") == 0) {
139 LOG(info) <<
"Init box generator for photons in EMCAL";
140 auto photongen = makeBoxGen(22, 1, -0.67, 0.67, 15, 15, 80, 187);
141 primGen->AddGenerator(photongen);
142 }
else if (genconfig.compare(
"fddgen") == 0) {
143 LOG(info) <<
"Init box FDD generator";
144 auto boxGenFDC = makeBoxGen(13, 1000, -7, -4.8, 10, 500, 0, 360.);
145 auto boxGenFDA = makeBoxGen(13, 1000, 4.9, 6.3, 10, 500, 0., 360);
146 primGen->AddGenerator(boxGenFDA);
147 primGen->AddGenerator(boxGenFDC);
148 }
else if (genconfig.compare(
"extkin") == 0) {
154 primGen->AddGenerator(extGen);
155 LOG(info) <<
"using external kinematics";
156 }
else if (genconfig.compare(
"extkinO2") == 0) {
159 auto name1 = singleton.fileName;
163 .continueMode = singleton.continueMode,
164 .roundRobin = singleton.roundRobin,
165 .randomize = singleton.randomize,
166 .rngseed = singleton.rngseed,
167 .randomphi = singleton.randomphi,
168 .fileName = name1.size() > 0 ? name1.c_str() : name2.c_str()};
171 primGen->AddGenerator(extGen);
172 if (pars.continueMode) {
178 LOG(info) <<
"using external O2 kinematics";
179 }
else if (genconfig.compare(
"evtpool") == 0) {
184 primGen->AddGenerator(extGen);
185 LOG(info) <<
"using the eventpool generator";
186 }
else if (genconfig.compare(
"tparticle") == 0) {
191 LOG(info) <<
"Init 'GeneratorTParticle' with the following parameters";
195 tgen->setup(param0,
param, conf);
196 primGen->AddGenerator(tgen);
197#ifdef GENERATORS_WITH_HEPMC3
198 }
else if (genconfig.compare(
"hepmc") == 0) {
203 LOG(info) <<
"Init \'GeneratorHepMC\' with following parameters";
207 hepmcGen->setup(param0,
param, conf);
208 primGen->AddGenerator(hepmcGen);
210#ifdef GENERATORS_WITH_PYTHIA8
211 }
else if (genconfig.compare(
"alldets") == 0) {
216 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_inel.cfg";
217 auto py8 = makePythia8Gen(py8config);
218 primGen->AddGenerator(py8);
220 auto muon = makeBoxGen(13, 100, -2.5, -4.0, 100, 100, 0., 360);
221 primGen->AddGenerator(muon);
222 }
else if (genconfig.compare(
"pythia8") == 0) {
223 auto py8config = std::string();
224 auto py8 = makePythia8Gen(py8config);
225 primGen->AddGenerator(py8);
226 }
else if (genconfig.compare(
"pythia8pp") == 0) {
227 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_inel.cfg";
228 auto py8 = makePythia8Gen(py8config);
229 primGen->AddGenerator(py8);
230 }
else if (genconfig.compare(
"pythia8hf") == 0) {
233 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_hf.cfg";
234 auto py8 = makePythia8Gen(py8config);
235 primGen->AddGenerator(py8);
236 }
else if (genconfig.compare(
"pythia8hi") == 0) {
240 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_hi.cfg";
241 auto py8 = makePythia8Gen(py8config);
242 primGen->AddGenerator(py8);
243 }
else if (genconfig.compare(
"pythia8powheg") == 0) {
245 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_powheg.cfg";
246 auto py8 = makePythia8Gen(py8config);
247 primGen->AddGenerator(py8);
249 }
else if (genconfig.compare(
"external") == 0 || genconfig.compare(
"extgen") == 0) {
252 LOG(info) <<
"Setting up external generator with following parameters";
254 auto extgen_filename =
params.fileName;
255 auto extgen_func =
params.funcName;
256 auto extgen = o2::conf::GetFromMacro<FairGenerator*>(extgen_filename, extgen_func,
"FairGenerator*",
"extgen");
258 LOG(fatal) <<
"Failed to retrieve \'extgen\': problem with configuration ";
260 primGen->AddGenerator(extgen);
261 }
else if (genconfig.compare(
"toftest") == 0) {
262 LOG(info) <<
"Init tof test generator -> 1 muon per sector and per module";
263 for (
int i = 0;
i < 18;
i++) {
264 for (
int j = 0;
j < 5;
j++) {
265 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);
266 primGen->AddGenerator(boxGen);
269#if defined(GENERATORS_WITH_PYTHIA8) && defined(GENERATORS_WITH_HEPMC3)
270 }
else if (genconfig.compare(
"hybrid") == 0) {
271 LOG(info) <<
"Init hybrid generator";
273 std::string config = hybridparam.configFile;
275 if (config.empty()) {
276 LOG(fatal) <<
"No configuration file provided for hybrid generator";
280 primGen->AddGenerator(&hybrid);
283 LOG(fatal) <<
"Invalid generator";
292 if (!(genconfig.compare(
"hybrid") == 0)) {
294 if (trgconfig.empty()) {
296 }
else if (trgconfig.compare(
"particle") == 0) {
298 }
else if (trgconfig.compare(
"external") == 0) {
301 LOG(info) <<
"Setting up external trigger with following parameters";
303 auto external_trigger_filename =
params.fileName;
304 auto external_trigger_func =
params.funcName;
305 trigger = o2::conf::GetFromMacro<o2::eventgen::Trigger>(external_trigger_filename, external_trigger_func,
"o2::eventgen::Trigger",
"trigger");
307 LOG(info) <<
"Trying to retrieve a \'o2::eventgen::DeepTrigger\' type" << std::endl;
308 deeptrigger = o2::conf::GetFromMacro<o2::eventgen::DeepTrigger>(external_trigger_filename, external_trigger_func,
"o2::eventgen::DeepTrigger",
"deeptrigger");
310 if (!trigger && !deeptrigger) {
311 LOG(fatal) <<
"Failed to retrieve \'external trigger\': problem with configuration ";
314 LOG(fatal) <<
"Invalid trigger";
318 auto generators = primGen->GetListOfGenerators();
319 for (
int igen = 0; igen < generators->GetEntries(); ++igen) {
322 LOG(fatal) <<
"request to add a trigger to an unsupported generator";
327 generator->addTrigger(trigger);
330 generator->addDeepTrigger(deeptrigger);