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
0024
0025
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 }