ATLAS Offline Software
Loading...
Searching...
No Matches
TileRoI_Map.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6
9#include "CaloDetDescr/CaloDetDescrElement.h"
12
14
15// This class converts a Tile offline ID and Online Identifier into a RoI id,
16//
17
18static const InterfaceID IID_ITileRoI_Map("TileRoI_Map", 1, 0);
19
20const InterfaceID& TileRoI_Map::interfaceID( )
21{ return IID_ITileRoI_Map; }
22
23// default contructor
24TileRoI_Map::TileRoI_Map( const std::string& type, const std::string& name,
25 const IInterface* parent )
26: AthAlgTool(type,name,parent)
27{
28 declareInterface<TileRoI_Map>( this );
29}
30
32{
33 ATH_CHECK( detStore()->retrieve(m_tileMgr) );
34 ATH_CHECK( detStore()->retrieve(m_tileID, "TileID") );
35 ATH_CHECK( detStore()->retrieve(m_tileHWID, "TileHWID") );
36
37 // get the pointer to CablingSvc
39
40 m_idhash.initialize(m_tileHWID);
41
42 // intialize the internal map
43
45 std::vector<HWIdentifier>::const_iterator first = m_tileHWID->adc_begin();
46 std::vector<HWIdentifier>::const_iterator last = m_tileHWID->adc_end();
47
48 int nADC = 0;
49 for ( ; first!=last; ++first) {
50 if ( addEntry(*first) ) ++nADC;
51 }
52
53 if (m_print) {
54 std::cout << " number of ADCs made in TileRoI_Map " << nADC<< std::endl;
55 }
56
58
59 return StatusCode::SUCCESS;
60}
61
65
66
68{
69
70 Identifier adc_id = m_cablingSvc->h2s_adc_id(adc_hwid);
71
72 if (adc_id.is_valid()) {
73
74 Identifier pmt_id = m_tileID->pmt_id(adc_id);
75 Identifier cell_id = m_tileID->cell_id(adc_id);
76
77 Identifier rId = m_cablingSvc->pmt2tt_id(pmt_id);
78
79 m_offmap[ cell_id ] = rId; // mapping for Cell id
80 m_offmap[ pmt_id ] = rId; // mapping for PMT id
81 m_offmap[ adc_id ] = rId; // mapping for ADC id
82
83 HWIdentifier chan_id = m_tileHWID->channel_id(adc_hwid);
84 m_onlmap[ chan_id ] = rId; // mapping for online channel id
85 m_onlmap[ adc_hwid ] = rId; // mapping for online ADC id
86
87 std::cout
88 << " HW id " << m_tileHWID->to_string(adc_hwid)
89 << " id " << m_tileID->to_string(adc_id)
90 << " tt id " << rId // don't know how to print TT ID
91 << std::endl;
92
93 // add entry for RoI to COLL_ID map.
94 // make an Tile frag ID
95 int frag = m_tileHWID->frag(chan_id);
96 COLL_ID_VEC& v = m_roimap[rId];
97 COLL_ID_VEC::const_iterator it = v.begin();
98 COLL_ID_VEC::const_iterator it_end = v.end();
99 bool found = false;
100
101 const CaloDetDescrElement* caloDDE = m_tileMgr->get_cell_element(cell_id);
102 m_epmap[frag].set(caloDDE->eta(),caloDDE->phi());
103
104 for(; it != it_end; ++it)
105 if(frag == (*it) ) found = true;
106 if(!found) {
107// std::cout <<" Mapped RoI "<<rId.sample()<<" "<<rId.eta()<<" "
108// <<rId.phi()<<" to frag "<<std::hex<<frag<<std::dec<<std::endl;
109 v.push_back(frag);
110 }
111 } else
112 {
113 std::cout <<" Failed to get Identifier in TileRoI_Map::add "<< std::endl;
114 return false;
115 }
116
117 return true;
118
119}
120
121
122// Given offline channel ID, find TT ID.
124 const
125{
126 OFFMAP::const_iterator it = m_offmap.find(id);
127 if( it==m_offmap.end() )
128 {
129 std::string err(" TileRoI_Map: not entry for ID ");
130 err += m_tileID->to_string(id,-1) ;
131 TileID_Exception except(err,1);
132 throw except;
133 }
134
135 return (*it).second;
136
137}
138
139
140// Given online Channel ID, find TT ID.
142const
143{
144 ONLMAP::const_iterator it = m_onlmap.find( id );
145 if(it==m_onlmap.end() )
146 {
147 std::string err(" TileRoI_Map::TrigTowerID(const HWIdentifier&): no entry for HWID ");
148 err += m_tileHWID->to_string(id,-1) ;
149 TileID_Exception except(err,2);
150 throw except;
151 }
152
153 return (*it).second;
154
155}
156
158 (const TileRoI_Map::TT_ID & RoIid ) const
159{
160 ROIMAP::const_iterator it = m_roimap.find(RoIid);
161 if(it !=m_roimap.end()) {
162 return (*it).second;
163 }
164 std::cout <<" TileRoI_Map::CollectionID: can not find RoI" << std::endl;
165 static const COLL_ID_VEC v ;
166 return v;
167}
168
170 (const TileRoI_Map::TT_ID & RoIid ) const
171{
172 ROIMAP::const_iterator it = m_roimap.find(RoIid);
173 return it !=m_roimap.end() ;
174}
175
177{
178 // print all Collection ID and eta phi region
179
180 E_P_MAP::const_iterator it = m_epmap.begin();
181 E_P_MAP::const_iterator it_end = m_epmap.end();
182
183 std::cout <<" COLLECTION ID , HASHID, ETAMIN, ETAMAX, PHIMIN, PHIMAX "<<std::endl ;
184
185 TileHWID tileHW;
186
187 for(; it!=it_end;++it){
188 int frag = (*it).first;
189 int hashid = m_idhash(frag);
190
191 float e1,e2,p1,p2 ;
192
193 // check getEtaPhiRegion method.
194 getEtaPhiRegion(hashid,e1,e2,p1,p2);
195
196 // print them out.
197 std::cout <<std::hex<< frag
198 << " " <<hashid << " "
199 <<e1 << " "
200 <<e2 << " "
201 <<p1 << " "
202 <<p2 << std::endl;
203 }
204 std::cout << std::dec << std::endl;
205
206}
207
208bool TileRoI_Map:: getEtaPhiRegion(unsigned int hashid,
209 float& etamin, float& etamax,
210 float& phimin, float& phimax ) const
211
212{
213 if( (int)hashid >= m_idhash.max() ) return false;
214
215 int frag = m_idhash.identifier(hashid);
216 E_P_MAP::const_iterator it = m_epmap.find(frag);
217 if(it == m_epmap.end()) return false;
218
219 etamin = (*it).second.etamin;
220 etamax = (*it).second.etamax;
221 phimin = (*it).second.phimin;
222 phimax = (*it).second.phimax;
223
224 return true;
225
226}
#define ATH_CHECK
Evaluate an expression and check for errors.
static const InterfaceID IID_ITileRoI_Map("TileRoI_Map", 1, 0)
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
const ServiceHandle< StoreGateSvc > & detStore() const
This class groups all DetDescr information related to a CaloCell.
bool is_valid() const
Check if id is in a valid state.
static const TileCablingService * getInstance()
get pointer to service instance
Helper class for TileCal online (hardware) identifiers.
Definition TileHWID.h:49
Exception class for Tile Identifiers.
TT_ID TrigTowerID(const Identifier &id) const
return TrigTowerID for various queries.
const TileDetDescrManager * m_tileMgr
Identifier TT_ID
Definition TileRoI_Map.h:46
const TileCablingService * m_cablingSvc
OFFMAP m_offmap
const TileID * m_tileID
const std::vector< COLL_ID > & CollectionID(const TT_ID &id) const
reserve lookup.
StatusCode initialize()
define a RoI identifier type, two ints.
virtual ~TileRoI_Map()
ROIMAP m_roimap
Gaudi::Property< bool > m_print
ONLMAP m_onlmap
static const InterfaceID & interfaceID()
AlgTool InterfaceID.
TileFragHash m_idhash
bool validId(const TT_ID &tt_id) const
check validity
bool addEntry(const HWIdentifier &adc_hwid)
bool getEtaPhiRegion(unsigned int hashid, float &etamin, float &etamax, float &phimin, float &phimax) const
returns Eta-Phi Region for a hashed ID of the Collection.
std::vector< COLL_ID > COLL_ID_VEC
TileRoI_Map(const std::string &type, const std::string &name, const IInterface *parent)
constructor
void printEtaPhiRegions()
E_P_MAP m_epmap
const TileHWID * m_tileHWID