Skip to content

Commit c04dd5a

Browse files
authored
Update generator_DittoMC.C
1 parent dc3262a commit c04dd5a

1 file changed

Lines changed: 26 additions & 24 deletions

File tree

‎MC/config/ALICE3/pythia8/generator_DittoMC.C‎

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,57 @@
1-
#include "Ditto.h"
2-
3-
#include <algorithm>
4-
#include <cstdint>
5-
#include <cstdlib>
6-
#include <stdexcept>
7-
8-
#if !defined(__CLING__) || defined(__ROOTCLING__)
9-
10-
#include <SimulationDataFormat/MCGenProperties.h>
11-
1+
#include <Ditto/Ditto.h>
122
#include <Generators/GeneratorPythia8.h>
13-
#include <Pythia8/Pythia.h>
143

154
#include <FairGenerator.h>
16-
#include <FairPrimaryGenerator.h>
175

18-
#endif
6+
#include <cstdint>
7+
#include <cstdlib>
8+
#include <stdexcept>
9+
#include <string>
1910

2011
// Ditto event generator
21-
2212
class GeneratorDittoMC : public o2::eventgen::GeneratorPythia8
2313
{
2414
public:
2515
/// Constructor
26-
GeneratorDittoMC(const TString& tuneFile) : mGenerator(makeConfig(tuneFile))
16+
explicit GeneratorDittoMC(const TString& tuneFile) : mGenerator(makeConfig(tuneFile))
2717
{
18+
// We use the Pythia8 event only as the container passed to the O2
19+
// GeneratorPythia8 machinery. Particle production is handled by Ditto.
2820
mPythia.readString("ProcessLevel:all = off");
2921
}
3022

23+
/// Generate one Ditto event and export it to the Pythia8 event record.
3124
bool generateEvent() override
3225
{
3326
mGenerator.generate();
3427
mGenerator.loadParticles(mPythia.event, true);
3528
return true;
3629
}
3730

38-
/// Destructor
39-
~GeneratorDittoMC() = default;
31+
/// Destructor
32+
~GeneratorDittoMC() override = default;
4033

4134
private:
35+
/// Build the Ditto runtime configuration.
4236
static Ditto::Config makeConfig(const TString& tuneFile)
4337
{
44-
Ditto::Config config;
4538
if (tuneFile.IsNull()) {
46-
throw std::runtime_error("DITTO_TUNE_FILE must point to a Ditto tune file");
39+
throw std::runtime_error("Ditto tune file must be specified");
40+
}
41+
42+
Ditto::Config config;
43+
config.mTuneFile = tuneFile.Data();
44+
45+
// Use the Grid process ID as the Ditto seed when available.
46+
// Outside the Grid, seed 0 is used.
47+
if (const char* alienProcId = std::getenv("ALIEN_PROC_ID")) {
48+
config.mSeed = static_cast<std::uint64_t>(std::strtoull(alienProcId, nullptr, 10));
49+
} else {
50+
config.mSeed = static_cast<std::uint64_t>(std::time(nullptr));
4751
}
48-
config.tuneFile = tuneFile;
4952

50-
const char* alienProcId = std::getenv("ALIEN_PROC_ID");
51-
config.seed = alienProcId ? static_cast<std::uint64_t>(std::atoll(alienProcId)) : 0;
52-
Printf("Using Ditto tune: %s and seed: %lu\n", config.tuneFile.c_str(), config.seed);
53+
Printf("Using Ditto tune: %s and seed: %llu", config.mTuneFile.c_str(), static_cast<unsigned long long>(config.mSeed));
54+
5355
return config;
5456
}
5557

0 commit comments

Comments
 (0)