CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
gen::Py8PtAndDxyGun Class Reference
Inheritance diagram for gen::Py8PtAndDxyGun:
gen::Py8GunBase gen::Py8InterfaceBase gen::BaseHadronizer

Public Member Functions

const char * classname () const override
 
bool generatePartonsAndHadronize () override
 
 Py8PtAndDxyGun (edm::ParameterSet const &)
 
 ~Py8PtAndDxyGun () override
 
- Public Member Functions inherited from gen::Py8GunBase
void evtGenDecay ()
 
void finalizeEvent () override
 
bool initializeForInternalPartons () override
 
 Py8GunBase (edm::ParameterSet const &ps)
 
virtual bool residualDecay ()
 
void setRandomEngine (CLHEP::HepRandomEngine *v)
 
std::vector< std::string > const & sharedResources () const
 
void statistics () override
 
 ~Py8GunBase () override
 
- Public Member Functions inherited from gen::Py8InterfaceBase
bool decay ()
 
bool declareSpecialSettings (const std::vector< std::string > &)
 
bool declareStableParticles (const std::vector< int > &)
 
void makeTmpSLHA (const std::string &)
 
void p8SetRandomEngine (CLHEP::HepRandomEngine *v)
 
 Py8InterfaceBase (edm::ParameterSet const &ps)
 
P8RndmEnginerandomEngine ()
 
bool readSettings (int)
 
 ~Py8InterfaceBase () override
 
- Public Member Functions inherited from gen::BaseHadronizer
 BaseHadronizer (edm::ParameterSet const &ps)
 
void cleanLHE ()
 
void generateLHE (edm::LuminosityBlock const &lumi, CLHEP::HepRandomEngine *rengine, unsigned int ncpu)
 
edm::EventgetEDMEvent () const
 
std::unique_ptr< HepMC::GenEventgetGenEvent ()
 
std::unique_ptr< GenEventInfoProductgetGenEventInfo ()
 
virtual std::unique_ptr< GenLumiInfoHeadergetGenLumiInfoHeader () const
 
GenRunInfoProductgetGenRunInfo ()
 
std::unique_ptr< lhef::LHEEventgetLHEEvent ()
 
const std::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 (std::unique_ptr< HepMC::GenEvent > event)
 
void resetEventInfo (std::unique_ptr< GenEventInfoProduct > eventInfo)
 
virtual bool select (HepMC::GenEvent *) const
 
void setEDMEvent (edm::Event &event)
 
void setLHEEvent (std::unique_ptr< lhef::LHEEvent > event)
 
void setLHERunInfo (std::unique_ptr< lhef::LHERunInfo > runInfo)
 
void setRandomEngine (CLHEP::HepRandomEngine *v)
 
std::vector< std::string > const & sharedResources () const
 
virtual ~BaseHadronizer ()(false)
 

Private Attributes

bool fAddAntiParticle
 
double fConeH
 
double fConeRadius
 
double fDistanceToAPEX
 
double fDxyMax
 
double fDxyMin
 
double fLxyMax
 
double fLzMax
 
double fMaxEta
 
double fMaxPt
 
double fMinEta
 
double fMinPt
 

Additional Inherited Members

- Protected Member Functions inherited from gen::BaseHadronizer
std::unique_ptr< HepMC::GenEvent > & event ()
 
std::unique_ptr< GenEventInfoProduct > & eventInfo ()
 
lhef::LHEEventlheEvent ()
 
lhef::LHERunInfolheRunInfo ()
 
GenRunInfoProductrunInfo ()
 
- Protected Attributes inherited from gen::Py8GunBase
double fMaxPhi
 
double fMinPhi
 
std::vector< int > fPartIDs
 
- Protected Attributes inherited from gen::Py8InterfaceBase
HepMC::IO_AsciiParticles * ascii_io
 
std::shared_ptr< EvtGenDecays > evtgenDecays
 
std::string evtgenDecFile
 
std::string evtgenPdlFile
 
std::vector< std::string > evtgenUserFiles
 
std::unique_ptr< Pythia8::Pythia > fDecayer
 
std::unique_ptr< Pythia8::Pythia > fMasterGen
 
edm::ParameterSet fParameters
 
unsigned int maxEventsToPrint
 
bool pythiaHepMCVerbosity
 
bool pythiaHepMCVerbosityParticles
 
unsigned int pythiaPylistVerbosity
 
std::string slhafile_
 
HepMC::Pythia8ToHepMC toHepMC
 
bool useEvtGen
 
- Protected Attributes inherited from gen::BaseHadronizer
std::string lheFile_
 
int randomIndex_
 

Detailed Description

Definition at line 10 of file Py8PtAndDxyGun.cc.

Constructor & Destructor Documentation

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

Definition at line 36 of file Py8PtAndDxyGun.cc.

References fAddAntiParticle, fConeH, fConeRadius, fDistanceToAPEX, fDxyMax, fDxyMin, fLxyMax, fLzMax, fMaxEta, fMaxPt, fMinEta, fMinPt, and edm::ParameterSet::getParameter().

