File indexing completed on 2025-08-05 08:18:04
0001 #include "G4ScintillatorSlatTTree.h"
0002
0003 #include "G4RootScintillatorSlatContainer.h"
0004
0005 #include <g4detectors/PHG4ScintillatorSlat.h>
0006 #include <g4detectors/PHG4ScintillatorSlatContainer.h>
0007
0008 #include <fun4all/Fun4AllHistoManager.h>
0009 #include <fun4all/SubsysReco.h> // for SubsysReco
0010
0011 #include <phool/PHCompositeNode.h>
0012 #include <phool/PHIODataNode.h> // for PHIODataNode
0013 #include <phool/PHNode.h> // for PHNode
0014 #include <phool/PHNodeIterator.h> // for PHNodeIterator
0015 #include <phool/PHObject.h> // for PHObject
0016 #include <phool/getClass.h>
0017
0018 #include <TH1.h>
0019 #include <TSystem.h>
0020
0021 #include <iostream> // for operator<<, endl
0022 #include <map> // for _Rb_tree_cons...
0023 #include <utility> // for pair
0024
0025 using namespace std;
0026
0027 G4ScintillatorSlatTTree::G4ScintillatorSlatTTree(const std::string &name)
0028 : SubsysReco(name)
0029 , saveslats(1)
0030 , evtno(0)
0031 , hm(nullptr)
0032 , etot_hist(nullptr)
0033 {
0034 }
0035
0036 int G4ScintillatorSlatTTree::Init(PHCompositeNode *topNode)
0037 {
0038 if (!_detector.size())
0039 {
0040 cout << "Detector not set via Detector(<name>) method" << endl;
0041 cout << "(it is the name appended to the G4CELL_<name> nodename)" << endl;
0042 cout << "you do not want to run like this, exiting now" << endl;
0043 gSystem->Exit(1);
0044 }
0045 hm = new Fun4AllHistoManager("SCINTILLATORSLATHIST");
0046 etot_hist = new TH1F("etot", "total deposited energy", 200, 0, 20);
0047 hm->registerHisto(etot_hist);
0048 PHNodeIterator iter(topNode);
0049 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0050 G4RootScintillatorSlatContainer *slats = new G4RootScintillatorSlatContainer();
0051 PHIODataNode<PHObject> *node = new PHIODataNode<PHObject>(slats, _outnodename, "PHObject");
0052 dstNode->addNode(node);
0053 evtno = 0;
0054 return 0;
0055 }
0056
0057 int G4ScintillatorSlatTTree::process_event(PHCompositeNode *topNode)
0058 {
0059 evtno++;
0060 G4RootScintillatorSlatContainer *slats = findNode::getClass<G4RootScintillatorSlatContainer>(topNode, _outnodename);
0061
0062 PHG4ScintillatorSlatContainer *g4slats = findNode::getClass<PHG4ScintillatorSlatContainer>(topNode, _slatnodename);
0063 if (!g4slats)
0064 {
0065 cout << "could not find " << _slatnodename << endl;
0066 gSystem->Exit(1);
0067 }
0068 PHG4ScintillatorSlatContainer::ConstRange slat_range = g4slats->getScintillatorSlats();
0069
0070 double etot = 0;
0071 for (PHG4ScintillatorSlatContainer::ConstIterator slat_iter = slat_range.first; slat_iter != slat_range.second; slat_iter++)
0072 {
0073 PHG4ScintillatorSlat *inslat = slat_iter->second;
0074 if (saveslats)
0075 {
0076 slats->AddSlat(*inslat);
0077 }
0078 etot += inslat->get_edep();
0079 }
0080 etot_hist->Fill(etot);
0081 slats->set_etotal(etot);
0082 slats->set_event(evtno);
0083 return 0;
0084 }
0085
0086 int G4ScintillatorSlatTTree::End(PHCompositeNode * )
0087 {
0088 hm->dumpHistos(_histofilename);
0089 delete hm;
0090 return 0;
0091 }
0092
0093 void G4ScintillatorSlatTTree::Detector(const std::string &det)
0094 {
0095 _detector = det;
0096 _outnodename = "G4RootScintillatorSlat_" + det;
0097 _slatnodename = "G4CELL_" + det;
0098 if (!_histofilename.size())
0099 {
0100 _histofilename = "ScintillatorSlatHistos_" + det + ".root";
0101 }
0102 }