File indexing completed on 2025-08-06 08:17:28
0001 #include "RawTowerGeomContainerv1.h"
0002
0003 #include "RawTowerGeom.h"
0004
0005 #include <cassert>
0006 #include <cstdlib>
0007 #include <iostream>
0008 #include <map>
0009 #include <utility>
0010
0011 RawTowerGeomContainerv1::RawTowerGeomContainerv1(RawTowerDefs::CalorimeterId caloid)
0012 : _caloid(caloid)
0013 {
0014 }
0015
0016 RawTowerGeomContainerv1::~RawTowerGeomContainerv1()
0017 {
0018 Reset();
0019 }
0020
0021 RawTowerGeomContainerv1::ConstRange
0022 RawTowerGeomContainerv1::get_tower_geometries() const
0023 {
0024 return std::make_pair<ConstIterator, ConstIterator>(_geoms.begin(), _geoms.end());
0025 }
0026
0027 RawTowerGeomContainerv1::Range
0028 RawTowerGeomContainerv1::get_tower_geometries()
0029 {
0030 return std::make_pair<Iterator, Iterator>(_geoms.begin(), _geoms.end());
0031 }
0032
0033 RawTowerGeomContainerv1::ConstIterator
0034 RawTowerGeomContainerv1::add_tower_geometry(RawTowerGeom* geo)
0035 {
0036 assert(geo);
0037
0038 if (RawTowerDefs::decode_caloid(geo->get_id()) != get_calorimeter_id())
0039 {
0040 std::cout << "RawTowerGeomContainerv1::add_tower_geometry - Fatal Error - "
0041 "attempting to add tower geometry with id = "
0042 << geo->get_id()
0043 << " with CaloID = " << RawTowerDefs::decode_caloid(geo->get_id())
0044 << " to this container of CaloID = " << get_calorimeter_id() << ".";
0045 geo->identify(std::cout);
0046 exit(2);
0047 }
0048
0049 Iterator it = _geoms.find(geo->get_id());
0050 if (it != _geoms.end())
0051 {
0052 std::cout
0053 << "RawTowerGeomContainerv1::add_tower_geometry - WARNING - replace tower geometry for tower #"
0054 << geo->get_id() << ". This Old tower will be deleted: ";
0055 it->second->identify(std::cout);
0056
0057 delete it->second;
0058 _geoms.erase(it);
0059 }
0060
0061 _geoms[geo->get_id()] = geo;
0062 return _geoms.find(geo->get_id());
0063 }
0064
0065 RawTowerGeom*
0066 RawTowerGeomContainerv1::get_tower_geometry(RawTowerDefs::keytype key)
0067 {
0068 Iterator it = _geoms.find(key);
0069 if (it != _geoms.end())
0070 {
0071 return it->second;
0072 }
0073 return nullptr;
0074 }
0075
0076 int RawTowerGeomContainerv1::isValid() const
0077 {
0078 return (!_geoms.empty());
0079 }
0080
0081 void RawTowerGeomContainerv1::Reset()
0082 {
0083 while (_geoms.begin() != _geoms.end())
0084 {
0085 delete _geoms.begin()->second;
0086 _geoms.erase(_geoms.begin());
0087 }
0088 }
0089
0090 void RawTowerGeomContainerv1::identify(std::ostream& os) const
0091 {
0092 os << "RawTowerGeomContainerv1, number of tower geometries: " << size()
0093 << std::endl;
0094 }