CMS 3D CMS Logo

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

#include <BeamProfileVtxGenerator.h>

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

Public Member Functions

void beamPos (double m=0)
 set mean in Z in cm More...
 
 BeamProfileVtxGenerator (const edm::ParameterSet &p)
 
 BeamProfileVtxGenerator (const BeamProfileVtxGenerator &p)=delete
 
void eta (double m=0)
 set eta More...
 
TMatrixD const * GetInvLorentzBoost () const override
 
void meanX (double m=0)
 set mean in X in cm More...
 
void meanY (double m=0)
 set mean in Y in cm More...
 
HepMC::FourVector newVertex (CLHEP::HepRandomEngine *) const override
 return a new event vertex More...
 
BeamProfileVtxGeneratoroperator= (const BeamProfileVtxGenerator &rhs)=delete
 
void phi (double m=0)
 set phi in radian More...
 
void psi (double m=999)
 set psi in radian More...
 
void setType (bool m=true)
 set type More...
 
void sigmaX (double s=1.0)
 set resolution in X in cm More...
 
void sigmaY (double s=1.0)
 set resolution in Y in cm More...
 
 ~BeamProfileVtxGenerator () 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 Attributes

std::vector< double > fdistn
 
double fEta
 
bool ffile
 
double fMeanX
 
double fMeanY
 
double fMeanZ
 
double fPhi
 
double fPsi
 
double fSigmaX
 
double fSigmaY
 
double fTheta
 
double fTimeOffset
 
bool fType
 
int nBinx
 
int nBiny
 

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 19 of file BeamProfileVtxGenerator.h.

Constructor & Destructor Documentation

◆ BeamProfileVtxGenerator() [1/2]

BeamProfileVtxGenerator::BeamProfileVtxGenerator ( const edm::ParameterSet p)

Definition at line 19 of file BeamProfileVtxGenerator.cc.

References beamPos(), eta(), fdistn, fEta, ffile, geometryDiff::file, fMeanX, fMeanY, fMeanZ, fPhi, fPsi, fSigmaX, fSigmaY, fTheta, fTimeOffset, fType, mps_fire::i, recoMuon::in, dqmdumpme::last, meanX(), meanY(), nBinx, nBiny, AlCaHLTBitMon_ParallelJobs::p, phi(), psi(), setType(), sigmaX(), sigmaY(), and AlCaHLTBitMon_QueryRunRegistry::string.

