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 () noexcept(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< Pythia8::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

◆ Py8PtAndDxyGun()

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
Definition: ParameterSet.h:307
Py8GunBase(edm::ParameterSet const &ps)
Definition: Py8GunBase.cc:15

◆ ~Py8PtAndDxyGun()

gen::Py8PtAndDxyGun::~Py8PtAndDxyGun ( )
inlineoverride

Definition at line 13 of file Py8PtAndDxyGun.cc.

13 {}

Member Function Documentation

◆ classname()

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

Implements gen::Py8InterfaceBase.

Definition at line 183 of file Py8PtAndDxyGun.cc.

183 { return "Py8PtAndDxyGun"; }

◆ generatePartonsAndHadronize()

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, dqmiolumiharvest::j, dqm-mbProfile::log, EgHLTOffHistBins_cfi::mass, EgammaObjectsElectrons_cfi::particleID, createTree::pp, DiDispStaMuonMonitor_cfi::pt, multPhiCorr_741_25nsDY_cfi::px, multPhiCorr_741_25nsDY_cfi::py, gen::Py8InterfaceBase::randomEngine(), funct::sin(), findQualityFiles::size, mathSSE::sqrt(), metsig::tau, theta(), protons_cff::time, gen::Py8InterfaceBase::toHepMC, and V0Monitor_cff::v0.

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

Member Data Documentation

◆ fAddAntiParticle

bool gen::Py8PtAndDxyGun::fAddAntiParticle
private

Definition at line 24 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fConeH

double gen::Py8PtAndDxyGun::fConeH
private

Definition at line 30 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fConeRadius

double gen::Py8PtAndDxyGun::fConeRadius
private

Definition at line 29 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fDistanceToAPEX

double gen::Py8PtAndDxyGun::fDistanceToAPEX
private

Definition at line 31 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fDxyMax

double gen::Py8PtAndDxyGun::fDxyMax
private

Definition at line 26 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fDxyMin

double gen::Py8PtAndDxyGun::fDxyMin
private

Definition at line 25 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fLxyMax

double gen::Py8PtAndDxyGun::fLxyMax
private

Definition at line 27 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fLzMax

double gen::Py8PtAndDxyGun::fLzMax
private

Definition at line 28 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fMaxEta

double gen::Py8PtAndDxyGun::fMaxEta
private

Definition at line 21 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fMaxPt

double gen::Py8PtAndDxyGun::fMaxPt
private

Definition at line 23 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fMinEta

double gen::Py8PtAndDxyGun::fMinEta
private

Definition at line 20 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().

◆ fMinPt

double gen::Py8PtAndDxyGun::fMinPt
private

Definition at line 22 of file Py8PtAndDxyGun.cc.

Referenced by generatePartonsAndHadronize(), and Py8PtAndDxyGun().