Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // G4GDMLParameterisation implementation << 26 // $Id: G4GDMLParameterisation.cc,v 1.11 2008-07-16 15:46:34 gcosmo Exp $ >> 27 // GEANT4 tag $Name: geant4-09-04-patch-01 $ 27 // 28 // 28 // Author: Zoltan Torzsok, November 2007 << 29 // class G4GDMLParameterisation Implementation 29 // ------------------------------------------- << 30 // >> 31 // History: >> 32 // - Created. Zoltan Torzsok, November 2007 >> 33 // ------------------------------------------------------------------------- 30 34 31 #include "G4GDMLParameterisation.hh" 35 #include "G4GDMLParameterisation.hh" 32 #include "G4PolyconeHistorical.hh" << 33 #include "G4PolyhedraHistorical.hh" << 34 36 35 // ------------------------------------------- << 36 G4int G4GDMLParameterisation::GetSize() const 37 G4int G4GDMLParameterisation::GetSize() const 37 { 38 { 38 return (G4int) parameterList.size(); << 39 return (G4int)parameterList.size(); 39 } 40 } 40 41 41 // ------------------------------------------- << 42 void G4GDMLParameterisation::AddParameter(cons 42 void G4GDMLParameterisation::AddParameter(const PARAMETER& newParameter) 43 { 43 { 44 parameterList.push_back(newParameter); << 44 parameterList.push_back(newParameter); >> 45 } >> 46 >> 47 void G4GDMLParameterisation:: >> 48 ComputeTransformation(const G4int index,G4VPhysicalVolume* physvol) const >> 49 { >> 50 physvol->SetTranslation(parameterList[index].position); >> 51 physvol->SetRotation(parameterList[index].pRot); >> 52 } >> 53 >> 54 void G4GDMLParameterisation:: >> 55 ComputeDimensions(G4Box& box,const G4int index,const G4VPhysicalVolume*) const >> 56 { >> 57 box.SetXHalfLength(parameterList[index].dimension[0]); >> 58 box.SetYHalfLength(parameterList[index].dimension[1]); >> 59 box.SetZHalfLength(parameterList[index].dimension[2]); >> 60 } >> 61 >> 62 void G4GDMLParameterisation:: >> 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 >> 72 void G4GDMLParameterisation:: >> 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 >> 88 void G4GDMLParameterisation:: >> 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 >> 98 void G4GDMLParameterisation:: >> 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]); 45 } 108 } 46 109 47 // ------------------------------------------- << 110 void G4GDMLParameterisation:: 48 void G4GDMLParameterisation::ComputeTransforma << 111 ComputeDimensions(G4Sphere& sphere,const G4int index,const G4VPhysicalVolume*) const 49 const G4int index, G4VPhysicalVolume* physvo << 112 { 50 { << 113 sphere.SetInsideRadius(parameterList[index].dimension[0]); 51 physvol->SetTranslation(parameterList[index] << 114 sphere.SetOuterRadius(parameterList[index].dimension[1]); 52 physvol->SetRotation(parameterList[index].pR << 115 sphere.SetStartPhiAngle(parameterList[index].dimension[2]); 53 } << 116 sphere.SetDeltaPhiAngle(parameterList[index].dimension[3]); 54 << 117 sphere.SetStartThetaAngle(parameterList[index].dimension[4]); 55 // ------------------------------------------- << 118 sphere.SetDeltaThetaAngle(parameterList[index].dimension[5]); 56 void G4GDMLParameterisation::ComputeDimensions << 119 } 57 << 120 58 { << 121 void G4GDMLParameterisation:: 59 box.SetXHalfLength(parameterList[index].dime << 122 ComputeDimensions(G4Orb& orb,const G4int index,const G4VPhysicalVolume*) const 60 box.SetYHalfLength(parameterList[index].dime << 123 { 61 box.SetZHalfLength(parameterList[index].dime << 124 orb.SetRadius(parameterList[index].dimension[0]); 62 } << 125 } 63 << 126 64 // ------------------------------------------- << 127 void G4GDMLParameterisation:: 65 void G4GDMLParameterisation::ComputeDimensions << 128 ComputeDimensions(G4Torus& torus,const G4int index,const G4VPhysicalVolume*) const 66 << 129 { 67 { << 130 torus.SetAllParameters(parameterList[index].dimension[0], // pRmin 68 trd.SetXHalfLength1(parameterList[index].dim << 131 parameterList[index].dimension[1], // pRmax 69 trd.SetXHalfLength2(parameterList[index].dim << 132 parameterList[index].dimension[2], // pRtor 70 trd.SetYHalfLength1(parameterList[index].dim << 133 parameterList[index].dimension[3], // pSPhi 71 trd.SetYHalfLength2(parameterList[index].dim << 134 parameterList[index].dimension[4]); // pDPhi 72 trd.SetZHalfLength(parameterList[index].dime << 135 } 73 } << 136 74 << 137 void G4GDMLParameterisation:: 75 // ------------------------------------------- << 138 ComputeDimensions(G4Para& para,const G4int index,const G4VPhysicalVolume*) const 76 void G4GDMLParameterisation::ComputeDimensions << 139 { 77 << 140 para.SetXHalfLength(parameterList[index].dimension[0]); 78 { << 141 para.SetYHalfLength(parameterList[index].dimension[1]); 79 trap.SetAllParameters(parameterList[index].d << 142 para.SetZHalfLength(parameterList[index].dimension[2]); 80 parameterList[index].d << 143 para.SetAlpha(parameterList[index].dimension[3]); 81 parameterList[index].d << 144 para.SetTanAlpha(std::tan(parameterList[index].dimension[3])); 82 parameterList[index].d << 145 para.SetThetaAndPhi(parameterList[index].dimension[4],parameterList[index].dimension[5]); 83 parameterList[index].d << 146 } 84 parameterList[index].d << 147 85 parameterList[index].d << 148 void G4GDMLParameterisation:: 86 parameterList[index].d << 149 ComputeDimensions(G4Hype& hype,const G4int index,const G4VPhysicalVolume*) const 87 parameterList[index].d << 150 { 88 parameterList[index].d << 151 hype.SetInnerRadius(parameterList[index].dimension[0]); 89 parameterList[index].d << 152 hype.SetOuterRadius(parameterList[index].dimension[1]); 90 } << 153 hype.SetZHalfLength(parameterList[index].dimension[4]); 91 << 154 hype.SetInnerStereo(parameterList[index].dimension[2]); 92 // ------------------------------------------- << 155 hype.SetOuterStereo(parameterList[index].dimension[3]); 93 void G4GDMLParameterisation::ComputeDimensions << 156 } 94 << 157 95 { << 158 void G4GDMLParameterisation:: 96 tubs.SetInnerRadius(parameterList[index].dim << 159 ComputeDimensions(G4Polycone&,const G4int,const G4VPhysicalVolume*) const 97 tubs.SetOuterRadius(parameterList[index].dim << 160 { 98 tubs.SetZHalfLength(parameterList[index].dim << 161 G4Exception("G4GDMLParameterisation::ComputeDimensions()", 99 tubs.SetStartPhiAngle(parameterList[index].d << 162 "InvalidSetup", FatalException, 100 tubs.SetDeltaPhiAngle(parameterList[index].d << 163 "Parameterisation of G4Polycone not implemented yet. Sorry!"); 101 } << 164 } 102 << 165 103 // ------------------------------------------- << 166 void G4GDMLParameterisation:: 104 void G4GDMLParameterisation::ComputeDimensions << 167 ComputeDimensions(G4Polyhedra&,const G4int,const G4VPhysicalVolume*) const 105 << 168 { 106 { << 169 G4Exception("G4GDMLParameterisation::ComputeDimensions()", 107 cons.SetInnerRadiusMinusZ(parameterList[inde << 170 "InvalidSetup", FatalException, 108 cons.SetOuterRadiusMinusZ(parameterList[inde << 171 "Parameterisation of G4Polyhedra not implemented yet. Sorry!"); 109 cons.SetInnerRadiusPlusZ(parameterList[index << 110 cons.SetOuterRadiusPlusZ(parameterList[index << 111 cons.SetZHalfLength(parameterList[index].dim << 112 cons.SetStartPhiAngle(parameterList[index].d << 113 cons.SetDeltaPhiAngle(parameterList[index].d << 114 } << 115 << 116 // ------------------------------------------- << 117 void G4GDMLParameterisation::ComputeDimensions << 118 << 119 << 120 { << 121 sphere.SetInnerRadius(parameterList[index].d << 122 sphere.SetOuterRadius(parameterList[index].d << 123 sphere.SetStartPhiAngle(parameterList[index] << 124 sphere.SetDeltaPhiAngle(parameterList[index] << 125 sphere.SetStartThetaAngle(parameterList[inde << 126 sphere.SetDeltaThetaAngle(parameterList[inde << 127 } << 128 << 129 // ------------------------------------------- << 130 void G4GDMLParameterisation::ComputeDimensions << 131 << 132 { << 133 orb.SetRadius(parameterList[index].dimension << 134 } << 135 << 136 // ------------------------------------------- << 137 void G4GDMLParameterisation::ComputeDimensions << 138 << 139 << 140 { << 141 ellipsoid.SetSemiAxis(parameterList[index].d << 142 parameterList[index].d << 143 parameterList[index].d << 144 ellipsoid.SetZCuts(parameterList[index].dime << 145 parameterList[index].dime << 146 } << 147 << 148 // ------------------------------------------- << 149 void G4GDMLParameterisation::ComputeDimensions << 150 << 151 << 152 { << 153 torus.SetAllParameters(parameterList[index]. << 154 parameterList[index]. << 155 parameterList[index]. << 156 parameterList[index]. << 157 parameterList[index]. << 158 } << 159 << 160 // ------------------------------------------- << 161 void G4GDMLParameterisation::ComputeDimensions << 162 << 163 { << 164 para.SetXHalfLength(parameterList[index].dim << 165 para.SetYHalfLength(parameterList[index].dim << 166 para.SetZHalfLength(parameterList[index].dim << 167 para.SetAlpha(parameterList[index].dimension << 168 para.SetTanAlpha(std::tan(parameterList[inde << 169 para.SetThetaAndPhi(parameterList[index].dim << 170 parameterList[index].dim << 171 } << 172 << 173 // ------------------------------------------- << 174 void G4GDMLParameterisation::ComputeDimensions << 175 << 176 { << 177 hype.SetInnerRadius(parameterList[index].dim << 178 hype.SetOuterRadius(parameterList[index].dim << 179 hype.SetZHalfLength(parameterList[index].dim << 180 hype.SetInnerStereo(parameterList[index].dim << 181 hype.SetOuterStereo(parameterList[index].dim << 182 } << 183 << 184 // ------------------------------------------- << 185 void G4GDMLParameterisation::ComputeDimensions << 186 << 187 << 188 { << 189 G4PolyconeHistorical origparam(*(pcone.GetOr << 190 origparam.Start_angle = parameterList[inde << 191 origparam.Opening_angle = parameterList[inde << 192 origparam.Num_z_planes = (G4int) parameterL << 193 G4int nZplanes = origparam.Num_z_pl << 194 << 195 for(G4int ii = 0; ii < nZplanes; ++ii) << 196 { << 197 origparam.Rmin[ii] = parameterList[ind << 198 origparam.Rmax[ii] = parameterList[ind << 199 origparam.Z_values[ii] = parameterList[ind << 200 } << 201 << 202 pcone.SetOriginalParameters(&origparam); // << 203 pcone.Reset(); // << 204 } << 205 << 206 // ------------------------------------------- << 207 void G4GDMLParameterisation::ComputeDimensions << 208 << 209 << 210 { << 211 G4PolyhedraHistorical origparam(*(polyhedra. << 212 origparam.Start_angle = parameterList[inde << 213 origparam.Opening_angle = parameterList[inde << 214 origparam.Num_z_planes = (G4int) parameterL << 215 origparam.numSide = (G4int) parameterL << 216 << 217 G4int nZplanes = origparam.Num_z_planes; << 218 << 219 for(G4int ii = 0; ii < nZplanes; ++ii) << 220 { << 221 origparam.Rmin[ii] = parameterList[ind << 222 origparam.Rmax[ii] = parameterList[ind << 223 origparam.Z_values[ii] = parameterList[ind << 224 } << 225 polyhedra.SetOriginalParameters( << 226 &origparam); // copy values & transfe << 227 polyhedra.Reset(); // reset to new solid pa << 228 } 172 } 229 173