|
| ExternalLHEProducer (const edm::ParameterSet &iConfig) |
|
virtual | ~ExternalLHEProducer () |
|
| 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;
228 args_.push_back(eventStream.str());
236 <<
"The ExternalLHEProducer module requires the RandomNumberGeneratorService\n" 237 "which is not present in the configuration file. You must add the service\n" 238 "in the configuration file if you want to run ExternalLHEProducer";
240 std::ostringstream randomStream;
241 randomStream << rng->
mySeed();
242 args_.push_back(randomStream.str());
246 for (
unsigned int iArg = 0; iArg <
args_.size() ; iArg++ ) {
247 LogDebug(
"LHEInputArgs") <<
"arg [" << iArg <<
"] = " <<
args_[iArg];
258 instream.seekg (0, instream.end);
259 int insize = instream.tellg();
260 instream.seekg (0, instream.beg);
261 p->fillCompressedContent(instream, 0.25*insize);
269 unsigned int skip = 0;
270 std::auto_ptr<lhef::LHEReader> thisRead(
new lhef::LHEReader(infiles, skip));
278 std::for_each(
runInfo->getHeaders().begin(),
282 std::for_each(
runInfo->getComments().begin(),
void addHeader(const Header &header)
std::vector< std::string > args_
std::auto_ptr< lhef::LHEReader > reader_
boost::shared_ptr< lhef::LHERunInfo > runInfoLast
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 364 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().
370 int filedes[2], fd_flags;
376 FileCloseSentry sentry1(filedes[0]), sentry2(filedes[1]);
378 if ((fd_flags = fcntl(filedes[1], F_GETFD,
NULL)) == -1) {
379 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to get pipe file descriptor flags (errno=" << rc <<
", " << strerror(rc) <<
")";
381 if (fcntl(filedes[1], F_SETFD, fd_flags | FD_CLOEXEC) == -1) {
382 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to set pipe file descriptor flags (errno=" << rc <<
", " << strerror(rc) <<
")";
385 argc = 1 +
args_.size();
387 char **
argv =
new char *[argc+1];
389 for (
unsigned int i=1;
i<
argc;
i++) {
390 argv[
i] = strdup(
args_[
i-1].c_str());
398 execvp(argv[0], argv);
401 while ((
write(filedes[1], &rc,
sizeof(
int)) == -1) && (errno == EINTR)) {}
406 for (
unsigned int i=0;
i<
args_.size()+1;
i++) {
412 throw cms::Exception(
"ForkException") <<
"Unable to fork a child (errno=" << errno <<
", " << strerror(errno) <<
")";
417 while (((rc2 = read(filedes[0], &rc,
sizeof(
int))) == -1) && (errno == EINTR)) { rc2 = 0; }
418 if ((rc2 ==
sizeof(
int)) && rc) {
419 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to execute script (errno=" << rc <<
", " << strerror(rc) <<
")";
426 if (waitpid(pid, &status, 0) < 0) {
427 if (errno == EINTR) {
430 throw cms::Exception(
"ExternalLHEProducer") <<
"Failed to read child status (errno=" << errno <<
", " << strerror(errno) <<
")";
433 if (WIFSIGNALED(status)) {
434 throw cms::Exception(
"ExternalLHEProducer") <<
"Child exited due to signal " << WTERMSIG(status) <<
".";
436 if (WIFEXITED(status)) {
437 rc = WEXITSTATUS(status);
442 throw cms::Exception(
"ExternalLHEProducer") <<
"Child failed with exit code " << rc <<
".";
std::vector< std::string > args_
int closeDescriptors(int preserve)
def pipe(cmdline, input=None)