36  : Py8GunBase(ps) {
37  // ParameterSet defpset ;
38  edm::ParameterSet pgun_params = ps.getParameter<edm::ParameterSet>("PGunParameters"); // , defpset ) ;
39  fMinEta = pgun_params.getParameter<double>("MinEta"); // ,-2.2);
40  fMaxEta = pgun_params.getParameter<double>("MaxEta"); // , 2.2);
41  fMinPt = pgun_params.getParameter<double>("MinPt"); // , 0.);
42  fMaxPt = pgun_params.getParameter<double>("MaxPt"); // , 0.);
43  fAddAntiParticle = pgun_params.getParameter<bool>("AddAntiParticle"); //, false) ;
44  fDxyMin = pgun_params.getParameter<double>("dxyMin");
45  fDxyMax = pgun_params.getParameter<double>("dxyMax");
46  fLxyMax = pgun_params.getParameter<double>("LxyMax");
47  fLzMax = pgun_params.getParameter<double>("LzMax");
48  fConeRadius = pgun_params.getParameter<double>("ConeRadius");
49  fConeH = pgun_params.getParameter<double>("ConeH");
50  fDistanceToAPEX = pgun_params.getParameter<double>("DistanceToAPEX");
51  }
T getParameter(std::string const &) const
Py8GunBase(edm::ParameterSet const &ps)
Definition: Py8GunBase.cc:15
gen::Py8PtAndDxyGun::~Py8PtAndDxyGun ( )
inlineoverride

Definition at line 13 of file Py8PtAndDxyGun.cc.

References classname(), and generatePartonsAndHadronize().

13 {}

Member Function Documentation

const char * gen::Py8PtAndDxyGun::classname ( ) const
overridevirtual

Implements gen::Py8InterfaceBase.

Definition at line 176 of file Py8PtAndDxyGun.cc.

Referenced by ~Py8PtAndDxyGun().

176 { return "Py8PtAndDxyGun"; }
bool gen::Py8PtAndDxyGun::generatePartonsAndHadronize ( )
overridevirtual

Implements gen::Py8InterfaceBase.

Definition at line 53 of file Py8PtAndDxyGun.cc.

References funct::abs(), mps_setup::append, funct::cos(), PVValHelper::dxy, PVValHelper::eta, gen::BaseHadronizer::event(), gen::Py8GunBase::evtGenDecay(), JetChargeProducer_cfi::exp, fAddAntiParticle, fConeH, fConeRadius, fDistanceToAPEX, fDxyMax, fDxyMin, gen::P8RndmEngine::flat(), fLxyMax, fLzMax, gen::Py8InterfaceBase::fMasterGen, fMaxEta, gen::Py8GunBase::fMaxPhi, fMaxPt, fMinEta, gen::Py8GunBase::fMinPhi, fMinPt, gen::Py8GunBase::fPartIDs, mps_fire::i, cmsBatch::log, ResonanceBuilder::mass, EgammaObjectsElectrons_cfi::particleID, createTree::pp, EnergyCorrector::pt, gen::Py8InterfaceBase::randomEngine(), funct::sin(), findQualityFiles::size, mathSSE::sqrt(), metsig::tau, theta(), protons_cff::time, and gen::Py8InterfaceBase::toHepMC.

Referenced by ~Py8PtAndDxyGun().

