14 #include <CLHEP/Random/RandomEngine.h>
16 #include <HepMC/HerwigWrapper6_4.h>
39 {
return FortranInstance::getInstance<Herwig6Instance>()->
randomEngine->flat(); }
43 std::string
function(fn, fn +
sizeof fn);
44 *exit = FortranInstance::getInstance<Herwig6Instance>()->hwwarn(
function, *code);
54 <<
"Herwig6 stopped run with error code " << *ecode
79 #ifdef _POSIX_C_SOURCE
84 { siglongjmp(*(sigjmp_buf*)FortranInstance::getInstance<Herwig6Instance>()->
timeoutPrivate, 1); }
90 <<
"Herwig6Instance::timeout() called recursively."
92 struct sigaction saOld;
93 std::memset(&saOld, 0,
sizeof saOld);
96 timerclear(&itv.it_value);
97 timerclear(&itv.it_interval);
98 itv.it_value.tv_sec = 0;
99 itv.it_interval.tv_sec = 0;
100 setitimer(ITIMER_VIRTUAL, &itv,
NULL);
104 sigaddset(&ss, SIGVTALRM);
106 sigprocmask(SIG_UNBLOCK, &ss,
NULL);
107 sigprocmask(SIG_BLOCK, &ss,
NULL);
114 itv.it_value.tv_sec = 0;
115 itv.it_interval.tv_sec = 0;
116 setitimer(ITIMER_VIRTUAL, &itv,
NULL);
117 sigprocmask(SIG_UNBLOCK, &ss,
NULL);
121 itv.it_value.tv_sec = secs;
122 itv.it_interval.tv_sec = secs;
123 setitimer(ITIMER_VIRTUAL, &itv,
NULL);
126 std::memset(&sa, 0,
sizeof sa);
128 sa.sa_flags = SA_ONESHOT;
129 sigemptyset(&sa.sa_mask);
131 sigaction(SIGVTALRM, &sa, &saOld);
132 sigprocmask(SIG_UNBLOCK, &ss,
NULL);
140 itv.it_value.tv_sec = 0;
141 itv.it_interval.tv_sec = 0;
142 setitimer(ITIMER_VIRTUAL, &itv,
NULL);
144 sigaction(SIGVTALRM, &saOld,
NULL);
152 itv.it_value.tv_sec = 0;
153 itv.it_interval.tv_sec = 0;
154 setitimer(ITIMER_VIRTUAL, &itv,
NULL);
156 sigaction(SIGVTALRM, &saOld,
NULL);
177 typedef std::istringstream::traits_type traits;
179 const char *
p = line.c_str(), *
q;
180 p += std::strspn(p,
" \t\r\n");
182 for(
q = p; std::isalnum(*
q);
q++);
183 std::string
name(p,
q - p);
185 const ConfigParam *param;
186 for(param = configParams; param->name; param++)
187 if (name == param->name)
192 p =
q + std::strspn(
q,
" \t\r\n");
195 std::size_t
mult = 1;
196 for(
unsigned int i = 0;
i < 3;
i++) {
197 if (!param->dim[
i].size)
200 if (*p++ != (
i ?
',' :
'('))
203 p += std::strspn(p,
" \t\r\n");
205 for(
q = p; std::isdigit(*
q);
q++);
206 std::istringstream ss(std::string(p,
q - p));
209 if (ss.bad() || ss.peek() != traits::eof())
212 if (index < param->dim[
i].
offset)
214 index -= param->dim[
i].offset;
215 if (index >= param->dim[
i].size)
218 p =
q + std::strspn(
q,
" \t\r\n");
221 mult *= param->dim[
i].size;
224 if (param->dim[0].size) {
227 p += std::strspn(p,
" \t\r\n");
232 p += std::strspn(p,
" \t\r\n");
234 for(
q = p; *
q && (std::isalnum(*
q) || std::strchr(
".-+", *
q));
q++);
235 std::istringstream ss(std::string(p,
q - p));
237 p =
q + std::strspn(
q,
" \t\r\n");
241 switch(param->type) {
245 if (ss.bad() || ss.peek() != traits::eof())
254 if (ss.bad() || ss.peek() != traits::eof())
263 if (ss.bad() || ss.peek() != traits::eof())
266 for(std::string::iterator iter = value_.begin();
267 iter != value_.end(); ++iter)
268 *iter = std::tolower(*iter);
270 if (value_ ==
"yes" || value_ ==
"true" || value_ ==
"1")
272 else if (value_ ==
"no" || value_ ==
"false" || value_ ==
"0")
Herwig6Instance(CLHEP::HepRandomEngine *randomEngine=0)
bool timeout(unsigned int secs, void(*fn)())
static void _timeout_sighandler(int signr)
CLHEP::HepRandomEngine & getEngineReference()
void cmsending_(int *ecode)
CLHEP::HepRandomEngine * randomEngine
unsigned int offset(bool)
bool give(const std::string &line)
void cms_hwwarn_(char fn[6], int *, int *)
virtual bool hwwarn(const std::string &fn, int code)
virtual ~Herwig6Instance()