ATLAS Offline Software
Loading...
Searching...
No Matches
TRT_DAQ_ConditionsSvc.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5/*----------------------------------------------------
6 * TRT_DAQ_ConditionsSvc.cxx
7 * Denver Whittington
8 *///-------------------------------------------------
9
10// Header Includes
11
14
18TRT_DAQ_ConditionsSvc::TRT_DAQ_ConditionsSvc( const std::string& name, ISvcLocator* pSvcLocator ) :
19 base_class( name, pSvcLocator ),
20 m_detStore("DetectorStore",name),
21 m_FolderName("/TDAQ/Resources/ATLAS/TRT/Robins") // For run1 the name is /TDAQ/EnabledResources/ATLAS/TRT/Robins
22{
23 // Get properties from job options
24 declareProperty( "FolderName", m_FolderName );
25 declareProperty( "DetectorStore", m_detStore );
26}
27
32
37 StatusCode sc(StatusCode::SUCCESS);
38
39 // Read key for Robins folder
40 ATH_CHECK(m_RobinsReadKey.initialize());
41
42 // Get the TRT Identifier Helper.
43 ATH_CHECK( m_detStore->retrieve( m_TRT_ID_Helper, "TRT_ID" ));
44
45 return sc;
46}
47
51unsigned int TRT_DAQ_ConditionsSvc::RODid( const Identifier& ident ) {
52 int barrel_ec = m_TRT_ID_Helper->barrel_ec( ident );
53 int phi_module = m_TRT_ID_Helper->phi_module( ident );
54 int layer_or_wheel = m_TRT_ID_Helper->layer_or_wheel( ident );
55 int straw_layer = m_TRT_ID_Helper->straw_layer( ident );
56
57 int partition = 0;
58 if ( barrel_ec == 1 ) partition = 0x31; // Barrel A
59 else if ( barrel_ec == -1 ) partition = 0x32; // Barrel C
60 else if ( barrel_ec == 2 ) partition = 0x33; // Endcap A
61 else if ( barrel_ec == -2 ) partition = 0x34; // Endcap C
62 else {
63 ATH_MSG_WARNING( "Invalid Barrel/EC identifier requested in RODid." );
64 return 0;
65 }
66
67 int phi = phi_module + 1; // [0,31] -> [1,32]
68
69 int rodHalf = 0;
70 if ( abs(barrel_ec) == 2 ) {
71 if ( layer_or_wheel >= 0 && layer_or_wheel < 4 ) rodHalf = 2;
72 if ( layer_or_wheel == 4 && straw_layer >= 0 && straw_layer < 8 ) rodHalf = 1;
73 if ( layer_or_wheel == 4 && straw_layer >= 8 && straw_layer < 16 ) rodHalf = 2;
74 if ( layer_or_wheel == 5 && straw_layer >= 0 && straw_layer < 8 ) rodHalf = 2;
75 if ( layer_or_wheel == 5 && straw_layer >= 8 && straw_layer < 16 ) rodHalf = 1;
76 if ( layer_or_wheel >= 6 && layer_or_wheel < 14 ) rodHalf = 1;
77 }
78
79 int thisRODid = partition*0x10000 + phi*0x100 + rodHalf;
80 return thisRODid;
81}
82
87 const Identifier& ident ) {
88
90 const CondAttrListCollection* EnabledRods{*readHandle};
91 if ( !EnabledRods ) return InDet::TRT_COND_NOINFO;
92
93 unsigned int thisRODid = RODid( ident );
94
95 return condSummaryStatus( thisRODid );
96}
97
101InDet::TRT_CondFlag TRT_DAQ_ConditionsSvc::condSummaryStatus( unsigned int thisRODid ) {
102
104 const CondAttrListCollection* EnabledRods{*readHandle};
105
106 if ( !EnabledRods ) return InDet::TRT_COND_NOINFO;
107
109 if ( EnabledRods->name_size() == 0 ) {
110 ATH_MSG_WARNING( m_FolderName << " has no entries in it's ChanNameMap." );
111 return InDet::TRT_COND_NOINFO;
112 }
113 int chanNum = -1;
114 std::string chanName = "";
115 for ( chanNameMapItr = EnabledRods->name_begin();
116 chanNameMapItr != EnabledRods->name_end(); ++chanNameMapItr ) {
117 chanNum = (*chanNameMapItr).first;
118 chanName = (*chanNameMapItr).second;
119 // Pull off last 6 characters from chanName and convert
120 // to an integer for comparison to identifier.
121 std::string ROD_Part = std::string( chanName, chanName.length()-6, 2 );
122 std::string ROD_Phi = std::string( chanName, chanName.length()-4, 2 );
123 std::string ROD_Half = std::string( chanName, chanName.length()-2, 2 );
124
125 unsigned int rod = 0;
126
127 // Convert string representation of hex representation of partition (detector) to integer
128 /* Partition number in string from database comes as hex number.
129 * Need to convert it to an integer. */
130 int ROD_Part_int;
131 std::istringstream iss(ROD_Part);
132 iss >> ROD_Part_int;
133 switch ( ROD_Part_int ) {
134 case 31:
135 rod += 0x10000 * 0x31;
136 break;
137 case 32:
138 rod += 0x10000 * 0x32;
139 break;
140 case 33:
141 rod += 0x10000 * 0x33;
142 break;
143 case 34:
144 rod += 0x10000 * 0x34;
145 break;
146 }
147
148 // Convert string representation of hex representation of phi stack to integer
149 /* Phi stack number in string from database comes as hex number.
150 * Need to convert it to an integer. */
151 char* extra = nullptr;
152 int ROD_Phi_int = strtol( ROD_Phi.c_str(), &extra, 16 );
153 rod += ROD_Phi_int * 0x100;
154
155 rod += atoi(ROD_Half.c_str());
156
157 ATH_MSG_VERBOSE( "Comparing " << rod << " to " << thisRODid );
158 if ( rod == thisRODid ) break;
159 }
160 if ( chanNameMapItr == EnabledRods->name_end() ) {
161 ATH_MSG_VERBOSE( thisRODid << " not found in chanNameMap" );
162 return InDet::TRT_COND_BAD; // SHOULD THIS BE NOINFO??
163 // Either this is unnecessary (ROD absence won't show up here)
164 // or the next checking step is redundant.
165 }
166
167 // Check for absence of AttributeList for this ROD.
169 chanAttrListPair = EnabledRods->chanAttrListPair( chanNum );
170 if ( chanAttrListPair == EnabledRods->end() ) {
171 ATH_MSG_VERBOSE( "Channel " << chanNum << " (" << chanName << ") not found." );
172 return InDet::TRT_COND_BAD;
173 }
174
175 // Must have been present = GOOD.
176 ATH_MSG_VERBOSE( "Channel " << chanNum << " (" << chanName << ") enabled in this event." );
177 return InDet::TRT_COND_GOOD;
178}
179
184 return StatusCode::SUCCESS;
185}
186
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
static Double_t sc
This class is a collection of AttributeLists where each one is associated with a channel number.
const_iterator end() const
name_const_iterator name_begin() const
Access to Chan/Name pairs via iterators.
name_size_type name_size() const
number of Chan/Name pairs
name_const_iterator name_end() const
ChanAttrListMap::const_iterator const_iterator
ChanNameMap::const_iterator name_const_iterator
const_iterator chanAttrListPair(ChanNum chanNum) const
Access to Chan/AttributeList pairs via channel number: returns map iterator.
InDet::TRT_CondFlag condSummaryStatus(unsigned int)
ConditionsSummaryStatus for a ROD ID.
virtual ~TRT_DAQ_ConditionsSvc()
Destructor //.
virtual StatusCode finalize()
Finalize //.
SG::ReadCondHandleKey< CondAttrListCollection > m_RobinsReadKey
virtual StatusCode initialize()
Initialize //.
ServiceHandle< StoreGateSvc > m_detStore
unsigned int RODid(const Identifier &)
Return ROD identifier //.
TRT_DAQ_ConditionsSvc(const std::string &, ISvcLocator *)
Constructor //.