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
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();
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();
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