|
| 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 65 of file ExternalLHEProducer.cc.
Definition at line 221 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, and wasMerged.
226 std::ostringstream eventStream;
229 args_.insert(
args_.begin() + 1, eventStream.str());
237 <<
"The ExternalLHEProducer module requires the RandomNumberGeneratorService\n" 238 "which is not present in the configuration file. You must add the service\n" 239 "in the configuration file if you want to run ExternalLHEProducer";
241 std::ostringstream randomStream;
242 randomStream << rng->
mySeed();
244 args_.insert(
args_.begin() + 2, randomStream.str());
249 for (
unsigned int iArg = 0; iArg <
args_.size() ; iArg++ ) {
250 LogDebug(
"LHEInputArgs") <<
"arg [" << iArg <<
"] = " <<
args_[iArg];
261 instream.seekg (0, instream.end);
262 int insize = instream.tellg();
263 instream.seekg (0, instream.beg);
264 p->fillCompressedContent(instream, 0.25*insize);
272 unsigned int skip = 0;
273 reader_ = std::make_unique<lhef::LHEReader>(infiles,
skip);
280 std::for_each(
runInfo->getHeaders().begin(),
284 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 366 of file ExternalLHEProducer.cc.
References dir2webdir::argc, args_, cmsBatch::argv, closeDescriptors(), Exception, mps_fire::i, NULL, sysUtil::pid, pipe::pipe(), scriptName_, mps_update::status, and TriggerAnalyzer::write().
Referenced by beginRunProduce().
372 int filedes[2], fd_flags;
378 FileCloseSentry sentry1(filedes[0]), sentry2(filedes[1]);
380 if ((fd_flags = fcntl(filedes[1], F_GETFD,
NULL)) == -1) {
381 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to get pipe file descriptor flags (errno=" << rc <<
", " << strerror(rc) <<
")";
383 if (fcntl(filedes[1], F_SETFD, fd_flags | FD_CLOEXEC) == -1) {
384 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to set pipe file descriptor flags (errno=" << rc <<
", " << strerror(rc) <<
")";
387 argc = 1 +
args_.size();
389 char **
argv =
new char *[argc+1];
391 for (
unsigned int i=1;
i<
argc;
i++) {
392 argv[
i] = strdup(
args_[
i-1].c_str());
400 execvp(argv[0], argv);
403 while ((
write(filedes[1], &rc,
sizeof(
int)) == -1) && (errno == EINTR)) {}
408 for (
unsigned int i=0;
i<
args_.size()+1;
i++) {
414 throw cms::Exception(
"ForkException") <<
"Unable to fork a child (errno=" << errno <<
", " << strerror(errno) <<
")";
419 while (((rc2 = read(filedes[0], &rc,
sizeof(
int))) == -1) && (errno == EINTR)) { rc2 = 0; }
420 if ((rc2 ==
sizeof(
int)) && rc) {
421 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to execute script (errno=" << rc <<
", " << strerror(rc) <<
")";
428 if (waitpid(pid, &status, 0) < 0) {
429 if (errno == EINTR) {
432 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to read child status (errno=" << errno <<
", " << strerror(errno) <<
")";
435 if (WIFSIGNALED(status)) {
436 throw cms::Exception(
"ExternalLHEProducer") <<
"Child exited due to signal " << WTERMSIG(status) <<
".";
438 if (WIFEXITED(status)) {
439 rc = WEXITSTATUS(status);
444 throw cms::Exception(
"ExternalLHEProducer") <<
"Child failed with exit code " << rc <<
".";
std::vector< std::string > args_
int closeDescriptors(int preserve)
def pipe(cmdline, input=None)