CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
BetafuncEvtVtxGenerator Class Reference

#include <BetafuncEvtVtxGenerator.h>

Inheritance diagram for BetafuncEvtVtxGenerator:
BaseEvtVtxGenerator edm::stream::EDProducer<>

Public Member Functions

void beginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) override
 
 BetafuncEvtVtxGenerator (const edm::ParameterSet &p)
 
 BetafuncEvtVtxGenerator (const BetafuncEvtVtxGenerator &p)=delete
 
double BetaFunction (double z, double z0) const
 beta function More...
 
void betastar (double m=0)
 set beta_star More...
 
void emittance (double m=0)
 emittance (no the normalized) More...
 
TMatrixD const * GetInvLorentzBoost () const override
 
HepMC::FourVector newVertex (CLHEP::HepRandomEngine *) const override
 return a new event vertex More...
 
BetafuncEvtVtxGeneratoroperator= (const BetafuncEvtVtxGenerator &rhs)=delete
 
void sigmaZ (double s=1.0)
 set resolution in Z in cm More...
 
void X0 (double m=0)
 set mean in X in cm More...
 
void Y0 (double m=0)
 set mean in Y in cm More...
 
void Z0 (double m=0)
 set mean in Z in cm More...
 
 ~BetafuncEvtVtxGenerator () override
 
- Public Member Functions inherited from BaseEvtVtxGenerator
 BaseEvtVtxGenerator (const edm::ParameterSet &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
 ~BaseEvtVtxGenerator () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Member Functions

void setBoost (double alpha, double phi)
 
void update (const edm::EventSetup &iEventSetup)
 

Private Attributes

edm::ESGetToken< SimBeamSpotObjects, SimBeamSpotObjectsRcdbeamToken_
 
TMatrixD boost_
 
double fbetastar
 
double femittance
 
double fSigmaZ
 
double fTimeOffset
 
double fX0
 
double fY0
 
double fZ0
 
edm::ESWatcher< SimBeamSpotObjectsRcdparameterWatcher_
 
bool readDB_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 31 of file BetafuncEvtVtxGenerator.h.

Constructor & Destructor Documentation

◆ BetafuncEvtVtxGenerator() [1/2]

BetafuncEvtVtxGenerator::BetafuncEvtVtxGenerator ( const edm::ParameterSet p)

Definition at line 32 of file BetafuncEvtVtxGenerator.cc.

References beamToken_, Exception, fbetastar, femittance, fSigmaZ, fTimeOffset, fX0, fY0, fZ0, AlCaHLTBitMon_ParallelJobs::p, readDB_, and setBoost().

32  : BaseEvtVtxGenerator(p), boost_(4, 4) {
33  readDB_ = p.getParameter<bool>("readDB");
34  if (!readDB_) {
35  fX0 = p.getParameter<double>("X0") * cm;
36  fY0 = p.getParameter<double>("Y0") * cm;
37  fZ0 = p.getParameter<double>("Z0") * cm;
38  fSigmaZ = p.getParameter<double>("SigmaZ") * cm;
39  fbetastar = p.getParameter<double>("BetaStar") * cm;
40  femittance = p.getParameter<double>("Emittance") * cm; // this is not the normalized emittance
41  fTimeOffset = p.getParameter<double>("TimeOffset") * ns * c_light; // HepMC distance units are mm
42 
43  setBoost(p.getParameter<double>("Alpha") * radian, p.getParameter<double>("Phi") * radian);
44  if (fSigmaZ <= 0) {
45  throw cms::Exception("Configuration") << "Error in BetafuncEvtVtxGenerator: "
46  << "Illegal resolution in Z (SigmaZ is negative)";
47  }
48  }
49  if (readDB_) {
50  // NOTE: this is currently watching LS transitions, while it should watch Run transitions,
51  // even though in reality there is no Run Dependent MC (yet) in CMS
52  beamToken_ = esConsumes<SimBeamSpotObjects, SimBeamSpotObjectsRcd, edm::Transition::BeginLuminosityBlock>();
53  }
54 }
void setBoost(double alpha, double phi)
BaseEvtVtxGenerator(const edm::ParameterSet &)
edm::ESGetToken< SimBeamSpotObjects, SimBeamSpotObjectsRcd > beamToken_

◆ BetafuncEvtVtxGenerator() [2/2]

BetafuncEvtVtxGenerator::BetafuncEvtVtxGenerator ( const BetafuncEvtVtxGenerator p)
delete

Copy constructor

◆ ~BetafuncEvtVtxGenerator()

BetafuncEvtVtxGenerator::~BetafuncEvtVtxGenerator ( )
override

Definition at line 56 of file BetafuncEvtVtxGenerator.cc.

56 {}

Member Function Documentation

◆ beginLuminosityBlock()

void BetafuncEvtVtxGenerator::beginLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &  iEventSetup 
)
override

