|
| ExternalLHEProducer (const edm::ParameterSet &iConfig) |
|
virtual | ~ExternalLHEProducer () override |
|
| EDProducer ()=default |
|
| EDProducerBase () |
|
ModuleDescription const & | moduleDescription () const |
|
virtual | ~EDProducerBase () |
|
void | callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func) |
|
std::vector< edm::ProductResolverIndex > const & | indiciesForPutProducts (BranchType iBranchType) const |
|
| ProducerBase () |
|
void | registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &) |
|
std::function< void(BranchDescription const &)> | registrationCallback () const |
| used by the fwk to register list of products More...
|
|
void | resolvePutIndicies (BranchType iBranchType, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies, std::string const &moduleLabel) |
|
virtual | ~ProducerBase () noexcept(false) |
|
std::vector< ConsumesInfo > | consumesInfo () const |
|
void | convertCurrentProcessAlias (std::string const &processName) |
| Convert "@currentProcess" in InputTag process names to the actual current process name. More...
|
|
| EDConsumerBase () |
|
| EDConsumerBase (EDConsumerBase const &)=delete |
|
| EDConsumerBase (EDConsumerBase &&)=default |
|
ProductResolverIndexAndSkipBit | indexFrom (EDGetToken, BranchType, TypeID const &) const |
|
void | itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const |
|
void | itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const |
|
std::vector< ProductResolverIndexAndSkipBit > const & | itemsToGetFrom (BranchType iType) const |
|
void | labelsForToken (EDGetToken iToken, Labels &oLabels) const |
|
void | modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const |
|
EDConsumerBase const & | operator= (EDConsumerBase const &)=delete |
|
EDConsumerBase & | operator= (EDConsumerBase &&)=default |
|
bool | registeredToConsume (ProductResolverIndex, bool, BranchType) const |
|
bool | registeredToConsumeMany (TypeID const &, BranchType) const |
|
void | updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet) |
|
virtual | ~EDConsumerBase () noexcept(false) |
|
Description: [one line class summary]
Implementation: [Notes on implementation]
Definition at line 69 of file ExternalLHEProducer.cc.
Definition at line 227 of file ExternalLHEProducer.cc.
References LHERunInfoProduct::addComment(), LHERunInfoProduct::addHeader(), args_, Exception, executeScript(), edm::Service< T >::isAvailable(), LogDebug, eostools::move(), edm::RandomNumberGenerator::mySeed(), nEvents_, nextEvent(), nThreads_, outputFile_, AlCaHLTBitMon_ParallelJobs::p, edm::Run::put(), reader_, runInfo, runInfoLast, runInfoProducts, createPayload::skip, storeXML_, and wasMerged.
232 std::ostringstream eventStream;
235 args_.insert(
args_.begin() + 1, eventStream.str());
243 <<
"The ExternalLHEProducer module requires the RandomNumberGeneratorService\n" 244 "which is not present in the configuration file. You must add the service\n" 245 "in the configuration file if you want to run ExternalLHEProducer";
247 std::ostringstream randomStream;
248 randomStream << rng->
mySeed();
250 args_.insert(
args_.begin() + 2, randomStream.str());
255 for (
unsigned int iArg = 0; iArg <
args_.size() ; iArg++ ) {
256 LogDebug(
"LHEInputArgs") <<
"arg [" << iArg <<
"] = " <<
args_[iArg];
270 instream.seekg (0, instream.end);
271 int insize = instream.tellg();
272 instream.seekg (0, instream.beg);
273 p->fillCompressedContent(instream, 0.25*insize);
282 unsigned int skip = 0;
283 reader_ = std::make_unique<lhef::LHEReader>(infiles,
skip);
290 std::for_each(
runInfo->getHeaders().begin(),
294 std::for_each(
runInfo->getComments().begin(),
void addHeader(const Header &header)
std::vector< std::string > args_
boost::shared_ptr< lhef::LHERunInfo > runInfoLast
std::unique_ptr< lhef::LHEReader > reader_
virtual std::uint32_t mySeed() const =0
boost::shared_ptr< lhef::LHERunInfo > runInfo
void addComment(const std::string &line)
void put(std::unique_ptr< PROD > product)
Put a new product.
boost::ptr_deque< LHERunInfoProduct > runInfoProducts
void ExternalLHEProducer::executeScript |
( |
| ) |
|
|
private |
Definition at line 376 of file ExternalLHEProducer.cc.
References edm::TimingServiceBase::addToCPUTime(), dir2webdir::argc, args_, cmsBatch::argv, closeDescriptors(), Exception, mps_fire::i, edm::Service< T >::isAvailable(), NULL, sysUtil::pid, pipe::pipe(), scriptName_, mps_update::status, ntuplemaker::time, and TriggerAnalyzer::write().
Referenced by beginRunProduce().
382 int filedes[2], fd_flags;
388 FileCloseSentry sentry1(filedes[0]), sentry2(filedes[1]);
390 if ((fd_flags = fcntl(filedes[1], F_GETFD,
NULL)) == -1) {
391 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to get pipe file descriptor flags (errno=" << rc <<
", " << strerror(rc) <<
")";
393 if (fcntl(filedes[1], F_SETFD, fd_flags | FD_CLOEXEC) == -1) {
394 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to set pipe file descriptor flags (errno=" << rc <<
", " << strerror(rc) <<
")";
397 argc = 1 +
args_.size();
399 char **
argv =
new char *[argc+1];
401 for (
unsigned int i=1;
i<
argc;
i++) {
402 argv[
i] = strdup(
args_[
i-1].c_str());
410 execvp(argv[0], argv);
413 while ((
write(filedes[1], &rc,
sizeof(
int)) == -1) && (errno == EINTR)) {}
418 for (
unsigned int i=0;
i<
args_.size()+1;
i++) {
424 throw cms::Exception(
"ForkException") <<
"Unable to fork a child (errno=" << errno <<
", " << strerror(errno) <<
")";
429 while (((rc2 = read(filedes[0], &rc,
sizeof(
int))) == -1) && (errno == EINTR)) { rc2 = 0; }
430 if ((rc2 ==
sizeof(
int)) && rc) {
431 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to execute script (errno=" << rc <<
", " << strerror(rc) <<
")";
438 if (waitpid(pid, &status, 0) < 0) {
439 if (errno == EINTR) {
442 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to read child status (errno=" << errno <<
", " << strerror(errno) <<
")";
445 if (WIFSIGNALED(status)) {
446 throw cms::Exception(
"ExternalLHEProducer") <<
"Child exited due to signal " << WTERMSIG(status) <<
".";
448 if (WIFEXITED(status)) {
449 rc = WEXITSTATUS(status);
456 getrusage(RUSAGE_CHILDREN,&ru);
457 double time =
static_cast<double>(ru.ru_stime.tv_sec) + (static_cast<double>(ru.ru_stime.tv_usec) * 1E-6);
461 throw cms::Exception(
"ExternalLHEProducer") <<
"Child failed with exit code " << rc <<
".";
std::vector< std::string > args_
virtual void addToCPUTime(double iTime)=0
int closeDescriptors(int preserve)
def pipe(cmdline, input=None)