ATLAS Offline Software
Loading...
Searching...
No Matches
FCALHVManager Class Reference

This class provides direct access to information on the HV electrodes within the barrels. More...

#include <FCALHVManager.h>

Collaboration diagram for FCALHVManager:

Classes

class  Clockwork
class  FCALHVData

Public Member Functions

 FCALHVManager ()
 ~FCALHVManager ()
const FCALHVModulegetHVModule (unsigned int iSide, unsigned int iSector, unsigned int iSampling) const
FCALHVData getDataSim () const
FCALHVData getData (const LArHVIdMapping &hvIdMapping, const std::vector< const CondAttrListCollection * > &attrLists) const
int hvLineNo (const FCALHVLine &line, const LArHVIdMapping *hvIdMapping, HWIdentifier *hvlId=nullptr) const

Static Public Member Functions

static unsigned int beginSideIndex ()
static unsigned int endSideIndex ()
static unsigned int beginSectorIndex (unsigned int iSampling)
static unsigned int endSectorIndex (unsigned int iSampling)
static unsigned int beginSamplingIndex ()
static unsigned int endSamplingIndex ()

Private Types

using idfunc_t = std::function<std::vector<HWIdentifier>(HWIdentifier)>

Private Member Functions

FCALHVData getData (const idfunc_t &idfunc, const std::vector< const CondAttrListCollection * > &attrLists) const
 FCALHVManager (const FCALHVManager &right)=delete
FCALHVManageroperator= (const FCALHVManager &right)=delete

Private Attributes

std::unique_ptr< const Clockworkm_c

Detailed Description

This class provides direct access to information on the HV electrodes within the barrels.

The information may be accessed either directly or iteratively. Direct access is provided by the getHVModule() method. Iterative access is by looping over valid side, eta, phi, and sector indices to retrieve a HV module. From the high voltage modules one can obtain a list of electrodes (iteratively or directly).

The manager owns the pointers to the HV Modules.

Definition at line 34 of file FCALHVManager.h.

Member Typedef Documentation

◆ idfunc_t

using FCALHVManager::idfunc_t = std::function<std::vector<HWIdentifier>(HWIdentifier)>
private

Definition at line 86 of file FCALHVManager.h.

Constructor & Destructor Documentation

◆ FCALHVManager() [1/2]

FCALHVManager::FCALHVManager ( )

Definition at line 149 of file FCALHVManager.cxx.

150 : m_c (std::make_unique<Clockwork> (this))
151{
152}
std::unique_ptr< const Clockwork > m_c

◆ ~FCALHVManager()

FCALHVManager::~FCALHVManager ( )
default

◆ FCALHVManager() [2/2]

FCALHVManager::FCALHVManager ( const FCALHVManager & right)
privatedelete

Member Function Documentation

◆ beginSamplingIndex()

unsigned int FCALHVManager::beginSamplingIndex ( )
static

Definition at line 180 of file FCALHVManager.cxx.

181{
182 return 0;
183}

◆ beginSectorIndex()

unsigned int FCALHVManager::beginSectorIndex ( unsigned int iSampling)
static

Definition at line 167 of file FCALHVManager.cxx.

168{
169 return 0;
170}

◆ beginSideIndex()

unsigned int FCALHVManager::beginSideIndex ( )
static

Definition at line 157 of file FCALHVManager.cxx.

158{
159 return 0;
160}

◆ endSamplingIndex()

unsigned int FCALHVManager::endSamplingIndex ( )
static

Definition at line 185 of file FCALHVManager.cxx.

186{
187 return 3;
188}

◆ endSectorIndex()

unsigned int FCALHVManager::endSectorIndex ( unsigned int iSampling)
static

Definition at line 172 of file FCALHVManager.cxx.

173{
174 if (iSampling==0) return 16;
175 if (iSampling==1) return 8;
176 if (iSampling==2) return 4;
177 return 0;
178}

◆ endSideIndex()

unsigned int FCALHVManager::endSideIndex ( )
static

Definition at line 162 of file FCALHVManager.cxx.

163{
164 return 2;
165}

◆ getData() [1/2]

FCALHVManager::FCALHVData FCALHVManager::getData ( const idfunc_t & idfunc,
const std::vector< const CondAttrListCollection * > & attrLists ) const
private

Definition at line 196 of file FCALHVManager.cxx.

