Go to the documentation of this file.00001 #ifndef BeamSpot_BeamSpot_h
00002 #define BeamSpot_BeamSpot_h
00003
00014 #include <Rtypes.h>
00015 #include "DataFormats/Math/interface/Error.h"
00016 #include "DataFormats/Math/interface/Point3D.h"
00017 #include <string>
00018 #include <sstream>
00019
00020
00021 namespace reco {
00022
00023 class BeamSpot {
00024 public:
00025
00027 enum BeamType { Unknown=-1, Fake=0, LHC=1, Tracker=2 };
00028
00030 typedef math::XYZPoint Point;
00031 enum { dimension = 7 };
00032 typedef math::Error<dimension>::type CovarianceMatrix;
00033 enum { dim3 = 3 };
00034 typedef math::Error<dim3>::type Covariance3DMatrix;
00035 enum { resdim = 2 };
00036 typedef math::Error<resdim>::type ResCovMatrix;
00037
00039 BeamSpot();
00040
00042 BeamSpot( const Point &point,
00043 double sigmaZ,
00044 double dxdz,
00045 double dydz,
00046 double BeamWidthX,
00047 const CovarianceMatrix &error,
00048 BeamType type = Unknown) {
00049 position_ = point;
00050 sigmaZ_ = sigmaZ;
00051 dxdz_ = dxdz;
00052 dydz_ = dydz;
00053 BeamWidthX_ = BeamWidthX;
00054 BeamWidthY_ = BeamWidthX;
00055 error_ = error;
00056 type_ = type;
00057 emittanceX_ = emittanceY_ = 0;
00058 betaStar_ = 0;
00059 };
00060
00061
00063 const Point & position() const { return position_; }
00065 double x0() const { return position_.X(); }
00067 double y0() const { return position_.Y(); }
00069 double z0() const { return position_.Z(); }
00071 double sigmaZ() const { return sigmaZ_; }
00073 double dxdz() const { return dxdz_; }
00075 double dydz() const { return dydz_; }
00077 double BeamWidthX() const { return BeamWidthX_; }
00079 double BeamWidthY() const { return BeamWidthY_; }
00081 double x0Error() const { return sqrt( error_(0,0) ); }
00083 double y0Error() const { return sqrt( error_(1,1) ); }
00085 double z0Error() const { return sqrt( error_(2,2) ); }
00087 double sigmaZ0Error() const { return sqrt ( error_(3,3) ); }
00089 double dxdzError() const { return sqrt ( error_(4,4) ); }
00091 double dydzError() const { return sqrt ( error_(5,5) ); }
00092
00094 double BeamWidthXError() const { return sqrt ( error_(6,6) );}
00096 double BeamWidthYError() const { return sqrt ( error_(6,6) );}
00097
00099 void setBeamWidthX( double v ) { BeamWidthX_ = v; }
00100 void setBeamWidthY( double v ) { BeamWidthY_ = v; }
00101
00103 double covariance( int i, int j) const {
00104 return error_(i,j);
00105 }
00107 CovarianceMatrix covariance() const { return error_; }
00109 Covariance3DMatrix covariance3D() const {
00110
00111 Covariance3DMatrix matrix;
00112 for (int j=0; j<3; j++) {
00113 for (int k=j; k<3; k++) {
00114 matrix(j,k) = error_(j,k);
00115 }
00116 }
00117 return matrix;
00118 };
00120 BeamType type() const { return type_; }
00122 void setType( BeamType type ) { type_ = type; }
00124 Covariance3DMatrix rotatedCovariance3D() const;
00125
00127 double emittanceX() const { return emittanceX_; }
00128 double emittanceY() const { return emittanceY_; }
00129 double betaStar() const { return betaStar_; }
00130 double beamWidthFromBeta( double z, double e ) const {
00131 return sqrt( e*betaStar_*(1 + pow((z-position_.Z())/betaStar_,2) ) );
00132 }
00134 void setEmittanceX( double v ) { emittanceX_ = v; }
00135 void setEmittanceY( double v ) { emittanceY_ = v; }
00136 void setbetaStar( double v ) { betaStar_ = v; }
00137
00139 void print( std::stringstream& ss ) const;
00140
00141 private:
00143 Point position_;
00145 CovarianceMatrix error_;
00146
00147 Double32_t sigmaZ_;
00148 Double32_t BeamWidthX_;
00149 Double32_t BeamWidthY_;
00150 Double32_t dxdz_;
00151 Double32_t dydz_;
00152 Double32_t emittanceX_;
00153 Double32_t emittanceY_;
00154 Double32_t betaStar_;
00155
00156 BeamType type_;
00157
00158 };
00160 std::ostream& operator<< ( std::ostream&, BeamSpot beam );
00161
00162 }
00163
00164 #endif