File indexing completed on 2025-12-19 09:21:37
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 G4ScintillatorSlatTTree::G4ScintillatorSlatTTree(const std::string &name)
0026 : SubsysReco(name)
0027 {
0028 }
0029
0030 int G4ScintillatorSlatTTree::Init(PHCompositeNode *topNode)
0031 {
0032 if (_detector.empty())
0033 {
0034 std::cout << "Detector not set via Detector(<name>) method" << std::endl;
0035 std::cout << "(it is the name appended to the G4CELL_<name> nodename)" << std::endl;
0036 std::cout << "you do not want to run like this, exiting now" << std::endl;
0037 gSystem->Exit(1);
0038 }
0039 hm = new Fun4AllHistoManager("SCINTILLATORSLATHIST");
0040 etot_hist = new TH1F("etot", "total deposited energy", 200, 0, 20);
0041 hm->registerHisto(etot_hist);
0042 PHNodeIterator iter(topNode);
0043 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0044 G4RootScintillatorSlatContainer *slats = new G4RootScintillatorSlatContainer();
0045 PHIODataNode<PHObject> *node = new PHIODataNode<PHObject>(slats, _outnodename, "PHObject");
0046 dstNode->addNode(node);
0047 evtno = 0;
0048 return 0;
0049 }
0050
0051 int G4ScintillatorSlatTTree::process_event(PHCompositeNode *topNode)
0052 {
0053 evtno++;
0054 G4RootScintillatorSlatContainer *slats = findNode::getClass<G4RootScintillatorSlatContainer>(topNode, _outnodename);
0055
0056 PHG4ScintillatorSlatContainer *g4slats = findNode::getClass<PHG4ScintillatorSlatContainer>(topNode, _slatnodename);
0057 if (!g4slats)
0058 {
0059 std::cout << "could not find " << _slatnodename << std::endl;
0060 gSystem->Exit(1);
0061 }
0062 PHG4ScintillatorSlatContainer::ConstRange slat_range = g4slats->getScintillatorSlats();
0063
0064 double etot = 0;
0065 for (PHG4ScintillatorSlatContainer::ConstIterator slat_iter = slat_range.first; slat_iter != slat_range.second; slat_iter++)
0066 {
0067 PHG4ScintillatorSlat *inslat = slat_iter->second;
0068 if (saveslats)
0069 {
0070 slats->AddSlat(*inslat);
0071 }
0072 etot += inslat->get_edep();
0073 }
0074 etot_hist->Fill(etot);
0075 slats->set_etotal(etot);
0076 slats->set_event(evtno);
0077 return 0;
0078 }
0079
0080 int G4ScintillatorSlatTTree::End(PHCompositeNode * )
0081 {
0082 hm->dumpHistos(_histofilename);
0083 delete hm;
0084 return 0;
0085 }
0086
0087 void G4ScintillatorSlatTTree::Detector(const std::string &det)
0088 {
0089 _detector = det;
0090 _outnodename = "G4RootScintillatorSlat_" + det;
0091 _slatnodename = "G4CELL_" + det;
0092 if (_histofilename.empty())
0093 {
0094 _histofilename = "ScintillatorSlatHistos_" + det + ".root";
0095 }
0096 }