-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
BeamSpotOnline.cc
111 lines (96 loc) · 3.32 KB
/
BeamSpotOnline.cc
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
/*
* 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];
char line[128];
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);
sprintf(line, " CollectionTime: %s.%9.9d", zeit,
(int)ts.tv_nsec);
s << line << std::endl;
sprintf(line, " TrigType: %d EventID: %d BunchNumber: %d",
c.trigType(), c.eventID(), c.bunchNumber());
s << line << std::endl;
sprintf(line," x: %e +/- %e width: %e +/- %e",
c.x(), c.err_x(), c.width_x(), c.err_width_x());
s << line << std::endl;
sprintf(line," y: %e +/- %e width: %e +/- %e",
c.y(), c.err_y(), c.width_y(), c.err_width_y());
s << line << std::endl;
sprintf(line," z: %e +/- %e sigma: %e +/- %e",
c.z(), c.err_z(), c.sigma_z(), c.err_sigma_z());
s << line << std::endl;
sprintf(line," dxdy: %e +/- %e dydz: %e +/- %e",
c.dxdz(), c.err_dxdz(), c.dydz(), c.err_dydz());
s << line << std::endl;
return s;
}