39 ATH_MSG_ERROR(
"PixelID::wafer_id result is NOT ok. ID, range "
54 ATH_MSG_ERROR(
"PixelID::pixel_id result is NOT ok. ID, range "
68 if (range.match(expId)) {
70 if (not layer_disk_field.
empty()) {
86 if (range.match(expId)) {
88 if (not eta_field.
empty()) {
103 if (range.match(expId)) {
105 if (not eta_field.
empty()) {
131 if (range.match(expId)) {
133 if (not phi_field.
empty()) {
150 if (range.match(expId)) {
152 if (not phi_field.
empty()) {
169 if (range.match(expId)) {
171 if (not eta_field.
empty()) {
191 ATH_MSG_INFO(
"Request to reinitialize not satisfied - tags have not changed");
205 ATH_MSG_FATAL(
"PixelID::initialize_from_dict - cannot access InnerDetector dictionary");
218 ATH_MSG_FATAL(
" PixelID::initialize_from_dict - cannot get pixel id dictionary ");
228 if (
m_dict->get_label_value(
"barrel_endcap",
"barrel", barrel_value)) {
229 ATH_MSG_FATAL(
"Could not get value for label 'barrel' of field 'barrel_endcap' in dictionary "
236 <<
"Set barrel field values: "
249 if (
m_dict->get_label_value(
"barrel_endcap",
"negative_dbm", dbm_value)) {
250 if (
m_dict->version().find(
"DBM") != std::string::npos) {
251 ATH_MSG_WARNING(
"Could not get value for label 'negative_dbm' of field 'barrel_endcap' in dictionary "
260 if (
m_dict->get_label_value(
"barrel_endcap",
"positive_dbm", dbm_value)) {
261 if (
m_dict->version().find(
"DBM") != std::string::npos) {
262 ATH_MSG_WARNING(
"Could not get value for label 'positive_dbm' of field 'barrel_endcap' in dictionary "
283 if (atlasDict->
get_label_value(
"subdet",
"InnerDetector", inDetField)) {
284 ATH_MSG_FATAL(
"Could not get value for label 'InnerDetector' of field 'subdet' in dictionary "
285 << atlasDict->
name());
292 if (
m_dict->get_label_value(
"part",
"Pixel", pixelField)) {
293 ATH_MSG_FATAL(
"Could not get value for label 'Pixel' of field 'part' in dictionary "
298 ATH_MSG_DEBUG(
"PixelID::initialize_from_dict Found field values: InDet/Pixel "
299 << inDetField <<
"/" << pixelField);
304 region_id.add(inDetField);
305 region_id.add(pixelField);
342 unsigned int nids = 0;
343 std::set<Identifier> ids;
347 for (
const auto & exp_id:rit) {
352 if (!(ids.insert(
id)).second) {
354 <<
"Error: duplicated id for wafer id. nid " << nids
356 <<
" exp id " << (std::string) exp_id
366 <<
"Error: set size NOT EQUAL to hash max. size " << ids.size()
373 std::set<Identifier>::const_iterator first = ids.begin();
374 std::set<Identifier>::const_iterator last = ids.end();
375 for (; first != last && nids <
m_wafer_vec.size(); ++first) {
388 unsigned short index = id;
401 unsigned short index = id;
414 unsigned short index = id;
427 unsigned short index = id;
464 for (
const auto & exp_id: rit) {
482 if (
get_hash(
id, hash_id, &wcontext)) {
483 ATH_MSG_FATAL(
"PixelID::init_neighbors - unable to get hash, exp/compact "
490 unsigned short index = hash_id;
504 if (
get_hash(
id, hash_id, &wcontext)) {
505 ATH_MSG_FATAL(
"PixelID::init_neighbors - unable to get previous phi hash, exp/compact "
521 if (
get_hash(
id, hash_id, &wcontext)) {
522 ATH_MSG_FATAL(
"PixelID::init_neighbors - unable to get next phi hash, exp/compact "
538 if (
get_hash(
id, hash_id, &wcontext)) {
539 ATH_MSG_FATAL(
"PixelID::init_neighbors - unable to get previous eta hash, exp/compact "
555 if (
get_hash(
id, hash_id, &wcontext)) {
556 ATH_MSG_FATAL(
"PixelID::init_neighbors - unable to get next eta hash, exp/compact "
572 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - dictionary NOT initialized");
592 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - unable to find pixel region index: id, reg "
603 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - unable to find 'subdet' field");
608 field =
m_dict->find_field(
"part");
612 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - unable to find 'part' field");
616 field =
m_dict->find_field(
"barrel_endcap");
620 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - unable to find 'barrel_endcap' field");
624 field =
m_dict->find_field(
"layer");
628 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - unable to find 'layer' field");
632 field =
m_dict->find_field(
"phi_module");
636 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - unable to find 'phi_module' field");
639 field =
m_dict->find_field(
"eta_module");
643 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - unable to find 'eta_module' field");
646 field =
m_dict->find_field(
"phi_index");
650 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - unable to find 'phi_index' field");
653 field =
m_dict->find_field(
"eta_index");
657 ATH_MSG_FATAL(
"PixelID::initLevelsFromDict - unable to find 'eta_index' field");
676 ATH_MSG_DEBUG(
"decode index and bit fields for each level:");
694 std::cout <<
"indet " <<
m_indet_impl.decode_index() <<
" "
701 std::cout <<
"pixel " <<
m_pixel_impl.decode_index() <<
" "
708 std::cout <<
"bec " <<
m_bec_impl.decode_index() <<
" "
709 << (std::string)
m_bec_impl.ored_field() <<
" "
787 std::cout <<
"PixelID::initLevelsFromDict - found levels " << std::endl;
849 size_t begin = (context) ? context->
begin_index() : 0;
851 size_t end = (context) ? context->
end_index() : 0;
862 std::cout <<
"Do not know how to calculate pixel id from hash yet!!" << std::endl;
880 size_t begin = (context) ? context->
begin_index() : 0;
881 size_t end = (context) ? context->
end_index() : 0;
906 for (; first != last; ++first, ++nids) {
915 ATH_MSG_ERROR(
"PixelID::test_wafer_packing: new and old compact id not equal. New/old/expanded ids "
917 << (std::string) expId);
927 for (; first_pixel != last_pixel && nids < 1000; ++first_pixel, ++nids) {
937 if (exp_id[0] != new_exp_id[0] ||
938 exp_id[1] != new_exp_id[1] ||
939 exp_id[2] != new_exp_id[2] ||
940 exp_id[3] != new_exp_id[3] ||
941 exp_id[4] != new_exp_id[4] ||
942 exp_id[5] != new_exp_id[5]) {
943 ATH_MSG_ERROR(
"PixelID::test_wafer_packing: new and old expanded ids not equal. New/old/compact ids "
944 << (std::string) new_exp_id
945 <<
" " << (std::string) exp_id
963 ATH_MSG_ERROR(
"PixelID::test_wafer_packing: new and old pixel ids not equal. New/old ids "
970 ATH_MSG_DEBUG(
"PixelID::test_wafer_packing: Successfully tested " << nids <<
" ids.");
973 ATH_MSG_ERROR(
"PixelID::test_wafer_packing: Unable to test wafer is packing - no dictionary has been defined.");
#define ATH_MSG_WARNING(x)
This is an Identifier helper class for the Pixel subdetector.
virtual int initialize_from_dictionary(const IdDictMgr &dict_mgr) override
Initialization from the identifier dictionary.
bool reinitialize(const IdDictMgr &dict_mgr)
Test whether an idhelper should be reinitialized based on the change of tags.
virtual void setDictVersion(const IdDictMgr &dict_mgr, const std::string &name) override
int pixel_field_value() const
int register_dict_tag(const IdDictMgr &dict_mgr, const std::string &dict_name)
Register the file and tag names for a particular IdDict dictionary.
bool is_pixel(Identifier id) const
std::string show_to_string(Identifier id, const IdContext *context=0, char sep='.') const
or provide the printout in string form
Identifier pixel(void) const
AtlasDetectorID(const std::string &name, const std::string &group)
int indet_field_value() const
Provide efficient access to individual field values, for subclass idhelpers.
void clear()
Erase all fields.
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
size_type begin_index() const
size_type end_index() const
int get_label_value(const std::string &field, const std::string &label, int &value) const
const std::string & name() const
Dictionary name.
const IdDictDictionary * find_dictionary(const std::string &name) const
Access dictionary by name.
const IdDictFieldImplementation & implementation(size_t i) const
bool get_previous(element_type current, element_type &previous) const
Returns false if previous/next is at end of range, or not possible.
element_type get_minimum() const
Query the values.
bool empty() const
If true, this field does not have any constraints, and may hold any value representable by element_ty...
bool get_next(element_type current, element_type &next) const
element_type get_maximum() const
This is a "hash" representation of an Identifier.
bool is_valid() const
Check if id is in a valid state.
bool is_phi_module_max(const Identifier &id) const
To check for when phi wrap around may be needed.
const_id_iterator wafer_begin() const
Iterators over full set of ids. Wafer iterator is sorted.
int eta_index(const Identifier &id) const
int layer_disk(const Identifier &id) const
IdDictFieldImplementation m_bec_eta_mod_impl
virtual int initialize_from_dictionary(const IdDictMgr &dict_mgr) override
Initialization from the identifier dictionary.
int eta_module_max(const Identifier &id) const
size_type m_ETA_MODULE_INDEX
IdDictFieldImplementation m_lay_disk_shift_impl
IdDictFieldImplementation m_eta_mod_impl
MultiRange m_full_wafer_range
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
size_type m_LAYER_DISK_INDEX
IdDictFieldImplementation m_lay_disk_impl
const_expanded_id_iterator pixel_end() const
const IdDictDictionary * m_dict
bool is_eta_module_max(const Identifier &id) const
For the barrel.
void pixel_id_checks(int barrel_ec, int layer_disk, int phi_module, int eta_module, int phi_index, int eta_index) const
Identifier pixel_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int phi_index, int eta_index) const
For an individual pixel.
hash_vec m_prev_phi_wafer_vec
size_type m_pixel_region_index
IdDictFieldImplementation m_phi_mod_shift_impl
IdentifierHash wafer_hash(Identifier wafer_id) const
wafer hash from id
size_type wafer_hash_max() const
int eta_module(const Identifier &id) const
size_type m_BARREL_EC_INDEX
int phi_index(const Identifier &id) const
IdDictFieldImplementation m_phi_mod_impl
const_id_iterator wafer_end() const
IdDictFieldImplementation m_phi_index_impl
ExpandedIdentifier m_baseExpandedIdentifier
hash_vec m_next_phi_wafer_vec
int eta_index_max(const Identifier &id) const
Identifier::size_type size_type
int layer_disk_max(const Identifier &id) const
Max/Min values for each field (error returns -999)
void get_expanded_id(const Identifier &id, ExpandedIdentifier &exp_id, const IdContext *context=0) const
Create expanded id from compact id (return == 0 for OK)
size_type m_pixel_hash_max
Range::field m_barrel_field
int get_next_in_eta(const IdentifierHash &id, IdentifierHash &next) const
Next wafer hash in eta (return == 0 for neighbor found)
size_type m_PHI_INDEX_INDEX
MultiRange::const_identifier_factory const_expanded_id_iterator
virtual int get_hash(const Identifier &id, IdentifierHash &hash_id, const IdContext *context=0) const override final
Create hash id from compact id (return == 0 for OK)
IdContext pixel_context() const
int phi_index_max(const Identifier &id) const
const_expanded_id_iterator pixel_begin() const
For pixel ids, only expanded id iterators are available.
size_type m_PHI_MODULE_INDEX
IdDictFieldImplementation m_eta_mod_shift_impl
int get_prev_in_eta(const IdentifierHash &id, IdentifierHash &prev) const
Previous wafer hash in eta (return == 0 for neighbor found)
void wafer_id_checks(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
size_type m_wafer_hash_max
int get_prev_in_phi(const IdentifierHash &id, IdentifierHash &prev) const
Previous wafer hash in phi (return == 0 for neighbor found)
Identifier m_baseIdentifier
IdContext wafer_context() const
std::vector< Identifier >::const_iterator const_id_iterator
int get_next_in_phi(const IdentifierHash &id, IdentifierHash &next) const
Next wafer hash in phi (return == 0 for neighbor found)
IdDictFieldImplementation m_bec_impl
hash_vec m_prev_eta_wafer_vec
void test_wafer_packing() const
Tests of packing.
size_type m_ETA_INDEX_INDEX
IdDictFieldImplementation m_pixel_impl
int eta_module_min(const Identifier &id) const
IdDictFieldImplementation m_indet_impl
virtual int get_id(const IdentifierHash &hash_id, Identifier &id, const IdContext *context=0) const override final
Create compact id from hash id (return == 0 for OK)
IdDictFieldImplementation m_eta_index_impl
IdDictFieldImplementation m_bec_shift_impl
hash_vec m_next_eta_wafer_vec
int phi_module(const Identifier &id) const
bool is_eta_module_min(const Identifier &id) const
For the barrel.
MultiRange m_full_pixel_range
size_type pixel_hash_max() const
int phi_module_max(const Identifier &id) const
A Range describes the possible ranges for the field values of an ExpandedIdentifier.