Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:15:04

0001 #include "SaveTowerInfo.h"
0002 
0003 #include <calobase/TowerInfov1.h>
0004 #include <calobase/TowerInfoContainerv1.h>
0005 #include <calobase/RawTowerv1.h>
0006 #include <calobase/RawTowerContainer.h>
0007 
0008 #include <phool/getClass.h>
0009 #include <phool/PHCompositeNode.h>
0010 #include <phool/phool.h>
0011 
0012 /// Fun4All includes
0013 #include <fun4all/Fun4AllReturnCodes.h>
0014 
0015 /// C++ includes
0016 #include <cassert>
0017 #include <sstream>
0018 #include <string>
0019 
0020 using namespace std;
0021 
0022 /**
0023  * SaveTowerInfo is a class developed to reconstruct jets containing a D-meson
0024  * The class can be adapted to tag jets using any kind of particle
0025  * Author: Antonio Silva (antonio.sphenix@gmail.com)
0026  */
0027 
0028 /**
0029  * Constructor of module
0030  */
0031 SaveTowerInfo::SaveTowerInfo(const std::string &name)
0032   : SubsysReco(name)
0033   , m_EMCalTowerContainer(0)
0034 {
0035   /// Initialize variables and trees so we don't accidentally access
0036   /// memory that was never allocated
0037 }
0038 
0039 /**
0040  * Destructor of module
0041  */
0042 SaveTowerInfo::~SaveTowerInfo()
0043 {
0044 
0045 }
0046 
0047 /**
0048  * Initialize the module and prepare looping over events
0049  */
0050 int SaveTowerInfo::Init(PHCompositeNode *topNode)
0051 {
0052   if (Verbosity() > 5)
0053   {
0054     cout << "Beginning Init in SaveTowerInfo" << endl;
0055   }
0056 
0057   CreateNodeTree(topNode);
0058 
0059   return 0;
0060 }
0061 
0062 /**
0063  * Main workhorse function where each event is looped over and
0064  * data from each event is collected from the node tree for analysis
0065  */
0066 int SaveTowerInfo::process_event(PHCompositeNode *topNode)
0067 {
0068   if (Verbosity() > 5)
0069   {
0070     cout << "Beginning process_event in AnaTutorial" << endl;
0071   }
0072 
0073   RawTowerContainer *EMCalRawTowers = findNode::getClass<RawTowerContainer>(topNode, "TOWER_CALIB_CEMC");
0074 
0075   if(!EMCalRawTowers)
0076   {
0077     return Fun4AllReturnCodes::DISCARDEVENT;
0078   }
0079 
0080   RawTowerContainer::ConstRange tower_range = EMCalRawTowers->getTowers();
0081 
0082   int towercounter = 0;
0083 
0084   for (RawTowerContainer::ConstIterator tower_iter = tower_range.first; tower_iter != tower_range.second; tower_iter++)
0085   {
0086     TowerInfov1 *towerInfo = new TowerInfov1();
0087     towerInfo->set_time(tower_iter->second->get_time());
0088     towerInfo->set_energy(tower_iter->second->get_energy());
0089     m_EMCalTowerContainer->add(towerInfo,towercounter); //TowerInfo object is added to the Container
0090     towercounter++;
0091   }
0092 
0093   return Fun4AllReturnCodes::EVENT_OK;
0094 
0095 }
0096 
0097 /**
0098  * End the module and finish any data collection. Clean up any remaining
0099  * loose ends
0100  */
0101 int SaveTowerInfo::End(PHCompositeNode * /*topNode*/)
0102 {
0103   if (Verbosity() > 1)
0104   {
0105     cout << "Ending SaveTowerInfo analysis package" << endl;
0106   }
0107 
0108 
0109   if (Verbosity() > 1)
0110   {
0111     cout << "Finished SaveTowerInfo analysis package" << endl;
0112   }
0113 
0114   return 0;
0115 }
0116 
0117 void SaveTowerInfo::CreateNodeTree(PHCompositeNode *topNode)
0118 {
0119   PHNodeIterator nodeItr(topNode);
0120   // DST node
0121   dst_node = static_cast<PHCompositeNode *>(
0122       nodeItr.findFirst("PHCompositeNode", "DST"));
0123   if (!dst_node)
0124   {
0125     std::cout << "PHComposite node created: DST" << std::endl;
0126     dst_node = new PHCompositeNode("DST");
0127     topNode->addNode(dst_node);
0128   }
0129   // towers
0130   //Detector is set when the constructor is called. Eta-phi bins will be calculated based on the detector
0131   m_EMCalTowerContainer = new TowerInfoContainerv1(TowerInfoContainerv1::DETECTOR::EMCAL);
0132   PHIODataNode<PHObject> *emcal_towerNode = new PHIODataNode<PHObject>(m_EMCalTowerContainer, "TOWERS_CEMC", "PHObject");
0133   dst_node->addNode(emcal_towerNode);
0134 }