File indexing completed on 2025-08-06 08:19:03
0001 #include "PHG4SpacalDisplayAction.h"
0002
0003 #include "PHG4CylinderGeom_Spacalv1.h" // for PHG4CylinderGeom_Spacalv1
0004
0005 #include <g4main/PHG4DisplayAction.h> // for PHG4DisplayAction
0006 #include <g4main/PHG4Utils.h>
0007
0008 #include <TSystem.h>
0009
0010 #include <Geant4/G4LogicalVolume.hh>
0011 #include <Geant4/G4String.hh> // for G4String
0012 #include <Geant4/G4VisAttributes.hh>
0013
0014 #include <iostream>
0015 #include <utility> // for pair
0016
0017 PHG4SpacalDisplayAction::PHG4SpacalDisplayAction(const std::string &name)
0018 : PHG4DisplayAction(name)
0019 {
0020 }
0021
0022 PHG4SpacalDisplayAction::~PHG4SpacalDisplayAction()
0023 {
0024 for (auto &it : m_VisAttVec)
0025 {
0026 delete it;
0027 }
0028 m_VisAttVec.clear();
0029 }
0030
0031 void PHG4SpacalDisplayAction::ApplyDisplayAction(G4VPhysicalVolume * )
0032 {
0033
0034 for (const auto &it : m_LogicalVolumeMap)
0035 {
0036 G4LogicalVolume *logvol = it.first;
0037 if (logvol->GetVisAttributes())
0038 {
0039 continue;
0040 }
0041 G4VisAttributes *visatt = new G4VisAttributes();
0042 visatt->SetVisibility(true);
0043 visatt->SetForceSolid(true);
0044 visatt->SetForceWireframe(false);
0045
0046 m_VisAttVec.push_back(visatt);
0047 if (it.second == "AzimuthSegment")
0048 {
0049 visatt->SetColor(.1, .1, .1, .5);
0050 visatt->SetVisibility(m_Geom->is_virualize_fiber());
0051 visatt->SetForceSolid(false);
0052 }
0053 else if (it.second == "Block")
0054 {
0055 visatt->SetColor(.3, .3, .3, .3);
0056 visatt->SetVisibility(m_Geom->is_azimuthal_seg_visible() or m_Geom->is_virualize_fiber());
0057 visatt->SetForceSolid(!m_Geom->is_virualize_fiber());
0058 }
0059 else if (it.second == "Divider")
0060 {
0061 visatt->SetColor(.8, 1, .8, .3);
0062 visatt->SetVisibility(m_Geom->is_azimuthal_seg_visible());
0063 }
0064 else if (it.second == "Fiber")
0065 {
0066 PHG4Utils::SetColour(visatt, "G4_POLYSTYRENE");
0067 visatt->SetVisibility(m_Geom->is_virualize_fiber());
0068 visatt->SetForceSolid(m_Geom->is_virualize_fiber());
0069 }
0070 else if (it.second == "FiberCore")
0071 {
0072 PHG4Utils::SetColour(visatt, "G4_POLYSTYRENE");
0073 visatt->SetVisibility(false);
0074 visatt->SetForceSolid(false);
0075 }
0076 else if (it.second == "LightGuide")
0077 {
0078 PHG4Utils::SetColour(visatt, m_MaterialMap["LightGuide"]);
0079 visatt->SetColor(.8, 1, .8, .3);
0080 visatt->SetVisibility(m_Geom->is_azimuthal_seg_visible() or m_Geom->is_virualize_fiber());
0081 visatt->SetForceSolid(!m_Geom->is_virualize_fiber());
0082 }
0083 else if (it.second == "Sector")
0084 {
0085 visatt->SetColor(.5, .9, .5, .5);
0086 visatt->SetVisibility(m_Geom->is_azimuthal_seg_visible() or m_Geom->is_virualize_fiber());
0087 visatt->SetForceSolid(false);
0088 visatt->SetForceWireframe(true);
0089 }
0090 else if (it.second == "SpacalCylinder")
0091 {
0092 PHG4Utils::SetColour(visatt, "W_Epoxy");
0093 visatt->SetForceSolid((!m_Geom->is_virualize_fiber()) && (!m_Geom->is_azimuthal_seg_visible()));
0094 }
0095 else if (it.second == "Wall")
0096 {
0097 visatt->SetColor(.5, .9, .5, .1);
0098 visatt->SetVisibility(m_Geom->is_azimuthal_seg_visible());
0099 }
0100 else if (it.second == "WallProj")
0101 {
0102 visatt->SetColor(.5, .9, .5, .2);
0103 visatt->SetVisibility(m_Geom->is_azimuthal_seg_visible() && (!m_Geom->is_virualize_fiber()));
0104 }
0105 else
0106 {
0107 std::cout << "did not assing color to " << it.first->GetName()
0108 << " under " << it.second << std::endl;
0109 gSystem->Exit(1);
0110 }
0111 logvol->SetVisAttributes(visatt);
0112 }
0113 return;
0114 }