20  meanX(p.getParameter<double>("BeamMeanX") * cm);
21  meanY(p.getParameter<double>("BeamMeanY") * cm);
22  beamPos(p.getParameter<double>("BeamPosition") * cm);
23  sigmaX(p.getParameter<double>("BeamSigmaX") * cm);
24  sigmaY(p.getParameter<double>("BeamSigmaY") * cm);
25  double fMinEta = p.getParameter<double>("MinEta");
26  double fMaxEta = p.getParameter<double>("MaxEta");
27  double fMinPhi = p.getParameter<double>("MinPhi");
28  double fMaxPhi = p.getParameter<double>("MaxPhi");
29  eta(0.5 * (fMinEta + fMaxEta));
30  phi(0.5 * (fMinPhi + fMaxPhi));
31  psi(p.getParameter<double>("Psi"));
32  nBinx = p.getParameter<int>("BinX");
33  nBiny = p.getParameter<int>("BinY");
34  ffile = p.getParameter<bool>("UseFile");
35  fTimeOffset = p.getParameter<double>("TimeOffset") * ns * c_light;
36 
37  if (ffile) {
38  std::string file = p.getParameter<std::string>("File");
39  std::ifstream is(file.c_str(), std::ios::in);
40  if (is) {
41  double elem, sum = 0;
42  while (!is.eof()) {
43  is >> elem;
44  fdistn.push_back(elem);
45  sum += elem;
46  }
47  if (((int)(fdistn.size())) >= nBinx * nBiny) {
48  double last = 0;
49  for (unsigned int i = 0; i < fdistn.size(); i++) {
50  fdistn[i] /= sum;
51  fdistn[i] += last;
52  last = fdistn[i];
53  }
54  setType(false);
55  } else {
56  ffile = false;
57  }
58  } else {
59  ffile = false;
60  }
61  }
62  if (!ffile) {
63  setType(p.getParameter<bool>("GaussianProfile"));
64  }
65 
66  edm::LogInfo("VertexGenerator") << "BeamProfileVtxGenerator: with "
67  << "beam along eta = " << fEta << " (Theta = " << fTheta / deg
68  << ") phi = " << fPhi / deg << ") psi = " << fPsi / deg << " centred at (" << fMeanX
69  << ", " << fMeanY << ", " << fMeanZ << ") "
70  << "and spread (" << fSigmaX << ", " << fSigmaY << ") of type Gaussian = " << fType
71  << " use file " << ffile;
72  if (ffile)
73  edm::LogInfo("VertexGenerator") << "With " << nBinx << " bins "
74  << " along X and " << nBiny << " bins along Y";
75 }
void meanY(double m=0)
set mean in Y in cm
void setType(bool m=true)
set type
void meanX(double m=0)
set mean in X in cm
void psi(double m=999)
set psi in radian
std::vector< double > fdistn
void sigmaX(double s=1.0)
set resolution in X in cm
BaseEvtVtxGenerator(const edm::ParameterSet &)
void beamPos(double m=0)
set mean in Z in cm
void phi(double m=0)
set phi in radian
void eta(double m=0)
set eta
Log< level::Info, false > LogInfo
void sigmaY(double s=1.0)
set resolution in Y in cm

◆ BeamProfileVtxGenerator() [2/2]

BeamProfileVtxGenerator::BeamProfileVtxGenerator ( const BeamProfileVtxGenerator p)
delete

Copy constructor

◆ ~BeamProfileVtxGenerator()

BeamProfileVtxGenerator::~BeamProfileVtxGenerator ( )
override

Definition at line 77 of file BeamProfileVtxGenerator.cc.

77 {}

Member Function Documentation

◆ beamPos()

void BeamProfileVtxGenerator::beamPos ( double  m = 0)
inline

◆ eta()

void BeamProfileVtxGenerator::eta ( double  m = 0)

◆ GetInvLorentzBoost()

TMatrixD const* BeamProfileVtxGenerator::GetInvLorentzBoost ( ) const
inlineoverridevirtual

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 32 of file BeamProfileVtxGenerator.h.

32 { return nullptr; }

◆ meanX()

void BeamProfileVtxGenerator::meanX ( double  m = 0)
inline

◆ meanY()

void BeamProfileVtxGenerator::meanY ( double  m = 0)
inline

◆ newVertex()

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

return a new event vertex

Implements BaseEvtVtxGenerator.

Definition at line 80 of file BeamProfileVtxGenerator.cc.

References funct::cos(), fdistn, ffile, fMeanX, fMeanY, fMeanZ, fPhi, fPsi, fSigmaX, fSigmaY, fTheta, fTimeOffset, fType, mps_fire::i, LogDebug, M_PI, nBinx, nBiny, MetAnalyzer::pv(), diffTwoXMLs::r1, and funct::sin().

