1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
#ifndef BEAMSPOTOBJECTS_H
#define BEAMSPOTOBJECTS_H
/** \class BeamSpotObjects
*
* Reconstructed beam spot object. It provides position, error, and
* width of the beam position.
*
* \author Francisco Yumiceva, Fermilab (yumiceva@fnal.gov)
*
* \version $Id: BeamSpotObjects.h,v 1.9 2009/03/26 18:39:42 yumiceva Exp $
*
*/
#include "CondFormats/Serialization/interface/Serializable.h"
#include <cmath>
#include <sstream>
#include <cstring>
class BeamSpotObjects {
public:
/// default constructor
BeamSpotObjects() : sigmaZ_(0), beamwidthX_(0), beamwidthY_(0), dxdz_(0), dydz_(0), type_(-1) {
beamwidthXError_ = 0;
beamwidthYError_ = 0;
emittanceX_ = 0;
emittanceY_ = 0;
betaStar_ = 0;
std::memset(position_, 0, sizeof position_);
std::memset(covariance_, 0, sizeof covariance_);
}
virtual ~BeamSpotObjects() {}
/// set XYZ position
void setPosition(double x, double y, double z) {
position_[0] = x;
position_[1] = y;
position_[2] = z;
};
/// set sigma Z, RMS bunch length
void setSigmaZ(double val) { sigmaZ_ = val; }
/// set dxdz slope, crossing angle
void setdxdz(double val) { dxdz_ = val; }
/// set dydz slope, crossing angle in XZ
void setdydz(double val) { dydz_ = val; }
/// set average transverse beam width X
void setBeamWidthX(double val) { beamwidthX_ = val; }
/// set average transverse beam width Y
void setBeamWidthY(double val) { beamwidthY_ = val; }
/// set beam width X error
void setBeamWidthXError(double val) { beamwidthXError_ = val; }
/// set beam width Y error
void setBeamWidthYError(double val) { beamwidthYError_ = val; }
/// set i,j element of the full covariance matrix 7x7
void setCovariance(int i, int j, double val) { covariance_[i][j] = val; }
/// set beam type
void setType(int type) { type_ = type; }
/// set emittance
void setEmittanceX(double val) { emittanceX_ = val; }
/// set emittance
void setEmittanceY(double val) { emittanceY_ = val; }
/// set beta star
void setBetaStar(double val) { betaStar_ = val; }
/// get X beam position
double x() const { return position_[0]; }
/// get Y beam position
double y() const { return position_[1]; }
/// get Z beam position
double z() const { return position_[2]; }
/// get sigma Z, RMS bunch length
double sigmaZ() const { return sigmaZ_; }
/// get average transverse beam width
double beamWidthX() const { return beamwidthX_; }
/// get average transverse beam width
double beamWidthY() const { return beamwidthY_; }
/// get dxdz slope, crossing angle in XZ
double dxdz() const { return dxdz_; }
/// get dydz slope, crossing angle in YZ
double dydz() const { return dydz_; }
/// get i,j element of the full covariance matrix 7x7
double covariance(int i, int j) const { return covariance_[i][j]; }
/// get X beam position Error
double xError() const { return sqrt(covariance_[0][0]); }
/// get Y beam position Error
double yError() const { return sqrt(covariance_[1][1]); }
/// get Z beam position Error
double zError() const { return sqrt(covariance_[2][2]); }
/// get sigma Z, RMS bunch length Error
double sigmaZError() const { return sqrt(covariance_[3][3]); }
/// get average transverse beam width error ASSUME the same for X and Y
double beamWidthXError() const { return sqrt(covariance_[6][6]); }
/// get average transverse beam width error X = Y
double beamWidthYError() const { return sqrt(covariance_[6][6]); }
/// get dxdz slope, crossing angle in XZ Error
double dxdzError() const { return sqrt(covariance_[4][4]); }
/// get dydz slope, crossing angle in YZ Error
double dydzError() const { return sqrt(covariance_[5][5]); }
/// get beam type
int beamType() const { return type_; }
/// get emittance
double emittanceX() const { return emittanceX_; }
/// get emittance
double emittanceY() const { return emittanceY_; }
/// get beta star
double betaStar() const { return betaStar_; }
/// print beam spot parameters
void print(std::stringstream& ss) const;
protected:
double position_[3];
double sigmaZ_;
double beamwidthX_;
double beamwidthY_;
double beamwidthXError_;
double beamwidthYError_;
double dxdz_;
double dydz_;
double covariance_[7][7];
int type_;
double emittanceX_;
double emittanceY_;
double betaStar_;
COND_SERIALIZABLE;
};
std::ostream& operator<<(std::ostream&, BeamSpotObjects beam);
#endif
|