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.

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  }

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

◆ ~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 176 of file Py8PtAndDxyGun.cc.

176 { return "Py8PtAndDxyGun"; }

◆ generatePartonsAndHadronize()

bool gen::Py8PtAndDxyGun::generatePartonsAndHadronize ( )
overridevirtual

Implements gen::Py8InterfaceBase.

Definition at line 53 of file Py8PtAndDxyGun.cc.

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 
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 
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))) {
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  }

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, get, 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.

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().

gen::Py8PtAndDxyGun::fDxyMax
double fDxyMax
Definition: Py8PtAndDxyGun.cc:26
gen::Py8InterfaceBase::fMasterGen
std::unique_ptr< Pythia8::Pythia > fMasterGen
Definition: Py8InterfaceBase.h:47
gen::Py8PtAndDxyGun::fMaxPt
double fMaxPt
Definition: Py8PtAndDxyGun.cc:23
gen::Py8GunBase::Py8GunBase
Py8GunBase(edm::ParameterSet const &ps)
Definition: Py8GunBase.cc:15
V0Monitor_cff.v0
v0
Definition: V0Monitor_cff.py:7
mps_fire.i
i
Definition: mps_fire.py:428
gen::Py8GunBase::fMinPhi
double fMinPhi
Definition: Py8GunBase.h:58
metsig::tau
Definition: SignAlgoResolutions.h:49
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
gen::P8RndmEngine::flat
double flat() override
Definition: P8RndmEngine.cc:7
multPhiCorr_741_25nsDY_cfi.py
py
Definition: multPhiCorr_741_25nsDY_cfi.py:12
protons_cff.time
time
Definition: protons_cff.py:35
gen::Py8PtAndDxyGun::fDxyMin
double fDxyMin
Definition: Py8PtAndDxyGun.cc:25
gen::Py8PtAndDxyGun::fLzMax
double fLzMax
Definition: Py8PtAndDxyGun.cc:28
gen::Py8PtAndDxyGun::fConeRadius
double fConeRadius
Definition: Py8PtAndDxyGun.cc:29
gen::Py8PtAndDxyGun::fMaxEta
double fMaxEta
Definition: Py8PtAndDxyGun.cc:21
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
EgammaObjectsElectrons_cfi.particleID
particleID
Definition: EgammaObjectsElectrons_cfi.py:4
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
gen::Py8GunBase::evtGenDecay
void evtGenDecay()
Definition: Py8GunBase.cc:144
PVValHelper::eta
Definition: PVValidationHelpers.h:70
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
gen::Py8PtAndDxyGun::fAddAntiParticle
bool fAddAntiParticle
Definition: Py8PtAndDxyGun.cc:24
theta
Geom::Theta< T > theta() const
Definition: Basic3DVectorLD.h:150
gen::Py8PtAndDxyGun::fMinPt
double fMinPt
Definition: Py8PtAndDxyGun.cc:22
gen::Py8InterfaceBase::randomEngine
P8RndmEngine & randomEngine()
Definition: Py8InterfaceBase.h:44
gen::Py8PtAndDxyGun::fDistanceToAPEX
double fDistanceToAPEX
Definition: Py8PtAndDxyGun.cc:31
gen::Py8PtAndDxyGun::fConeH
double fConeH
Definition: Py8PtAndDxyGun.cc:30
edm::ParameterSet
Definition: ParameterSet.h:47
mps_setup.append
append
Definition: mps_setup.py:85
gen::Py8GunBase::fPartIDs
std::vector< int > fPartIDs
Definition: Py8GunBase.h:57
get
#define get
DDAxes::phi
multPhiCorr_741_25nsDY_cfi.px
px
Definition: multPhiCorr_741_25nsDY_cfi.py:10
gen::Py8PtAndDxyGun::fMinEta
double fMinEta
Definition: Py8PtAndDxyGun.cc:20
gen::BaseHadronizer::event
std::unique_ptr< HepMC::GenEvent > & event()
Definition: BaseHadronizer.h:86
PVValHelper::dxy
Definition: PVValidationHelpers.h:48
gen::Py8InterfaceBase::toHepMC
HepMC::Pythia8ToHepMC toHepMC
Definition: Py8InterfaceBase.h:49
EgHLTOffHistBins_cfi.mass
mass
Definition: EgHLTOffHistBins_cfi.py:34
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
createTree.pp
pp
Definition: createTree.py:17
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
JetChargeProducer_cfi.exp
exp
Definition: JetChargeProducer_cfi.py:6
gen::Py8GunBase::fMaxPhi
double fMaxPhi
Definition: Py8GunBase.h:59
event
Definition: event.py:1
gen::Py8PtAndDxyGun::fLxyMax
double fLxyMax
Definition: Py8PtAndDxyGun.cc:27
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443