Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:17:51

0001 // $Id$
0002 
0003 /*!
0004  * \file ${file_name}
0005  * \brief
0006  * \author Mickey Chiu <chiu@bnl.gov>
0007  * \version $Revision$
0008  * \date $Date$
0009  */
0010 
0011 #include "PHG4PSTOFSubsystem.h"
0012 #include "PHG4PSTOFDetector.h"
0013 #include "PHG4PSTOFSteppingAction.h"
0014 
0015 #include <phparameter/PHParameters.h>
0016 #include <phparameter/PHParametersContainer.h>
0017 
0018 #include <g4main/PHG4HitContainer.h>
0019 #include <g4main/PHG4SteppingAction.h>  // for PHG4SteppingAction
0020 
0021 #include <phool/PHCompositeNode.h>
0022 #include <phool/PHIODataNode.h>    // for PHIODataNode
0023 #include <phool/PHNode.h>          // for PHNode
0024 #include <phool/PHNodeIterator.h>  // for PHNodeIterator
0025 #include <phool/PHObject.h>        // for PHObject
0026 #include <phool/getClass.h>
0027 
0028 #include <set>  // for set
0029 #include <sstream>
0030 
0031 //_______________________________________________________________________
0032 PHG4PSTOFSubsystem::PHG4PSTOFSubsystem(const std::string &name)
0033   : PHG4DetectorGroupSubsystem(name)
0034 {
0035   InitializeParameters();
0036   Name(name);
0037   SuperDetector(name);
0038 }
0039 
0040 //_______________________________________________________________________
0041 int PHG4PSTOFSubsystem::InitRunSubsystem(PHCompositeNode *topNode)
0042 {
0043   PHNodeIterator iter(topNode);
0044   PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0045 
0046   // create detector
0047   detector_ = new PHG4PSTOFDetector(this, topNode, GetParamsContainer(), Name());
0048   detector_->SuperDetector(SuperDetector());
0049   detector_->OverlapCheck(CheckOverlap());
0050 
0051   if (GetParamsContainer()->GetParameters(-1)->get_int_param("active"))
0052   {
0053     std::set<std::string> nodes;
0054     PHNodeIterator dstIter(dstNode);
0055     PHCompositeNode *DetNode = dynamic_cast<PHCompositeNode *>(dstIter.findFirst("PHCompositeNode", SuperDetector()));
0056     if (!DetNode)
0057     {
0058       DetNode = new PHCompositeNode(SuperDetector());
0059       dstNode->addNode(DetNode);
0060     }
0061     std::ostringstream nodename;
0062     if (SuperDetector() != "NONE")
0063     {
0064       nodename << "G4HIT_" << SuperDetector();
0065     }
0066     else
0067     {
0068       nodename << "G4HIT_" << Name();
0069     }
0070     nodes.insert(nodename.str());
0071     for (auto &node : nodes)
0072     {
0073       PHG4HitContainer *g4_hits = findNode::getClass<PHG4HitContainer>(topNode, node);
0074       if (!g4_hits)
0075       {
0076         g4_hits = new PHG4HitContainer(node);
0077         DetNode->addNode(new PHIODataNode<PHObject>(g4_hits, node, "PHObject"));
0078       }
0079     }
0080     // create stepping action
0081     steppingAction_ = new PHG4PSTOFSteppingAction(detector_, GetParamsContainer());
0082     steppingAction_->Init();
0083   }
0084 
0085   return 0;
0086 }
0087 
0088 //_______________________________________________________________________
0089 int PHG4PSTOFSubsystem::process_event(PHCompositeNode *topNode)
0090 {
0091   // pass top node to stepping action so that it gets
0092   // relevant nodes needed internally
0093   if (steppingAction_)
0094   {
0095     steppingAction_->SetInterfacePointers(topNode);
0096   }
0097   return 0;
0098 }
0099 
0100 void PHG4PSTOFSubsystem::Print(const std::string &what) const
0101 {
0102   // std::cout << "PSTOF Parameters: " << std::endl;
0103   PrintDefaultParams();
0104   PrintMacroParams();
0105   GetParamsContainer()->Print();
0106   if (detector_)
0107   {
0108     detector_->Print(what);
0109   }
0110   return;
0111 }
0112 
0113 //_______________________________________________________________________
0114 PHG4Detector *PHG4PSTOFSubsystem::GetDetector() const
0115 {
0116   return detector_;
0117 }
0118 
0119 //_______________________________________________________________________
0120 PHG4SteppingAction *PHG4PSTOFSubsystem::GetSteppingAction() const
0121 {
0122   return steppingAction_;
0123 }
0124 
0125 void PHG4PSTOFSubsystem::SetDefaultParameters()
0126 {
0127   set_default_double_param(0, "z_mod_0", -109.3);
0128   set_default_double_param(1, "z_mod_0", -96.66);
0129   set_default_double_param(2, "z_mod_0", -84.42);
0130   set_default_double_param(3, "z_mod_0", -72.55);
0131   set_default_double_param(4, "z_mod_0", -61.07);
0132   set_default_double_param(5, "z_mod_0", -49.97);
0133   set_default_double_param(6, "z_mod_0", -39.25);
0134   set_default_double_param(7, "z_mod_0", -28.72);
0135   set_default_double_param(8, "z_mod_0", -18.76);
0136   set_default_double_param(9, "z_mod_0", -9.191);
0137   set_default_double_param(10, "z_mod_0", 0);
0138   set_default_double_param(11, "z_mod_0", 9.191);
0139   set_default_double_param(12, "z_mod_0", 18.76);
0140   set_default_double_param(13, "z_mod_0", 28.72);
0141   set_default_double_param(14, "z_mod_0", 39.25);
0142   set_default_double_param(15, "z_mod_0", 49.97);
0143   set_default_double_param(16, "z_mod_0", 61.07);
0144   set_default_double_param(17, "z_mod_0", 72.55);
0145   set_default_double_param(18, "z_mod_0", 84.42);
0146   set_default_double_param(19, "z_mod_0", 96.66);
0147   set_default_double_param(20, "z_mod_0", 109.3);
0148 
0149   set_default_double_param(0, "z_mod_1", -107.2);
0150   set_default_double_param(1, "z_mod_1", -94.66);
0151   set_default_double_param(2, "z_mod_1", -82.52);
0152   set_default_double_param(3, "z_mod_1", -70.75);
0153   set_default_double_param(4, "z_mod_1", -59.37);
0154   set_default_double_param(5, "z_mod_1", -48.47);
0155   set_default_double_param(6, "z_mod_1", -37.85);
0156   set_default_double_param(7, "z_mod_1", -27.72);
0157   set_default_double_param(8, "z_mod_1", -18.76);
0158   set_default_double_param(9, "z_mod_1", -9.191);
0159   set_default_double_param(10, "z_mod_1", 0);
0160   set_default_double_param(11, "z_mod_1", 9.191);
0161   set_default_double_param(12, "z_mod_1", 18.76);
0162   set_default_double_param(13, "z_mod_1", 27.72);
0163   set_default_double_param(14, "z_mod_1", 37.85);
0164   set_default_double_param(15, "z_mod_1", 48.47);
0165   set_default_double_param(16, "z_mod_1", 59.37);
0166   set_default_double_param(17, "z_mod_1", 70.75);
0167   set_default_double_param(18, "z_mod_1", 82.52);
0168   set_default_double_param(19, "z_mod_1", 94.66);
0169   set_default_double_param(20, "z_mod_1", 107.2);
0170 
0171   set_default_double_param(0, "r_mod_0", 85.6);
0172   set_default_double_param(1, "r_mod_0", 85.6);
0173   set_default_double_param(2, "r_mod_0", 85.6);
0174   set_default_double_param(3, "r_mod_0", 85.6);
0175   set_default_double_param(4, "r_mod_0", 86);
0176   set_default_double_param(5, "r_mod_0", 86.5);
0177   set_default_double_param(6, "r_mod_0", 86.5);
0178   set_default_double_param(7, "r_mod_0", 86.5);
0179   set_default_double_param(8, "r_mod_0", 85.5);
0180   set_default_double_param(9, "r_mod_0", 83.6);
0181   set_default_double_param(10, "r_mod_0", 87.5);
0182   set_default_double_param(11, "r_mod_0", 83.6);
0183   set_default_double_param(12, "r_mod_0", 85.5);
0184   set_default_double_param(13, "r_mod_0", 86.5);
0185   set_default_double_param(14, "r_mod_0", 86.5);
0186   set_default_double_param(15, "r_mod_0", 86.5);
0187   set_default_double_param(16, "r_mod_0", 86);
0188   set_default_double_param(17, "r_mod_0", 85.6);
0189   set_default_double_param(18, "r_mod_0", 85.6);
0190   set_default_double_param(19, "r_mod_0", 85.6);
0191   set_default_double_param(20, "r_mod_0", 85.6);
0192 
0193   set_default_double_param(0, "r_mod_1", 85.3);
0194   set_default_double_param(1, "r_mod_1", 85.2);
0195   set_default_double_param(2, "r_mod_1", 84.9);
0196   set_default_double_param(3, "r_mod_1", 84.8);
0197   set_default_double_param(4, "r_mod_1", 85.1);
0198   set_default_double_param(5, "r_mod_1", 85);
0199   set_default_double_param(6, "r_mod_1", 85);
0200   set_default_double_param(7, "r_mod_1", 84.8);
0201   set_default_double_param(8, "r_mod_1", 83.8);
0202   set_default_double_param(9, "r_mod_1", 81.9);
0203   set_default_double_param(10, "r_mod_1", 85.8);
0204   set_default_double_param(11, "r_mod_1", 81.9);
0205   set_default_double_param(12, "r_mod_1", 83.8);
0206   set_default_double_param(13, "r_mod_1", 84.8);
0207   set_default_double_param(14, "r_mod_1", 85);
0208   set_default_double_param(15, "r_mod_1", 85);
0209   set_default_double_param(16, "r_mod_1", 85.1);
0210   set_default_double_param(17, "r_mod_1", 84.8);
0211   set_default_double_param(18, "r_mod_1", 84.9);
0212   set_default_double_param(19, "r_mod_1", 85.2);
0213   set_default_double_param(20, "r_mod_1", 85.3);
0214 
0215   // geometry version number
0216   // we use negative numbers until the "official" version
0217   // when we build the detector
0218   // set_default_int_param(-1,"geometry_version",-1);
0219   set_default_int_param(-1, "modules", 21);
0220   set_default_int_param(-1, "rows", 56);
0221   set_default_double_param(-1, "xsize", 0.8);
0222   set_default_double_param(-1, "ysize", 6.);
0223   set_default_double_param(-1, "zsize", 5.);
0224   set_default_int_param(-1, "active", 1);
0225   set_default_int_param(-1, "absorberactive", 0);
0226 }