CMS 3D CMS Logo

GaussEvtVtxGenerator.cc
Go to the documentation of this file.
1 
2 
5 
7 
8 #include "CLHEP/Random/RandGaussQ.h"
9 #include "CLHEP/Units/GlobalSystemOfUnits.h"
10 #include "CLHEP/Units/GlobalPhysicalConstants.h"
11 //#include "CLHEP/Vector/ThreeVector.h"
12 #include "HepMC/SimpleVector.h"
13 
15  readDB_ = p.getParameter<bool>("readDB");
16  if (!readDB_) {
17  fMeanX = p.getParameter<double>("MeanX") * cm;
18  fMeanY = p.getParameter<double>("MeanY") * cm;
19  fMeanZ = p.getParameter<double>("MeanZ") * cm;
20  fSigmaX = p.getParameter<double>("SigmaX") * cm;
21  fSigmaY = p.getParameter<double>("SigmaY") * cm;
22  fSigmaZ = p.getParameter<double>("SigmaZ") * cm;
23  fTimeOffset = p.getParameter<double>("TimeOffset") * ns * c_light; // HepMC distance units are in mm
24 
25  if (fSigmaX < 0) {
26  throw cms::Exception("Configuration") << "Error in GaussEvtVtxGenerator: "
27  << "Illegal resolution in X (SigmaX is negative)";
28  }
29  if (fSigmaY < 0) {
30  throw cms::Exception("Configuration") << "Error in GaussEvtVtxGenerator: "
31  << "Illegal resolution in Y (SigmaY is negative)";
32  }
33  if (fSigmaZ < 0) {
34  throw cms::Exception("Configuration") << "Error in GaussEvtVtxGenerator: "
35  << "Illegal resolution in Z (SigmaZ is negative)";
36  }
37  }
38  if (readDB_) {
39  // NOTE: this is currently watching LS transitions, while it should watch Run transitions,
40  // even though in reality there is no Run Dependent MC (yet) in CMS
41  beamToken_ = esConsumes<SimBeamSpotObjects, SimBeamSpotObjectsRcd, edm::Transition::BeginLuminosityBlock>();
42  }
43 }
44 
46  update(iEventSetup);
47 }
48 
50  if (readDB_ && parameterWatcher_.check(iEventSetup)) {
51  edm::ESHandle<SimBeamSpotObjects> beamhandle = iEventSetup.getHandle(beamToken_);
52  fMeanX = beamhandle->meanX() * cm;
53  fMeanY = beamhandle->meanY() * cm;
54  fMeanZ = beamhandle->meanZ() * cm;
55  fSigmaX = beamhandle->sigmaX() * cm;
56  fSigmaY = beamhandle->sigmaY() * cm;
57  fSigmaZ = beamhandle->sigmaZ() * cm;
58  fTimeOffset = beamhandle->timeOffset() * ns * c_light; // HepMC distance units are in mm
59  }
60 }
61 
62 HepMC::FourVector GaussEvtVtxGenerator::newVertex(CLHEP::HepRandomEngine* engine) const {
63  double X, Y, Z, T;
64  X = CLHEP::RandGaussQ::shoot(engine, fMeanX, fSigmaX);
65  Y = CLHEP::RandGaussQ::shoot(engine, fMeanY, fSigmaY);
66  Z = CLHEP::RandGaussQ::shoot(engine, fMeanZ, fSigmaZ);
67  T = CLHEP::RandGaussQ::shoot(engine, fTimeOffset, fSigmaZ);
68 
69  return HepMC::FourVector(X, Y, Z, T);
70 }
71 
73  if (s >= 0) {
74  fSigmaX = s;
75  } else {
76  throw cms::Exception("LogicError") << "Error in GaussEvtVtxGenerator::sigmaX: "
77  << "Illegal resolution in X (negative)";
78  }
79 }
80 
82  if (s >= 0) {
83  fSigmaY = s;
84  } else {
85  throw cms::Exception("LogicError") << "Error in GaussEvtVtxGenerator::sigmaY: "
86  << "Illegal resolution in Y (negative)";
87  }
88 }
89 
91  if (s >= 0) {
92  fSigmaZ = s;
93  } else {
94  throw cms::Exception("LogicError") << "Error in GaussEvtVtxGenerator::sigmaZ: "
95  << "Illegal resolution in Z (negative)";
96  }
97 }
double sigmaZ() const
double sigmaX() const
get sigmaX, sigmaY, sigmaZ
void sigmaY(double s=1.0)
set resolution in Y in cm
edm::ESGetToken< SimBeamSpotObjects, SimBeamSpotObjectsRcd > beamToken_
double meanX() const
get meanX, meanY, meanZ position
void beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
#define X(str)
Definition: MuonsGrabber.cc:38
void sigmaX(double s=1.0)
set resolution in X in cm
void update(const edm::EventSetup &iEventSetup)
edm::ESWatcher< SimBeamSpotObjectsRcd > parameterWatcher_
GaussEvtVtxGenerator(const edm::ParameterSet &p)
HepMC::FourVector newVertex(CLHEP::HepRandomEngine *) const override
return a new event vertex
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
double timeOffset() const
double meanY() const
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
double meanZ() const
void sigmaZ(double s=1.0)
set resolution in Z in cm
long double T