Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // 28 // 29 // John Allison 26th April 2017. 30 // Model for a representation of the General P 31 32 #include "G4GPSModel.hh" 33 34 #include "G4VGraphicsScene.hh" 35 #include "G4GeneralParticleSourceData.hh" 36 #include "G4VisAttributes.hh" 37 #include "G4GeometryTolerance.hh" 38 #include "G4PhysicalConstants.hh" 39 #include "G4Transform3D.hh" 40 #include "G4Point3D.hh" 41 #include "G4Circle.hh" 42 #include "G4Tubs.hh" 43 #include "G4Box.hh" 44 #include "G4EllipticalTube.hh" 45 #include "G4Orb.hh" 46 #include "G4Ellipsoid.hh" 47 #include "G4Para.hh" 48 49 #include <sstream> 50 51 G4GPSModel::G4GPSModel (const G4Colour& colour 52 : fColour(colour) 53 { 54 fType = "G4GPSModel"; 55 std::ostringstream oss; 56 oss << "G4GPSModel for General Particle Sour 57 fGlobalTag = oss.str(); 58 fGlobalDescription = fGlobalTag; 59 } 60 61 G4GPSModel::~G4GPSModel () {} 62 63 G4String G4GPSModel::GetCurrentTag () const 64 { 65 return ""; 66 } 67 68 G4String G4GPSModel::GetCurrentDescription () 69 { 70 return "G4GPSModel " + GetCurrentTag (); 71 } 72 73 void G4GPSModel::DescribeYourselfTo (G4VGraphi 74 // The main task of a model is to describe its 75 // handler (a object which inherits G4VSceneHa 76 // G4VGraphicsScene). 77 { 78 G4GeneralParticleSourceData* pGPSData = G4Ge 79 // Note: As far as I can see, if this is the 80 // called, it will, nevertheless, instantiat 81 // Shaep: "NULL", which will be drawn as a s 82 // coordinates whether you have set up GPS o 83 // way to avoid that. Mostly, of course, yo 84 // if you have - or are about to - set up GP 85 if (!pGPSData) return; 86 87 G4int nSources = pGPSData->GetSourceVectorSi 88 for (G4int iSource = 0; iSource < nSources; 89 90 const G4SingleParticleSource* pCurrentSing 91 if (!pCurrentSingleSource) return; 92 93 const G4SPSPosDistribution* pSPSPosDistrib 94 if (!pSPSPosDistribution) return; 95 96 G4String Type = pSPSPosDistribution->GetPo 97 G4String Shape = pSPSPosDistribution->GetP 98 // Type can be: Point, Plane, Surface or V 99 // Shape can be: Square, Circle, Ellipse, 100 // Sphere, Ellipsoid, Cylinder, Paralle 101 // G4cout 102 // << "G4GPSModel::DescribeYourselfTo" 103 // << ": PosDisType: " << Type 104 // << ", Shape: " << Shape 105 // << G4endl; 106 107 const G4double& halfx = pSPSPosDistributio 108 const G4double& halfy = pSPSPosDistributio 109 const G4double& halfz = pSPSPosDistributio 110 const G4double& Radius = pSPSPosDistribut 111 const G4double& Radius0 = pSPSPosDistribut 112 const G4double& ParAlpha = pSPSPosDistribu 113 const G4double& ParTheta = pSPSPosDistribu 114 const G4double& ParPhi = pSPSPosDistribu 115 116 const G4ThreeVector& Rotx = pSPSPosDistrib 117 const G4ThreeVector& Roty = pSPSPosDistrib 118 const G4ThreeVector& Rotz = pSPSPosDistrib 119 120 const G4ThreeVector& position = pSPSPosDis 121 G4Transform3D transform(CLHEP::HepXHat,CLH 122 transform = G4Translate3D(position) * tran 123 124 G4double surfaceTolerance = G4GeometryTole 125 G4double smallHalfThickness = 10.*surfaceT 126 127 G4VisAttributes gpsAtts; 128 gpsAtts.SetColour(fColour); 129 gpsAtts.SetForceSolid(); 130 131 if (Type == "Point") { 132 133 G4Circle circle; 134 circle.SetPosition(position); 135 circle.SetScreenDiameter(10.); 136 circle.SetVisAttributes(gpsAtts); 137 sceneHandler.BeginPrimitives(transform); 138 sceneHandler.AddPrimitive(circle); 139 sceneHandler.EndPrimitives(); 140 141 } else if (Type == "Plane") { 142 143 // Code based on G4SPSPosDistribution::G 144 sceneHandler.PreAddSolid(transform,gpsAt 145 if (Shape == "Circle") { 146 sceneHandler.AddSolid 147 (G4Tubs("GPS_Circle",0.,Radius,smallHa 148 } else if (Shape == "Annulus") { 149 sceneHandler.AddSolid 150 (G4Tubs("GPS_Annulus",Radius0,Radius,s 151 } else if (Shape == "Ellipse") { 152 sceneHandler.AddSolid 153 (G4EllipticalTube("GPS_Ellipse",halfx, 154 } else if (Shape == "Square") { 155 sceneHandler.AddSolid 156 (G4Box("GPS_Ellipse",halfx,halfx,small 157 } else if (Shape == "Rectangle") { 158 sceneHandler.AddSolid 159 (G4Box("GPS_Rectangle",halfx,halfy,sma 160 } 161 sceneHandler.PostAddSolid(); 162 163 } else if (Type == "Surface" || Type == "V 164 165 // Code based on G4SPSPosDistribution::G 166 // and G4SPSPosDistribution::G 167 sceneHandler.PreAddSolid(transform,gpsAt 168 if (Shape == "Sphere") { 169 sceneHandler.AddSolid 170 (G4Orb("GPS_Sphere",Radius)); 171 } else if (Shape == "Ellipsoid") { 172 sceneHandler.AddSolid 173 (G4Ellipsoid("GPS_Ellipsoid",halfx,hal 174 } else if (Shape == "Cylinder") { 175 sceneHandler.AddSolid 176 (G4Tubs("GPS_Cylinder",0.,Radius, half 177 } else if (Shape == "Para") { 178 sceneHandler.AddSolid 179 (G4Para("GPS_Para",halfx,halfy,halfz,P 180 } 181 sceneHandler.PostAddSolid(); 182 183 } 184 } 185 } 186