ATLAS Offline Software
Loading...
Searching...
No Matches
RoIFormatUpdater.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4/* **********************************************************
5*
6* Quick and dirty hack to work around fact that there is no RoI
7* format version at the moment. Hopefully this is a short-term
8* fix which will be suppressed soon and never needed again.
9* Author: Alan Watson <Alan.Watson@cern.ch> 17-5-06
10*
11********************************************************** */
12
16#include "GaudiKernel/MsgStream.h"
17
18using namespace std;
19
20namespace LVL1 {
21
22 unsigned int RoIFormatUpdater::UpdateEMTauRoI(unsigned int RoIWord) {
23 // Check ionput is consistent with old format EMTau RoI
24 if ((RoIWord&0xf0000000)==0) {
25 unsigned int coord = ((RoIWord&0x0fff0000)<<2);
26 unsigned int hits = (RoIWord&0x0000ffff);
27 return coord+hits;
28 }
29 else {
30 cout << "EMTau RoI type not incorrect. Return RoIWord unmodified" << endl;
31 return RoIWord;
32 }
33 }
34
35 unsigned int RoIFormatUpdater::UpdateJetEnergyRoI(unsigned int RoIWord) {
36 // What type of JetEnergy RoI is it?
37 unsigned int type = OldJetEnergyType(RoIWord);
38
40 return UpdateJetRoI(RoIWord);
41 }
43 return UpdateEnergyRoI0(RoIWord);
44 }
46 return UpdateEnergyRoI1(RoIWord);
47 }
49 return UpdateEnergyRoI2(RoIWord);
50 }
52 return UpdateJetEtRoI(RoIWord);
53 }
54 else {
55 cout << "JetEnergy RoI type not recognised. Return RoIWord unmodified" << endl;
56 return RoIWord;
57 }
58 }
59
60 unsigned int RoIFormatUpdater::OldJetEnergyType(unsigned int RoIWord) {
61 if ( BitOp::getValue( &RoIWord, 0xf0000000 ) == 1) {
63 }
64 else if ( BitOp::getValue( &RoIWord, 0xf0000000 ) == 3) {
65 int subType = BitOp::getValue( &RoIWord, 0x0c000000 );
66 if (subType == 0) {
68 }
69 else if (subType == 1) {
71 }
72 else if (subType == 2) {
74 }
75 }
76 else if ( BitOp::getValue( &RoIWord, 0xf0000000 ) == 2) {
78 }
79 return 9999; // not recognised as an old-style JetEnergy RoI
80 }
81
82 unsigned int RoIFormatUpdater::UpdateJetRoI(unsigned int RoIWord) {
83 unsigned int header =
84 (static_cast<unsigned int>(TrigT1CaloDefs::jetRoIType)<<30) +
85 (static_cast<unsigned int>(TrigT1CaloDefs::jetRoI)<<29);
86 unsigned int hits = (RoIWord&0x00000fff);
87 unsigned int fwdjet(0);
88 if (RoIWord&0x00000f00) fwdjet = 1<<18;
89
90 // That was the easy bit. Unfortunately the coordinate format has
91 // also changed. This does make sense, but it isn't pretty!
92 unsigned int crate = BitOp::getValue( &RoIWord, 0x00200000);
93 unsigned int jem = BitOp::getValue( &RoIWord, 0x001e0000);
94 unsigned int row = BitOp::getValue( &RoIWord, 0x0001c000);
95 unsigned int col = BitOp::getValue( &RoIWord, 0x00003000);
96 unsigned int frame = 4*(col>>1) + (row>>1);
97 unsigned int rl = 2*(row%2) + (col%2);
98 unsigned int coord = (crate<<9) + (jem<<5) +(frame<<2) + rl;
99 coord = (coord<<19);
100
101 return header+coord+fwdjet+hits;
102 }
103
104 unsigned int RoIFormatUpdater::UpdateJetEtRoI(unsigned int RoIWord) {
105 unsigned int header =
106 (static_cast<unsigned int>(TrigT1CaloDefs::jetRoIType)<<30) +
107 (static_cast<unsigned int>(TrigT1CaloDefs::jetEtRoI)<<29);
108 unsigned int hits = (RoIWord&0x0000000f);
109 return header+hits;
110 }
111
112 unsigned int RoIFormatUpdater::UpdateEnergyRoI0(unsigned int RoIWord) {
114 unsigned int Ex = (RoIWord&0x0000ffff);
115 return header+Ex;
116 }
117
118 unsigned int RoIFormatUpdater::UpdateEnergyRoI1(unsigned int RoIWord) {
120 unsigned int hits = (RoIWord&0x000f0000);
121 unsigned int Ey = (RoIWord&0x0000ffff);
122 return header+hits+Ey;
123 }
124
125 unsigned int RoIFormatUpdater::UpdateEnergyRoI2(unsigned int RoIWord) {
127 unsigned int hits = (RoIWord&0x00ff0000);
128 unsigned int Et = (RoIWord&0x0000ffff);
129 return header+hits+Et;
130 }
131
132} // namespace ROIB
double coord
Type of coordination system.
static unsigned int getValue(const unsigned int *uintValue, const unsigned int mask)
get the value in the input word represented by a bit pattern given as a bitmask
Definition BitOp.cxx:47
static unsigned int UpdateJetRoI(unsigned int RoIWord)
Method to update Jet RoI word.
static unsigned int UpdateJetEnergyRoI(unsigned int RoIWord)
Method to update Jet/Energy RoI word.
static unsigned int UpdateEnergyRoI0(unsigned int RoIWord)
Methods to update EnergySum RoI words.
static unsigned int UpdateEnergyRoI1(unsigned int RoIWord)
static unsigned int UpdateJetEtRoI(unsigned int RoIWord)
Method to update JetEt RoI word.
static unsigned int UpdateEnergyRoI2(unsigned int RoIWord)
static unsigned int UpdateEMTauRoI(unsigned int RoIWord)
Method to update EM/Tau RoI word.
static unsigned int OldJetEnergyType(unsigned int RoIWord)
Method to identify (old-style) JetEnergy RoI type.
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
STL namespace.