CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes
gen::BaseHadronizer Class Reference

#include <BaseHadronizer.h>

Inheritance diagram for gen::BaseHadronizer:
gen::AMPTHadronizer gen::Cascade2Hadronizer gen::ExhumeHadronizer gen::HijingHadronizer gen::Hydjet2Hadronizer gen::HydjetHadronizer gen::PomwigHadronizer gen::Py8InterfaceBase gen::PyquenHadronizer gen::Pythia6Hadronizer gen::ReggeGribovPartonMCHadronizer gen::ReggeGribovPartonMCHadronizer Herwig6Hadronizer SherpaHadronizer ThePEGHadronizer

Public Member Functions

 BaseHadronizer (edm::ParameterSet const &ps)
 
void cleanLHE ()
 
void generateLHE (edm::LuminosityBlock const &lumi, CLHEP::HepRandomEngine *rengine)
 
edm::EventgetEDMEvent () const
 
HepMC::GenEvent * getGenEvent ()
 
GenEventInfoProductgetGenEventInfo ()
 
virtual GenLumiInfoHeadergetGenLumiInfoHeader () const
 
GenRunInfoProductgetGenRunInfo ()
 
const boost::shared_ptr
< lhef::LHERunInfo > & 
getLHERunInfo () const
 
const std::string & gridpackPath () const
 
int randomIndex () const
 
const std::string & randomInitConfigDescription () const
 
void randomizeIndex (edm::LuminosityBlock const &lumi, CLHEP::HepRandomEngine *rengine)
 
void resetEvent (HepMC::GenEvent *event)
 
void resetEventInfo (GenEventInfoProduct *eventInfo)
 
virtual bool select (HepMC::GenEvent *) const
 
void setEDMEvent (edm::Event &event)
 
void setLHEEvent (lhef::LHEEvent *event)
 
void setLHERunInfo (lhef::LHERunInfo *runInfo)
 
void setRandomEngine (CLHEP::HepRandomEngine *v)
 
std::vector< std::string > const & sharedResources () const
 
 ~BaseHadronizer ()
 

Protected Member Functions

std::auto_ptr< HepMC::GenEvent > & event ()
 
std::auto_ptr
< GenEventInfoProduct > & 
eventInfo ()
 
lhef::LHEEventlheEvent ()
 
lhef::LHERunInfolheRunInfo ()
 
GenRunInfoProductrunInfo ()
 

Protected Attributes

std::string lheFile_
 
int randomIndex_
 

Private Member Functions

virtual void doSetRandomEngine (CLHEP::HepRandomEngine *v)
 
virtual std::vector
< std::string > const & 
doSharedResources () const
 

Private Attributes

edm::EventedmEvent_
 
std::auto_ptr< HepMC::GenEvent > genEvent_
 
std::auto_ptr
< GenEventInfoProduct
genEventInfo_
 
GenRunInfoProduct genRunInfo_
 
std::vector< std::string > gridpackPaths_
 
std::auto_ptr< lhef::LHEEventlheEvent_
 
boost::shared_ptr
< lhef::LHERunInfo
lheRunInfo_
 
std::vector< std::string > randomInitConfigDescriptions_
 
std::vector< double > randomInitWeights_
 

Static Private Attributes

static const std::vector
< std::string > 
theSharedResources
 

Detailed Description

Definition at line 47 of file BaseHadronizer.h.

Constructor & Destructor Documentation

gen::BaseHadronizer::BaseHadronizer ( edm::ParameterSet const &  ps)

Definition at line 12 of file BaseHadronizer.cc.

References edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), gridpackPaths_, randomInitConfigDescriptions_, randomInitWeights_, runInfo(), GenRunInfoProduct::setExternalXSecLO(), GenRunInfoProduct::setExternalXSecNLO(), GenRunInfoProduct::setFilterEfficiency(), and AlCaHLTBitMon_QueryRunRegistry::string.

