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
|
#ifndef CondFormats_RPCObjects_L1RPCHwConfig_h
#define CondFormats_RPCObjects_L1RPCHwConfig_h
// -*- C++ -*-
//
// Package: RPCObjects
// Class : L1RPCHwConfig
//
/**\class L1RPCHwConfig L1RPCHwConfig.h CondFormats/RPCObjects/interface/L1RPCHwConfig.h
Description: Contains multiple BX triggering info. Also info about disabled devices
Usage:
<usage>
*/
//
// Original Author:
// Created: Wed Apr 9 13:48:06 CEST 2008
// $Id: L1RPCHwConfig.h,v 1.4 2008/06/24 11:06:53 michals Exp $
//
// system include files
// user include files
// forward declarations
#include "CondFormats/Serialization/interface/Serializable.h"
#include <set>
#include <vector>
#include <sstream>
#include <iostream>
struct L1RPCDevCoords {
public:
L1RPCDevCoords() : m_tower(-255), m_PAC(-255) {}
L1RPCDevCoords(int tower, int sector, int segment) : m_tower(tower), m_PAC(sector * 12 + segment) {}
int getTower() { return m_tower; };
int getPAC() { return m_PAC; };
int getSector() { return m_PAC / 12; };
int getSegment() { return m_PAC % 12; };
std::string toString() const {
std::stringstream ss;
ss << m_tower << " " << m_PAC;
return ss.str();
};
bool operator<(const L1RPCDevCoords& l2) const {
if (this->m_tower != l2.m_tower)
return this->m_tower < l2.m_tower;
return this->m_PAC < l2.m_PAC;
}
bool operator==(const L1RPCDevCoords& l2) const { return (this->m_tower == l2.m_tower) && (this->m_PAC == l2.m_PAC); }
//private:
signed short m_tower;
signed short m_PAC;
COND_SERIALIZABLE;
};
class L1RPCHwConfig {
public:
L1RPCHwConfig();
virtual ~L1RPCHwConfig();
bool isActive(int tower, int sector, int segment) const {
return m_disabledDevices.find(L1RPCDevCoords(tower, sector, segment)) == m_disabledDevices.end();
};
bool isActive(int tower, int PAC) const {
return m_disabledDevices.end() == m_disabledDevices.find(L1RPCDevCoords(tower, PAC / 12, PAC % 12));
};
void enablePAC(int tower, int sector, int segment, bool enable);
void enableTower(int tower, bool enable);
void enableTowerInCrate(int tower, int crate, bool enable);
void enableCrate(int logSector, bool enable); // logSector == crate number /// enables one crate, all towers
void enableAll(bool enable);
int size() const { return m_disabledDevices.size(); };
void dump() const {
for (std::set<L1RPCDevCoords>::const_iterator it = m_disabledDevices.begin(); it != m_disabledDevices.end(); ++it) {
std::cout << it->toString() << std::endl;
}
};
// ---------- const member functions ---------------------
// ---------- static member functions --------------------
// ---------- member functions ---------------------------
private:
std::set<L1RPCDevCoords> m_disabledDevices;
// ---------- member data --------------------------------
COND_SERIALIZABLE;
};
#endif
|