File indexing completed on 2025-08-06 08:17:35
0001 #include "TowerInfoDeadHotMask.h"
0002
0003 #include <calobase/TowerInfo.h>
0004 #include <calobase/TowerInfoContainer.h>
0005 #include <calobase/TowerInfoDefs.h>
0006 #include <calobase/RawTowerDeadMap.h>
0007 #include <calobase/RawTowerGeomContainer.h>
0008 #include <calobase/RawTowerGeom.h>
0009
0010 #include <fun4all/Fun4AllBase.h>
0011 #include <fun4all/Fun4AllReturnCodes.h>
0012 #include <fun4all/SubsysReco.h>
0013
0014 #include <phool/getClass.h>
0015
0016 #include <fstream>
0017 #include <iostream>
0018 #include <set> // for _Rb_tree_const_iterator
0019 #include <sstream>
0020 #include <stdexcept>
0021 #include <string>
0022
0023 TowerInfoDeadHotMask::TowerInfoDeadHotMask(const std::string &name)
0024 : SubsysReco(name)
0025 , m_detector("NONE")
0026 , m_deadMap(nullptr)
0027 , m_calibTowerInfos(nullptr)
0028 , m_geometry(nullptr)
0029 {
0030 }
0031
0032 int TowerInfoDeadHotMask::InitRun(PHCompositeNode *topNode)
0033 {
0034 CreateNodeTree(topNode);
0035
0036 return Fun4AllReturnCodes::EVENT_OK;
0037 }
0038
0039 int TowerInfoDeadHotMask::process_event(PHCompositeNode * )
0040 {
0041 if (Verbosity() >= VERBOSITY_SOME)
0042 {
0043 std::cout << Name() << "::" << m_detector << "::process_event - Entry" << std::endl;
0044 }
0045
0046 RawTowerDeadMap::Map map = m_deadMap->getDeadTowers();
0047
0048 RawTowerDeadMap::Map::iterator itr;
0049
0050 for(itr = map.begin(); itr != map.end(); ++itr)
0051 {
0052 int iphi = m_geometry->get_tower_geometry(*itr)->get_binphi();
0053 int ieta = m_geometry->get_tower_geometry(*itr)->get_bineta();
0054 unsigned int key = TowerInfoDefs::encode_emcal(ieta, iphi);
0055 m_calibTowerInfos->get_tower_at_key(key)->set_energy(0.);
0056 m_calibTowerInfos->get_tower_at_key(key)->set_time(-10);
0057 }
0058
0059 return Fun4AllReturnCodes::EVENT_OK;
0060 }
0061
0062 void TowerInfoDeadHotMask::CreateNodeTree(PHCompositeNode *topNode)
0063 {
0064 m_calibTowerInfos = findNode::getClass<TowerInfoContainer>(topNode, "TOWERINFO_CALIB_" + m_detector);
0065 if (!m_calibTowerInfos)
0066 {
0067 std::cout << Name() << "::" << m_detector << "::" << "CreateNodeTree " << "No calibrated " << m_detector << " tower info found while in TowerInfoDeadHotMask, can't proceed!!!" << std::endl;
0068 throw std::runtime_error("failed to find TOWERINFO_CALIB node in TowerInfoDeadHotMask::CreateNodeTree");
0069 }
0070
0071 std::string towergeomnodename = "TOWERGEOM_" + m_detector;
0072 m_geometry = findNode::getClass<RawTowerGeomContainer>(topNode, towergeomnodename);
0073 if (!m_geometry)
0074 {
0075 std::cout << Name() << "::" << m_detector << "::" << "CreateNodeTree" << ": Could not find node " << towergeomnodename << std::endl;
0076 throw std::runtime_error("failed to find TOWERGEOM node in TowerInfoDeadHotMask::CreateNodeTree");
0077 }
0078
0079 const std::string deadMapName = "DEADMAP_" + m_detector;
0080 m_deadMap = findNode::getClass<RawTowerDeadMap>(topNode, deadMapName);
0081 if (m_deadMap)
0082 {
0083 std::cout << Name() << "::" << m_detector << "::" << "CreateNodeTree" << " use dead map: ";
0084 m_deadMap->identify();
0085 }
0086 }
0087
0088 int TowerInfoDeadHotMask::End(PHCompositeNode * )
0089 {
0090 return Fun4AllReturnCodes::EVENT_OK;
0091 }