12  :
13  randomIndex_(-1),
15  {
16 
17  if (ps.exists("RandomizedParameters")) {
18  std::vector<edm::ParameterSet> randomizedParameters = ps.getParameter<std::vector<edm::ParameterSet> >("RandomizedParameters");
19  randomInitWeights_.resize(randomizedParameters.size());
20  randomInitConfigDescriptions_.resize(randomizedParameters.size());
21  gridpackPaths_.resize(randomizedParameters.size());
22  for (unsigned int irand = 0; irand<randomizedParameters.size(); ++irand) {
23  randomInitWeights_[irand] = randomizedParameters[irand].getParameter<double>("ConfigWeight");
24  if (randomizedParameters[irand].exists("ConfigDescription")) {
25  randomInitConfigDescriptions_[irand] = randomizedParameters[irand].getParameter<std::string>("ConfigDescription");
26  }
27  if (randomizedParameters[irand].exists("GridpackPath")) {
28  gridpackPaths_[irand] = randomizedParameters[irand].getParameter<std::string>("GridpackPath");
29  }
30  }
31  }
32  else {
33  if (ps.exists("GridpackPath")) {
34  gridpackPaths_[0] = ps.getParameter<std::string>("GridpackPath");
35  }
36  }
37 
39  ps.getUntrackedParameter<double>("filterEfficiency", -1.) );
41  GenRunInfoProduct::XSec(ps.getUntrackedParameter<double>("crossSection", -1.)) );
43  GenRunInfoProduct::XSec(ps.getUntrackedParameter<double>("crossSectionNLO", -1.)) );
44 
45  }
std::vector< double > randomInitWeights_
void setFilterEfficiency(double effic)
GenRunInfoProduct & runInfo()
std::vector< std::string > gridpackPaths_
std::vector< std::string > randomInitConfigDescriptions_
void setExternalXSecNLO(const XSec &xsec)
void setExternalXSecLO(const XSec &xsec)
gen::BaseHadronizer::~BaseHadronizer ( )
inline

Definition at line 50 of file BaseHadronizer.h.

50 {}

Member Function Documentation

void gen::BaseHadronizer::cleanLHE ( )

Definition at line 147 of file BaseHadronizer.cc.

References lheFile_, and MatrixUtil::remove().

147  {
148  if (lheFile_.empty()) {
149  return;
150  }
151 
152  std::remove(lheFile_.c_str());
153  }
std::string lheFile_
virtual void gen::BaseHadronizer::doSetRandomEngine ( CLHEP::HepRandomEngine *  v)
inlineprivatevirtual
virtual std::vector<std::string> const& gen::BaseHadronizer::doSharedResources ( ) const
inlineprivatevirtual
std::auto_ptr<HepMC::GenEvent>& gen::BaseHadronizer::event ( )
inlineprotected
std::auto_ptr<GenEventInfoProduct>& gen::BaseHadronizer::eventInfo ( )
inlineprotected

Definition at line 87 of file BaseHadronizer.h.

References genEventInfo_.

87 { return genEventInfo_; }
std::auto_ptr< GenEventInfoProduct > genEventInfo_
void gen::BaseHadronizer::generateLHE ( edm::LuminosityBlock const &  lumi,
CLHEP::HepRandomEngine *  rengine 
)

Definition at line 78 of file BaseHadronizer.cc.

References createfilelist::args, constexpr, relativeConstraints::empty, Exception, edm::FileInPath::fullPath(), edm::pset::Registry::getMapped(), gridpackPath(), edm::LuminosityBlockBase::id(), edm::pset::Registry::instance(), lheFile_, edm::LuminosityBlockID::luminosityBlock(), cmsHarvester::nevents, NULL, EcalCondDB::outfilename, sysUtil::pid, edm::LuminosityBlock::processHistory(), edm::ProcessHistory::rbegin(), edm::LuminosityBlockID::run(), and mps_update::status.

