Skip to content

Commit e5532f5

Browse files
committed
Compilable version of fix, tests needed
1 parent 4f5e4fb commit e5532f5

File tree

2 files changed

+64
-61
lines changed

2 files changed

+64
-61
lines changed

Generators/include/Generators/GeneratorFactory.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ struct GeneratorFactory {
3434
static void setPrimaryGenerator(o2::conf::SimConfig const&, FairPrimaryGenerator*);
3535
};
3636

37+
template <typename T>
38+
std::vector<std::unique_ptr<T>> genptr;
39+
3740
} // end namespace eventgen
3841
} // end namespace o2
3942

Generators/src/GeneratorFactory.cxx

Lines changed: 61 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair
6161
auto primGenO2 = dynamic_cast<PrimaryGenerator*>(primGen);
6262

6363
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);
64+
auto gen = std::make_unique<FairBoxGenerator>(pdgid, mult);
6565
gen->SetEtaRange(etamin, etamax);
6666
gen->SetPRange(pmin, pmax);
6767
gen->SetPhiRange(phimin, phimax);
@@ -80,7 +80,7 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair
8080
.particleFilter = singleton.particleFilter,
8181
.verbose = singleton.verbose,
8282
};
83-
auto gen = new o2::eventgen::GeneratorPythia8(pars);
83+
auto gen = std::make_unique<o2::eventgen::GeneratorPythia8>(pars);
8484
if (!config.empty()) {
8585
LOG(info) << "Setting \'Pythia8\' base configuration: " << config << std::endl;
8686
gen->setConfig(config); // assign config; will be executed in Init function
@@ -99,58 +99,58 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair
9999
auto& boxparam = BoxGunParam::Instance();
100100
LOG(info) << "Init generic box generator with following parameters";
101101
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);
102+
genptr<FairBoxGenerator>.push_back(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(genptr<FairBoxGenerator>.back().get());
104104
} else if (genconfig.compare("fwmugen") == 0) {
105105
// a simple "box" generator for forward muons
106106
LOG(info) << "Init box forward muons generator";
107-
auto boxGen = makeBoxGen(13, 1, -4, -2.5, 50., 50., 0., 360);
108-
primGen->AddGenerator(boxGen);
107+
genptr<FairBoxGenerator>.push_back(makeBoxGen(13, 1, -4, -2.5, 50., 50., 0., 360));
108+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
109109
} else if (genconfig.compare("hmpidgun") == 0) {
110110
// a simple "box" generator for forward muons
111111
LOG(info) << "Init hmpid gun generator";
112-
auto boxGen = makeBoxGen(-211, 100, -0.5, -0.5, 2, 5, -5, 60);
113-
primGen->AddGenerator(boxGen);
112+
genptr<FairBoxGenerator>.push_back(makeBoxGen(-211, 100, -0.5, -0.5, 2, 5, -5, 60));
113+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
114114
} else if (genconfig.compare("fwpigen") == 0) {
115115
// a simple "box" generator for forward pions
116116
LOG(info) << "Init box forward pions generator";
117-
auto boxGen = makeBoxGen(-211, 10, -4, -2.5, 7, 7, 0, 360);
118-
primGen->AddGenerator(boxGen);
117+
genptr<FairBoxGenerator>.push_back(makeBoxGen(-211, 10, -4, -2.5, 7, 7, 0, 360));
118+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
119119
} else if (genconfig.compare("fwrootino") == 0) {
120120
// a simple "box" generator for forward rootinos
121121
LOG(info) << "Init box forward rootinos generator";
122-
auto boxGen = makeBoxGen(0, 1, -4, -2.5, 1, 5, 0, 360);
123-
primGen->AddGenerator(boxGen);
122+
genptr<FairBoxGenerator>.push_back(makeBoxGen(0, 1, -4, -2.5, 1, 5, 0, 360));
123+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
124124
} else if (genconfig.compare("zdcgen") == 0) {
125125
// a simple "box" generator for forward neutrons
126126
LOG(info) << "Init box forward/backward zdc generator";
127-
auto boxGenC = makeBoxGen(2112 /*neutrons*/, 1, -8, -9999, 500, 1000, 0., 360.);
128-
auto boxGenA = makeBoxGen(2112 /*neutrons*/, 1, 8, 9999, 500, 1000, 0., 360.);
129-
primGen->AddGenerator(boxGenC);
130-
primGen->AddGenerator(boxGenA);
127+
genptr<FairBoxGenerator>.push_back(makeBoxGen(2112 /*neutrons*/, 1, -8, -9999, 500, 1000, 0., 360.));
128+
genptr<FairBoxGenerator>.push_back(makeBoxGen(2112 /*neutrons*/, 1, 8, 9999, 500, 1000, 0., 360.));
129+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
130+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
131131
} else if (genconfig.compare("emcgenele") == 0) {
132132
// box generator with one electron per event
133133
LOG(info) << "Init box generator for electrons in EMCAL";
134134
// using phi range of emcal
135-
auto elecgen = makeBoxGen(11, 1, -0.67, 0.67, 15, 15, 80, 187);
136-
primGen->AddGenerator(elecgen);
135+
genptr<FairBoxGenerator>.push_back(makeBoxGen(11, 1, -0.67, 0.67, 15, 15, 80, 187));
136+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
137137
} else if (genconfig.compare("emcgenphoton") == 0) {
138138
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);
139+
genptr<FairBoxGenerator>.push_back(makeBoxGen(22, 1, -0.67, 0.67, 15, 15, 80, 187));
140+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
141141
} else if (genconfig.compare("fddgen") == 0) {
142142
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);
143+
genptr<FairBoxGenerator>.push_back(makeBoxGen(13, 1000, -7, -4.8, 10, 500, 0, 360.));
144+
genptr<FairBoxGenerator>.push_back(makeBoxGen(13, 1000, 4.9, 6.3, 10, 500, 0., 360));
145+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
146+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
147147
} else if (genconfig.compare("extkin") == 0) {
148148
// external kinematics
149149
// needs precense of a kinematics file "Kinematics.root"
150150
// TODO: make this configurable and check for presence
151-
auto extGen = new o2::eventgen::GeneratorFromFile(conf.getExtKinematicsFileName().c_str());
152-
extGen->SetStartEvent(conf.getStartEvent());
153-
primGen->AddGenerator(extGen);
151+
genptr<o2::eventgen::GeneratorFromFile>.push_back(std::make_unique<o2::eventgen::GeneratorFromFile>(conf.getExtKinematicsFileName().c_str()));
152+
genptr<o2::eventgen::GeneratorFromFile>.back()->SetStartEvent(conf.getStartEvent());
153+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorFromFile>.back().get());
154154
LOG(info) << "using external kinematics";
155155
} else if (genconfig.compare("extkinO2") == 0) {
156156
// external kinematics from previous O2 output
@@ -165,9 +165,9 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair
165165
.rngseed = singleton.rngseed,
166166
.randomphi = singleton.randomphi,
167167
.fileName = name1.size() > 0 ? name1.c_str() : name2.c_str()};
168-
auto extGen = new o2::eventgen::GeneratorFromO2Kine(pars);
169-
extGen->SetStartEvent(conf.getStartEvent());
170-
primGen->AddGenerator(extGen);
168+
genptr<o2::eventgen::GeneratorFromO2Kine>.push_back(std::make_unique<o2::eventgen::GeneratorFromO2Kine>(pars));
169+
genptr<o2::eventgen::GeneratorFromO2Kine>.back()->SetStartEvent(conf.getStartEvent());
170+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorFromO2Kine>.back().get());
171171
if (pars.continueMode) {
172172
auto o2PrimGen = dynamic_cast<o2::eventgen::PrimaryGenerator*>(primGen);
173173
if (o2PrimGen) {
@@ -183,9 +183,9 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair
183183
LOG(info) << "Init 'GeneratorTParticle' with the following parameters";
184184
LOG(info) << param0;
185185
LOG(info) << param;
186-
auto tgen = new o2::eventgen::GeneratorTParticle();
187-
tgen->setup(param0, param, conf);
188-
primGen->AddGenerator(tgen);
186+
genptr<o2::eventgen::GeneratorTParticle>.push_back(std::make_unique<o2::eventgen::GeneratorTParticle>());
187+
genptr<o2::eventgen::GeneratorTParticle>.back()->setup(param0, param, conf);
188+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorTParticle>.back().get());
189189
#ifdef GENERATORS_WITH_HEPMC3
190190
} else if (genconfig.compare("hepmc") == 0) {
191191
// external HepMC file, or external program writing HepMC event
@@ -195,9 +195,9 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair
195195
LOG(info) << "Init \'GeneratorHepMC\' with following parameters";
196196
LOG(info) << param0;
197197
LOG(info) << param;
198-
auto hepmcGen = new o2::eventgen::GeneratorHepMC();
199-
hepmcGen->setup(param0, param, conf);
200-
primGen->AddGenerator(hepmcGen);
198+
genptr<o2::eventgen::GeneratorHepMC>.push_back(std::make_unique<o2::eventgen::GeneratorHepMC>());
199+
genptr<o2::eventgen::GeneratorHepMC>.back()->setup(param0, param, conf);
200+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorHepMC>.back().get());
201201
#endif
202202
#ifdef GENERATORS_WITH_PYTHIA8
203203
} else if (genconfig.compare("alldets") == 0) {
@@ -206,37 +206,37 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair
206206
// I compose it of:
207207
// 1) pythia8
208208
auto py8config = std::string(std::getenv("O2_ROOT")) + "/share/Generators/egconfig/pythia8_inel.cfg";
209-
auto py8 = makePythia8Gen(py8config);
210-
primGen->AddGenerator(py8);
209+
genptr<o2::eventgen::GeneratorPythia8>.push_back(makePythia8Gen(py8config));
210+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorPythia8>.back().get());
211211
// 2) forward muons
212-
auto muon = makeBoxGen(13, 100, -2.5, -4.0, 100, 100, 0., 360);
213-
primGen->AddGenerator(muon);
212+
genptr<FairBoxGenerator>.push_back(makeBoxGen(13, 100, -2.5, -4.0, 100, 100, 0., 360));
213+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
214214
} else if (genconfig.compare("pythia8") == 0) {
215215
auto py8config = std::string();
216-
auto py8 = makePythia8Gen(py8config);
217-
primGen->AddGenerator(py8);
216+
genptr<o2::eventgen::GeneratorPythia8>.push_back(makePythia8Gen(py8config));
217+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorPythia8>.back().get());
218218
} else if (genconfig.compare("pythia8pp") == 0) {
219219
auto py8config = std::string(std::getenv("O2_ROOT")) + "/share/Generators/egconfig/pythia8_inel.cfg";
220-
auto py8 = makePythia8Gen(py8config);
221-
primGen->AddGenerator(py8);
220+
genptr<o2::eventgen::GeneratorPythia8>.push_back(makePythia8Gen(py8config));
221+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorPythia8>.back().get());
222222
} else if (genconfig.compare("pythia8hf") == 0) {
223223
// pythia8 pp (HF production)
224224
// configures pythia for HF production in pp collisions at 14 TeV
225225
auto py8config = std::string(std::getenv("O2_ROOT")) + "/share/Generators/egconfig/pythia8_hf.cfg";
226-
auto py8 = makePythia8Gen(py8config);
227-
primGen->AddGenerator(py8);
226+
genptr<o2::eventgen::GeneratorPythia8>.push_back(makePythia8Gen(py8config));
227+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorPythia8>.back().get());
228228
} else if (genconfig.compare("pythia8hi") == 0) {
229229
// pythia8 heavy-ion
230230
// exploits pythia8 heavy-ion machinery (available from v8.230)
231231
// configures pythia for min.bias Pb-Pb collisions at 5.52 TeV
232232
auto py8config = std::string(std::getenv("O2_ROOT")) + "/share/Generators/egconfig/pythia8_hi.cfg";
233-
auto py8 = makePythia8Gen(py8config);
234-
primGen->AddGenerator(py8);
233+
genptr<o2::eventgen::GeneratorPythia8>.push_back(makePythia8Gen(py8config));
234+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorPythia8>.back().get());
235235
} else if (genconfig.compare("pythia8powheg") == 0) {
236236
// pythia8 with powheg
237237
auto py8config = std::string(std::getenv("O2_ROOT")) + "/share/Generators/egconfig/pythia8_powheg.cfg";
238-
auto py8 = makePythia8Gen(py8config);
239-
primGen->AddGenerator(py8);
238+
genptr<o2::eventgen::GeneratorPythia8>.push_back(makePythia8Gen(py8config));
239+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorPythia8>.back().get());
240240
#endif
241241
} else if (genconfig.compare("external") == 0 || genconfig.compare("extgen") == 0) {
242242
// external generator via configuration macro
@@ -245,21 +245,21 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair
245245
LOG(info) << params;
246246
auto extgen_filename = params.fileName;
247247
auto extgen_func = params.funcName;
248-
auto extgen = o2::conf::GetFromMacro<FairGenerator*>(extgen_filename, extgen_func, "FairGenerator*", "extgen");
249-
if (!extgen) {
248+
genptr<FairGenerator>.push_back(std::unique_ptr<FairGenerator>(o2::conf::GetFromMacro<FairGenerator*>(extgen_filename, extgen_func, "FairGenerator*", "extgen")));
249+
if (!genptr<FairGenerator>.back()) {
250250
LOG(fatal) << "Failed to retrieve \'extgen\': problem with configuration ";
251251
}
252-
primGen->AddGenerator(extgen);
252+
primGen->AddGenerator(genptr<FairGenerator>.back().get());
253253
} else if (genconfig.compare("toftest") == 0) { // 1 muon per sector and per module
254254
LOG(info) << "Init tof test generator -> 1 muon per sector and per module";
255255
for (int i = 0; i < 18; i++) {
256256
for (int j = 0; j < 5; j++) {
257-
auto boxGen = new FairBoxGenerator(13, 1); /*protons*/
258-
boxGen->SetEtaRange(-0.8 + 0.32 * j + 0.15, -0.8 + 0.32 * j + 0.17);
259-
boxGen->SetPRange(9, 10);
260-
boxGen->SetPhiRange(10 + 20. * i - 1, 10 + 20. * i + 1);
261-
boxGen->SetDebug(kTRUE);
262-
primGen->AddGenerator(boxGen);
257+
genptr<FairBoxGenerator>.push_back(std::make_unique<FairBoxGenerator>(13, 1)); /*protons*/
258+
genptr<FairBoxGenerator>.back()->SetEtaRange(-0.8 + 0.32 * j + 0.15, -0.8 + 0.32 * j + 0.17);
259+
genptr<FairBoxGenerator>.back()->SetPRange(9, 10);
260+
genptr<FairBoxGenerator>.back()->SetPhiRange(10 + 20. * i - 1, 10 + 20. * i + 1);
261+
genptr<FairBoxGenerator>.back()->SetDebug(kTRUE);
262+
primGen->AddGenerator(genptr<FairBoxGenerator>.back().get());
263263
}
264264
}
265265
#if defined(GENERATORS_WITH_PYTHIA8) && defined(GENERATORS_WITH_HEPMC3)
@@ -277,8 +277,8 @@ void GeneratorFactory::setPrimaryGenerator(o2::conf::SimConfig const& conf, Fair
277277
LOG(fatal) << "Configuration file for hybrid generator does not exist";
278278
return;
279279
}
280-
auto hybrid = new o2::eventgen::GeneratorHybrid(config);
281-
primGen->AddGenerator(hybrid);
280+
genptr<o2::eventgen::GeneratorHybrid>.push_back(std::make_unique<o2::eventgen::GeneratorHybrid>(config));
281+
primGen->AddGenerator(genptr<o2::eventgen::GeneratorHybrid>.back().get());
282282
#endif
283283
} else {
284284
LOG(fatal) << "Invalid generator";

0 commit comments

Comments
 (0)