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
|
//_________________________________________________________
//
// CSCTMBMiniScope July 2010 Alexander Sakharov
// Unpacks TMB Logic MiniScope Analyzer and stores in CSCTMBMiniScope.h
//_________________________________________________________
//
#include "EventFilter/CSCRawToDigi/interface/CSCTMBMiniScope.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include <iostream>
CSCTMBMiniScope::CSCTMBMiniScope(const uint16_t *buf, int Line6b07, int Line6E07) {
size_ = UnpackMiniScope(buf, Line6b07, Line6E07);
} ///CSCTMBMiniScope
int CSCTMBMiniScope::UnpackMiniScope(const uint16_t *buf, int Line6b07, int Line6E07) {
if ((Line6E07 - Line6b07) != 0) {
/// Get tbin and tbin before pre-trigger
miniScopeTbinCount = buf[Line6b07 + 1] & 0x00FF;
miniScopeTbinPreTrigger = (buf[Line6b07 + 1] >> 8) & 0x000F;
LogTrace("CSCTMBMiniScope") << " MiniScope Found | Tbin: " << miniScopeTbinCount
<< " | Tbin Pretrigger: " << miniScopeTbinPreTrigger << std::endl;
miniScopeAdress.clear();
miniScopeData.clear();
for (int i = 0; i < miniScopeTbinCount; i++) {
miniScopeAdress.push_back(284 + i);
miniScopeData.push_back(buf[Line6b07 + 1 + i]);
}
//print();
} ///end if((Line6E07-Line6b07)
return (Line6E07 - Line6b07 + 1);
} ///UnpackScope
std::vector<int> CSCTMBMiniScope::getChannelsInTbin(int data) const {
std::vector<int> channelInTbin;
channelInTbin.clear();
for (int k = 0; k < 14; k++) {
int chBit = 0;
chBit = (data >> k) & 0x1;
if (chBit != 0)
channelInTbin.push_back(k);
}
return channelInTbin;
}
void CSCTMBMiniScope::print() const {
for (unsigned int k = 0; k < getAdr().size(); ++k) {
if (k == 0) {
std::cout << " Adr = " << getAdr()[k] << " | Data: " << std::hex << getData()[k] << std::dec << std::endl;
} else {
std::cout << " Adr = " << getAdr()[k] << " | Data: " << std::hex << getData()[k] << std::dec << " ==>| Ch# ";
for (unsigned int j = 0; j < getChannelsInTbin(getData()[k]).size(); j++) {
std::cout << " " << getChannelsInTbin(getData()[k])[j];
}
std::cout << std::endl;
}
}
}
|