ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4GDMLParameterisation.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4GDMLParameterisation.cc
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 // class G4GDMLParameterisation Implementation
28 //
29 // History:
30 // - Created. Zoltan Torzsok, November 2007
31 // -------------------------------------------------------------------------
32 
34 #include "G4PolyconeHistorical.hh"
35 #include "G4PolyhedraHistorical.hh"
36 
38 {
39  return (G4int)parameterList.size();
40 }
41 
43 {
44  parameterList.push_back(newParameter);
45 }
46 
48 ComputeTransformation(const G4int index,G4VPhysicalVolume* physvol) const
49 {
50  physvol->SetTranslation(parameterList[index].position);
51  physvol->SetRotation(parameterList[index].pRot);
52 }
53 
56 {
57  box.SetXHalfLength(parameterList[index].dimension[0]);
58  box.SetYHalfLength(parameterList[index].dimension[1]);
59  box.SetZHalfLength(parameterList[index].dimension[2]);
60 }
61 
63 ComputeDimensions(G4Trd& trd,const G4int index,const G4VPhysicalVolume*) const
64 {
65  trd.SetXHalfLength1(parameterList[index].dimension[0]);
66  trd.SetXHalfLength2(parameterList[index].dimension[1]);
67  trd.SetYHalfLength1(parameterList[index].dimension[2]);
68  trd.SetYHalfLength2(parameterList[index].dimension[3]);
69  trd.SetZHalfLength(parameterList[index].dimension[4]);
70 }
71 
73 ComputeDimensions(G4Trap& trap,const G4int index,const G4VPhysicalVolume*) const
74 {
75  trap.SetAllParameters(parameterList[index].dimension[0], // Dz
76  parameterList[index].dimension[1], // Theta
77  parameterList[index].dimension[2], // Phi
78  parameterList[index].dimension[3], // Dy1
79  parameterList[index].dimension[4], // Dx1
80  parameterList[index].dimension[5], // Dx2
81  parameterList[index].dimension[6], // pAlp1,
82  parameterList[index].dimension[7], // pDy2,
83  parameterList[index].dimension[8], // pDx3,
84  parameterList[index].dimension[9], // pDx4,
85  parameterList[index].dimension[10]); // pAlp2
86 }
87 
89 ComputeDimensions(G4Tubs& tubs,const G4int index,const G4VPhysicalVolume*) const
90 {
91  tubs.SetInnerRadius(parameterList[index].dimension[0]);
92  tubs.SetOuterRadius(parameterList[index].dimension[1]);
93  tubs.SetZHalfLength(parameterList[index].dimension[2]);
94  tubs.SetStartPhiAngle(parameterList[index].dimension[3]);
95  tubs.SetDeltaPhiAngle(parameterList[index].dimension[4]);
96 }
97 
99 ComputeDimensions(G4Cons& cons,const G4int index,const G4VPhysicalVolume*) const
100 {
101  cons.SetInnerRadiusMinusZ(parameterList[index].dimension[0]);
102  cons.SetOuterRadiusMinusZ(parameterList[index].dimension[1]);
103  cons.SetInnerRadiusPlusZ(parameterList[index].dimension[2]);
104  cons.SetOuterRadiusPlusZ(parameterList[index].dimension[3]);
105  cons.SetZHalfLength(parameterList[index].dimension[4]);
106  cons.SetStartPhiAngle(parameterList[index].dimension[5]);
107  cons.SetDeltaPhiAngle(parameterList[index].dimension[6]);
108 }
109 
111 ComputeDimensions(G4Sphere& sphere,const G4int index,const G4VPhysicalVolume*) const
112 {
113  sphere.SetInnerRadius(parameterList[index].dimension[0]);
114  sphere.SetOuterRadius(parameterList[index].dimension[1]);
115  sphere.SetStartPhiAngle(parameterList[index].dimension[2]);
116  sphere.SetDeltaPhiAngle(parameterList[index].dimension[3]);
117  sphere.SetStartThetaAngle(parameterList[index].dimension[4]);
118  sphere.SetDeltaThetaAngle(parameterList[index].dimension[5]);
119 }
120 
122 ComputeDimensions(G4Orb& orb,const G4int index,const G4VPhysicalVolume*) const
123 {
124  orb.SetRadius(parameterList[index].dimension[0]);
125 }
126 
128 ComputeDimensions(G4Ellipsoid& ellipsoid,const G4int index,const G4VPhysicalVolume*) const
129 {
130  ellipsoid.SetSemiAxis(parameterList[index].dimension[0],
131  parameterList[index].dimension[1],
132  parameterList[index].dimension[2]);
133  ellipsoid.SetZCuts(parameterList[index].dimension[3],
134  parameterList[index].dimension[4]);
135 }
136 
138 ComputeDimensions(G4Torus& torus,const G4int index,const G4VPhysicalVolume*) const
139 {
140  torus.SetAllParameters(parameterList[index].dimension[0], // pRmin
141  parameterList[index].dimension[1], // pRmax
142  parameterList[index].dimension[2], // pRtor
143  parameterList[index].dimension[3], // pSPhi
144  parameterList[index].dimension[4]); // pDPhi
145 }
146 
148 ComputeDimensions(G4Para& para,const G4int index,const G4VPhysicalVolume*) const
149 {
150  para.SetXHalfLength(parameterList[index].dimension[0]);
151  para.SetYHalfLength(parameterList[index].dimension[1]);
152  para.SetZHalfLength(parameterList[index].dimension[2]);
153  para.SetAlpha(parameterList[index].dimension[3]);
154  para.SetTanAlpha(std::tan(parameterList[index].dimension[3]));
155  para.SetThetaAndPhi(parameterList[index].dimension[4],parameterList[index].dimension[5]);
156 }
157 
159 ComputeDimensions(G4Hype& hype,const G4int index,const G4VPhysicalVolume*) const
160 {
161  hype.SetInnerRadius(parameterList[index].dimension[0]);
162  hype.SetOuterRadius(parameterList[index].dimension[1]);
163  hype.SetZHalfLength(parameterList[index].dimension[4]);
164  hype.SetInnerStereo(parameterList[index].dimension[2]);
165  hype.SetOuterStereo(parameterList[index].dimension[3]);
166 }
167 
169 ComputeDimensions(G4Polycone& pcone,const G4int index,const G4VPhysicalVolume*) const
170 {
171 
172  G4PolyconeHistorical origparam( *(pcone.GetOriginalParameters()) );
173  origparam.Start_angle = parameterList[index].dimension[0];
174  origparam.Opening_angle = parameterList[index].dimension[1];
175  origparam.Num_z_planes = (G4int) parameterList[index].dimension[2];
176  G4int nZplanes = origparam.Num_z_planes;
177 
178  for( G4int ii = 0; ii < nZplanes; ii++ )
179  {
180  origparam.Rmin[ii] = parameterList[index].dimension[3+ii*3] ;
181  origparam.Rmax[ii] = parameterList[index].dimension[4+ii*3] ;
182  origparam.Z_values[ii] = parameterList[index].dimension[5+ii*3] ;
183  }
184 
185  pcone.SetOriginalParameters(&origparam); // copy values & transfer pointers
186  pcone.Reset(); // reset to new solid parameters
187 
188 }
189 
191 ComputeDimensions(G4Polyhedra& polyhedra,const G4int index,const G4VPhysicalVolume*) const
192 {
193  G4PolyhedraHistorical origparam( *(polyhedra.GetOriginalParameters()) );
194  origparam.Start_angle = parameterList[index].dimension[0];
195  origparam.Opening_angle = parameterList[index].dimension[1];
196  origparam.Num_z_planes = (G4int) parameterList[index].dimension[2];
197  origparam.numSide = (G4int) parameterList[index].dimension[3];
198 
199  G4int nZplanes = origparam.Num_z_planes;
200 
201  for( G4int ii = 0; ii < nZplanes; ii++ )
202  {
203 
204  origparam.Rmin[ii] = parameterList[index].dimension[4+ii*3] ;
205  origparam.Rmax[ii] = parameterList[index].dimension[5+ii*3] ;
206  origparam.Z_values[ii] = parameterList[index].dimension[6+ii*3] ;
207 
208  }
209  polyhedra.SetOriginalParameters(&origparam); // copy values & transfer pointers
210  polyhedra.Reset(); // reset to new solid parameters
211 }