Back to home page

sPhenix code displayed by LXR

 
 

    


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