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
|
/*
* File: DataFormats/Scalers/src/BeamSpotOnline.cc (W.Badgett)
*/
#include "DataFormats/Scalers/interface/BeamSpotOnline.h"
#include "DataFormats/Scalers/interface/ScalersRaw.h"
#include <cstdio>
#include <ostream>
BeamSpotOnline::BeamSpotOnline()
: trigType_(0),
eventID_(0),
sourceID_(0),
bunchNumber_(0),
version_(0),
collectionTime_(0, 0),
x_((float)0.0),
y_((float)0.0),
z_((float)0.0),
dxdz_((float)0.0),
dydz_((float)0.0),
err_x_((float)0.0),
err_y_((float)0.0),
err_z_((float)0.0),
err_dxdz_((float)0.0),
err_dydz_((float)0.0),
width_x_((float)0.0),
width_y_((float)0.0),
sigma_z_((float)0.0),
err_width_x_((float)0.0),
err_width_y_((float)0.0),
err_sigma_z_((float)0.0) {}
BeamSpotOnline::BeamSpotOnline(const unsigned char* rawData) {
BeamSpotOnline();
struct ScalersEventRecordRaw_v4 const* raw = reinterpret_cast<struct ScalersEventRecordRaw_v4 const*>(rawData);
trigType_ = (raw->header >> 56) & 0xFULL;
eventID_ = (raw->header >> 32) & 0x00FFFFFFULL;
sourceID_ = (raw->header >> 8) & 0x00000FFFULL;
bunchNumber_ = (raw->header >> 20) & 0xFFFULL;
version_ = raw->version;
if (version_ >= 4) {
collectionTime_.set_tv_sec(static_cast<long>(raw->beamSpotOnline.collectionTime_sec));
collectionTime_.set_tv_nsec(raw->beamSpotOnline.collectionTime_nsec);
x_ = raw->beamSpotOnline.x;
y_ = raw->beamSpotOnline.y;
z_ = raw->beamSpotOnline.z;
dxdz_ = raw->beamSpotOnline.dxdz;
dydz_ = raw->beamSpotOnline.dydz;
err_x_ = raw->beamSpotOnline.err_x;
err_y_ = raw->beamSpotOnline.err_y;
err_z_ = raw->beamSpotOnline.err_z;
err_dxdz_ = raw->beamSpotOnline.err_dxdz;
err_dydz_ = raw->beamSpotOnline.err_dydz;
width_x_ = raw->beamSpotOnline.width_x;
width_y_ = raw->beamSpotOnline.width_y;
sigma_z_ = raw->beamSpotOnline.sigma_z;
err_width_x_ = raw->beamSpotOnline.err_width_x;
err_width_y_ = raw->beamSpotOnline.err_width_y;
err_sigma_z_ = raw->beamSpotOnline.err_sigma_z;
}
}
BeamSpotOnline::~BeamSpotOnline() {}
/// Pretty-print operator for BeamSpotOnline
std::ostream& operator<<(std::ostream& s, const BeamSpotOnline& c) {
char zeit[128];
constexpr size_t kLineBufferSize = 157;
char line[kLineBufferSize];
struct tm* hora;
s << "BeamSpotOnline Version: " << c.version() << " SourceID: " << c.sourceID() << std::endl;
timespec ts = c.collectionTime();
hora = gmtime(&ts.tv_sec);
strftime(zeit, sizeof(zeit), "%Y.%m.%d %H:%M:%S", hora);
snprintf(line, kLineBufferSize, " CollectionTime: %s.%9.9d", zeit, (int)ts.tv_nsec);
s << line << std::endl;
snprintf(line,
kLineBufferSize,
" TrigType: %d EventID: %d BunchNumber: %d",
c.trigType(),
c.eventID(),
c.bunchNumber());
s << line << std::endl;
snprintf(
line, kLineBufferSize, " x: %e +/- %e width: %e +/- %e", c.x(), c.err_x(), c.width_x(), c.err_width_x());
s << line << std::endl;
snprintf(
line, kLineBufferSize, " y: %e +/- %e width: %e +/- %e", c.y(), c.err_y(), c.width_y(), c.err_width_y());
s << line << std::endl;
snprintf(
line, kLineBufferSize, " z: %e +/- %e sigma: %e +/- %e", c.z(), c.err_z(), c.sigma_z(), c.err_sigma_z());
s << line << std::endl;
snprintf(
line, kLineBufferSize, " dxdy: %e +/- %e dydz: %e +/- %e", c.dxdz(), c.err_dxdz(), c.dydz(), c.err_dydz());
s << line << std::endl;
return s;
}
|