198{
199 auto payload = std::make_unique<FCALHVData::Payload>();
200 payload->m_payloadArray.reserve(2*16*3*4);
201 for (unsigned int i=0;i<384;i++) {
202 payload->m_payloadArray[i].voltage = FCALHVData::INVALID;
203 }
204
205 for (const CondAttrListCollection* atrlistcol : attrLists) {
206
207 for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); citr!=atrlistcol->end();++citr) {
208
209 // 1. decode COOL Channel ID
210 unsigned int chanID = (*citr).first;
211 int cannode = chanID/1000;
212 int line = chanID%1000;
213
214 // 2. Construct the identifier
215 HWIdentifier id = m_c->hvId->HVLineId(1,1,cannode,line);
216
217 const std::vector<HWIdentifier>& electrodeIdVec = idfunc(id);
218
219 for(size_t i=0;i<electrodeIdVec.size();i++) {
220
221 HWIdentifier elecHWID = electrodeIdVec[i];
222 int detector = m_c->elecId->detector(elecHWID);
223 if (detector==5) {
224
225 float voltage = FCALHVData::INVALID;;
226 if (!((*citr).second)["R_VMEAS"].isNull()) voltage = ((*citr).second)["R_VMEAS"].data<float>();
227 float current = 0.;
228 if (!((*citr).second)["R_IMEAS"].isNull()) current = ((*citr).second)["R_IMEAS"].data<float>();
229
230 unsigned int sideIndex=1-m_c->elecId->zside(elecHWID); // 0 C side, 1 A side (unline HV numbering)
231 unsigned int samplingIndex=m_c->elecId->hv_eta(elecHWID)-1; // 0 to 2 for the FCAL modules 1-2-3
232 unsigned int sectorIndex=m_c->elecId->module(elecHWID); // 0-15 FCAL1, 0-7 FCAl2, 0-3 FCAL3
233 unsigned int lineIndex=m_c->elecId->gap(elecHWID); // 0-3
234
235 // do we have to worry about phi sector numbering running backwards in phi for z<0 like in EM/HEC ????
236
237 unsigned int index = 192*sideIndex+12*sectorIndex+4*samplingIndex+lineIndex;
238
239 if (index>384) {
240 MsgStream msg (Athena::getMessageSvc(), "EMECHVManager");
241 msg << MSG::ERROR << " invalid index for FCAL " << sideIndex << " " << samplingIndex << " " << sectorIndex << " " << lineIndex << endmsg;
242 continue;
243 }
244
245
246 payload->m_payloadArray[index].voltage=voltage;
247 payload->m_payloadArray[index].current=current;
248 payload->m_payloadArray[index].hvLineNo=chanID;
249 } // if FCAL
250 } // loop over electrodes
251 } // loop over collection
252 } // loop over folders
253
254 return {std::move (payload)};
255}
#define endmsg
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
ChanAttrListMap::const_iterator const_iterator
static constexpr double INVALID
IMessageSvc * getMessageSvc(bool quiet=false)
str index
Definition DeMoScan.py:362
MsgStream & msg
Definition testRead.cxx:32

◆ getData() [2/2]

FCALHVManager::FCALHVData FCALHVManager::getData ( const LArHVIdMapping & hvIdMapping,
const std::vector< const CondAttrListCollection * > & attrLists ) const

Definition at line 276 of file FCALHVManager.cxx.

278{
279 auto idfunc = [&] (HWIdentifier id) -> const std::vector<HWIdentifier>
280 { return hvIdMapping.getLArElectrodeIDvec(id); };
281 return getData (idfunc, attrLists);
282}
FCALHVData getData(const LArHVIdMapping &hvIdMapping, const std::vector< const CondAttrListCollection * > &attrLists) const
const std::vector< HWIdentifier > & getLArElectrodeIDvec(HWIdentifier &hvlineId) const
Return a vector of LArElectrodeID corresponding to a given LArHVLineID.

◆ getDataSim()

FCALHVManager::FCALHVData FCALHVManager::getDataSim ( ) const

Definition at line 258 of file FCALHVManager.cxx.

259{
260 std::vector<const CondAttrListCollection*> attrLists;
261 ServiceHandle<StoreGateSvc> detStore ("DetectorStore", "EMBHVManager");
262 const CondAttrListCollection* atrlistcol = nullptr;
263 // Not a typo --- this folder has a lower-case l in the database...
264 if (detStore->retrieve(atrlistcol, "/LAR/DCS/HV/BARREl/I16").isSuccess()) {
265 attrLists.push_back (atrlistcol);
266 }
267 if (detStore->retrieve(atrlistcol, "/LAR/DCS/HV/BARREL/I8").isSuccess()) {
268 attrLists.push_back (atrlistcol);
269 }
270 return getData (SimIdFunc(), attrLists);
271}

◆ getHVModule()

const FCALHVModule & FCALHVManager::getHVModule ( unsigned int iSide,
unsigned int iSector,
unsigned int iSampling ) const

Definition at line 190 of file FCALHVManager.cxx.

191{
192 return *(m_c->moduleArray[iSide][iSector][iSampling]);
193}

◆ hvLineNo()

int FCALHVManager::hvLineNo ( const FCALHVLine & line,
const LArHVIdMapping * hvIdMapping,
HWIdentifier * hvlId = nullptr ) const

Definition at line 285 of file FCALHVManager.cxx.

288{
289 const FCALHVModule& module = line.getModule();
290 int sideIndex = module.getSideIndex();
291 int sectorIndex = module.getSectorIndex();
292 int samplingIndex = module.getSamplingIndex();
293 int lineIndex = line.getLineIndex();
294
295 // ________________________ Construct ElectrodeID ________________________________
296 int id_detector = 5;
297 int id_zside = 1-sideIndex;
298 int id_module = sectorIndex;
299 int id_hv_phi{0};
300 int id_hv_eta = samplingIndex + 1;
301 int id_gap = lineIndex;
302 int id_electrode{0};
303
304 HWIdentifier elecHWID = m_c->elecId->ElectrodeId(id_detector
305 , id_zside
306 , id_module
307 , id_hv_phi
308 , id_hv_eta
309 , id_gap
310 , id_electrode);
311 // ________________________ ________________________________
312
313 // Get LArHVLineID corresponding to a given LArElectrodeId
314 HWIdentifier id = hvIdMapping->getLArHVLineID(elecHWID);
315
316 if(hvlId) *hvlId=id;
317
318 // Extract HV Line No
319 return m_c->hvId->can_node(id)*1000 + m_c->hvId->hv_line(id);
320}
const HWIdentifier getLArHVLineID(HWIdentifier &electrodeId) const
Return the LArHVLineID corresponding to a given LArElectrodeId.

◆ operator=()

FCALHVManager & FCALHVManager::operator= ( const FCALHVManager & right)
privatedelete

Member Data Documentation

◆ m_c

std::unique_ptr<const Clockwork> FCALHVManager::m_c
private

Definition at line 94 of file FCALHVManager.h.


The documentation for this class was generated from the following files: