CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/DataFormats/BeamSpot/interface/BeamSpot.h

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