6 #include "boost/filesystem.hpp"
7 #include "boost/filesystem/path.hpp"
29 if (ps.
exists(
"useEvtGenPlugin")) {
31 string evtgenpath(std::getenv(
"EVTGENDATA"));
35 if (ps.
exists(
"evtgenDecFile")) {
40 if (ps.
exists(
"evtgenPdlFile")) {
45 if (ps.
exists(
"evtgenUserFile")) {
46 std::vector<std::string> user_decays = ps.
getParameter<std::vector<std::string> >(
"evtgenUserFile");
47 for (
unsigned int i = 0;
i < user_decays.size();
i++) {
54 if (ps.
exists(
"evtgenUserFileEmbedded")) {
55 std::vector<std::string> user_decay_lines =
56 ps.
getParameter<std::vector<std::string> >(
"evtgenUserFileEmbedded");
57 auto tmp_dir = boost::filesystem::temp_directory_path();
58 tmp_dir +=
"/%%%%-%%%%-%%%%-%%%%";
59 auto tmp_path = boost::filesystem::unique_path(tmp_dir);
61 FILE* tmpf = std::fopen(user_decay_tmp.c_str(),
"w");
64 <<
"Py8InterfaceBase::Py8InterfaceBase fails when trying to open a temporary file for embedded user.dec "
65 "for EvtGenPlugin. Terminating program ";
68 for (
unsigned int i = 0;
i < user_decay_lines.size();
i++) {
69 user_decay_lines.at(
i) +=
"\n";
70 std::fputs(user_decay_lines.at(
i).c_str(), tmpf);
84 fMasterGen->settings.addFlag(
"BiasedTauDecayer:filter",
false);
85 fMasterGen->settings.addFlag(
"BiasedTauDecayer:eMuDecays",
true);
88 fMasterGen->settings.addFlag(
"ResonanceDecayFilter:filter",
false);
89 fMasterGen->settings.addFlag(
"ResonanceDecayFilter:exclusive",
false);
90 fMasterGen->settings.addFlag(
"ResonanceDecayFilter:eMuAsEquivalent",
false);
91 fMasterGen->settings.addFlag(
"ResonanceDecayFilter:eMuTauAsEquivalent",
false);
92 fMasterGen->settings.addFlag(
"ResonanceDecayFilter:allNuAsEquivalent",
false);
93 fMasterGen->settings.addFlag(
"ResonanceDecayFilter:udscAsEquivalent",
false);
94 fMasterGen->settings.addFlag(
"ResonanceDecayFilter:udscbAsEquivalent",
false);
95 fMasterGen->settings.addFlag(
"ResonanceDecayFilter:wzAsEquivalent",
false);
96 fMasterGen->settings.addMVec(
"ResonanceDecayFilter:mothers", std::vector<int>(),
false,
false, 0, 0);
97 fMasterGen->settings.addMVec(
"ResonanceDecayFilter:daughters", std::vector<int>(),
false,
false, 0, 0);
100 fMasterGen->settings.addFlag(
"PTFilter:filter",
false);
101 fMasterGen->settings.addMode(
"PTFilter:quarkToFilter", 5,
true,
true, 3, 6);
102 fMasterGen->settings.addParm(
"PTFilter:scaleToFilter", 0.4,
true,
true, 0.0, 10.);
103 fMasterGen->settings.addParm(
"PTFilter:quarkRapidity", 10.0,
true,
true, 0.0, 10.);
104 fMasterGen->settings.addParm(
"PTFilter:quarkPt", -.1,
true,
true, -.1, 100.);
107 fMasterGen->settings.addFlag(
"POWHEGres:calcScales",
false);
108 fMasterGen->settings.addFlag(
"POWHEG:bb4l",
false);
109 fMasterGen->settings.addFlag(
"POWHEG:bb4l:FSREmission:onlyDistance1",
false);
110 fMasterGen->settings.addFlag(
"POWHEG:bb4l:FSREmission:veto",
false);
111 fMasterGen->settings.addFlag(
"POWHEG:bb4l:FSREmission:dryRun",
false);
112 fMasterGen->settings.addFlag(
"POWHEG:bb4l:FSREmission:vetoAtPL",
false);
113 fMasterGen->settings.addFlag(
"POWHEG:bb4l:FSREmission:vetoQED",
false);
114 fMasterGen->settings.addFlag(
"POWHEG:bb4l:PartonLevel:veto",
false);
115 fMasterGen->settings.addFlag(
"POWHEG:bb4l:PartonLevel:excludeFSRConflicting",
false);
116 fMasterGen->settings.addFlag(
"POWHEG:bb4l:DEBUG",
false);
117 fMasterGen->settings.addFlag(
"POWHEG:bb4l:ScaleResonance:veto",
false);
118 fMasterGen->settings.addFlag(
"POWHEG:bb4l:FSREmission:vetoDipoleFrame",
false);
119 fMasterGen->settings.addFlag(
"POWHEG:bb4l:FSREmission:pTpythiaVeto",
false);
120 fMasterGen->settings.addParm(
"POWHEG:bb4l:pTminVeto", 10.0,
true,
true, 0.0, 10.);
125 fMasterGen->readString(
"Next:numberShowEvent = 0");
126 fDecayer->readString(
"Next:numberShowEvent = 0");
130 std::vector<edm::ParameterSet> randomizedParameters =
132 currentParameters = randomizedParameters[
randomIndex()];
140 if (
line->find(
"Random:") != std::string::npos)
141 throw cms::Exception(
"PythiaError") <<
"Attempted to set random number "
142 "using Pythia commands. Please use "
143 "the RandomNumberGeneratorService."
147 throw cms::Exception(
"PythiaError") <<
"Pythia 8 did not accept \"" << *
line <<
"\"." << std::endl;
149 if (
line->find(
"ParticleDecays:") != std::string::npos) {
151 throw cms::Exception(
"PythiaError") <<
"Pythia 8 Decayer did not accept \"" << *
line <<
"\"." << std::endl;
157 if (currentParameters.
exists(
"SLHAFileForPythia8")) {
161 fMasterGen->settings.mode(
"SLHA:readFrom", 2);
163 }
else if (currentParameters.
exists(
"SLHATableForPythia8")) {
166 char tempslhaname[] =
"pythia8SLHAtableXXXXXX";
167 int fd = mkstemp(tempslhaname);
168 write(
fd, slhatable.c_str(), slhatable.size());
173 fMasterGen->settings.mode(
"SLHA:readFrom", 2);
181 for (
size_t i = 0;
i <
pdgIds.size();
i++) {
189 std::ostringstream pyCard;
190 pyCard << PyID <<
":mayDecay=false";
192 if (
fMasterGen->particleData.isParticle(PyID)) {
196 <<
"recognize particle id = " << PyID << std::endl;
208 for (
unsigned int iss = 0; iss < settings.size(); iss++) {
209 if (settings[iss].
find(
"QED-brem-off") != std::string::npos) {
210 fMasterGen->readString(
"TimeShower:QEDshowerByL=off");
212 size_t fnd1 = settings[iss].find(
"Pythia8:");
213 if (fnd1 != std::string::npos) {