Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:11:13

0001 #include "HCALEmulatorTreeMaker.h"
0002 #include <vector>
0003 
0004 #include <fun4all/Fun4AllReturnCodes.h>
0005 #include <phool/PHCompositeNode.h>
0006 #include <phool/PHIODataNode.h>
0007 #include <phool/PHNode.h>
0008 #include <phool/PHNodeIterator.h>
0009 #include <phool/PHObject.h>
0010 #include <phool/getClass.h>
0011 // G4Cells includes
0012 
0013 #include <iostream>
0014 
0015 #include <map>
0016 
0017 //____________________________________________________________________________..
0018 HCALEmulatorTreeMaker::HCALEmulatorTreeMaker(const std::string &name, const std::string &outfilename, const std::string &nodename):
0019   SubsysReco(name)
0020   
0021 {
0022   useCaloTowerBuilder = false;
0023   _nodename = nodename;
0024   _foutname = outfilename;  
0025 }
0026 
0027 //____________________________________________________________________________..
0028 HCALEmulatorTreeMaker::~HCALEmulatorTreeMaker()
0029 {
0030 
0031 }
0032 
0033 //____________________________________________________________________________..
0034 int HCALEmulatorTreeMaker::Init(PHCompositeNode *topNode)
0035 {
0036 
0037   if (Verbosity()) std::cout << __FUNCTION__ << __LINE__<<std::endl;
0038   _f = new TFile( _foutname.c_str(), "RECREATE");
0039 
0040   std::cout << " making a file = " <<  _foutname.c_str() << " , _f = " << _f << std::endl;
0041   
0042   _tree_hcal = new TTree("ttree_hcal","a persevering date tree");
0043 
0044   _tree_hcal->Branch("trigger_bits_hcal",&b_trigger_bits_hcal);
0045   
0046   for (int i = 0; i < 24; i++)
0047     {
0048       for (int j = 0; j < 16; j++)
0049     {
0050       _tree_hcal->Branch(Form("trigger_sum_hcalin_%d", i),&b_trigger_sum_hcalin[i][j]);
0051       _tree_hcal->Branch(Form("trigger_sum_hcalout_%d", i),&b_trigger_sum_hcalout[i][j]);
0052     }
0053     }
0054 
0055   _i_event = 0;
0056 
0057   _tree_hcal->Branch("hcalin_energy",&b_hcalin_energy);
0058   _tree_hcal->Branch("hcalin_phibin",&b_hcalin_phibin);
0059   _tree_hcal->Branch("hcalin_etabin",&b_hcalin_etabin);
0060   _tree_hcal->Branch("hcalout_energy",&b_hcalout_energy);
0061   _tree_hcal->Branch("hcalout_phibin",&b_hcalout_phibin);
0062   _tree_hcal->Branch("hcalout_etabin",&b_hcalout_etabin);
0063   
0064   
0065   return Fun4AllReturnCodes::EVENT_OK;
0066 }
0067 
0068 //____________________________________________________________________________..
0069 int HCALEmulatorTreeMaker::InitRun(PHCompositeNode *topNode)
0070 {
0071   if (Verbosity()) std::cout << __FUNCTION__ << __LINE__<<std::endl;
0072   return Fun4AllReturnCodes::EVENT_OK;
0073 }
0074 
0075 //____________________________________________________________________________..
0076 
0077 void HCALEmulatorTreeMaker::SetVerbosity(int verbo){
0078   _verbosity = verbo;
0079   return;
0080 }
0081 
0082 void HCALEmulatorTreeMaker::reset_tree_vars()
0083 {
0084   if (Verbosity()) std::cout << __FUNCTION__ << __LINE__<<std::endl;
0085   b_trigger_bits_hcal.clear();
0086   b_hcalin_energy.clear();
0087   b_hcalin_phibin.clear();
0088   b_hcalin_etabin.clear();
0089   b_hcalout_energy.clear();
0090   b_hcalout_phibin.clear();
0091   b_hcalout_etabin.clear();
0092 
0093   for (int i = 0; i < 24; i++)
0094     {
0095       for (int j = 0; j < 16; j++)
0096     {
0097       b_trigger_sum_hcalin[i][j].clear();
0098       b_trigger_sum_hcalout[i][j].clear();
0099     }
0100     }
0101   if (Verbosity()) std::cout << __FUNCTION__ << __LINE__<<std::endl;
0102   return;
0103 }
0104 
0105 int HCALEmulatorTreeMaker::process_event(PHCompositeNode *topNode)
0106 {
0107 
0108   if (Verbosity()) std::cout << __FILE__ << " "<< __LINE__<<" "<<std::endl;
0109   int i;
0110   int j;
0111 
0112   _i_event++;
0113 
0114   reset_tree_vars();
0115 
0116   _trigger_primitives = findNode::getClass<TriggerPrimitiveContainer>(topNode, "TRIGGERPRIMITIVES_HCALIN");
0117   if (Verbosity()) std::cout << __FUNCTION__ << __LINE__<<std::endl;
0118   if (_trigger_primitives)
0119     {
0120 
0121       i = 0;
0122       
0123       TriggerPrimitiveContainerv1::Range range = _trigger_primitives->getTriggerPrimitives();
0124       for (TriggerPrimitiveContainerv1::Iter iter = range.first ; iter != range.second ; ++iter, i++)
0125     {
0126       if (i >= 24)
0127         {
0128           std::cout << "__LINE__ out of bounds: prim "<<i<<" sum"<<j<<endl;
0129           exit(1);
0130         }
0131       
0132       _trigger_primitive = (*iter).second;
0133       TriggerPrimitive::Range srange = _trigger_primitive->getSums();
0134       j = 0;
0135       for (TriggerPrimitive::Iter siter = srange.first; siter != srange.second; ++siter, j++)
0136         {
0137           if (j >= 16)
0138         {
0139           std::cout << "__LINE__ out of bounds: prim "<<i<<" sum"<<j<<endl;
0140         }
0141           std::vector<unsigned int> *sum = (*siter).second;
0142           for (auto viter = sum->begin(); viter != sum->end(); ++viter)
0143         {
0144           b_trigger_sum_hcalin[i][j].push_back((*viter));
0145         }
0146         }
0147     }
0148     }
0149   
0150   _trigger_primitives = findNode::getClass<TriggerPrimitiveContainer>(topNode, "TRIGGERPRIMITIVES_HCALOUT");
0151   
0152   if (_trigger_primitives)
0153     {
0154 
0155       i = 0;
0156       
0157       TriggerPrimitiveContainerv1::Range range = _trigger_primitives->getTriggerPrimitives();
0158       for (TriggerPrimitiveContainerv1::Iter iter = range.first ; iter != range.second ; ++iter, i++)
0159     {
0160       if (i >= 24)
0161         {
0162           std::cout << "__LINE__ out of bounds: prim "<<i<<" sum"<<j<<endl;
0163           exit(1);
0164         }
0165       
0166       _trigger_primitive = (*iter).second;
0167       
0168       TriggerPrimitive::Range srange = _trigger_primitive->getSums();
0169       j = 0;
0170       for (TriggerPrimitive::Iter siter = srange.first; siter != srange.second; ++siter, j++)
0171         {
0172           std::vector<unsigned int> *sum = (*siter).second;
0173           for (auto viter = sum->begin(); viter != sum->end(); ++viter)
0174         {
0175           b_trigger_sum_hcalout[i][j].push_back((*viter));
0176         }
0177         }
0178     }
0179       
0180     }
0181   if (Verbosity()) std::cout << __FILE__ << " "<< __LINE__<<" "<<std::endl;
0182   _ll1_hcal = findNode::getClass<LL1Out>(topNode, _nodename);
0183   
0184   if (!_ll1_hcal) 
0185     {
0186       std::cout << "No LL1Out HCAL node... " << _nodename << std::endl;
0187       exit(1);
0188     }
0189 
0190   _trigger_bits = _ll1_hcal->GetTriggerBits();
0191   if (!_trigger_bits)
0192     {
0193       std::cout <<" no trigger bits..." <<std::endl;
0194       exit(1);
0195     }
0196   i = 0;
0197   for (auto iter = _trigger_bits->begin(); iter < _trigger_bits->end(); i++, ++iter)
0198     {
0199       b_trigger_bits_hcal.push_back((*iter));
0200     } 
0201 
0202   if (useCaloTowerBuilder)
0203     {
0204       _towers = findNode::getClass<TowerInfoContainer>(topNode, "WAVEFORM_HCALIN");
0205       if (!_towers)
0206     {
0207       cout << "No HCALIN towers..." <<endl;
0208       exit(1);    
0209     }
0210       int size;
0211 
0212       size = _towers->size(); //online towers should be the same!
0213       for (int channel = 0; channel < size;channel++)
0214     {
0215       _tower = _towers->get_tower_at_channel(channel);
0216       float energy = _tower->get_energy();
0217       unsigned int towerkey = _towers->encode_key(channel);
0218       int ieta = _towers->getTowerEtaBin(towerkey);
0219       int iphi = _towers->getTowerPhiBin(towerkey);
0220     
0221       b_hcalin_energy.push_back(energy);
0222       b_hcalin_etabin.push_back(ieta);
0223       b_hcalin_phibin.push_back(iphi);
0224       }
0225 
0226       _towers = findNode::getClass<TowerInfoContainer>(topNode, "WAVEFORM_HCALOUT");
0227       if (!_towers)
0228     {
0229       cout << "No HCALOUT towers..." <<endl;
0230       exit(1);    
0231     }
0232 
0233       size = _towers->size(); //online towers should be the same!
0234       for (int channel = 0; channel < size;channel++)
0235     {
0236       _tower = _towers->get_tower_at_channel(channel);
0237       float energy = _tower->get_energy();
0238       unsigned int towerkey = _towers->encode_key(channel);
0239       int ieta = _towers->getTowerEtaBin(towerkey);
0240       int iphi = _towers->getTowerPhiBin(towerkey);
0241     
0242       b_hcalout_energy.push_back(energy);
0243       b_hcalout_etabin.push_back(ieta);
0244       b_hcalout_phibin.push_back(iphi);
0245       }
0246 
0247     }
0248   if (Verbosity()) std::cout << __FILE__ << " "<< __LINE__<<" "<<std::endl;
0249 
0250   _tree_hcal->Fill();
0251 
0252   return Fun4AllReturnCodes::EVENT_OK;
0253 }
0254 
0255 
0256 
0257 void HCALEmulatorTreeMaker::GetNodes(PHCompositeNode* topNode)
0258 {
0259 
0260 
0261 }
0262 
0263 int HCALEmulatorTreeMaker::ResetEvent(PHCompositeNode *topNode)
0264 {
0265   if (Verbosity() > 0)
0266     {
0267       std::cout << "HCALEmulatorTreeMaker::ResetEvent(PHCompositeNode *topNode) Resetting internal structures, prepare for next event" << std::endl;
0268     }
0269 
0270 
0271   return Fun4AllReturnCodes::EVENT_OK;
0272 }
0273 
0274 //____________________________________________________________________________..
0275 int HCALEmulatorTreeMaker::EndRun(const int runnumber)
0276 {
0277   if (Verbosity() > 0)
0278     {
0279       std::cout << "HCALEmulatorTreeMaker::EndRun(const int runnumber) Ending Run for Run " << runnumber << std::endl;
0280     }
0281   return Fun4AllReturnCodes::EVENT_OK;
0282 }
0283 
0284 //____________________________________________________________________________..
0285 int HCALEmulatorTreeMaker::End(PHCompositeNode *topNode)
0286 {
0287   if (Verbosity() > 0)
0288     {
0289       std::cout << "HCALEmulatorTreeMaker::End(PHCompositeNode *topNode) This is the End..." << std::endl;
0290     }
0291   std::cout<<"Total events: "<<_i_event<<std::endl;
0292   _f->Write();
0293   _f->Close();
0294 
0295   return Fun4AllReturnCodes::EVENT_OK;
0296 }
0297 
0298 //____________________________________________________________________________..
0299 int HCALEmulatorTreeMaker::Reset(PHCompositeNode *topNode)
0300 {
0301   if (Verbosity() > 0)
0302     {
0303       std::cout << "HCALEmulatorTreeMaker::Reset(PHCompositeNode *topNode) being Reset" << std::endl;
0304     }
0305   return Fun4AllReturnCodes::EVENT_OK;
0306 }
0307