Definition at line 58 of file BetafuncEvtVtxGenerator.cc.

References update().

58  {
59  update(iEventSetup);
60 }
void update(const edm::EventSetup &iEventSetup)

◆ BetaFunction()

double BetafuncEvtVtxGenerator::BetaFunction ( double  z,
double  z0 
) const

beta function

Definition at line 98 of file BetafuncEvtVtxGenerator.cc.

References fbetastar, femittance, mathSSE::sqrt(), z, and HLTMuonOfflineAnalyzer_cfi::z0.

Referenced by newVertex().

◆ betastar()

void BetafuncEvtVtxGenerator::betastar ( double  m = 0)
inline

◆ emittance()

void BetafuncEvtVtxGenerator::emittance ( double  m = 0)
inline

◆ GetInvLorentzBoost()

TMatrixD const * BetafuncEvtVtxGenerator::GetInvLorentzBoost ( ) const
overridevirtual

This method - and the comment - is a left-over from COBRA-OSCAR time : return the last generated event vertex. If no vertex has been generated yet, a NULL pointer is returned.

Implements BaseEvtVtxGenerator.

Definition at line 144 of file BetafuncEvtVtxGenerator.cc.

References boost_.

144 { return &boost_; }

◆ newVertex()

HepMC::FourVector BetafuncEvtVtxGenerator::newVertex ( CLHEP::HepRandomEngine *  engine) const
overridevirtual

return a new event vertex

Implements BaseEvtVtxGenerator.

Definition at line 76 of file BetafuncEvtVtxGenerator.cc.

References BetaFunction(), fSigmaZ, fTimeOffset, fX0, fY0, fZ0, mathSSE::sqrt(), X, beamSpotPI::Y, and beamSpotPI::Z.

76  {
77  double X, Y, Z;
78 
79  double tmp_sigz = CLHEP::RandGaussQ::shoot(engine, 0., fSigmaZ);
80  Z = tmp_sigz + fZ0;
81 
82  double tmp_sigx = BetaFunction(Z, fZ0);
83  // need sqrt(2) for beamspot width relative to single beam width
84  tmp_sigx /= sqrt(2.0);
85  X = CLHEP::RandGaussQ::shoot(engine, 0., tmp_sigx) + fX0; // + Z*fdxdz ;
86 
87  double tmp_sigy = BetaFunction(Z, fZ0);
88  // need sqrt(2) for beamspot width relative to single beam width
89  tmp_sigy /= sqrt(2.0);
90  Y = CLHEP::RandGaussQ::shoot(engine, 0., tmp_sigy) + fY0; // + Z*fdydz;
91 
92  double tmp_sigt = CLHEP::RandGaussQ::shoot(engine, 0., fSigmaZ);
93  double T = tmp_sigt + fTimeOffset;
94 
95  return HepMC::FourVector(X, Y, Z, T);
96 }
double BetaFunction(double z, double z0) const
beta function
#define X(str)
Definition: MuonsGrabber.cc:38
T sqrt(T t)
Definition: SSEVec.h:19
long double T

◆ operator=()

