ATLAS Offline Software
Loading...
Searching...
No Matches
LVL1::CPRoIDecoder Class Reference

A level 1 calorimeter trigger conversion service: returns the Coordinate represented by a RoI word. More...

#include <CPRoIDecoder.h>

Inheritance diagram for LVL1::CPRoIDecoder:
Collaboration diagram for LVL1::CPRoIDecoder:

Public Member Functions

 CPRoIDecoder ()
virtual ~CPRoIDecoder ()
TrigT1CaloDefs::RoIType roiType (unsigned int word) const
 CP-RoI specific, but can distinguish Run 1/Run 2.
virtual CoordinateRange coordinate (const unsigned int roiWord) const override
 RoI coordinate information.
unsigned int crate (const unsigned int roiWord) const
 Decode crate number from RoI word.
unsigned int module (const unsigned int roiWord) const
 Decode module number from RoI word.
unsigned int chip (const unsigned int roiWord) const
 Decode CP chip number from RoI word.
unsigned int localcoord (const unsigned int roiWord) const
 Decode local coordinate from RoI word.
const std::vector< unsigned int > thresholdsPassed (const unsigned int word) const
 Thresholds passed (Run 1 RoIs)
unsigned int et (const unsigned int roiWord) const
 ET and Isolation information (Run 2 RoIs)
unsigned int isolationWord (const unsigned int roiWord) const
 Extract isolation results from Run 2 RoI word.

Protected Member Functions

unsigned int extractBits (unsigned int word, const unsigned int start, const unsigned int length) const
 returns the value of bits in word between bit "start" and bit "start" + "length"

Protected Attributes

bool m_DEBUG

Detailed Description

A level 1 calorimeter trigger conversion service: returns the Coordinate represented by a RoI word.

Author
E. Moyse
Todo
this should probably be a static class.
Revision
615360
Date
2014-09-05 21:34:47 +0200 (Fri, 05 Sep 2014)

Definition at line 32 of file CPRoIDecoder.h.

Constructor & Destructor Documentation

◆ CPRoIDecoder()

LVL1::CPRoIDecoder::CPRoIDecoder ( )

Definition at line 21 of file CPRoIDecoder.cxx.

22 {
23 }

◆ ~CPRoIDecoder()

LVL1::CPRoIDecoder::~CPRoIDecoder ( )
virtual

Definition at line 25 of file CPRoIDecoder.cxx.

25 {
26
27 }

Member Function Documentation

◆ chip()

unsigned int LVL1::CPRoIDecoder::chip ( const unsigned int roiWord) const

Decode CP chip number from RoI word.

Definition at line 118 of file CPRoIDecoder.cxx.

118 {
119 int offset = 0;
120 if (roiType( roiWord ) == TrigT1CaloDefs::CpRoIWordType) offset = 2;
121 return extractBits( roiWord, 20+offset, 3 );
122 }
TrigT1CaloDefs::RoIType roiType(unsigned int word) const
CP-RoI specific, but can distinguish Run 1/Run 2.
unsigned int extractBits(unsigned int word, const unsigned int start, const unsigned int length) const
returns the value of bits in word between bit "start" and bit "start" + "length"

◆ coordinate()

CoordinateRange LVL1::CPRoIDecoder::coordinate ( const unsigned int roiWord) const
overridevirtual

RoI coordinate information.

Return coordinate information for RoI.

Implements LVL1::RoIDecoder.

Definition at line 50 of file CPRoIDecoder.cxx.

50 {
51
52 //phi
53 const double cratePhiSize = M_PI / 2.0;
54 const double fpgaPhiSize = M_PI / 16.0;
55 const double localCoordPhiSize = M_PI / 32.0;
56
57 //eta
58 const double cpmEtaSize = 0.4;
59 const double localCoordEtaSize = 0.1;
60
61 // the FPGAs local ROI coords are arranged like this:
62 // 2 3 6 7 (top)
63 // 0 1 4 5 (bot)
64 // (where each cell is 0.1x0.1)
65 // so
66
67 unsigned int crate = this->crate (roiWord);
68 unsigned int cpm = this->module (roiWord);
69 unsigned int cp = this->chip (roiWord);
70 unsigned int lc = this->localcoord (roiWord);
71
72 unsigned int top = ( lc & 2 ) >> 1; // top=1, bot=0
73 double localCoordEta = ( ( ( lc & 4 ) >> 1 ) + ( lc & 1 ) ) * localCoordEtaSize;
74
75 double phiMin = ( static_cast< double >( crate ) * cratePhiSize ) +
76 ( static_cast< double >( cp ) * fpgaPhiSize ) + ( top * localCoordPhiSize );
77 double phiMax = ( static_cast< double >( crate ) * cratePhiSize ) +
78 ( static_cast< double >( cp ) * fpgaPhiSize ) + ( top * localCoordPhiSize ) + 2. * localCoordPhiSize;
79 double etaMin = ( ( static_cast< double >( static_cast< int >( cpm ) - 8 ) ) * cpmEtaSize ) + localCoordEta;
80
81 double etaMax = ( static_cast< double >( static_cast< int >( cpm ) - 8 ) * cpmEtaSize ) + localCoordEta + 2. * localCoordEtaSize;
82
83 if ( RoIDecoder::m_DEBUG ) {
84
85 cout << "phiMin : " << phiMin << "phiMax : " << phiMax << endl
86 << "etaMin : " << etaMin << "etaMax : " << etaMax << endl
87 << "Phi" << endl << "===" << endl
88 << "Crate phi min : " << ( crate * cratePhiSize ) << " (size: " << ( cratePhiSize ) << ")" << endl
89 << "CP FPGA phi min : " << ( cp * fpgaPhiSize ) << " (size: " << ( fpgaPhiSize ) << ")" << endl
90 << "Local coord min : " << ( top * localCoordPhiSize ) << " (size: " << ( localCoordPhiSize ) << ")" << endl
91 << "Eta" << endl << "===" << endl
92 << "CPM eta min : " << ( ( cpm - 8 ) * cpmEtaSize ) << " (size: " << ( cpmEtaSize ) << ")" << endl
93 << "CP FPGA phi min : " << localCoordEta << " (size: " << ( localCoordEtaSize ) << ")" << endl;
94
95 }
96
97 CoordinateRange coord;
98 coord.setRanges( phiMin, phiMax, etaMin, etaMax );
99 return coord;
100
101 }
#define M_PI
double coord
Type of coordination system.
@ top
unsigned int chip(const unsigned int roiWord) const
Decode CP chip number from RoI word.
unsigned int localcoord(const unsigned int roiWord) const
Decode local coordinate from RoI word.
unsigned int crate(const unsigned int roiWord) const
Decode crate number from RoI word.
unsigned int module(const unsigned int roiWord) const
Decode module number from RoI word.

