CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
BeamSpot.cc
Go to the documentation of this file.
1 
16 
17 #include <iostream>
18 
19 
20 namespace reco {
21 
22  using namespace math;
23 
25  // initialize
26  position_ = Point(0.,0.,0.);
27  sigmaZ_ = 0.;
28  dxdz_ = 0.;
29  dydz_ = 0.;
30  BeamWidthX_ = 0.; BeamWidthY_ = 0;
31  for (int j=0; j<7; j++) {
32  for (int k=j; k<7; k++) {
33  error_(j,k) = 0.;
34  }
35  }
36  type_ = Unknown;
37  emittanceX_ = 0;
38  emittanceY_ = 0;
39  betaStar_ = 0;
40  }
41 
42  const BeamSpot::Point BeamSpot::position(const double z) const {
43 
44  Point pos(x(z),y(z),z);
45  return pos;
46 
47  }
48 
49 
50  void BeamSpot::print(std::stringstream& ss) const {
51 
52  ss << "-----------------------------------------------------\n"
53  << " Beam Spot Data\n\n"
54  << " Beam type = " << type() << "\n"
55  << " X0 = " << x0() << " +/- " << x0Error() << " [cm]\n"
56  << " Y0 = " << y0() << " +/- " << y0Error() << " [cm]\n"
57  << " Z0 = " << z0() << " +/- " << z0Error() << " [cm]\n"
58  << " Sigma Z0 = " << sigmaZ() << " +/- " << sigmaZ0Error() << " [cm]\n"
59  << " dxdz = " << dxdz() << " +/- " << dxdzError() << " [radians]\n"
60  << " dydz = " << dydz() << " +/- " << dydzError() << " [radians]\n"
61  << " Beam width X = " << BeamWidthX() << " +/- " << BeamWidthXError() << " [cm]\n"
62  << " Beam width Y = " << BeamWidthY() << " +/- " << BeamWidthYError() << " [cm]\n"
63  << " EmittanceX = " << emittanceX() << " [cm]\n"
64  << " EmittanceY = " << emittanceY() << " [cm]\n"
65  << " beta-star = " << betaStar() << " [cm]\n"
66  << "-----------------------------------------------------\n\n";
67 
68  }
69 
70  //
71  std::ostream& operator<< ( std::ostream& os, BeamSpot beam ) {
72  std::stringstream ss;
73  beam.print(ss);
74  os << ss.str();
75  return os;
76  }
77 
79  {
80  AlgebraicVector3 newZ(dxdz(), dydz(), 1.);
81  AlgebraicVector3 globalZ(0.,0.,1.);
82  AlgebraicVector3 rotationAxis = ROOT::Math::Cross(globalZ.Unit(), newZ.Unit());
83  float rotationAngle = -acos( ROOT::Math::Dot(globalZ.Unit(),newZ.Unit()));
84  Basic3DVector<float> aa(rotationAxis[0],rotationAxis[1],rotationAxis[2]);
85  TkRotation<float> rotation(aa ,rotationAngle);
86  AlgebraicMatrix33 rotationMatrix;
87  rotationMatrix(0,0) = rotation.xx();
88  rotationMatrix(0,1) = rotation.xy();
89  rotationMatrix(0,2) = rotation.xz();
90  rotationMatrix(1,0) = rotation.yx();
91  rotationMatrix(1,1) = rotation.yy();
92  rotationMatrix(1,2) = rotation.yz();
93  rotationMatrix(2,0) = rotation.zx();
94  rotationMatrix(2,1) = rotation.zy();
95  rotationMatrix(2,2) = rotation.zz();
96 
97  AlgebraicSymMatrix33 diagError ;
98  diagError(0,0) = pow(BeamWidthX(),2);
99  diagError(1,1) = pow(BeamWidthY(),2);
100  diagError(2,2) = pow(sigmaZ(),2);
101 
103  matrix = ROOT::Math::Similarity(rotationMatrix, diagError) + covariance3D();
104  return matrix;
105  }
106 
107 }
T xx() const
type
Definition: HCALResponse.h:21
math::Error< dim3 >::type Covariance3DMatrix
Definition: BeamSpot.h:33
BeamSpot()
default constructor
Definition: BeamSpot.cc:24
T yx() const
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:29
std::pair< double, double > Point
Definition: CaloEllipse.h:18
T zx() const
T xy() const
T x() const
Cartesian x coordinate.
T zz() const
std::ostream & operator<<(std::ostream &, BeamSpot beam)
Definition: BeamSpot.cc:71
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
ROOT::Math::SVector< double, 3 > AlgebraicVector3
T zy() const
int j
Definition: DBlmapReader.cc:9
T yy() const
void print(std::stringstream &ss) const
print information
Definition: BeamSpot.cc:50
T xz() const
const Point & position() const
position
Definition: BeamSpot.h:62
Covariance3DMatrix rotatedCovariance3D() const
Definition: BeamSpot.cc:78
T yz() const
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepStd< double, 3, 3 > > AlgebraicMatrix33