BetafuncEvtVtxGenerator& BetafuncEvtVtxGenerator::operator= ( const BetafuncEvtVtxGenerator rhs)
delete

Copy assignment operator

◆ setBoost()

void BetafuncEvtVtxGenerator::setBoost ( double  alpha,
double  phi 
)
private

Definition at line 102 of file BetafuncEvtVtxGenerator.cc.

References simBeamSpotPI::alpha, boost_, funct::cos(), phi, funct::sin(), and funct::tan().

Referenced by BetafuncEvtVtxGenerator(), and update().

102  {
103  //boost_.ResizeTo(4,4);
104  //boost_ = new TMatrixD(4,4);
105  TMatrixD tmpboost(4, 4);
106 
107  //if ( (alpha_ == 0) && (phi_==0) ) { boost_->Zero(); return boost_; }
108 
109  // Lorentz boost to frame where the collision is head-on
110  // phi is the half crossing angle in the plane ZS
111  // alpha is the angle to the S axis from the X axis in the XY plane
112 
113  tmpboost(0, 0) = 1. / cos(phi);
114  tmpboost(0, 1) = -cos(alpha) * sin(phi);
115  tmpboost(0, 2) = -tan(phi) * sin(phi);
116  tmpboost(0, 3) = -sin(alpha) * sin(phi);
117  tmpboost(1, 0) = -cos(alpha) * tan(phi);
118  tmpboost(1, 1) = 1.;
119  tmpboost(1, 2) = cos(alpha) * tan(phi);
120  tmpboost(1, 3) = 0.;
121  tmpboost(2, 0) = 0.;
122  tmpboost(2, 1) = -cos(alpha) * sin(phi);
123  tmpboost(2, 2) = cos(phi);
124  tmpboost(2, 3) = -sin(alpha) * sin(phi);
125  tmpboost(3, 0) = -sin(alpha) * tan(phi);
126  tmpboost(3, 1) = 0.;
127  tmpboost(3, 2) = sin(alpha) * tan(phi);
128  tmpboost(3, 3) = 1.;
129 
130  tmpboost.Invert();
131  boost_ = tmpboost;
132  //boost_->Print();
133 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Tan< T >::type tan(const T &t)
Definition: Tan.h:22

◆ sigmaZ()

void BetafuncEvtVtxGenerator::sigmaZ ( double  s = 1.0)

set resolution in Z in cm

Definition at line 135 of file BetafuncEvtVtxGenerator.cc.

References Exception, fSigmaZ, and alignCSCRings::s.

135  {
136  if (s >= 0) {
137  fSigmaZ = s;
138  } else {
139  throw cms::Exception("LogicError") << "Error in BetafuncEvtVtxGenerator::sigmaZ: "
140  << "Illegal resolution in Z (negative)";
141  }
142 }

◆ update()

void BetafuncEvtVtxGenerator::update ( const edm::EventSetup iEventSetup)
private

Definition at line 62 of file BetafuncEvtVtxGenerator.cc.

References SimBeamSpotObjects::alpha(), beamToken_, SimBeamSpotObjects::betaStar(), edm::ESWatcher< T >::check(), SimBeamSpotObjects::emittance(), fbetastar, femittance, fSigmaZ, fTimeOffset, fX0, fY0, fZ0, edm::EventSetup::getHandle(), parameterWatcher_, SimBeamSpotObjects::phi(), readDB_, setBoost(), SimBeamSpotObjects::sigmaZ(), SimBeamSpotObjects::timeOffset(), SimBeamSpotObjects::x(), SimBeamSpotObjects::y(), and SimBeamSpotObjects::z().

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), beginLuminosityBlock(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

62  {
63  if (readDB_ && parameterWatcher_.check(iEventSetup)) {
64  edm::ESHandle<SimBeamSpotObjects> beamhandle = iEventSetup.getHandle(beamToken_);
65  fX0 = beamhandle->x() * cm;
66  fY0 = beamhandle->y() * cm;
67  fZ0 = beamhandle->z() * cm;
68  fSigmaZ = beamhandle->sigmaZ() * cm;
69  fTimeOffset = beamhandle->timeOffset() * ns * c_light; // HepMC distance units are in mm
70  fbetastar = beamhandle->betaStar() * cm;
71  femittance = beamhandle->emittance() * cm;
72  setBoost(beamhandle->alpha() * radian, beamhandle->phi() * radian);
73  }
74 }
double sigmaZ() const
get sigmaZ
void setBoost(double alpha, double phi)
double alpha() const
get Alpha
edm::ESGetToken< SimBeamSpotObjects, SimBeamSpotObjectsRcd > beamToken_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
double timeOffset() const
get TimeOffset
edm::ESWatcher< SimBeamSpotObjectsRcd > parameterWatcher_
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
double z() const
get Z position
double emittance() const
get Emittance
double phi() const
get Phi
double betaStar() const
get BetaStar
double x() const
get X position
double y() const
get Y position

◆ X0()

void BetafuncEvtVtxGenerator::X0 ( double  m = 0)
inline

◆ Y0()

void BetafuncEvtVtxGenerator::Y0 ( double  m = 0)
inline

◆ Z0()

void BetafuncEvtVtxGenerator::Z0 ( double  m = 0)
inline

Member Data Documentation

◆ beamToken_

edm::ESGetToken<SimBeamSpotObjects, SimBeamSpotObjectsRcd> BetafuncEvtVtxGenerator::beamToken_
private

Definition at line 83 of file BetafuncEvtVtxGenerator.h.

Referenced by BetafuncEvtVtxGenerator(), and update().

◆ boost_

TMatrixD BetafuncEvtVtxGenerator::boost_
private

Definition at line 79 of file BetafuncEvtVtxGenerator.h.

Referenced by GetInvLorentzBoost(), and setBoost().

◆ fbetastar

double BetafuncEvtVtxGenerator::fbetastar
private

Definition at line 75 of file BetafuncEvtVtxGenerator.h.

Referenced by BetafuncEvtVtxGenerator(), BetaFunction(), betastar(), and update().

◆ femittance

double BetafuncEvtVtxGenerator::femittance
private

Definition at line 75 of file BetafuncEvtVtxGenerator.h.

Referenced by BetafuncEvtVtxGenerator(), BetaFunction(), emittance(), and update().

◆ fSigmaZ

double BetafuncEvtVtxGenerator::fSigmaZ
private

Definition at line 73 of file BetafuncEvtVtxGenerator.h.

Referenced by BetafuncEvtVtxGenerator(), newVertex(), sigmaZ(), and update().

◆ fTimeOffset

double BetafuncEvtVtxGenerator::fTimeOffset
private

Definition at line 77 of file BetafuncEvtVtxGenerator.h.

Referenced by BetafuncEvtVtxGenerator(), newVertex(), and update().

◆ fX0

double BetafuncEvtVtxGenerator::fX0
private

Definition at line 72 of file BetafuncEvtVtxGenerator.h.

Referenced by BetafuncEvtVtxGenerator(), newVertex(), update(), and X0().

◆ fY0

double BetafuncEvtVtxGenerator::fY0
private

Definition at line 72 of file BetafuncEvtVtxGenerator.h.

Referenced by BetafuncEvtVtxGenerator(), newVertex(), update(), and Y0().

◆ fZ0

double BetafuncEvtVtxGenerator::fZ0
private

Definition at line 72 of file BetafuncEvtVtxGenerator.h.

Referenced by BetafuncEvtVtxGenerator(), newVertex(), update(), and Z0().

◆ parameterWatcher_

edm::ESWatcher<SimBeamSpotObjectsRcd> BetafuncEvtVtxGenerator::parameterWatcher_
private

Definition at line 82 of file BetafuncEvtVtxGenerator.h.

Referenced by update().

◆ readDB_

bool BetafuncEvtVtxGenerator::readDB_
private

Definition at line 70 of file BetafuncEvtVtxGenerator.h.

Referenced by BetafuncEvtVtxGenerator(), and update().