◆ crate()

unsigned int LVL1::CPRoIDecoder::crate ( const unsigned int roiWord) const

Decode crate number from RoI word.

Definition at line 104 of file CPRoIDecoder.cxx.

104 {
105 int offset = 0;
106 if (roiType( roiWord ) == TrigT1CaloDefs::CpRoIWordType) offset = 2;
107 return extractBits( roiWord, 27+offset, 2 );
108 }

◆ et()

unsigned int LVL1::CPRoIDecoder::et ( const unsigned int roiWord) const

ET and Isolation information (Run 2 RoIs)

Extract cluster ET from Run 2 RoI word.

Definition at line 132 of file CPRoIDecoder.cxx.

132 {
133 unsigned int type = roiType( roiWord );
134
136 return extractBits(roiWord, 1, 8);
137
138 return 0;
139 }

◆ extractBits()

unsigned int LVL1::RoIDecoder::extractBits ( unsigned int word,
const unsigned int start,
const unsigned int length ) const
protectedinherited

returns the value of bits in word between bit "start" and bit "start" + "length"

Definition at line 34 of file RoIDecoder.cxx.

35 {
36
37 // this works as follows. Imagine start=3, bits=4 and word=11011100
38 // so this routine should return 0111
39 // now:
40 // word>>(first-1) = 110111
41 // (1<<length) = 010000
42 // (1<<length)-1 = 001111
43 word = ( word >> ( start - 1 ) );
44
45 unsigned int bitmask = ( 1 << length ) - 1;
46 // and finally:
47 // 110111&001111 = 0111
48 return ( word & bitmask ); // return only bits in bitmask
49}
double length(const pvec &v)

◆ isolationWord()

unsigned int LVL1::CPRoIDecoder::isolationWord ( const unsigned int roiWord) const

Extract isolation results from Run 2 RoI word.

Definition at line 142 of file CPRoIDecoder.cxx.

142 {
143 unsigned int type = roiType( roiWord );
144
146 return extractBits(roiWord, 9, 5);
147
148 return 0;
149 }

◆ localcoord()

unsigned int LVL1::CPRoIDecoder::localcoord ( const unsigned int roiWord) const

Decode local coordinate from RoI word.

Definition at line 125 of file CPRoIDecoder.cxx.

125 {
126 int offset = 0;
127 if (roiType( roiWord ) == TrigT1CaloDefs::CpRoIWordType) offset = 2;
128 return extractBits( roiWord, 17+offset, 3 );
129 }

◆ module()

unsigned int LVL1::CPRoIDecoder::module ( const unsigned int roiWord) const

Decode module number from RoI word.

Definition at line 111 of file CPRoIDecoder.cxx.

111 {
112 int offset = 0;
113 if (roiType( roiWord ) == TrigT1CaloDefs::CpRoIWordType) offset = 2;
114 return extractBits( roiWord, 23+offset, 4 );
115 }

◆ roiType()

LVL1::TrigT1CaloDefs::RoIType LVL1::CPRoIDecoder::roiType ( unsigned int word) const

CP-RoI specific, but can distinguish Run 1/Run 2.

Override base method - allows us to handle both Run 1 & Run 2 data for CP system.

Definition at line 31 of file CPRoIDecoder.cxx.

31 {
32 unsigned int temp=extractBits(word, 31, 2);
33 if (temp == TrigT1CaloDefs::EMTauRoIWord) {
35 }
36 else {
37 unsigned int temp2 = extractBits(word, 29, 4);
38 if (temp2 == TrigT1CaloDefs::EMRoIWord) {
40 }
41 else if (temp2 == TrigT1CaloDefs::TauRoIWord) {
43 }
44 }
46 }

◆ thresholdsPassed()

const std::vector< unsigned int > LVL1::CPRoIDecoder::thresholdsPassed ( const unsigned int word) const

Thresholds passed (Run 1 RoIs)

Override default version by adding a check on Run 1/Run 2.

Definition at line 153 of file CPRoIDecoder.cxx.

153 {
154
155 std::vector<unsigned int> threshPassedVec;
156
158 unsigned int hitmask = word&0xffff;
159 for ( unsigned int thresh = 0; thresh < 16; ++thresh ) {
160 if ( ( 1 << thresh ) & hitmask ) {
161 threshPassedVec.push_back( thresh + 1 );
162 }
163 }
164 }
165
166 return threshPassedVec;
167
168 }

Member Data Documentation

◆ m_DEBUG

bool LVL1::RoIDecoder::m_DEBUG
protectedinherited

Definition at line 53 of file RoIDecoder.h.


The documentation for this class was generated from the following files: