ATLAS Offline Software
RegSelCondAlg_LAr.cxx
Go to the documentation of this file.
1 
15 #include "RegSelCondAlg_LAr.h"
16 
17 #include "GaudiKernel/EventIDRange.h"
19 
21 
25 
26 #include "eformat/SourceIdentifier.h"
28 
29 #include <iostream>
30 #include <fstream>
31 #include <string>
32 
33 
34 RegSelCondAlg_LAr::RegSelCondAlg_LAr(const std::string& name, ISvcLocator* pSvcLocator):
35  AthReentrantAlgorithm( name, pSvcLocator ),
36  m_managerName(""),
37  m_printTable(false)
38 {
39  ATH_MSG_DEBUG( "RegSelCondAlg_LAr::RegSelCondAlg_LAr() " << name );
40  declareProperty( "PrintTable", m_printTable=false );
41  declareProperty( "ManagerName", m_managerName );
42 }
43 
44 
45 
46 
48  ATH_MSG_DEBUG("RegSelCondAlg_LAr::initialize() ");
49  ATH_CHECK(m_tableKey.initialize());
52  ATH_MSG_INFO("RegSelCondAlg_LAr::initialize() " << m_tableKey );
53  return StatusCode::SUCCESS;
54 }
55 
56 
57 
58 StatusCode RegSelCondAlg_LAr::execute(const EventContext& ctx) const {
59 
60  ATH_MSG_INFO( "RegSelConfAlg_LAr:execute() " << name() );
61 
63  ATH_MSG_DEBUG( "Creating region selector table " << m_tableKey );
64 
66  if (lutCondData.isValid()) {
72  ATH_MSG_DEBUG("CondHandle " << lutCondData.fullKey() << " is already valid." );
73  return StatusCode::SUCCESS;
74  }
75 
76 
78  lutCondData.addDependency (roiMap);
79 
80  EventIDRange range;
81  if( !roiMap.range( range ) ) {
82  ATH_MSG_ERROR("Failed to retrieve validity range for " << roiMap.key());
83  return StatusCode::FAILURE;
84  }
85  ATH_MSG_DEBUG( "RegSelCondAlg_LAr: " << name() << " found range: " << range );
86 
87  ATH_MSG_INFO( "creating new LAr table" );
88 
90 
91  std::unique_ptr<IRegSelLUT> rd = createTable (**roiMap);
92 
93  if ( !rd ) return StatusCode::FAILURE;
94 
95  ATH_MSG_INFO( "Storing the new look up table " << m_tableKey );
96 
98 
99  IRegSelLUTCondData* rcd = new IRegSelLUTCondData( std::move(rd) );
100 
101  try {
106  if( lutCondData.record( rcd ).isFailure() ) {
107  ATH_MSG_ERROR( "Could not record " << m_tableKey
108  << " " << lutCondData.key()
109  << " with range " << range );
110  return StatusCode::FAILURE;
111  }
112  ATH_MSG_INFO( "RegSelCondAlg LUT recorded: " << m_tableKey);
113  }
114  catch (...) {
115  ATH_MSG_ERROR("RegSelCondAlg_LAr::execute() failed to record table: " << m_tableKey);
116  return StatusCode::FAILURE;
117  }
118 
119 
120  ATH_MSG_DEBUG("RegSelCondAlg_LAr::execute() -- exit -- ");
121 
122  return StatusCode::SUCCESS;
123 }
124 
125 
126 
127 
128 std::unique_ptr<RegSelectorHashMap> RegSelCondAlg_LAr::createTable (const LArRoIMap& roiMap) const {
129 
130  std::unique_ptr<RegSelectorHashMap> lut(nullptr);
131 
134 
135  IToolSvc* toolSvc = nullptr;
136  if ( service( "ToolSvc", toolSvc).isFailure() ) {
137  ATH_MSG_ERROR( "Failed to retrieve ToolSvc ");
138  return lut;
139  }
140 
141  const CaloTTDescrManager* manager = nullptr;
142  const CaloLVL1_ID* helper = nullptr;
143 
144  if ( detStore()->retrieve(manager).isFailure() ) {
145  ATH_MSG_ERROR( "CaloTTMgr Manager not found" );
146  return lut;
147  }
148 
149  if ( detStore()->retrieve(helper).isFailure() ) {
150  ATH_MSG_ERROR( "CaloTTMgr id helper not found" );
151  return lut;
152  }
153 
154  int lut_size = 0;
155 
156  int sampling = 0;
157  int fcal_layer = 1;
158  bool fcal = false;
159 
166 
167  if ( m_managerName == "TTEM" ) {
168  lut_size = 12544;
169  sampling = 0;
170  fcal = false;
171  }
172  else if ( m_managerName == "TTHEC" ) {
173  lut_size = 5632;
174  sampling = 1;
175  fcal = false;
176  }
177  else if ( m_managerName == "FCALEM" ) {
178  lut_size = 128;
179  sampling = 0;
180  fcal_layer = 0;
181  fcal = true;
182  }
183  else if ( m_managerName == "FCALHAD" ) {
184  lut_size = 256;
185  sampling = 1;
186  fcal = true;
187  }
188  else {
189  ATH_MSG_ERROR( "Incorrect table type" );
190  return lut;
191  }
192 
193 
195 
196  int ncount = 0;
197  int ncount1 = 0;
198 
200  LArReadoutModuleService larReadoutModuleSvc;
201 
202  std::unique_ptr<RegionSelectorLUT> lut_stuff = std::make_unique<RegionSelectorLUT>( lut_size );
203 
204  CaloTTDescrManager::calo_region_const_iterator it2 = manager->calo_region_begin();
205  CaloTTDescrManager::calo_region_const_iterator it2_end = manager->calo_region_end();
206 
207  for ( ; it2!=it2_end ; ++it2 ) {
208 
209  const CaloTTDescrRegion* region = (*it2);
210 
211  Identifier layer_id = region->identify();
212  int samp = helper->sampling(layer_id);
213  int layer = helper->layer(layer_id);
214  bool isFcal = helper->is_fcal(layer_id);
215 
216  if ( isFcal != fcal ) continue;
217  if ( sampling==0 && samp!=0 ) continue;
218  if ( sampling!=0 && samp==0 ) continue;
219  if ( fcal_layer==0 && layer!=0 ) {
220  ATH_MSG_DEBUG( "Whoa! how did this happen ? should never be able to get here: " << samp << " " << layer << " " << isFcal );
221  continue;
222  }
223 
224 
225  float dEta = region->deta() ;
226  float dPhi = region->dphi() ;
227 
228  float eta1 = region->eta()-dEta/2. ;
229  float eta2 = eta1+dEta;
230 
231  float phi1 = region->phi()-dPhi/2. ;
232  float phi2 = phi1+dPhi;
233 
234  IdentifierHash hashid;
235 
236  IdContext IdCntx = helper->layer_context();
237 
238  helper->get_hash(layer_id, hashid, &IdCntx ) ;
239 
240  // quite special treatment for FCALHAD
241  if ( isFcal && ( samp != 0 ) ) {
242  if ( helper->pos_neg_z(layer_id)==1 ) {
243 
248 
249  eta1 = 3.6;
250  eta2 = 5.2;
251  }
252  else {
253  eta1 = -5.2;
254  eta2 = -3.6;
255  };
256 
257  int pseudolayer = helper->eta(layer_id);
258 
259  if ( layer == 0 ) {
260 
261  layer = ( pseudolayer<2 ? 0 : 1 );
262 
263  if ( layer == 0 ){
264  if ( helper->pos_neg_z(layer_id)==1 ) {
265  eta1 = 3.2;
266  eta2 = 3.6;
267  }
268  else {
269  eta1 = -3.6;
270  eta2 = -3.2;
271  };
272  }
273  } else {
274 
275  layer = ( pseudolayer<2 ? 2 : 3 );
276 
277  if ( layer == 2 ) {
278  if ( helper->pos_neg_z(layer_id)==1 ) {
279  eta1 = 3.2;
280  eta2 = 3.6;
281  }
282  else {
283  eta1 = -3.6;
284  eta2 = -3.2;
285  };
286  }
287  }
288  } // end of isFcal hadronic
289 
290  // get the RODID for this TT
291  const std::vector<HWIdentifier>& vROBID = roiMap.collectionID((unsigned int)hashid);
292 
293  // skip the TT that does not have readout, i.e., invalid.
294  if( !vROBID.empty() ) {
295 
296  if( vROBID.size() > 1 ) {
297  ATH_MSG_DEBUG ( "More than 1 (" << vROBID.size()
298  << ") ROBID for this TT, sampling, layer, etamin, phimin= "
299  << helper->show_to_string(layer_id) << " "
300  << samp << " " << layer << " " << eta1 << " " << phi1
301  );
302  }
303  // *ttmap << helper->show_to_string(layer_id) << " " << hashid
304 
305  std::vector<HWIdentifier>::const_iterator it = vROBID.begin();
306  std::vector<HWIdentifier>::const_iterator it_end = vROBID.end();
307 
308  for ( ; it!=it_end ; ++it ) {
309 
310  const HWIdentifier mId = (*it);
311 
312  eformat::SubDetector detid = (eformat::SubDetector) larReadoutModuleSvc.subDet(mId);
313 
314  uint16_t m = larReadoutModuleSvc.rodFragId(mId);
315 
316  //EventFormat::SourceID sid = EventFormat::SourceID(detid,type,m);
317  eformat::helper::SourceIdentifier sid(detid,m);
318 
319  uint32_t rod_id = sid.code();
320 
321  lut_stuff->additem( (double)eta1, (double)eta2, (double)phi1, (double)phi2, samp, layer, (int)hashid, (int)rod_id );
322 
323  ATH_MSG_DEBUG( ncount << " filled LUT with following info"
324  << " hashid,sampling, layer, etamin, phimin= "
325  << helper->show_to_string(layer_id) << " "
326  << hashid << " "
327  << samp << " " << layer << " " << eta1 << " " << phi1 );
328 
329  ++ncount;
330  }
331 
332  ++ncount1;
333 
334  } else {
335 
336  // no ROBID for this TT. not abnormal (not all layers exist in all TTs)
337  ATH_MSG_DEBUG ( "No ROBID for this TT, sign, sampling, layer, etamin, phimin= "
338  << helper->show_to_string(layer_id)
339  << " " << samp << " " << layer << " " << eta1 << " " << phi1 );
340 
341  }
342 
343  } // end loop on "regions"
344 
345 
351 
352  lut = std::make_unique<RegSelectorHashMap>();
353  lut->addLut( lut_stuff.get());
354  lut->mountDataStruct();
355 
356  ATH_MSG_DEBUG( " Total number of records = " << ncount );
357  ATH_MSG_DEBUG( " Total number of TTs = " << ncount1 );
358 
359  return lut;
360 }
361 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
RegSelCondAlg_LAr::m_tableKey
SG::WriteCondHandleKey< IRegSelLUTCondData > m_tableKey
Output conditions object.
Definition: RegSelCondAlg_LAr.h:58
RegSelCondData
Definition: RegSelCondData.h:25
RegSelCondAlg_LAr::m_printTable
bool m_printTable
Definition: RegSelCondAlg_LAr.h:47
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
ParticleGun_SamplingFraction.eta2
eta2
Definition: ParticleGun_SamplingFraction.py:96
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
LArReadoutModuleService::subDet
static int subDet(const HWIdentifier &id)
return sub-detector identifier
Definition: LArReadoutModuleService.cxx:162
RegionSelectorLUT.h
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
RegSelCondAlg_LAr::m_caloMgrKey
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
Definition: RegSelCondAlg_LAr.h:54
LArReadoutModuleService::rodFragId
static int rodFragId(const HWIdentifier &id)
return ROD fragment identifier ( == ROL == ROB identifier )
Definition: LArReadoutModuleService.cxx:211
skel.it
it
Definition: skel.GENtoEVGEN.py:423
xAOD::eta1
setEt setPhi setE277 setWeta2 eta1
Definition: TrigEMCluster_v1.cxx:41
SG::ReadCondHandle::range
bool range(EventIDRange &r)
Definition: ReadCondHandle.h:224
CaloTTDescrRegion.h
SG::WriteCondHandle::record
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED
Definition: WriteCondHandle.h:157
RegSelCondAlg_LAr::initialize
virtual StatusCode initialize() override
Definition: RegSelCondAlg_LAr.cxx:47
HWIdentifier
Definition: HWIdentifier.h:13
LArReadoutModuleService.h
ITkPixEncoding::lut
constexpr auto lut(Generator &&f)
Definition: ITkPixQCoreEncodingLUT.h:19
CaloTTDescrRegion::phi
double phi() const
return coordinateof the Det Descr Region: phi
Definition: CaloTTDescrRegion.h:197
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
RegSelCondAlg_LAr::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: RegSelCondAlg_LAr.cxx:58
RegSelCondAlg_LAr::m_managerName
std::string m_managerName
Definition: RegSelCondAlg_LAr.h:46
runBeamSpotCalibration.helper
helper
Definition: runBeamSpotCalibration.py:112
CaloTTDescrManager::calo_region_const_iterator
calo_region_vec::const_iterator calo_region_const_iterator
Definition: CaloTTDescrManager.h:75
LArReadoutModuleService
Service for creating and interpreting LAr readout modules identifiers.
Definition: LArReadoutModuleService.h:20
SG::WriteCondHandle::fullKey
const DataObjID & fullKey() const
Definition: WriteCondHandle.h:41
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
RegSelCondAlg_LAr::m_roiMapKey
SG::ReadCondHandleKey< LArRoIMap > m_roiMapKey
Definition: RegSelCondAlg_LAr.h:51
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
CaloTTDescrRegion::dphi
double dphi() const
return size in eta (unsigned)
Definition: CaloTTDescrRegion.h:203
CaloTTDescrManager.h
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
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
WriteCondHandle.h
TauGNNUtils::Variables::Track::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:530
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CaloTTDescrRegion::identify
virtual Identifier identify() const
Definition: CaloTTDescrRegion.cxx:22
RegSelCondAlg_LAr.h
emacs: this is -*- c++ -*-
CaloLVL1_ID
Helper class for offline TT identifiers.
Definition: CaloLVL1_ID.h:66
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
SG::WriteCondHandle::key
const std::string & key() const
Definition: WriteCondHandle.h:40
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
RegSelCondAlg_LAr::createTable
std::unique_ptr< RegSelectorHashMap > createTable(const LArRoIMap &roiMap) const
Definition: RegSelCondAlg_LAr.cxx:128
CaloLVL1_ID.h
RegSelCondAlg_LAr::RegSelCondAlg_LAr
RegSelCondAlg_LAr(const std::string &name, ISvcLocator *pSvcLocator)
Definition: RegSelCondAlg_LAr.cxx:34
LArRoIMap
Mapping between calorimeter trigger id to offline/online Identifier.
Definition: LArRoIMap.h:31
SG::WriteCondHandle::isValid
bool isValid() const
Definition: WriteCondHandle.h:248
CaloTTDescrRegion
This class provides an interface to the geometrical description of the Calorimeter Trigger Towers.
Definition: CaloTTDescrRegion.h:48
CaloTTDescrRegion::eta
double eta() const
return coordinateof the Det Descr Region: eta (signed)
Definition: CaloTTDescrRegion.h:195
CaloTTDescrManager
This class is used to build the CaloTTDescriptors and CaloTTDetDescrRegions carrying the geometry inf...
Definition: CaloTTDescrManager.h:70
python.Logging.manager
manager
Definition: PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/Logging.py:92
CaloTTDescrRegion::deta
double deta() const
return size in phi (unsigned)
Definition: CaloTTDescrRegion.h:201
SG::ReadCondHandle::key
const std::string & key() const
Definition: ReadCondHandle.h:59
IdentifierHash
Definition: IdentifierHash.h:38
TauGNNUtils::Variables::Track::dEta
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:525
IdContext
class IdContext
Definition: IdContext.h:34
LArRoIMap::collectionID
const std::vector< COLL_ID > & collectionID(const TT_ID &id) const
Get list of robIds for a given trigger tower ID.
Definition: LArRoIMap.cxx:59
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
RegionSelectorLUT::additem
void additem(const int hashId, const double etaMin, const double etaMax, const double phiMin, const double phiMax, const int layerDiskNumber, const int layerDiskPosition)
Definition: RegionSelectorLUT.cxx:125
IRegSelLUTCondData
RegSelCondData< IRegSelLUT > IRegSelLUTCondData
Definition: IRegSelLUTCondData.h:20
SG::WriteCondHandle::addDependency
void addDependency(const EventIDRange &range)
Definition: WriteCondHandle.h:275