Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 #include "PHG4CylinderDisplayAction.h"
0002 
0003 #include <g4main/PHG4DisplayAction.h>  // for PHG4DisplayAction
0004 #include <g4main/PHG4Utils.h>
0005 
0006 #include <phparameter/PHParameters.h>
0007 
0008 #include <Geant4/G4Colour.hh>
0009 #include <Geant4/G4LogicalVolume.hh>
0010 #include <Geant4/G4VisAttributes.hh>
0011 
0012 #include <cmath>
0013 
0014 class G4VPhysicalVolume;
0015 
0016 PHG4CylinderDisplayAction::PHG4CylinderDisplayAction(const std::string &name, PHParameters *pars)
0017   : PHG4DisplayAction(name)
0018   , m_Params(pars)
0019   , m_MyVolume(nullptr)
0020   , m_VisAtt(nullptr)
0021   , m_Colour(nullptr)
0022 {
0023 }
0024 
0025 PHG4CylinderDisplayAction::~PHG4CylinderDisplayAction()
0026 {
0027   delete m_VisAtt;
0028   delete m_Colour;
0029 }
0030 
0031 void PHG4CylinderDisplayAction::ApplyDisplayAction(G4VPhysicalVolume * /*physvol*/)
0032 {
0033   if (m_MyVolume->GetVisAttributes())
0034   {
0035     return;
0036   }
0037   m_VisAtt = new G4VisAttributes();
0038   if (m_Params->get_int_param("blackhole"))
0039   {
0040     PHG4Utils::SetColour(m_VisAtt, "BlackHole");
0041     m_VisAtt->SetVisibility(false);
0042     m_VisAtt->SetForceSolid(false);
0043   }
0044   else
0045   {
0046     PHG4Utils::SetColour(m_VisAtt, m_Params->get_string_param("material"));
0047     m_VisAtt->SetVisibility(true);
0048     m_VisAtt->SetForceSolid(true);
0049   }
0050   if (m_Colour)
0051   {
0052     m_VisAtt->SetColour(m_Colour->GetRed(),
0053                         m_Colour->GetGreen(),
0054                         m_Colour->GetBlue(),
0055                         m_Colour->GetAlpha());
0056     m_VisAtt->SetVisibility(true);
0057     m_VisAtt->SetForceSolid(true);
0058   }
0059   // drawing 200 segments per circle makes it look smoother than default
0060   m_VisAtt->SetForceLineSegmentsPerCircle(200);
0061   m_MyVolume->SetVisAttributes(m_VisAtt);
0062   return;
0063 }
0064 
0065 void PHG4CylinderDisplayAction::SetColor(const double red, const double green, const double blue, const double alpha)
0066 {
0067   if (std::isfinite(red) && std::isfinite(green) && std::isfinite(blue) && std::isfinite(alpha))
0068   {
0069     m_Colour = new G4Colour(red, green, blue, alpha);
0070   }
0071   return;
0072 }