ATLAS Offline Software
TRT_CablingSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //
6 // Implementation file for TRT_CablingSvc class
7 //
8 
9 //#include <iostream>
10 #include "TRT_CablingSvc.h"
11 //#include <fstream>
12 
13 #include "eformat/SourceIdentifier.h" // change to new eformat v3
15  // Tool
16 #include "GaudiKernel/IToolSvc.h"
17 
18 
19 using eformat::helper::SourceIdentifier;
20 
21 
22  // Constructor
23 TRT_CablingSvc::TRT_CablingSvc( const std::string& name,
24  ISvcLocator * pSvcLocator)
25  : AthService( name, pSvcLocator ),
26  m_manager ( nullptr ),
27  m_idHelper ( nullptr ),
28  m_cabling ( nullptr ),
29  m_cablingTool_SR1_ECC ( nullptr ),
30  m_cablingTool_SR1 ( nullptr ),
31  m_cablingTool_TB ( nullptr ),
32  m_cablingTool_DC1 ( nullptr ),
33  m_cablingTool_DC2 ( nullptr ),
34  m_cablingTool_DC3 ( nullptr ),
35  m_TRTLayout ( 0 ),
36  m_numberOfStrawsInROD ( 0 ),
37  m_numberOfStrawsInBarrelROD ( 0 ),
38  m_shiftForLeftEndCapStraws ( 0 ),
39  m_shiftForLeftBarrelStraws ( 0 ),
40  m_shiftForRightBarrelStraws ( 0 ),
41  m_shiftForRightEndCapStraws ( 0 )
42 {
43  // declareInterface< ITRT_CablingSvc >( this );
44 }
45 
46  // Destructor
48 {}
49 
50 
51 
52  // Initialisation
54 {
55  StatusCode sc;
56  ATH_MSG_INFO( "TRT_CablingSvc::initialize" );
57 
58  // Retrieve Detector Store
59  ServiceHandle<StoreGateSvc> detStore("DetectorStore",name());
60  if (detStore.retrieve().isFailure())
61  {
62  ATH_MSG_FATAL( "Detector service not found !" );
63  return StatusCode::FAILURE;
64  }
65 
66 
67  // Retrieve detector manager
68  sc = detStore->retrieve(m_manager,"TRT");
69  if (sc.isFailure()) {
70  ATH_MSG_FATAL( "Cannot retrieve TRT_DetectorManager!" );
71  return StatusCode::FAILURE;
72  }
73 
74  // Get the TRT Helper
75  if (detStore->retrieve(m_idHelper, "TRT_ID").isFailure())
76  {
77  ATH_MSG_FATAL( "Could not get TRT ID helper" );
78  return StatusCode::FAILURE;
79  }
81 
82  // Get ToolSvc
83  IToolSvc* toolSvc;
84  sc = service("ToolSvc",toolSvc);
85  if (sc.isFailure())
86  {
87  ATH_MSG_ERROR( "Can't get ToolSvc!" );
88  return StatusCode::FAILURE;
89  }
90 
91  // Get tool for filling of cabling data
92  std::string toolType;
93  if (m_manager->getLayout()=="TestBeam")
94  {
95  m_TRTLayout = 1;
96  toolType = "TRT_FillCablingData_TB04";
97  ATH_MSG_INFO( "TRT TB04 Cabling" );
98  if(StatusCode::SUCCESS !=toolSvc->retrieveTool(toolType,m_cablingTool_TB))
99  {
100  ATH_MSG_ERROR( " Can't get TRT_FillCablingData_TB04 tool " );
101  return StatusCode::FAILURE;
102  }
104  }
105  // DC1
106  else if ((m_manager->getLayout() == "Initial") ||
107  (m_manager->getLayout() == "Final") )
108  {
109  m_TRTLayout = 6;
110  toolType = "TRT_FillCablingData_DC3";
111  ATH_MSG_INFO( "TRT DC3 Cabling" );
112  if( StatusCode::SUCCESS !=
113  toolSvc->retrieveTool(toolType,m_cablingTool_DC3) )
114  {
115  ATH_MSG_ERROR( " Can't get TRT_FillCablingData_DC3 tool " );
116  return StatusCode::FAILURE;
117  }
118 
120 
121  }
122  else if ( m_manager->getLayout()=="SR1" ) // SR1 Barrel cosmics layout
123  {
124  m_TRTLayout = 4;
125  toolType = "TRT_FillCablingData_SR1";
126  ATH_MSG_INFO( "TRT SR1 Cabling" );
127  if(StatusCode::SUCCESS !=toolSvc->retrieveTool(toolType,m_cablingTool_SR1))
128  {
129  ATH_MSG_ERROR( " Can't get TRT_FillCablingData_SR1 tool " );
130  return StatusCode::FAILURE;
131  }
132 
134  }
135  else if ( m_manager->getLayout()=="SR1-EndcapC" ) // SR1 EC C cosmics layout
136  {
137  m_TRTLayout = 5;
138  toolType = "TRT_FillCablingData_SR1_ECC";
139  ATH_MSG_INFO( "TRT SR1 Cabling" );
140  if( StatusCode::SUCCESS !=
141  toolSvc->retrieveTool(toolType,m_cablingTool_SR1_ECC) )
142  {
143  ATH_MSG_ERROR( " Can't get TRT_FillCablingData_SR1_ECC tool " );
144  return StatusCode::FAILURE;
145  }
146 
148  }
149  else
150  {
151  ATH_MSG_FATAL( " Layout is not defined for TRT_FillCablingData (" << m_manager->getLayout() << ")! " );
152  return StatusCode::FAILURE;
153  }
154 
155  ATH_MSG_INFO( "TRT_CablingSvc::initializiation finished" );
156 
157  return sc;
158 }
159 
160 
162 {
163 
164  return StatusCode::SUCCESS;
165 }
166 
167 
169 TRT_CablingSvc::queryInterface( const InterfaceID & riid,
170  void** ppvInterface )
171 {
172  if ( IIncidentListener::interfaceID().versionMatch(riid) )
173  {
174  *ppvInterface = dynamic_cast<IIncidentListener*>(this);
175  } else if ( ITRT_CablingSvc::interfaceID().versionMatch(riid) )
176  {
177  *ppvInterface = dynamic_cast<ITRT_CablingSvc*>(this);
178  } else {
179  // Interface is not directly available : try out a base class
180  return AthService::queryInterface(riid, ppvInterface);
181  }
182  addRef();
183  return StatusCode::SUCCESS;
184 }
185 
186 
187 std::vector<uint32_t> TRT_CablingSvc::getRobID(Identifier& id) const
188 {
189 
190  // TB Case
191  if (m_TRTLayout == 1)
192  {
193  return m_cablingTool_TB->getRobID(id);
194  }
195  // DC1 Case
196  else if (m_TRTLayout == 2)
197  {
198  return m_cablingTool_DC1->getRobID(id);
199  }
200  // DC2
201  else if ( m_TRTLayout == 3 )
202  {
203  return m_cablingTool_DC2->getRobID(id);
204  }
205  // SR1 Barrel
206  else if ( m_TRTLayout == 4 )
207  {
208  return m_cablingTool_SR1->getRobID( id );
209  }
210  // SR1 EC C
211  else if ( m_TRTLayout == 5 )
212  {
213  return m_cablingTool_SR1_ECC->getRobID( id );
214  }
215  // DC3
216  else if ( m_TRTLayout == 6 )
217  {
218  return m_cablingTool_DC3->getRobID(id);
219  }
220  else
221  {
222  // std::vector<uint32_t> *vint = new std::vector<uint32_t>;
223  // return *vint;
224 
225  std::vector<uint32_t> v;
226  return v;
227  }
228 }
229 
230 Identifier TRT_CablingSvc::getIdentifier(const eformat::SubDetector&
231  subdetector,const unsigned& rod, const int& bufferOffset,
232  IdentifierHash& hashId) const
233 {
234  int intRod = (int) rod;
235  int shift;
236 
237  // TB04, SR1 or DC3 Case
238  if ( m_TRTLayout == 1 || m_TRTLayout == 4 || m_TRTLayout == 5 || m_TRTLayout == 6 )
239  {
240  hashId = m_cabling->get_identifierHashForAllStraws(intRod, bufferOffset);
241  return m_cabling->get_identifierForAllStraws(intRod, bufferOffset);
242  }
243 
244  // DC1, DC2 Case
245  int straw = bufferOffset;
246  if (subdetector == eformat::TRT_ENDCAP_A_SIDE)
247  {
249  intRod * m_numberOfStrawsInROD + straw;
250  hashId = m_cabling->get_identifierHashForAllStraws(shift);
251  return m_cabling->get_identifierForAllStraws(shift);
252  }
253 
254  if (subdetector == eformat::TRT_BARREL_A_SIDE)
255  {
256  shift = m_shiftForLeftBarrelStraws +
258  hashId = m_cabling->get_identifierHashForAllStraws(shift);
259  return m_cabling->get_identifierForAllStraws(shift);
260  }
261 
262  if (subdetector == eformat::TRT_BARREL_C_SIDE)
263  {
266  hashId = m_cabling->get_identifierHashForAllStraws(shift);
267  return m_cabling->get_identifierForAllStraws(shift);
268  }
269 
271  intRod * m_numberOfStrawsInROD + straw;
272  hashId = m_cabling->get_identifierHashForAllStraws(shift);
273  return m_cabling->get_identifierForAllStraws(shift);
274 
275 }
276 
277 
278 
279 /*
280  * getBufferOffset( strawId ) -
281  * get Offset into ROD buffer given straw Identifier StrawId.
282  *
283  */
285 {
286 
287  // DC3 Case
288  if ( m_TRTLayout == 6 )
289  {
290  return m_cabling->get_BufferOffset( StrawId );
291  }
292  else
293  {
294  ATH_MSG_FATAL( "TRT_CablingSvc::getBufferOffset called in invalid case !" );
295  assert(0);
296  }
297 
298  return 0;
299 }
300 
301 
302 const std::vector<uint32_t>& TRT_CablingSvc::getAllRods() const
303 {
304  return m_cabling->get_allRods();
305 }
306 
307 
308 
309 #ifdef DEPRECATED
310 uint32_t TRT_CablingSvc::getRodID(Identifier& id) const
311 {
312  // DC1 Case
313  if (m_TRTLayout == 2)
314  {
315  return m_cablingTool_DC1->getRodID(id);
316  }
317  // DC2 Case
318  else
319  return m_cablingTool_DC2->getRodID(id);
320 }
321 
322 void TRT_CablingSvc::getStrawRodID(Identifier& id, uint32_t& rod_id,
323  uint32_t& straw_number) const
324 {
325  // DC1 Case
326  if (m_TRTLayout == 2)
327  {
328  m_cablingTool_DC1->getStrawRodID(id, rod_id, straw_number);
329  }
330  // DC2 Case
331  else
332  m_cablingTool_DC2->getStrawRodID(id, rod_id, straw_number);
333 }
334 
335 
336 
337 const std::vector<IdentifierHash>&
338  TRT_CablingSvc::getCollID(uint32_t rob_id)
339 {
340  return m_cabling->get_collID( rob_id );
341 }
342 
343 int TRT_CablingSvc::getNumStrawInROD(uint32_t /*rod_id*/) const //remove unused variable to avoid compiler warning
344 {
345  return m_numberOfStrawsInROD;
346 }
347 
348 
349 void TRT_CablingSvc::set_parameters()
350 {
351  int numberOfStrawsInROD;
352  int numberOfStrawsInBarrelROD;
353  int shiftForLeftEndCapStraws;
354  int shiftForLeftBarrelStraws;
355  int shiftForRightBarrelStraws;
356  int shiftForRightEndCapStraws;
357  int numberOfEndCapPhiSectors;
358  int numberOfIdentifierSectors;
359 
360  // DC1 Case
361  if (m_TRTLayout == 2)
362  {
363  m_cablingTool_DC1->get_parameters(numberOfStrawsInROD,
364  numberOfStrawsInBarrelROD,
365  shiftForLeftEndCapStraws,
366  shiftForLeftBarrelStraws,
367  shiftForRightBarrelStraws,
368  shiftForRightEndCapStraws,
369  numberOfEndCapPhiSectors,
370  numberOfIdentifierSectors);
371  }
372  // DC2 Case
373  else
374  {
375  m_cablingTool_DC2->get_parameters(numberOfStrawsInROD,
376  numberOfStrawsInBarrelROD,
377  shiftForLeftEndCapStraws,
378  shiftForLeftBarrelStraws,
379  shiftForRightBarrelStraws,
380  shiftForRightEndCapStraws,
381  numberOfEndCapPhiSectors,
382  numberOfIdentifierSectors);
383  }
384 
385  m_numberOfStrawsInROD = numberOfStrawsInROD;
386  m_numberOfStrawsInBarrelROD = numberOfStrawsInBarrelROD;
387  m_shiftForLeftEndCapStraws = shiftForLeftEndCapStraws;
388  m_shiftForLeftBarrelStraws = shiftForLeftBarrelStraws;
389  m_shiftForRightBarrelStraws = shiftForRightBarrelStraws;
390  m_shiftForRightEndCapStraws = shiftForRightEndCapStraws;
391  m_numberOfEndCapPhiSectors = numberOfEndCapPhiSectors;
392  m_numberOfIdentifierSectors = numberOfIdentifierSectors;
393 
394 }
395 #endif // DEPRACATED
TRT_CablingSvc::m_cablingTool_SR1
TRT_FillCablingData_SR1 * m_cablingTool_SR1
Definition: TRT_CablingSvc.h:79
TRT_FillCablingData_TB04::fillData
TRT_CablingData * fillData()
Definition: TRT_FillCablingData_TB04.cxx:100
TRT_FillCablingData_DC3::fillData
TRT_CablingData * fillData()
Definition: TRT_FillCablingData_DC3.cxx:135
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
TRT::Hit::straw
@ straw
Definition: HitInfo.h:82
TRT_CablingSvc::m_numberOfStrawsInROD
int m_numberOfStrawsInROD
Definition: TRT_CablingSvc.h:87
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TRT_CablingSvc::m_shiftForLeftBarrelStraws
int m_shiftForLeftBarrelStraws
Definition: TRT_CablingSvc.h:90
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
TRT_CablingSvc::~TRT_CablingSvc
virtual ~TRT_CablingSvc()
Definition: TRT_CablingSvc.cxx:47
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TRT_CablingSvc::m_cablingTool_SR1_ECC
TRT_FillCablingData_SR1_ECC * m_cablingTool_SR1_ECC
Definition: TRT_CablingSvc.h:78
TRT_FillCablingData_TB04::getRobID
std::vector< uint32_t > getRobID(Identifier id) const
Definition: TRT_FillCablingData_TB04.cxx:407
TRT_CablingSvc::m_manager
const InDetDD::TRT_DetectorManager * m_manager
Definition: TRT_CablingSvc.h:73
ITRT_CablingSvc::interfaceID
static const InterfaceID & interfaceID()
Definition: ITRT_CablingSvc.h:65
TRT_CablingSvc::getAllRods
const std::vector< uint32_t > & getAllRods() const
Definition: TRT_CablingSvc.cxx:302
TRT_CablingData::get_allRods
const std::vector< uint32_t > & get_allRods() const
Definition: TRT_CablingData.cxx:187
TRT_FillCablingData_DC2::getStrawRodID
void getStrawRodID(Identifier &id, uint32_t &rod_id, uint32_t &straw_number) const
Definition: TRT_FillCablingData_DC2.cxx:904
TRT_CablingSvc::m_cablingTool_DC3
TRT_FillCablingData_DC3 * m_cablingTool_DC3
Definition: TRT_CablingSvc.h:83
TRT_FillCablingData_SR1::getRobID
std::vector< uint32_t > getRobID(Identifier id) const
Definition: TRT_FillCablingData_SR1.cxx:987
TRT_CablingData::get_collID
const std::vector< IdentifierHash > & get_collID(int shift)
Definition: TRT_CablingData.cxx:175
ITRT_CablingSvc
Definition: ITRT_CablingSvc.h:24
TRT_CablingSvc::getRobID
std::vector< uint32_t > getRobID(Identifier &id) const
Definition: TRT_CablingSvc.cxx:187
TRT_CablingSvc::m_cablingTool_DC2
TRT_FillCablingData_DC2 * m_cablingTool_DC2
Definition: TRT_CablingSvc.h:82
TRT_FillCablingData_DC3::getRobID
std::vector< uint32_t > getRobID(Identifier id) const
Definition: TRT_FillCablingData_DC3.cxx:1980
TRT_FillCablingData_DC2::get_parameters
void get_parameters(int &numberOfStrawsInROD, int &numberOfStrawsInBarrelROD, int &shiftForLeftEndCapStraws, int &shiftForLeftBarrelStraws, int &shiftForRightBarrelStraws, int &shiftForRightEndCapStraws, int &numberOfEndCapPhiSectors, int &numberOfIdentifierSectors)
Definition: TRT_FillCablingData_DC2.cxx:993
TRT_CablingSvc::TRT_CablingSvc
TRT_CablingSvc(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TRT_CablingSvc.cxx:23
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
TRT_FillCablingData_DC1::getRodID
uint32_t getRodID(Identifier &id) const
Definition: TRT_FillCablingData_DC1.cxx:841
TRT_CablingData::get_identifierHashForAllStraws
IdentifierHash get_identifierHashForAllStraws(int rod, int bufferPosition) const
Definition: TRT_CablingData.cxx:127
TRT_CablingSvc::getIdentifier
Identifier getIdentifier(const eformat::SubDetector &subdetector, const unsigned &rod, const int &bufferOffset, IdentifierHash &hashId) const
Definition: TRT_CablingSvc.cxx:230
TRT_CablingData::get_BufferOffset
uint32_t get_BufferOffset(Identifier StrawId)
Definition: TRT_CablingData.cxx:146
TRT_FillCablingData_SR1::fillData
TRT_CablingData * fillData()
Definition: TRT_FillCablingData_SR1.cxx:96
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TRT_FillCablingData_DC1::getStrawRodID
void getStrawRodID(Identifier &id, uint32_t &rod_id, uint32_t &straw_number) const
Definition: TRT_FillCablingData_DC1.cxx:902
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
TRT_ID::straw_layer_context
IdContext straw_layer_context(void) const
straw_layer id
Definition: TRT_ID.h:713
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthService
Definition: AthService.h:32
InDetDD::InDetDetectorManager::getLayout
const std::string & getLayout() const
Definition: InDetDetectorManager.cxx:38
TRT_CablingSvc.h
TRT_CablingSvc::m_shiftForRightEndCapStraws
int m_shiftForRightEndCapStraws
Definition: TRT_CablingSvc.h:92
TRT_CablingSvc::finalize
virtual StatusCode finalize()
Definition: TRT_CablingSvc.cxx:161
RunTileMonitoring.rod
rod
Definition: RunTileMonitoring.py:134
TRT_FillCablingData_DC2::getRodID
uint32_t getRodID(Identifier &id) const
Definition: TRT_FillCablingData_DC2.cxx:844
TRT_CablingSvc::m_cablingTool_TB
TRT_FillCablingData_TB04 * m_cablingTool_TB
Definition: TRT_CablingSvc.h:80
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
PathResolver.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TRT_CablingSvc::getBufferOffset
uint32_t getBufferOffset(const Identifier &StrawId)
Definition: TRT_CablingSvc.cxx:284
TRT_CablingSvc::m_cabling
TRT_CablingData * m_cabling
Definition: TRT_CablingSvc.h:76
TRT_CablingData::get_identifierForAllStraws
Identifier get_identifierForAllStraws(int rod, int bufferPosition) const
Definition: TRT_CablingData.cxx:120
python.PyAthena.v
v
Definition: PyAthena.py:157
TRT_CablingSvc::queryInterface
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface)
Definition: TRT_CablingSvc.cxx:169
TRT_FillCablingData_DC2::getRobID
std::vector< uint32_t > getRobID(Identifier &id) const
Definition: TRT_FillCablingData_DC2.cxx:788
TRT_CablingSvc::m_cntx
IdContext m_cntx
Definition: TRT_CablingSvc.h:75
TRT_CablingSvc::m_numberOfStrawsInBarrelROD
int m_numberOfStrawsInBarrelROD
Definition: TRT_CablingSvc.h:88
TRT_FillCablingData_SR1_ECC::fillData
TRT_CablingData * fillData()
Definition: TRT_FillCablingData_SR1_ECC.cxx:101
TRT_CablingSvc::m_cablingTool_DC1
TRT_FillCablingData_DC1 * m_cablingTool_DC1
Definition: TRT_CablingSvc.h:81
TRT_FillCablingData_DC1::get_parameters
void get_parameters(int &numberOfStrawsInROD, int &numberOfStrawsInBarrelROD, int &shiftForLeftEndCapStraws, int &shiftForLeftBarrelStraws, int &shiftForRightBarrelStraws, int &shiftForRightEndCapStraws, int &numberOfEndCapPhiSectors, int &numberOfIdentifierSectors)
Definition: TRT_FillCablingData_DC1.cxx:991
TRT_CablingSvc::m_TRTLayout
int m_TRTLayout
Definition: TRT_CablingSvc.h:84
IdentifierHash
Definition: IdentifierHash.h:38
TRT_CablingSvc::m_shiftForRightBarrelStraws
int m_shiftForRightBarrelStraws
Definition: TRT_CablingSvc.h:91
TRT_FillCablingData_SR1_ECC::getRobID
std::vector< uint32_t > getRobID(Identifier id) const
Definition: TRT_FillCablingData_SR1_ECC.cxx:1103
TRT_CablingSvc::m_shiftForLeftEndCapStraws
int m_shiftForLeftEndCapStraws
Definition: TRT_CablingSvc.h:89
TRT_FillCablingData_DC1::getRobID
std::vector< uint32_t > getRobID(Identifier &id) const
Definition: TRT_FillCablingData_DC1.cxx:786
TRT_CablingSvc::initialize
virtual StatusCode initialize()
Definition: TRT_CablingSvc.cxx:53
ServiceHandle< StoreGateSvc >
TRT_CablingSvc::m_idHelper
const TRT_ID * m_idHelper
Definition: TRT_CablingSvc.h:74