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 LOG(info) <<
"** Generator to use: '" << genconfig <<
"'";
97 if (genconfig.compare(
"boxgen") == 0) {
100 LOG(info) <<
"Init generic box generator with following parameters";
101 LOG(info) << boxparam;
102 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);
103 primGen->AddGenerator(boxGen);
104 }
else if (genconfig.compare(
"fwmugen") == 0) {
106 LOG(info) <<
"Init box forward muons generator";
107 auto boxGen = makeBoxGen(13, 1, -4, -2.5, 50., 50., 0., 360);
108 primGen->AddGenerator(boxGen);
109 }
else if (genconfig.compare(
"hmpidgun") == 0) {
111 LOG(info) <<
"Init hmpid gun generator";
112 auto boxGen = makeBoxGen(-211, 100, -0.5, -0.5, 2, 5, -5, 60);
113 primGen->AddGenerator(boxGen);
114 }
else if (genconfig.compare(
"fwpigen") == 0) {
116 LOG(info) <<
"Init box forward pions generator";
117 auto boxGen = makeBoxGen(-211, 10, -4, -2.5, 7, 7, 0, 360);
118 primGen->AddGenerator(boxGen);
119 }
else if (genconfig.compare(
"fwrootino") == 0) {
121 LOG(info) <<
"Init box forward rootinos generator";
122 auto boxGen = makeBoxGen(0, 1, -4, -2.5, 1, 5, 0, 360);
123 primGen->AddGenerator(boxGen);
124 }
else if (genconfig.compare(
"zdcgen") == 0) {
126 LOG(info) <<
"Init box forward/backward zdc generator";
127 auto boxGenC = makeBoxGen(2112 , 1, -8, -9999, 500, 1000, 0., 360.);
128 auto boxGenA = makeBoxGen(2112 , 1, 8, 9999, 500, 1000, 0., 360.);
129 primGen->AddGenerator(boxGenC);
130 primGen->AddGenerator(boxGenA);
131 }
else if (genconfig.compare(
"emcgenele") == 0) {
133 LOG(info) <<
"Init box generator for electrons in EMCAL";
135 auto elecgen = makeBoxGen(11, 1, -0.67, 0.67, 15, 15, 80, 187);
136 primGen->AddGenerator(elecgen);
137 }
else if (genconfig.compare(
"emcgenphoton") == 0) {
138 LOG(info) <<
"Init box generator for photons in EMCAL";
139 auto photongen = makeBoxGen(22, 1, -0.67, 0.67, 15, 15, 80, 187);
140 primGen->AddGenerator(photongen);
141 }
else if (genconfig.compare(
"fddgen") == 0) {
142 LOG(info) <<
"Init box FDD generator";
143 auto boxGenFDC = makeBoxGen(13, 1000, -7, -4.8, 10, 500, 0, 360.);
144 auto boxGenFDA = makeBoxGen(13, 1000, 4.9, 6.3, 10, 500, 0., 360);
145 primGen->AddGenerator(boxGenFDA);
146 primGen->AddGenerator(boxGenFDC);
147 }
else if (genconfig.compare(
"extkin") == 0) {
153 primGen->AddGenerator(extGen);
154 LOG(info) <<
"using external kinematics";
155 }
else if (genconfig.compare(
"extkinO2") == 0) {
158 auto name1 = singleton.fileName;
162 .continueMode = singleton.continueMode,
163 .roundRobin = singleton.roundRobin,
164 .randomize = singleton.randomize,
165 .rngseed = singleton.rngseed,
166 .randomphi = singleton.randomphi,
167 .fileName = name1.size() > 0 ? name1.c_str() : name2.c_str()};
170 primGen->AddGenerator(extGen);
171 if (pars.continueMode) {
177 LOG(info) <<
"using external O2 kinematics";
178 }
else if (genconfig.compare(
"evtpool") == 0) {
183 primGen->AddGenerator(extGen);
184 LOG(info) <<
"using the eventpool generator";
185 }
else if (genconfig.compare(
"tparticle") == 0) {
190 LOG(info) <<
"Init 'GeneratorTParticle' with the following parameters";
194 tgen->setup(param0,
param, conf);
195 primGen->AddGenerator(tgen);
196#ifdef GENERATORS_WITH_HEPMC3
197 }
else if (genconfig.compare(
"hepmc") == 0) {
202 LOG(info) <<
"Init \'GeneratorHepMC\' with following parameters";
206 hepmcGen->setup(param0,
param, conf);
207 primGen->AddGenerator(hepmcGen);
209#ifdef GENERATORS_WITH_PYTHIA8
210 }
else if (genconfig.compare(
"alldets") == 0) {
215 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_inel.cfg";
216 auto py8 = makePythia8Gen(py8config);
217 primGen->AddGenerator(py8);
219 auto muon = makeBoxGen(13, 100, -2.5, -4.0, 100, 100, 0., 360);
220 primGen->AddGenerator(muon);
221 }
else if (genconfig.compare(
"pythia8") == 0) {
222 auto py8config = std::string();
223 auto py8 = makePythia8Gen(py8config);
224 primGen->AddGenerator(py8);
225 }
else if (genconfig.compare(
"pythia8pp") == 0) {
226 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_inel.cfg";
227 auto py8 = makePythia8Gen(py8config);
228 primGen->AddGenerator(py8);
229 }
else if (genconfig.compare(
"pythia8hf") == 0) {
232 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_hf.cfg";
233 auto py8 = makePythia8Gen(py8config);
234 primGen->AddGenerator(py8);
235 }
else if (genconfig.compare(
"pythia8hi") == 0) {
239 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_hi.cfg";
240 auto py8 = makePythia8Gen(py8config);
241 primGen->AddGenerator(py8);
242 }
else if (genconfig.compare(
"pythia8powheg") == 0) {
244 auto py8config = std::string(std::getenv(
"O2_ROOT")) +
"/share/Generators/egconfig/pythia8_powheg.cfg";
245 auto py8 = makePythia8Gen(py8config);
246 primGen->AddGenerator(py8);
248 }
else if (genconfig.compare(
"external") == 0 || genconfig.compare(
"extgen") == 0) {
251 LOG(info) <<
"Setting up external generator with following parameters";
253 auto extgen_filename =
params.fileName;
254 auto extgen_func =
params.funcName;
255 auto extgen = o2::conf::GetFromMacro<FairGenerator*>(extgen_filename, extgen_func,
"FairGenerator*",
"extgen");
257 LOG(fatal) <<
"Failed to retrieve \'extgen\': problem with configuration ";
259 primGen->AddGenerator(extgen);
260 }
else if (genconfig.compare(
"toftest") == 0) {
261 LOG(info) <<
"Init tof test generator -> 1 muon per sector and per module";
262 for (
int i = 0;
i < 18;
i++) {
263 for (
int j = 0;
j < 5;
j++) {
264 auto boxGen =
new FairBoxGenerator(13, 1);
265 boxGen->SetEtaRange(-0.8 + 0.32 *
j + 0.15, -0.8 + 0.32 *
j + 0.17);
266 boxGen->SetPRange(9, 10);
267 boxGen->SetPhiRange(10 + 20. *
i - 1, 10 + 20. *
i + 1);
268 boxGen->SetDebug(kTRUE);
269 primGen->AddGenerator(boxGen);
272#if defined(GENERATORS_WITH_PYTHIA8) && defined(GENERATORS_WITH_HEPMC3)
273 }
else if (genconfig.compare(
"hybrid") == 0) {
274 LOG(info) <<
"Init hybrid generator";
276 std::string config = hybridparam.configFile;
278 if (config.empty()) {
279 LOG(fatal) <<
"No configuration file provided for hybrid generator";
283 else if (gSystem->AccessPathName(config.c_str())) {
284 LOG(fatal) <<
"Configuration file for hybrid generator does not exist";
288 primGen->AddGenerator(hybrid);
291 LOG(fatal) <<
"Invalid generator";
300 if (!(genconfig.compare(
"hybrid") == 0)) {
302 if (trgconfig.empty()) {
304 }
else if (trgconfig.compare(
"particle") == 0) {
306 }
else if (trgconfig.compare(
"external") == 0) {
309 LOG(info) <<
"Setting up external trigger with following parameters";
311 auto external_trigger_filename =
params.fileName;
312 auto external_trigger_func =
params.funcName;
313 trigger = o2::conf::GetFromMacro<o2::eventgen::Trigger>(external_trigger_filename, external_trigger_func,
"o2::eventgen::Trigger",
"trigger");
315 LOG(info) <<
"Trying to retrieve a \'o2::eventgen::DeepTrigger\' type" << std::endl;
316 deeptrigger = o2::conf::GetFromMacro<o2::eventgen::DeepTrigger>(external_trigger_filename, external_trigger_func,
"o2::eventgen::DeepTrigger",
"deeptrigger");
318 if (!trigger && !deeptrigger) {
319 LOG(fatal) <<
"Failed to retrieve \'external trigger\': problem with configuration ";
322 LOG(fatal) <<
"Invalid trigger";
326 auto generators = primGen->GetListOfGenerators();
327 for (
int igen = 0; igen < generators->GetEntries(); ++igen) {
330 LOG(fatal) <<
"request to add a trigger to an unsupported generator";
335 generator->addTrigger(trigger);
338 generator->addDeepTrigger(deeptrigger);