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
|
/* -*- C++ -*- */
#ifndef HcalUnpacker_h_included
#define HcalUnpacker_h_included 1
#include "DataFormats/HcalDigi/interface/HBHEDataFrame.h"
#include "DataFormats/HcalDigi/interface/HODataFrame.h"
#include "DataFormats/HcalDigi/interface/HFDataFrame.h"
#include "DataFormats/HcalDigi/interface/ZDCDataFrame.h"
#include "DataFormats/HcalDigi/interface/HcalCalibDataFrame.h"
#include "DataFormats/HcalDigi/interface/HcalTriggerPrimitiveDigi.h"
#include "DataFormats/HcalDigi/interface/HOTriggerPrimitiveDigi.h"
#include "DataFormats/HcalDigi/interface/HcalHistogramDigi.h"
#include "DataFormats/HcalDigi/interface/HcalUnpackerReport.h"
#include "DataFormats/FEDRawData/interface/FEDRawData.h"
#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h"
#include "DataFormats/HcalDigi/interface/HcalTTPDigi.h"
#include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
#include "DataFormats/HcalDigi/interface/HcalUMNioDigi.h"
#include <set>
class HcalUnpacker {
public:
struct Collections {
Collections();
std::vector<HBHEDataFrame>* hbheCont;
std::vector<HODataFrame>* hoCont;
std::vector<HFDataFrame>* hfCont;
std::vector<HcalCalibDataFrame>* calibCont;
std::vector<ZDCDataFrame>* zdcCont;
std::vector<HcalTriggerPrimitiveDigi>* tpCont;
std::vector<HOTriggerPrimitiveDigi>* tphoCont;
std::vector<HcalTTPDigi>* ttp;
QIE10DigiCollection* qie10;
QIE10DigiCollection* qie10ZDC;
QIE10DigiCollection* qie10Lasermon;
QIE11DigiCollection* qie11;
// additional qie10 and qie11 data collections
std::unordered_map<int, QIE10DigiCollection*> qie10Addtl;
std::unordered_map<int, QIE11DigiCollection*> qie11Addtl;
HcalUMNioDigi* umnio;
};
/// for normal data
HcalUnpacker(int sourceIdOffset, int beg, int end)
: sourceIdOffset_(sourceIdOffset),
startSample_(beg),
endSample_(end),
expectedOrbitMessageTime_(-1),
mode_(0),
nPrinted_(0) {}
/// For histograms, no begin and end
HcalUnpacker(int sourceIdOffset)
: sourceIdOffset_(sourceIdOffset),
startSample_(-1),
endSample_(-1),
expectedOrbitMessageTime_(-1),
mode_(0),
nPrinted_(0) {}
void setExpectedOrbitMessageTime(int time) { expectedOrbitMessageTime_ = time; }
void unpack(const FEDRawData& raw, const HcalElectronicsMap& emap, std::vector<HcalHistogramDigi>& histoDigis);
void unpack(const FEDRawData& raw,
const HcalElectronicsMap& emap,
Collections& conts,
HcalUnpackerReport& report,
bool silent = false);
void setMode(int mode) { mode_ = mode; }
private:
void unpackVME(const FEDRawData& raw,
const HcalElectronicsMap& emap,
Collections& conts,
HcalUnpackerReport& report,
bool silent = false);
void unpackUTCA(const FEDRawData& raw,
const HcalElectronicsMap& emap,
Collections& conts,
HcalUnpackerReport& report,
bool silent = false);
void unpackUMNio(const FEDRawData& raw, int slot, Collections& colls);
void printInvalidDataMessage(const std::string& coll_type, int default_ns, int conflict_ns, bool extended = false);
int sourceIdOffset_; ///< number to subtract from the source id to get the dcc id
int startSample_; ///< first sample from fed raw data to copy
int endSample_; ///< last sample from fed raw data to copy (if present)
int expectedOrbitMessageTime_; ///< Expected orbit bunch time (needed to evaluate time differences)
int mode_;
std::set<HcalElectronicsId> unknownIds_,
unknownIdsTrig_; ///< Recorded to limit number of times a log message is generated
int nPrinted_;
};
#endif // HcalUnpacker_h_included
|