78  {
79 
80  if (gridpackPath().empty()) {
81  return;
82  }
83 
84  //get random seed from HepRandomEngine state plus run and lumi section numbers
85  //(random engine state will be the same for every lumi section in a job)
86  std::vector<long unsigned int> seeds = rengine->put();
87  seeds.push_back(lumi.id().run());
88  seeds.push_back(lumi.id().luminosityBlock());
89  std::seed_seq seedseq(seeds.begin(),seeds.end());
90  std::array<unsigned int,1> lheseed;
91  seedseq.generate(lheseed.begin(),lheseed.end());
92 
93  constexpr unsigned int maxseed = 30081*30081; //madgraph cannot handle seeds larger than this
94  unsigned int seedval = lheseed[0]%(maxseed+1);
95 
96  unsigned int nevents = edm::pset::Registry::instance()->getMapped(lumi.processHistory().rbegin()->parameterSetID())->getParameter<edm::ParameterSet>("@main_input").getUntrackedParameter<unsigned int>("numberEventsInLuminosityBlock");
97 
98  std::ostringstream nevStream;
99  nevStream << nevents;
100 
101  std::ostringstream randomStream;
102  randomStream << seedval;
103 
104  edm::FileInPath script("GeneratorInterface/LHEInterface/data/run_generic_tarball_cvmfs.sh");
105  const char *outfilename = "cmsgrid_final.lhe";
106 
107  char *args[5];
108  args[0] = strdup(script.fullPath().c_str());
109  args[1] = strdup(gridpackPath().c_str());
110  args[2] = strdup(nevStream.str().c_str());
111  args[3] = strdup(randomStream.str().c_str());
112  args[4] = NULL;
113 
114  pid_t pid = fork();
115 
116  if (pid == -1) {
117  // error, failed to fork()
118  throw cms::Exception("BaseHadronizer::generateLHE") << "Unable to fork a child";
119  }
120  else if (pid==0) {
121  //child
122  execvp(args[0],args);
123  _exit(1); // exec never returns
124  }
125  else {
126  //parent
127  int status;
128  waitpid(pid, &status, 0);
129  if (status) {
130  throw cms::Exception("BaseHadronizer::generateLHE") << "Failed to execute script";
131  }
132  }
133  FILE* lhef = std::fopen(outfilename, "r");
134  if (!lhef) {
135  throw cms::Exception("BaseHadronizer::generateLHE") << "Output file " << outfilename << " not found.";
136  }
137  std::fclose(lhef);
138 
140 
141  for (int iarg=0; iarg<4; ++iarg) {
142  delete[] args[iarg];
143  }
144 
145  }
tuple lumi
Definition: fjr2json.py:35
#define NULL
Definition: scimark2.h:8
std::string lheFile_
#define constexpr
bool getMapped(key_type const &k, value_type &result) const
Definition: Registry.cc:18
tuple pid
Definition: sysUtil.py:22
const std::string & gridpackPath() const
static Registry * instance()
Definition: Registry.cc:12
tuple status
Definition: mps_update.py:57
edm::Event& gen::BaseHadronizer::getEDMEvent ( ) const
inline

Definition at line 69 of file BaseHadronizer.h.

References edmEvent_.

69 { return *edmEvent_; }
edm::Event * edmEvent_
HepMC::GenEvent* gen::BaseHadronizer::getGenEvent ( )
inline

Definition at line 54 of file BaseHadronizer.h.

References genEvent_.

54 { return genEvent_.release(); }
std::auto_ptr< HepMC::GenEvent > genEvent_
GenEventInfoProduct* gen::BaseHadronizer::getGenEventInfo ( )
inline

Definition at line 55 of file BaseHadronizer.h.

References genEventInfo_.

55 { return genEventInfo_.release(); }
std::auto_ptr< GenEventInfoProduct > genEventInfo_
GenLumiInfoHeader * gen::BaseHadronizer::getGenLumiInfoHeader ( ) const
virtual

Reimplemented in Pythia8Hadronizer.

Definition at line 47 of file BaseHadronizer.cc.

References randomIndex_, randomInitConfigDescription(), GenLumiInfoHeader::setConfigDescription(), and GenLumiInfoHeader::setRandomConfigIndex().

47  {
48 
49  GenLumiInfoHeader *genLumiInfoHeader = new GenLumiInfoHeader();
50 
51  //fill information on randomized configs for parameter scans
52  genLumiInfoHeader->setRandomConfigIndex(randomIndex_);
53  if (randomIndex_>=0) {
55  }
56 
57  return genLumiInfoHeader;
58 
59  }
void setRandomConfigIndex(int idx)
void setConfigDescription(const std::string &str)
const std::string & randomInitConfigDescription() const
GenRunInfoProduct& gen::BaseHadronizer::getGenRunInfo ( )
inline

