Back to home page

sPhenix code displayed by LXR

 
 

    


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 * /*physvol*/)
0032 {
0033   // check if vis attributes exist, if so someone else has set them and we do nothing
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);  // for later deletion
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 }