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  const CaloTTDescrManager* manager = nullptr;
136  const CaloLVL1_ID* helper = nullptr;
137 
138  if ( detStore()->retrieve(manager).isFailure() ) {
139  ATH_MSG_ERROR( "CaloTTMgr Manager not found" );
140  return lut;
141  }
142 
143  if ( detStore()->retrieve(helper).isFailure() ) {
144  ATH_MSG_ERROR( "CaloTTMgr id helper not found" );
145  return lut;
146  }
147 
148  int lut_size = 0;
149 
150  int sampling = 0;
151  int fcal_layer = 1;
152  bool fcal = false;
153 
160 
161  if ( m_managerName == "TTEM" ) {
162  lut_size = 12544;
163  sampling = 0;
164  fcal = false;
165  }
166  else if ( m_managerName == "TTHEC" ) {
167  lut_size = 5632;
168  sampling = 1;
169  fcal = false;
170  }
171  else if ( m_managerName == "FCALEM" ) {
172  lut_size = 128;
173  sampling = 0;
174  fcal_layer = 0;
175  fcal = true;
176  }
177  else if ( m_managerName == "FCALHAD" ) {
178  lut_size = 256;
179  sampling = 1;
180  fcal = true;
181  }
182  else {
183  ATH_MSG_ERROR( "Incorrect table type" );
184  return lut;
185  }
186 
187 
189 
190  int ncount = 0;
191  int ncount1 = 0;
192 
194  LArReadoutModuleService larReadoutModuleSvc;
195 
196  std::unique_ptr<RegionSelectorLUT> lut_stuff = std::make_unique<RegionSelectorLUT>( lut_size );
197 
198  CaloTTDescrManager::calo_region_const_iterator it2 = manager->calo_region_begin();
199  CaloTTDescrManager::calo_region_const_iterator it2_end = manager->calo_region_end();
200 
201  for ( ; it2!=it2_end ; ++it2 ) {
202 
203  const CaloTTDescrRegion* region = (*it2);
204 
205  Identifier layer_id = region->identify();
206  int samp = helper->sampling(layer_id);
207  int layer = helper->layer(layer_id);
208  bool isFcal = helper->is_fcal(layer_id);
209 
210  if ( isFcal != fcal ) continue;
211  if ( sampling==0 && samp!=0 ) continue;
212  if ( sampling!=0 && samp==0 ) continue;
213  if ( fcal_layer==0 && layer!=0 ) {
214  ATH_MSG_DEBUG( "Whoa! how did this happen ? should never be able to get here: " << samp << " " << layer << " " << isFcal );
215  continue;
216  }
217 
218 
219  float dEta = region->deta() ;
220  float dPhi = region->dphi() ;
221 
222  float eta1 = region->eta()-dEta/2. ;
223  float eta2 = eta1+dEta;
224 
225  float phi1 = region->phi()-dPhi/2. ;
226  float phi2 = phi1+dPhi;
227 
228  IdentifierHash hashid;
229 
230  IdContext IdCntx = helper->layer_context();
231 
232  helper->get_hash(layer_id, hashid, &IdCntx ) ;
233 
234  // quite special treatment for FCALHAD
235  if ( isFcal && ( samp != 0 ) ) {
236  if ( helper->pos_neg_z(layer_id)==1 ) {
237 
242 
243  eta1 = 3.6;
244  eta2 = 5.2;
245  }
246  else {
247  eta1 = -5.2;
248  eta2 = -3.6;
249  };
250 
251  int pseudolayer = helper->eta(layer_id);
252 
253  if ( layer == 0 ) {
254 
255  layer = ( pseudolayer<2 ? 0 : 1 );
256 
257  if ( layer == 0 ){
258  if ( helper->pos_neg_z(layer_id)==1 ) {
259  eta1 = 3.2;
260  eta2 = 3.6;
261  }
262  else {
263  eta1 = -3.6;
264  eta2 = -3.2;
265  };
266  }
267  } else {
268 
269  layer = ( pseudolayer<2 ? 2 : 3 );
270 
271  if ( layer == 2 ) {
272  if ( helper->pos_neg_z(layer_id)==1 ) {
273  eta1 = 3.2;
274  eta2 = 3.6;
275  }
276  else {
277  eta1 = -3.6;
278  eta2 = -3.2;
279  };
280  }
281  }
282  } // end of isFcal hadronic
283 
284  // get the RODID for this TT
285  const std::vector<HWIdentifier>& vROBID = roiMap.collectionID((unsigned int)hashid);
286 
287  // skip the TT that does not have readout, i.e., invalid.
288  if( !vROBID.empty() ) {
289 
290  if( vROBID.size() > 1 ) {
291  ATH_MSG_DEBUG ( "More than 1 (" << vROBID.size()
292  << ") ROBID for this TT, sampling, layer, etamin, phimin= "
293  << helper->show_to_string(layer_id) << " "
294  << samp << " " << layer << " " << eta1 << " " << phi1
295  );
296  }
297  // *ttmap << helper->show_to_string(layer_id) << " " << hashid
298 
299  std::vector<HWIdentifier>::const_iterator it = vROBID.begin();
300  std::vector<HWIdentifier>::const_iterator it_end = vROBID.end();
301 
302  for ( ; it!=it_end ; ++it ) {
303 
304  const HWIdentifier mId = (*it);
305 
306  eformat::SubDetector detid = (eformat::SubDetector) larReadoutModuleSvc.subDet(mId);
307 
308  uint16_t m = larReadoutModuleSvc.rodFragId(mId);
309 
310  //EventFormat::SourceID sid = EventFormat::SourceID(detid,type,m);
311  eformat::helper::SourceIdentifier sid(detid,m);
312 
313  uint32_t rod_id = sid.code();
314 
315  lut_stuff->additem( (double)eta1, (double)eta2, (double)phi1, (double)phi2, samp, layer, (int)hashid, (int)rod_id );
316 
317  ATH_MSG_DEBUG( ncount << " filled LUT with following info"
318  << " hashid,sampling, layer, etamin, phimin= "
319  << helper->show_to_string(layer_id) << " "
320  << hashid << " "
321  << samp << " " << layer << " " << eta1 << " " << phi1 );
322 
323  ++ncount;
324  }
325 
326  ++ncount1;
327 
328  } else {
329 
330  // no ROBID for this TT. not abnormal (not all layers exist in all TTs)
331  ATH_MSG_DEBUG ( "No ROBID for this TT, sign, sampling, layer, etamin, phimin= "
332  << helper->show_to_string(layer_id)
333  << " " << samp << " " << layer << " " << eta1 << " " << phi1 );
334 
335  }
336 
337  } // end loop on "regions"
338 
339 
345 
346  lut = std::make_unique<RegSelectorHashMap>();
347  lut->addLut( lut_stuff.get());
348  lut->mountDataStruct();
349 
350  ATH_MSG_DEBUG( " Total number of records = " << ncount );
351  ATH_MSG_DEBUG( " Total number of TTs = " << ncount1 );
352 
353  return lut;
354 }
355 
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:396
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:93
CaloTTDescrRegion::dphi
double dphi() const
return size in eta (unsigned)
Definition: CaloTTDescrRegion.h:203
CaloTTDescrManager.h
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:538
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:228
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
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
TauGNNUtils::Variables::Track::dEta
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:527
IdContext
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition: IdContext.h:26
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
Identifier
Definition: IdentifierFieldParser.cxx:14