Back to home page

sPhenix code displayed by LXR

 
 

    


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 * /*topNode*/)
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 }