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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
/**
* \class L1Track (for CSC TrackFinder)
* \author L. Gray (partial port from ORCA)
*
* A L1 Track class for the CSC Track Finder.
*
**/
#ifndef L1CSCTrackFinder_L1Track_h
#define L1CSCTrackFinder_L1Track_h
#include <DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h>
#include <DataFormats/L1CSCTrackFinder/interface/L1TrackId.h>
class CSCTFSectorProcessor;
class CSCTFUnpacker;
class CSCTFSPCoreLogic;
namespace csc {
class L1Track : public L1MuRegionalCand {
public:
L1Track() : L1MuRegionalCand(), m_name("csc::L1Track") {
setType(2);
setPtPacked(0);
}
L1Track(const csc::L1TrackId&);
L1Track(const csc::L1Track&);
const csc::L1Track& operator=(const csc::L1Track&);
~L1Track() override;
unsigned rank() const;
void setRank(const unsigned& rank) { m_rank = rank; }
unsigned localPhi() const { return m_lphi; }
void setLocalPhi(const unsigned& lphi) { m_lphi = lphi; }
unsigned me1ID() const { return me1_id; }
unsigned me2ID() const { return me2_id; }
unsigned me3ID() const { return me3_id; }
unsigned me4ID() const { return me4_id; }
unsigned mb1ID() const { return mb1_id; }
unsigned endcap() const { return m_endcap; }
unsigned sector() const { return m_sector; }
unsigned station() const { return 0; }
// these next two are needed by the trigger container class
unsigned subsector() const { return 0; }
unsigned cscid() const { return 0; }
int BX() const { return bx(); }
static unsigned encodeRank(const unsigned& pt, const unsigned& quality);
static void decodeRank(const unsigned& rank, unsigned& pt, unsigned& quality);
unsigned ptLUTAddress() const { return m_ptAddress; }
unsigned front_rear() const { return m_fr; }
void setPtLUTAddress(const unsigned& adr) { m_ptAddress = adr; }
void set_front_rear(unsigned fr) { m_fr = fr; }
unsigned outputLink() const { return m_output_link; }
void setOutputLink(unsigned oPL) { m_output_link = oPL; }
bool winner() const { return m_winner; }
bool operator>(const csc::L1Track&) const;
bool operator<(const csc::L1Track&) const;
bool operator>=(const csc::L1Track&) const;
bool operator<=(const csc::L1Track&) const;
bool operator==(const csc::L1Track&) const;
bool operator!=(const csc::L1Track&) const;
//friend std::ostream& operator<<(std::ostream&, const csc::L1Track&);
//friend std::ostream& operator<<(std::ostream&, csc::L1Track&);
/// Only the Unpacker and SectorProcessor should have access to addTrackStub()
/// This prevents people from adding too many track stubs.
friend class CSCTFSectorProcessor; // for track stubs
friend class ::CSCTFUnpacker; // for track id bits and track stubs
friend class ::CSCTFSPCoreLogic; // for track id bits
void Print() const;
// Accessors for some technical information:
unsigned deltaPhi12(void) const { return m_ptAddress & 0xFF; }
unsigned deltaPhi23(void) const { return (m_ptAddress >> 8) & 0xF; }
unsigned addressEta(void) const { return (m_ptAddress >> 12) & 0xF; }
unsigned mode(void) const { return (m_ptAddress >> 16) & 0xF; }
bool sign(void) const { return (m_ptAddress >> 20) & 0x1; }
bool synch_err(void) const { return m_se; }
bool bx0(void) const { return m_bx0; }
bool bc0(void) const { return m_bc0; }
unsigned me1Tbin(void) const { return m_me1Tbin; }
unsigned me2Tbin(void) const { return m_me2Tbin; }
unsigned me3Tbin(void) const { return m_me3Tbin; }
unsigned me4Tbin(void) const { return m_me4Tbin; }
unsigned mb1Tbin(void) const { return m_mbTbin; }
void setBits(bool se, bool bx0, bool bc0) {
m_se = se;
m_bx0 = bx0;
m_bc0 = bc0;
}
void setTbins(unsigned me1, unsigned me2, unsigned me3, unsigned me4, unsigned mb) {
m_me1Tbin = me1;
m_me2Tbin = me2;
m_me3Tbin = me3;
m_me4Tbin = me4;
m_mbTbin = mb;
}
void setStationIds(
const unsigned& me1, const unsigned& me2, const unsigned& me3, const unsigned& me4, const unsigned& mb1);
unsigned modeExtended(void) const;
private:
std::string m_name;
//L1TrackId m_id; remove this nested class for now... POOL doesn't like it.
unsigned m_endcap = 0, m_sector = 0;
//CSCCorrelatedLCTDigiCollection track_stubs; same as above
unsigned m_lphi = 0;
unsigned m_ptAddress = 0;
unsigned m_fr = 0;
unsigned me1_id = 0, me2_id = 0, me3_id = 0, me4_id = 0, mb1_id = 0;
unsigned m_rank = 0;
unsigned m_output_link = 0;
bool m_empty = true;
bool m_winner = false;
// Technical information:
bool m_se = true, m_bx0 = true, m_bc0 = true;
unsigned m_me1Tbin = 0, m_me2Tbin = 0, m_me3Tbin = 0, m_me4Tbin = 0, m_mbTbin = 0;
};
} // namespace csc
#endif
|