Definition at line 53 of file BaseHadronizer.h.

References genRunInfo_.

53 { return genRunInfo_; }
GenRunInfoProduct genRunInfo_
const boost::shared_ptr<lhef::LHERunInfo>& gen::BaseHadronizer::getLHERunInfo ( ) const
inline

Definition at line 62 of file BaseHadronizer.h.

References lheRunInfo_.

62 { return lheRunInfo_; }
boost::shared_ptr< lhef::LHERunInfo > lheRunInfo_
const std::string& gen::BaseHadronizer::gridpackPath ( ) const
inline

Definition at line 78 of file BaseHadronizer.h.

References gridpackPaths_, bookConverter::max, and randomIndex_.

Referenced by generateLHE().

78 { return gridpackPaths_[std::max(randomIndex_,0)]; }
std::vector< std::string > gridpackPaths_
lhef::LHEEvent* gen::BaseHadronizer::lheEvent ( )
inlineprotected

Definition at line 89 of file BaseHadronizer.h.

References lheEvent_.

89 { return lheEvent_.get(); }
std::auto_ptr< lhef::LHEEvent > lheEvent_
lhef::LHERunInfo* gen::BaseHadronizer::lheRunInfo ( )
inlineprotected

Definition at line 90 of file BaseHadronizer.h.

References lheRunInfo_.

90 { return lheRunInfo_.get(); }
boost::shared_ptr< lhef::LHERunInfo > lheRunInfo_
int gen::BaseHadronizer::randomIndex ( ) const
inline

Definition at line 76 of file BaseHadronizer.h.

References randomIndex_.

76 { return randomIndex_; }
const std::string& gen::BaseHadronizer::randomInitConfigDescription ( ) const
inline

Definition at line 77 of file BaseHadronizer.h.

References randomIndex_, and randomInitConfigDescriptions_.

Referenced by getGenLumiInfoHeader().

std::vector< std::string > randomInitConfigDescriptions_
void gen::BaseHadronizer::randomizeIndex ( edm::LuminosityBlock const &  lumi,
CLHEP::HepRandomEngine *  rengine 
)

Definition at line 61 of file BaseHadronizer.cc.

References edm::LuminosityBlockBase::id(), edm::LuminosityBlockID::luminosityBlock(), randomIndex_, randomInitWeights_, and edm::LuminosityBlockID::run().

61  {
62  if (randomInitWeights_.size()>0) {
63  //randomly select from a list of provided configuration sets (for parameter scans)
64 
65  //seeds std 32-bit mersene twister with HepRandomEngine state plus run and lumi section numbers
66  //(random engine state will be the same for every lumi section in a job)
67  std::vector<long unsigned int> seeds = rengine->put();
68  seeds.push_back(lumi.id().run());
69  seeds.push_back(lumi.id().luminosityBlock());
70  std::seed_seq seedseq(seeds.begin(),seeds.end());
71  std::mt19937 randgen(seedseq);
72  std::discrete_distribution<int> randdist(randomInitWeights_.begin(),randomInitWeights_.end());
73 
74  randomIndex_ = randdist(randgen);
75  }
76  }
std::vector< double > randomInitWeights_
tuple lumi
Definition: fjr2json.py:35
void gen::BaseHadronizer::resetEvent ( HepMC::GenEvent *  event)
inline

Definition at line 58 of file BaseHadronizer.h.

References genEvent_.

58 { genEvent_.reset(event); }
std::auto_ptr< HepMC::GenEvent > & event()
std::auto_ptr< HepMC::GenEvent > genEvent_
void gen::BaseHadronizer::resetEventInfo ( GenEventInfoProduct eventInfo)
inline

Definition at line 59 of file BaseHadronizer.h.

References genEventInfo_.

59 { genEventInfo_.reset(eventInfo); }
std::auto_ptr< GenEventInfoProduct > genEventInfo_
GenRunInfoProduct& gen::BaseHadronizer::runInfo ( )
inlineprotected

Definition at line 85 of file BaseHadronizer.h.

References genRunInfo_.

Referenced by BaseHadronizer(), and gen::Py8GunBase::statistics().