80  {
81  double aX, aY;
82  if (ffile) {
83  double r1 = engine->flat();
84  int ixy = 0, ix, iy;
85  for (unsigned int i = 0; i < fdistn.size(); i++) {
86  if (r1 > fdistn[i])
87  ixy = i + 1;
88  }
89  if (ixy >= nBinx * nBiny) {
90  ix = nBinx - 1;
91  iy = nBiny - 1;
92  } else {
93  ix = ixy % nBinx;
94  iy = (ixy - ix) / nBinx;
95  }
96  aX = 0.5 * (2 * ix - nBinx + 2 * engine->flat()) * fSigmaX + fMeanX;
97  aY = 0.5 * (2 * iy - nBiny + 2 * engine->flat()) * fSigmaY + fMeanY;
98  } else {
99  if (fType) {
100  aX = fSigmaX * CLHEP::RandGaussQ::shoot(engine) + fMeanX;
101  aY = fSigmaY * CLHEP::RandGaussQ::shoot(engine) + fMeanY;
102  } else {
103  aX = CLHEP::RandFlat::shoot(engine, -0.5 * fSigmaX, 0.5 * fSigmaX) + fMeanX;
104  aY = CLHEP::RandFlat::shoot(engine, -0.5 * fSigmaY, 0.5 * fSigmaY) + fMeanY;
105  }
106  }
107 
108  double xp, yp, zp;
109  if (2. * M_PI < fabs(fPsi)) {
110  xp = -aX * cos(fTheta) * cos(fPhi) + aY * sin(fPhi) + fMeanZ * sin(fTheta) * cos(fPhi);
111  yp = -aX * cos(fTheta) * sin(fPhi) - aY * cos(fPhi) + fMeanZ * sin(fTheta) * sin(fPhi);
112  zp = aX * sin(fTheta) + fMeanZ * cos(fTheta);
113  } else // for endcap testbeam, use 3rd angle psi
114  {
115  const HepGeom::Vector3D<double> av(aX, aY, fMeanZ);
116 
117  /*
118  static const double kRadToDeg ( 180./M_PI ) ;
119  std::cout<<"theta = "<<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
120  <<fTheta*kRadToDeg<<", phi="<<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
121  << fPhi*kRadToDeg <<", PSI="<<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
122  <<fPsi*kRadToDeg<<std::endl ;
123 */
124  const HepGeom::RotateZ3D R1(fPhi - M_PI);
125  const HepGeom::Point3D<double> xUnit(0, 1, 0);
126  const HepGeom::Point3D<double> zUnit(0, 0, 1);
127  const HepGeom::Transform3D RXRZ(HepGeom::Rotate3D(-fTheta, R1 * xUnit) * R1);
128  const HepGeom::Transform3D TRF(HepGeom::Rotate3D(fPsi, RXRZ * zUnit) * RXRZ);
129  /*
130  std::cout<<"\n\n$$$$$$$$$$$Transform="
131  <<" thetaZ = "<<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
132  <<TRF.getRotation().thetaZ()*kRadToDeg
133  <<", phiZ = "<<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
134  <<TRF.getRotation().phiZ()*kRadToDeg
135  <<", thetaY = "<<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
136  <<TRF.getRotation().thetaY()*kRadToDeg
137  <<", phiY = "<<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
138  <<TRF.getRotation().phiY()*kRadToDeg
139  <<", thetaX = "<<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
140  <<TRF.getRotation().thetaX()*kRadToDeg
141  <<", phiX = "<<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
142  <<TRF.getRotation().phiX()*kRadToDeg
143  <<std::setw(7) << std::setiosflags( std::ios::fixed ) << std::setprecision(5)
144  <<TRF.getTranslation()<<std::endl ;
145 */
146  const HepGeom::Vector3D<double> pv(TRF * av);
147 
148  xp = pv.x();
149  yp = pv.y();
150  zp = pv.z();
151  }
152 
153  LogDebug("VertexGenerator") << "BeamProfileVtxGenerator: Vertex created "
154  << "at (" << xp << ", " << yp << ", " << zp << ", " << fTimeOffset << ")";
155  return HepMC::FourVector(xp, yp, zp, fTimeOffset);
156  ;
157 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
std::vector< double > fdistn
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
def pv(vc)
Definition: MetAnalyzer.py:7
#define M_PI
#define LogDebug(id)

◆ operator=()

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

Copy assignment operator

◆ phi()

void BeamProfileVtxGenerator::phi ( double  m = 0)
inline

◆ psi()

void BeamProfileVtxGenerator::psi ( double  m = 999)
inline

◆ setType()

void BeamProfileVtxGenerator::setType ( bool  m = true)

set type

Definition at line 184 of file BeamProfileVtxGenerator.cc.

References fType, and alignCSCRings::s.

Referenced by BeamProfileVtxGenerator().

◆ sigmaX()

void BeamProfileVtxGenerator::sigmaX ( double  s = 1.0)

set resolution in X in cm

Definition at line 159 of file BeamProfileVtxGenerator.cc.

References fSigmaX, and alignCSCRings::s.

Referenced by BeamProfileVtxGenerator().

159  {
160  if (s >= 0) {
161  fSigmaX = s;
162  } else {
163  edm::LogWarning("VertexGenerator") << "Warning BeamProfileVtxGenerator:"
164  << " Illegal resolution in X " << s << "- set to default value 0 cm";
165  fSigmaX = 0;
166  }
167 }
Log< level::Warning, false > LogWarning

◆ sigmaY()

void BeamProfileVtxGenerator::sigmaY ( double  s = 1.0)

set resolution in Y in cm

Definition at line 169 of file BeamProfileVtxGenerator.cc.

References fSigmaY, and alignCSCRings::s.

Referenced by BeamProfileVtxGenerator().

169  {
170  if (s >= 0) {
171  fSigmaY = s;
172  } else {
173  edm::LogWarning("VertexGenerator") << "Warning BeamProfileVtxGenerator:"
174  << " Illegal resolution in Y " << s << "- set to default value 0 cm";
175  fSigmaY = 0;
176  }
177 }
Log< level::Warning, false > LogWarning

Member Data Documentation

◆ fdistn

std::vector<double> BeamProfileVtxGenerator::fdistn
private

Definition at line 64 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), and newVertex().

