ATLAS Offline Software
TileRoI_Map.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
9 #include "CaloDetDescr/CaloDetDescrElement.h"
12 
13 #include "StoreGate/StoreGateSvc.h"
14 
15 // This class converts a Tile offline ID and Online Identifier into a RoI id,
16 //
17 
18 static const InterfaceID IID_ITileRoI_Map("TileRoI_Map", 1, 0);
19 
20 const InterfaceID& TileRoI_Map::interfaceID( )
21 { return IID_ITileRoI_Map; }
22 
23 // default contructor
24 TileRoI_Map::TileRoI_Map( const std::string& type, const std::string& name,
25  const IInterface* parent )
26 : AthAlgTool(type,name,parent), m_print(false)
27 {
28  declareInterface<TileRoI_Map>( this );
29 
30  // property
31  declareProperty("Print",m_print);
32 
33  return ;
34 }
35 
37 {
39  ATH_CHECK( detStore()->retrieve(m_tileID, "TileID") );
40  ATH_CHECK( detStore()->retrieve(m_tileHWID, "TileHWID") );
41 
42  // get the pointer to CablingSvc
44 
46 
47  // intialize the internal map
48 
50  std::vector<HWIdentifier>::const_iterator first = m_tileHWID->adc_begin();
51  std::vector<HWIdentifier>::const_iterator last = m_tileHWID->adc_end();
52 
53  int nADC = 0;
54  for ( ; first!=last; ++first) {
55  if ( addEntry(*first) ) ++nADC;
56  }
57 
58  if (m_print) {
59  std::cout << " number of ADCs made in TileRoI_Map " << nADC<< std::endl;
60  }
61 
63 
64  return StatusCode::SUCCESS;
65 }
66 
68 {
69 }
70 
71 
72 bool TileRoI_Map::addEntry(const HWIdentifier& adc_hwid)
73 {
74 
75  Identifier adc_id = m_cablingSvc->h2s_adc_id(adc_hwid);
76 
77  if (adc_id.is_valid()) {
78 
79  Identifier pmt_id = m_tileID->pmt_id(adc_id);
80  Identifier cell_id = m_tileID->cell_id(adc_id);
81 
82  Identifier rId = m_cablingSvc->pmt2tt_id(pmt_id);
83 
84  m_offmap[ cell_id ] = rId; // mapping for Cell id
85  m_offmap[ pmt_id ] = rId; // mapping for PMT id
86  m_offmap[ adc_id ] = rId; // mapping for ADC id
87 
88  HWIdentifier chan_id = m_tileHWID->channel_id(adc_hwid);
89  m_onlmap[ chan_id ] = rId; // mapping for online channel id
90  m_onlmap[ adc_hwid ] = rId; // mapping for online ADC id
91 
92  std::cout
93  << " HW id " << m_tileHWID->to_string(adc_hwid)
94  << " id " << m_tileID->to_string(adc_id)
95  << " tt id " << rId // don't know how to print TT ID
96  << std::endl;
97 
98  // add entry for RoI to COLL_ID map.
99  // make an Tile frag ID
100  int frag = m_tileHWID->frag(chan_id);
101  COLL_ID_VEC& v = m_roimap[rId];
102  COLL_ID_VEC::const_iterator it = v.begin();
103  COLL_ID_VEC::const_iterator it_end = v.end();
104  bool found = false;
105 
106  const CaloDetDescrElement* caloDDE = m_tileMgr->get_cell_element(cell_id);
107  m_epmap[frag].set(caloDDE->eta(),caloDDE->phi());
108 
109  for(; it != it_end; ++it)
110  if(frag == (*it) ) found = true;
111  if(!found) {
112 // std::cout <<" Mapped RoI "<<rId.sample()<<" "<<rId.eta()<<" "
113 // <<rId.phi()<<" to frag "<<std::hex<<frag<<std::dec<<std::endl;
114  v.push_back(frag);
115  }
116  } else
117  {
118  std::cout <<" Failed to get Identifier in TileRoI_Map::add "<< std::endl;
119  return false;
120  }
121 
122  return true;
123 
124 }
125 
126 
127 // Given offline channel ID, find TT ID.
129  const
130 {
131  OFFMAP::const_iterator it = m_offmap.find(id);
132  if( it==m_offmap.end() )
133  {
134  std::string err(" TileRoI_Map: not entry for ID ");
135  err += m_tileID->to_string(id,-1) ;
136  TileID_Exception except(err,1);
137  throw except;
138  }
139 
140  return (*it).second;
141 
142 }
143 
144 
145 // Given online Channel ID, find TT ID.
147 const
148 {
149  ONLMAP::const_iterator it = m_onlmap.find( id );
150  if(it==m_onlmap.end() )
151  {
152  std::string err(" TileRoI_Map::TrigTowerID(const HWIdentifier&): no entry for HWID ");
153  err += m_tileHWID->to_string(id,-1) ;
154  TileID_Exception except(err,2);
155  throw except;
156  }
157 
158  return (*it).second;
159 
160 }
161 
163  (const TileRoI_Map::TT_ID & RoIid ) const
164 {
165  ROIMAP::const_iterator it = m_roimap.find(RoIid);
166  if(it !=m_roimap.end()) {
167  return (*it).second;
168  }
169  std::cout <<" TileRoI_Map::CollectionID: can not find RoI" << std::endl;
170  static const COLL_ID_VEC v ;
171  return v;
172 }
173 
175  (const TileRoI_Map::TT_ID & RoIid ) const
176 {
177  ROIMAP::const_iterator it = m_roimap.find(RoIid);
178  return it !=m_roimap.end() ;
179 }
180 
182 {
183  // print all Collection ID and eta phi region
184 
185  E_P_MAP::const_iterator it = m_epmap.begin();
186  E_P_MAP::const_iterator it_end = m_epmap.end();
187 
188  std::cout <<" COLLECTION ID , HASHID, ETAMIN, ETAMAX, PHIMIN, PHIMAX "<<std::endl ;
189 
190  TileHWID tileHW;
191 
192  for(; it!=it_end;++it){
193  int frag = (*it).first;
194  int hashid = m_idhash(frag);
195 
196  float e1,e2,p1,p2 ;
197 
198  // check getEtaPhiRegion method.
199  getEtaPhiRegion(hashid,e1,e2,p1,p2);
200 
201  // print them out.
202  std::cout <<std::hex<< frag
203  << " " <<hashid << " "
204  <<e1 << " "
205  <<e2 << " "
206  <<p1 << " "
207  <<p2 << std::endl;
208  }
209  std::cout << std::dec << std::endl;
210 
211 }
212 
213 bool TileRoI_Map:: getEtaPhiRegion(unsigned int hashid,
214  float& etamin, float& etamax,
215  float& phimin, float& phimax ) const
216 
217 {
218  if( (int)hashid >= m_idhash.max() ) return false;
219 
220  int frag = m_idhash.identifier(hashid);
221  E_P_MAP::const_iterator it = m_epmap.find(frag);
222  if(it == m_epmap.end()) return false;
223 
224  etamin = (*it).second.etamin;
225  etamax = (*it).second.etamax;
226  phimin = (*it).second.phimin;
227  phimax = (*it).second.phimax;
228 
229  return true;
230 
231 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TileRoI_Map::m_onlmap
ONLMAP m_onlmap
Definition: TileRoI_Map.h:119
TileFragHash::max
int max() const
return maximum number of IDs
Definition: TileFragHash.h:50
TileCablingService::pmt2tt_id
Identifier pmt2tt_id(const Identifier &id) const
Definition: TileCablingService.cxx:375
TileCablingService::getInstance
static const TileCablingService * getInstance()
get pointer to service instance
Definition: TileCablingService.cxx:24
egammaEnergyPositionAllSamples::e1
double e1(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 1st sampling
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
TileRoI_Map::m_print
bool m_print
Definition: TileRoI_Map.h:130
skel.it
it
Definition: skel.GENtoEVGEN.py:423
TileRoI_Map::m_offmap
OFFMAP m_offmap
Definition: TileRoI_Map.h:118
TileHWID::adc_begin
std::vector< HWIdentifier >::const_iterator adc_begin(void) const
begin iterator for ADC Identifiers
Definition: TileHWID.h:308
TileHWID::frag
int frag(const HWIdentifier &id) const
extract frag field from HW identifier
Definition: TileHWID.h:181
TileRoI_Map::m_cablingSvc
const TileCablingService * m_cablingSvc
Definition: TileRoI_Map.h:127
HWIdentifier
Definition: HWIdentifier.h:13
Identifier::is_valid
bool is_valid() const
Check if id is in a valid state.
TileRoI_Map::CollectionID
const std::vector< COLL_ID > & CollectionID(const TT_ID &id) const
reserve lookup.
Definition: TileRoI_Map.cxx:163
TileID.h
TileDetDescrManager.h
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
TileRoI_Map::m_idhash
TileFragHash m_idhash
Definition: TileRoI_Map.h:129
TileHWID
Helper class for TileCal online (hardware) identifiers.
Definition: TileHWID.h:49
TileRoI_Map::COLL_ID_VEC
std::vector< COLL_ID > COLL_ID_VEC
Definition: TileRoI_Map.h:113
TileHWID.h
TileRoI_Map::TrigTowerID
TT_ID TrigTowerID(const Identifier &id) const
return TrigTowerID for various queries.
Definition: TileRoI_Map.cxx:128
TileCablingService.h
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:193
TileCablingService::h2s_adc_id
Identifier h2s_adc_id(const HWIdentifier &id) const
Definition: TileCablingService.cxx:898
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TileID_Exception
Exception class for Tile Identifiers.
Definition: TileID_Exception.h:16
TileFragHash::initialize
void initialize(const TileHWID *tileHWID, TYPE type=Default)
Definition: TileFragHash.cxx:23
TileDetDescrManager::get_cell_element
CaloDetDescrElement * get_cell_element(unsigned int cell_hash) const
Definition: TileDetDescrManager.h:156
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TileRoI_Map::getEtaPhiRegion
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.
Definition: TileRoI_Map.cxx:213
TileHWID::channel_id
HWIdentifier channel_id(int ros, int drawer, int channel) const
channel HWIdentifer
Definition: TileHWID.cxx:198
TileRoI_Map::m_tileMgr
const TileDetDescrManager * m_tileMgr
Definition: TileRoI_Map.h:126
TileRoI_Map::printEtaPhiRegions
void printEtaPhiRegions()
Definition: TileRoI_Map.cxx:181
TileRoI_Map::m_roimap
ROIMAP m_roimap
Definition: TileRoI_Map.h:120
TileRoI_Map::initialize
StatusCode initialize()
define a RoI identifier type, two ints.
Definition: TileRoI_Map.cxx:36
python.PyAthena.v
v
Definition: PyAthena.py:157
TileRoI_Map::validId
bool validId(const TT_ID &tt_id) const
check validity
Definition: TileRoI_Map.cxx:175
TileRoI_Map.h
TileRoI_Map::m_epmap
E_P_MAP m_epmap
Definition: TileRoI_Map.h:122
TileRoI_Map::~TileRoI_Map
virtual ~TileRoI_Map()
Definition: TileRoI_Map.cxx:67
TileRoI_Map::interfaceID
static const InterfaceID & interfaceID()
AlgTool InterfaceID.
Definition: TileRoI_Map.cxx:20
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
egammaEnergyPositionAllSamples::e2
double e2(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 2nd sampling
Tile_Base_ID::to_string
std::string to_string(const Identifier &id, int level=0) const
Definition: Tile_Base_ID.cxx:52
Tile_Base_ID::pmt_id
Identifier pmt_id(const Identifier &any_id) const
Definition: Tile_Base_ID.cxx:640
TileRoI_Map::m_tileHWID
const TileHWID * m_tileHWID
Definition: TileRoI_Map.h:125
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DeMoScan.first
bool first
Definition: DeMoScan.py:534
TileRoI_Map::addEntry
bool addEntry(const HWIdentifier &adc_hwid)
Definition: TileRoI_Map.cxx:72
CaloDetDescrElement::eta
float eta() const
cell eta
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:344
TileFragHash::identifier
ID identifier(int i) const
reverse conversion
Definition: TileFragHash.cxx:67
CaloDetDescrElement::phi
float phi() const
cell phi
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:346
TileHWID::to_string
std::string to_string(const HWIdentifier &id, int level=0) const
extract all fields from HW identifier HWIdentifier get_all_fields ( const HWIdentifier & id,...
Definition: TileHWID.cxx:49
AthAlgTool
Definition: AthAlgTool.h:26
Tile_Base_ID::cell_id
Identifier cell_id(const Identifier &any_id) const
Definition: Tile_Base_ID.cxx:581
LArCellBinning.etamin
etamin
Definition: LArCellBinning.py:137
StoreGateSvc.h
TileRoI_Map::m_tileID
const TileID * m_tileID
Definition: TileRoI_Map.h:124
TileHWID::adc_end
std::vector< HWIdentifier >::const_iterator adc_end(void) const
end iterator for ADC Identifiers
Definition: TileHWID.h:312
TileRoI_Map::TileRoI_Map
TileRoI_Map(const std::string &type, const std::string &name, const IInterface *parent)
constructor
Definition: TileRoI_Map.cxx:24