53  {
54  fMasterGen->event.reset();
55 
56  for (size_t i = 0; i < fPartIDs.size(); i++) {
57  int particleID = fPartIDs[i]; // this is PDG - need to convert to Py8 ???
58 
59  double phi = 0;
60  double dxy = 0;
61  double pt = 0;
62  double eta = 0;
63  double px = 0;
64  double py = 0;
65  double pz = 0;
66  double mass = 0;
67  double ee = 0;
68  double vx = 0;
69  double vy = 0;
70  double vz = 0;
71  double lxy = 0;
72 
73  bool passLoop = false;
74  while (!passLoop) {
75  bool passLxy = false;
76  bool passLz = false;
77 
78  phi = (fMaxPhi - fMinPhi) * randomEngine().flat() + fMinPhi;
79  dxy = (fDxyMax - fDxyMin) * randomEngine().flat() + fDxyMin;
80  float dxysign = randomEngine().flat() - 0.5;
81  if (dxysign < 0)
82  dxy = -dxy;
83 
84  pt = (fMaxPt - fMinPt) * randomEngine().flat() + fMinPt;
85  px = pt * cos(phi);
86  py = pt * sin(phi);
87 
88  for (int i = 0; i < 10000; i++) {
89  vx = 2 * fLxyMax * randomEngine().flat() - fLxyMax;
90  vy = (pt * dxy + vx * py) / px;
91  lxy = sqrt(vx * vx + vy * vy);
92  if (lxy < std::abs(fLxyMax) && (vx * px + vy * py) > 0) {
93  passLxy = true;
94  break;
95  }
96  }
97 
98  eta = (fMaxEta - fMinEta) * randomEngine().flat() + fMinEta;
99  double theta = 2. * atan(exp(-eta));
100 
101  mass = (fMasterGen->particleData).m0(particleID);
102 
103  double pp = pt / sin(theta); // sqrt( ee*ee - mass*mass );
104  ee = sqrt(pp * pp + mass * mass);
105 
106  pz = pp * cos(theta);
107 
108  float coneTheta = fConeRadius / fConeH;
109  for (int j = 0; j < 100; j++) {
110  vz = fLzMax * randomEngine().flat(); // this is abs(vz)
111  float v0 = vz - fDistanceToAPEX;
112  if (v0 <= 0 || lxy * lxy / (coneTheta * coneTheta) > v0 * v0) {
113  passLz = true;
114  break;
115  }
116  }
117  if (pz < 0)
118  vz = -vz;
119  passLoop = (passLxy && passLz);
120 
121  if (passLoop)
122  break;
123  }
124 
125  float time = sqrt(vx * vx + vy * vy + vz * vz);
126 
127  if (!((fMasterGen->particleData).isParticle(particleID))) {
128  particleID = std::abs(particleID);
129  }
130  if (1 <= std::abs(particleID) && std::abs(particleID) <= 6) // quarks
131  (fMasterGen->event).append(particleID, 23, 101, 0, px, py, pz, ee, mass);
132  else if (std::abs(particleID) == 21) // gluons
133  (fMasterGen->event).append(21, 23, 101, 102, px, py, pz, ee, mass);
134  // other
135  else {
136  (fMasterGen->event).append(particleID, 1, 0, 0, px, py, pz, ee, mass);
137  int eventSize = (fMasterGen->event).size() - 1;
138  // -log(flat) = exponential distribution
139  double tauTmp = -(fMasterGen->event)[eventSize].tau0() * log(randomEngine().flat());
140  (fMasterGen->event)[eventSize].tau(tauTmp);
141  }
142  (fMasterGen->event).back().vProd(vx, vy, vz, time);
143 
144  // Here also need to add anti-particle (if any)
145  // otherwise just add a 2nd particle of the same type
146  // (for example, gamma)
147  //
148  if (fAddAntiParticle) {
149  if (1 <= std::abs(particleID) && std::abs(particleID) <= 6) { // quarks
150  (fMasterGen->event).append(-particleID, 23, 0, 101, -px, -py, -pz, ee, mass);
151  } else if (std::abs(particleID) == 21) { // gluons
152  (fMasterGen->event).append(21, 23, 102, 101, -px, -py, -pz, ee, mass);
153  } else {
154  if ((fMasterGen->particleData).isParticle(-particleID)) {
155  (fMasterGen->event).append(-particleID, 1, 0, 0, -px, -py, -pz, ee, mass);
156  } else {
157  (fMasterGen->event).append(particleID, 1, 0, 0, -px, -py, -pz, ee, mass);
158  }
159  int eventSize = (fMasterGen->event).size() - 1;
160  // -log(flat) = exponential distribution
161  double tauTmp = -(fMasterGen->event)[eventSize].tau0() * log(randomEngine().flat());
162  (fMasterGen->event)[eventSize].tau(tauTmp);
163  }
164  (fMasterGen->event).back().vProd(-vx, -vy, -vz, time);
165  }
166  }
167 
168  if (!fMasterGen->next())
169  return false;
170  evtGenDecay();
171 
172  event() = std::make_unique<HepMC::GenEvent>();
173  return toHepMC.fill_next_event(fMasterGen->event, event().get());
174  }
size
Write out results.
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
double fMinPhi
Definition: Py8GunBase.h:60
Geom::Theta< T > theta() const
double flat() override
Definition: P8RndmEngine.cc:7
void evtGenDecay()
Definition: Py8GunBase.cc:159
T sqrt(T t)
Definition: SSEVec.h:18
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::unique_ptr< HepMC::GenEvent > & event()
std::vector< int > fPartIDs
Definition: Py8GunBase.h:59
P8RndmEngine & randomEngine()
double fMaxPhi
Definition: Py8GunBase.h:61
HepMC::Pythia8ToHepMC toHepMC
std::unique_ptr< Pythia8::Pythia > fMasterGen
Definition: event.py:1

Member Data Documentation

bool gen::Py8PtAndDxyGun::fAddAntiParticle
private

Definition at line 24 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fConeH
private

Definition at line 30 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fConeRadius
private

Definition at line 29 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fDistanceToAPEX
private

Definition at line 31 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fDxyMax
private

Definition at line 26 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fDxyMin
private

Definition at line 25 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fLxyMax
private

Definition at line 27 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fLzMax
private

Definition at line 28 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fMaxEta
private

Definition at line 21 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fMaxPt
private

Definition at line 23 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fMinEta
private

Definition at line 20 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

double gen::Py8PtAndDxyGun::fMinPt
private

Definition at line 22 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().