ATLAS Offline Software
Loading...
Searching...
No Matches
MdtCsmIdHash.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7
9
10#include "GaudiKernel/Bootstrap.h"
11#include "GaudiKernel/GaudiException.h"
12#include "GaudiKernel/StatusCode.h"
15
17
18#include <cassert>
19#include <iostream>
20
21// This class converts a Mdt Identifier into a integer, according to its
22// fields
23
24
25// default contructor
27{
28 const MdtIdHelper* mdtHelper=nullptr;
29 SmartIF<StoreGateSvc> detStore{Gaudi::svcLocator()->service("DetectorStore")};
30
31 StatusCode sc = detStore->retrieve( mdtHelper, "MDTIDHELPER" );
32 if (sc.isFailure()) {
33 throw GaudiException("can not get MdtIdHelper",
34 "MdtCsmIdHash::MdtCsmIdHash()", sc);
35 }
36
37 unsigned int used = mdtHelper->module_hash_max();
38 IdContext context = mdtHelper->module_context();
39
40 if( mdtHelper->stationNameIndex("BME") != -1 ) {
41 used = mdtHelper->detectorElement_hash_max();
42 context = mdtHelper->detectorElement_context();
43 }
44
45 for(unsigned int hash=0; hash < used; ++hash){
46 Identifier id;
47 if (!mdtHelper->get_id(hash,id,&context)) {
48 m_lookup[id]=(int) hash;
49 m_int2id.push_back(id);
50 } else {
51 REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "MdtCscIdHash") <<
52 "MDT hash constructor failed!" << endmsg;
53 }
54 }
55
56 m_size = (int) used;
57}
58
60
61 if(index>=0 && index < m_size) {
62 return m_int2id[index] ;
63 }
64 // return blank id for invalid index
65 std::cout <<" MdtCsmIdHash::ERROR : identifier invalid ID "<<std::endl;
66 Identifier id;
67 return id;
68
69}
70
71int MdtCsmIdHash::operator() (const ID& id) const {
72
73 std::map<ID,int>::const_iterator it = m_lookup.find(id);
74 if(it!=m_lookup.end()){
75 return (*it).second;
76 }
77
78 // FIXME -1 for invalid ID?
79 return -1;
80
81}
82
83int MdtCsmIdHash::max() const {
84
85return m_size;
86
87}
88
90
91return 0;
92
93}
#define endmsg
Helpers for checking error return status codes and reporting errors.
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
static Double_t sc
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition IdContext.h:26
Identifier ID
std::map< Identifier, int > m_lookup
lookup table
int m_size
total number of IDs
static int offset()
return offset
std::vector< ID > m_int2id
reverse lookup
int operator()(const ID &id) const
Convert ID to int.
int max() const
return maximum number of IDs
ID identifier(int i) const
reverse conversion
int stationNameIndex(const std::string &name) const
virtual int get_id(const IdentifierHash &hash_id, Identifier &id, const IdContext *context=0) const override
Create compact id from hash id (return == 0 for OK)
size_type module_hash_max() const
the maximum hash value
IdContext module_context() const
id for module
IdContext detectorElement_context() const
id for detector element
size_type detectorElement_hash_max() const
holding In fact this class is here in order to allow STL container for all features This class is sho...
Definition index.py:1