85 { return genRunInfo_; }
GenRunInfoProduct genRunInfo_
virtual bool gen::BaseHadronizer::select ( HepMC::GenEvent *  ) const
inlinevirtual

Reimplemented in gen::PyquenHadronizer.

Definition at line 70 of file BaseHadronizer.h.

70 { return true;}
void gen::BaseHadronizer::setEDMEvent ( edm::Event event)
inline

Definition at line 68 of file BaseHadronizer.h.

References edmEvent_, and event().

68 { edmEvent_ = &event; }
edm::Event * edmEvent_
std::auto_ptr< HepMC::GenEvent > & event()
void gen::BaseHadronizer::setLHEEvent ( lhef::LHEEvent event)
inline

Definition at line 65 of file BaseHadronizer.h.

References lheEvent_.

65 { lheEvent_.reset(event); }
std::auto_ptr< lhef::LHEEvent > lheEvent_
void gen::BaseHadronizer::setLHERunInfo ( lhef::LHERunInfo runInfo)
inline

Definition at line 64 of file BaseHadronizer.h.

References lheRunInfo_.

64 { lheRunInfo_.reset(runInfo); }
boost::shared_ptr< lhef::LHERunInfo > lheRunInfo_
void gen::BaseHadronizer::setRandomEngine ( CLHEP::HepRandomEngine *  v)
inline

Definition at line 72 of file BaseHadronizer.h.

References doSetRandomEngine().

72 { doSetRandomEngine(v); }
double v[5][pyjets_maxn]
virtual void doSetRandomEngine(CLHEP::HepRandomEngine *v)
std::vector<std::string> const& gen::BaseHadronizer::sharedResources ( ) const
inline

Definition at line 74 of file BaseHadronizer.h.

References doSharedResources().

74 { return doSharedResources(); }
virtual std::vector< std::string > const & doSharedResources() const

Member Data Documentation

edm::Event* gen::BaseHadronizer::edmEvent_
private

Definition at line 107 of file BaseHadronizer.h.

Referenced by getEDMEvent(), and setEDMEvent().

std::auto_ptr<HepMC::GenEvent> gen::BaseHadronizer::genEvent_
private

Definition at line 101 of file BaseHadronizer.h.

Referenced by event(), getGenEvent(), and resetEvent().

std::auto_ptr<GenEventInfoProduct> gen::BaseHadronizer::genEventInfo_
private

Definition at line 102 of file BaseHadronizer.h.

Referenced by eventInfo(), getGenEventInfo(), and resetEventInfo().

GenRunInfoProduct gen::BaseHadronizer::genRunInfo_
private

Definition at line 100 of file BaseHadronizer.h.

Referenced by getGenRunInfo(), and runInfo().

std::vector<std::string> gen::BaseHadronizer::gridpackPaths_
private

Definition at line 113 of file BaseHadronizer.h.

Referenced by BaseHadronizer(), and gridpackPath().

std::auto_ptr<lhef::LHEEvent> gen::BaseHadronizer::lheEvent_
private

Definition at line 105 of file BaseHadronizer.h.

Referenced by lheEvent(), and setLHEEvent().

std::string gen::BaseHadronizer::lheFile_
protected

Definition at line 92 of file BaseHadronizer.h.

Referenced by cleanLHE(), and generateLHE().

boost::shared_ptr<lhef::LHERunInfo> gen::BaseHadronizer::lheRunInfo_
private

Definition at line 104 of file BaseHadronizer.h.

Referenced by getLHERunInfo(), lheRunInfo(), and setLHERunInfo().

int gen::BaseHadronizer::randomIndex_
protected
std::vector<std::string> gen::BaseHadronizer::randomInitConfigDescriptions_
private

Definition at line 112 of file BaseHadronizer.h.

Referenced by BaseHadronizer(), and randomInitConfigDescription().

std::vector<double> gen::BaseHadronizer::randomInitWeights_
private

Definition at line 111 of file BaseHadronizer.h.

Referenced by BaseHadronizer(), and randomizeIndex().

const std::vector< std::string > gen::BaseHadronizer::theSharedResources
staticprivate

Definition at line 109 of file BaseHadronizer.h.

Referenced by doSharedResources().