◆ fEta

double BeamProfileVtxGenerator::fEta
private

Definition at line 58 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), and eta().

◆ ffile

bool BeamProfileVtxGenerator::ffile
private

Definition at line 62 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), and newVertex().

◆ fMeanX

double BeamProfileVtxGenerator::fMeanX
private

Definition at line 57 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), meanX(), and newVertex().

◆ fMeanY

double BeamProfileVtxGenerator::fMeanY
private

Definition at line 57 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), meanY(), and newVertex().

◆ fMeanZ

double BeamProfileVtxGenerator::fMeanZ
private

Definition at line 57 of file BeamProfileVtxGenerator.h.

Referenced by beamPos(), BeamProfileVtxGenerator(), and newVertex().

◆ fPhi

double BeamProfileVtxGenerator::fPhi
private

Definition at line 58 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), newVertex(), and phi().

◆ fPsi

double BeamProfileVtxGenerator::fPsi
private

Definition at line 60 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), newVertex(), and psi().

◆ fSigmaX

double BeamProfileVtxGenerator::fSigmaX
private

Definition at line 56 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), newVertex(), and sigmaX().

◆ fSigmaY

double BeamProfileVtxGenerator::fSigmaY
private

Definition at line 56 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), newVertex(), and sigmaY().

◆ fTheta

double BeamProfileVtxGenerator::fTheta
private

Definition at line 58 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), eta(), and newVertex().

◆ fTimeOffset

double BeamProfileVtxGenerator::fTimeOffset
private

Definition at line 65 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), and newVertex().

◆ fType

bool BeamProfileVtxGenerator::fType
private

Definition at line 62 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), newVertex(), and setType().

◆ nBinx

int BeamProfileVtxGenerator::nBinx
private

Definition at line 63 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), and newVertex().

◆ nBiny

int BeamProfileVtxGenerator::nBiny
private

Definition at line 63 of file BeamProfileVtxGenerator.h.

Referenced by BeamProfileVtxGenerator(), and newVertex().