Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:21:58

0001 #include "PHG4Hit.h"
0002 
0003 #include <TSystem.h>  // for gSystem
0004 
0005 #include <cassert>
0006 #include <cstdlib>
0007 
0008 void PHG4Hit::CopyFrom(const PHObject* phobj)
0009 {
0010   const PHG4Hit* g4hit = dynamic_cast<const PHG4Hit*>(phobj);
0011   assert(g4hit);
0012   for (int i = 0; i < 2; i++)
0013   {
0014     set_x(i, g4hit->get_x(i));
0015     set_y(i, g4hit->get_y(i));
0016     set_z(i, g4hit->get_z(i));
0017     set_t(i, g4hit->get_t(i));
0018   }
0019   set_edep(g4hit->get_edep());
0020   set_hit_id(g4hit->get_hit_id());
0021   set_shower_id(g4hit->get_shower_id());
0022   set_trkid(g4hit->get_trkid());
0023   // This is a generic copy of ALL properties a hit has
0024   // do not add explicit copies, they will be added to
0025   // the new hits with their default value increasing memory use
0026   for (unsigned char ic = 0; ic < std::numeric_limits<unsigned char>::max(); ic++)
0027   {
0028     PROPERTY prop_id = static_cast<PHG4Hit::PROPERTY>(ic);
0029     if (g4hit->has_property(prop_id))
0030     {
0031       set_property_nocheck(prop_id, g4hit->get_property_nocheck(prop_id));
0032     }
0033   }
0034 }
0035 
0036 void PHG4Hit::identify(std::ostream& os) const
0037 {
0038   os << "Class " << this->ClassName() << std::endl;
0039   os << "x0: " << get_x(0)
0040      << ", y0: " << get_y(0)
0041      << ", z0: " << get_z(0)
0042      << ", t0: " << get_t(0) << std::endl;
0043   os << "x1: " << get_x(1)
0044      << ", y1: " << get_y(1)
0045      << ", z1: " << get_z(1)
0046      << ", t1: " << get_t(1) << std::endl;
0047   os << "trackid: " << get_trkid() << ", edep: " << get_edep() << std::endl;
0048   os << "strip_z_index: " << get_strip_z_index() << ", strip_y_index: " << get_strip_y_index() << std::endl;
0049   os << "ladder_z_index: " << get_ladder_z_index() << ", ladder_phi_index: " << get_ladder_phi_index() << std::endl;
0050   os << "stave_index: " << get_property_int(prop_stave_index) << " half_stave_index " << get_property_int(prop_half_stave_index) << std::endl;
0051   os << "module_index: " << get_property_int(prop_module_index) << " chip_index " << get_property_int(prop_chip_index) << std::endl;
0052   os << "layer id: " << get_layer() << ", scint_id: " << get_scint_id() << std::endl;
0053   os << "hit type: " << get_hit_type() << std::endl;
0054   return;
0055 }
0056 
0057 std::ostream& operator<<(std::ostream& stream, const PHG4Hit* hit)
0058 {
0059   stream << std::endl
0060          << "(x,y,z) = "
0061          << "(" << hit->get_avg_x() << ", " << hit->get_avg_y() << ", " << hit->get_avg_z() << ")" << std::endl;
0062   stream << "trackid: " << hit->get_trkid() << " hitid: " << hit->get_hit_id() << " layer: " << hit->get_layer() << std::endl;
0063   return stream;
0064 }
0065 
0066 void PHG4Hit::Reset()
0067 {
0068   std::cout << "Reset not implemented by daughter class" << std::endl;
0069   return;
0070 }
0071 
0072 std::pair<const std::string, PHG4Hit::PROPERTY_TYPE>
0073 PHG4Hit::get_property_info(const PROPERTY prop_id)
0074 {
0075   switch (prop_id)
0076   {
0077   case prop_eion:
0078     return std::make_pair("ionizing energy loss", PHG4Hit::type_float);
0079   case prop_light_yield:
0080     return std::make_pair("light yield", PHG4Hit::type_float);
0081   case prop_raw_light_yield:
0082     return std::make_pair("raw light yield", PHG4Hit::type_float);
0083   case scint_gammas:
0084     return std::make_pair("scintillation photons", PHG4Hit::type_float);
0085   case cerenkov_gammas:
0086     return std::make_pair("cerenkov photons", PHG4Hit::type_float);
0087   case prop_px_0:
0088     return std::make_pair("px in", PHG4Hit::type_float);
0089   case prop_px_1:
0090     return std::make_pair("px out", PHG4Hit::type_float);
0091   case prop_py_0:
0092     return std::make_pair("py in", PHG4Hit::type_float);
0093   case prop_py_1:
0094     return std::make_pair("py out", PHG4Hit::type_float);
0095   case prop_pz_0:
0096     return std::make_pair("pz in", PHG4Hit::type_float);
0097   case prop_pz_1:
0098     return std::make_pair("pz out", PHG4Hit::type_float);
0099   case prop_local_x_0:
0100     return std::make_pair("local x in", PHG4Hit::type_float);
0101   case prop_local_x_1:
0102     return std::make_pair("local x out", PHG4Hit::type_float);
0103   case prop_local_y_0:
0104     return std::make_pair("local y in", PHG4Hit::type_float);
0105   case prop_local_y_1:
0106     return std::make_pair("local y out", PHG4Hit::type_float);
0107   case prop_local_z_0:
0108     return std::make_pair("local z in", PHG4Hit::type_float);
0109   case prop_local_z_1:
0110     return std::make_pair("local z out", PHG4Hit::type_float);
0111   case prop_path_length:
0112     return std::make_pair("pathlength", PHG4Hit::type_float);
0113   case prop_layer:
0114     return std::make_pair("layer ID", PHG4Hit::type_uint);
0115   case prop_scint_id:
0116     return std::make_pair("scintillator ID", PHG4Hit::type_int);
0117   case prop_row:
0118     return std::make_pair("row", PHG4Hit::type_int);
0119   case prop_sector:
0120     return std::make_pair("sector", PHG4Hit::type_int);
0121   case prop_strip_z_index:
0122     return std::make_pair("strip z index", PHG4Hit::type_int);
0123   case prop_strip_y_index:
0124     return std::make_pair("strip y index", PHG4Hit::type_int);
0125   case prop_ladder_z_index:
0126     return std::make_pair("ladder z index", PHG4Hit::type_int);
0127   case prop_ladder_phi_index:
0128     return std::make_pair("ladder phi index", PHG4Hit::type_int);
0129   case prop_index_i:
0130     return std::make_pair("generic index i", PHG4Hit::type_int);
0131   case prop_index_j:
0132     return std::make_pair("generic index j", PHG4Hit::type_int);
0133   case prop_index_k:
0134     return std::make_pair("generic index k", PHG4Hit::type_int);
0135   case prop_index_l:
0136     return std::make_pair("generic index l", PHG4Hit::type_int);
0137   case prop_stave_index:
0138     return std::make_pair("stave index", PHG4Hit::type_int);
0139   case prop_half_stave_index:
0140     return std::make_pair("half stave index", PHG4Hit::type_int);
0141   case prop_module_index:
0142     return std::make_pair("module index", PHG4Hit::type_int);
0143   case prop_chip_index:
0144     return std::make_pair("chip index", PHG4Hit::type_int);
0145   case prop_local_pos_x_0:
0146     return std::make_pair("local x pos in", PHG4Hit::type_float);
0147   case prop_local_pos_y_0:
0148     return std::make_pair("local y pos in", PHG4Hit::type_float);
0149   case prop_local_pos_z_0:
0150     return std::make_pair("local z pos in", PHG4Hit::type_float);
0151   case prop_hit_type:
0152     return std::make_pair("hit type", PHG4Hit::type_int);
0153   case prop_local_pos_x_1:
0154     return std::make_pair("local x pos out", PHG4Hit::type_float);
0155   case prop_local_pos_y_1:
0156     return std::make_pair("local y pos out", PHG4Hit::type_float);
0157   case prop_local_pos_z_1:
0158     return std::make_pair("local z pos out", PHG4Hit::type_float);
0159 
0160   default:
0161     std::cout << "PHG4Hit::get_property_info - Fatal Error - unknown index " << prop_id << std::endl;
0162     gSystem->Exit(1);
0163     exit(1);
0164   }
0165 }
0166 
0167 bool PHG4Hit::check_property(const PROPERTY prop_id, const PROPERTY_TYPE prop_type)
0168 {
0169   std::pair<const std::string, PROPERTY_TYPE> property_info = get_property_info(prop_id);
0170   if (property_info.second != prop_type)
0171   {
0172     return false;
0173   }
0174   return true;
0175 }
0176 
0177 std::string
0178 PHG4Hit::get_property_type(const PROPERTY_TYPE prop_type)
0179 {
0180   switch (prop_type)
0181   {
0182   case type_int:
0183     return "int";
0184   case type_uint:
0185     return "unsigned int";
0186   case type_float:
0187     return "float";
0188   default:
0189     return "unkown";
0190   }
0191 }