Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PHG4GDMLWriteSolids.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PHG4GDMLWriteSolids.hh
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 // $Id: PHG4GDMLWriteSolids.hh 81843 2014-06-06 09:11:11Z gcosmo $
28 //
29 //
30 // class PHG4GDMLWriteSolids
31 //
32 // Class description:
33 //
34 // GDML class for writing solids.
35 
36 // History:
37 // - Created. Zoltan Torzsok, November 2007
38 // -------------------------------------------------------------------------
39 
40 #ifndef _PHG4GDMLWRITESOLIDS_INCLUDED_
41 #define _PHG4GDMLWRITESOLIDS_INCLUDED_
42 
43 #include <Geant4/G4Types.hh>
44 #include <Geant4/G4MultiUnion.hh>
45 
47 
48 class G4BooleanSolid;
49 class G4Box;
50 class G4Cons;
51 class G4EllipticalCone;
52 class G4Ellipsoid;
53 class G4EllipticalTube;
54 class G4ExtrudedSolid;
55 class G4Hype;
56 class G4Orb;
57 class G4Para;
58 class G4Paraboloid;
59 class G4Polycone;
60 class G4GenericPolycone;
61 class G4Polyhedra;
62 class G4Sphere;
63 class G4TessellatedSolid;
64 class G4Tet;
65 class G4Torus;
66 class G4GenericTrap;
67 class G4Trap;
68 class G4Trd;
69 class G4Tubs;
70 class G4CutTubs;
71 class G4TwistedBox;
72 class G4TwistedTrap;
73 class G4TwistedTrd;
74 class G4TwistedTubs;
75 class G4VSolid;
76 class G4OpticalSurface;
77 
79 {
81  {
82  public:
83 
84  G4bool operator()(const G4ThreeVector& t1, const G4ThreeVector& t2 ) const
85  {
86  if(t1.x() < t2.x())
87  return true;
88 
89  if(t1.y() < t2.y())
90  return true;
91 
92  if(t1.z() < t2.z())
93  return true;
94 
95  return false;
96  }
97  };
98 
99  public:
100 
101  virtual void AddSolid(const G4VSolid* const);
102  virtual void SolidsWrite(xercesc::DOMElement*);
103 
104  protected:
105 
107  virtual ~PHG4GDMLWriteSolids();
108 
109  void MultiUnionWrite(xercesc::DOMElement* solElement, const G4MultiUnion* const);
110  void BooleanWrite(xercesc::DOMElement*, const G4BooleanSolid* const);
111  void BoxWrite(xercesc::DOMElement*, const G4Box* const);
112  void ConeWrite(xercesc::DOMElement*, const G4Cons* const);
113  void ElconeWrite(xercesc::DOMElement*, const G4EllipticalCone* const);
114  void EllipsoidWrite(xercesc::DOMElement*, const G4Ellipsoid* const);
115  void EltubeWrite(xercesc::DOMElement*, const G4EllipticalTube* const);
116  void XtruWrite(xercesc::DOMElement*, const G4ExtrudedSolid* const);
117  void HypeWrite(xercesc::DOMElement*, const G4Hype* const);
118  void OrbWrite(xercesc::DOMElement*, const G4Orb* const);
119  void ParaWrite(xercesc::DOMElement*, const G4Para* const);
120  void ParaboloidWrite(xercesc::DOMElement*, const G4Paraboloid* const);
121  void PolyconeWrite(xercesc::DOMElement*, const G4Polycone* const);
122  void GenericPolyconeWrite(xercesc::DOMElement*, const G4GenericPolycone* const);
123  void PolyhedraWrite(xercesc::DOMElement*, const G4Polyhedra* const);
124  void SphereWrite(xercesc::DOMElement*, const G4Sphere* const);
125  void TessellatedWrite(xercesc::DOMElement*, const G4TessellatedSolid* const);
126  void TetWrite(xercesc::DOMElement*, const G4Tet* const);
127  void TorusWrite(xercesc::DOMElement*, const G4Torus* const);
128  void GenTrapWrite(xercesc::DOMElement*, const G4GenericTrap* const);
129  void TrapWrite(xercesc::DOMElement*, const G4Trap* const);
130  void TrdWrite(xercesc::DOMElement*, const G4Trd* const);
131  void TubeWrite(xercesc::DOMElement*, const G4Tubs* const);
132  void CutTubeWrite(xercesc::DOMElement*, const G4CutTubs* const);
133  void TwistedboxWrite(xercesc::DOMElement*, const G4TwistedBox* const);
134  void TwistedtrapWrite(xercesc::DOMElement*, const G4TwistedTrap* const);
135  void TwistedtrdWrite(xercesc::DOMElement*, const G4TwistedTrd* const);
136  void TwistedtubsWrite(xercesc::DOMElement*, const G4TwistedTubs* const);
137  void ZplaneWrite(xercesc::DOMElement*, const G4double&,
138  const G4double&, const G4double&);
139  void RZPointWrite(xercesc::DOMElement*, const G4double&,const G4double&);
140  void OpticalSurfaceWrite(xercesc::DOMElement*,
141  const G4OpticalSurface* const);
142 
143  protected:
144 
145  std::vector<const G4VSolid*> solidList;
146  xercesc::DOMElement* solidsElement;
147  static const G4int maxTransforms = 8; // Constant for limiting the number
148  // of displacements/reflections
149  // applied to a single solid
150 };
151 
152 #endif