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 // G4TwistTubsSide 27 // 28 // Class description: 29 // 30 // Class describing a twisted boundary surface 31 32 // 01-Aug-2002 - Kotoyo Hoshina (hoshina@hepbu 33 // 13-Nov-2003 - O.Link (Oliver.Link@cern.ch), 34 // from original version in Jupi 35 // ------------------------------------------- 36 #ifndef G4TWISTTUBSSIDE_HH 37 #define G4TWISTTUBSSIDE_HH 38 39 #include "G4VTwistSurface.hh" 40 41 class G4TwistTubsSide : public G4VTwistSurface 42 { 43 public: 44 45 G4TwistTubsSide(const G4String& na 46 const G4RotationMatrix& ro 47 const G4ThreeVector& tl 48 G4int handedness, 49 const G4double kappa, 50 const EAxis axis0 = kXA 51 const EAxis axis1 = kZA 52 G4double axis0min = 53 G4double axis1min = 54 G4double axis0max = 55 G4double axis1max = 56 57 G4TwistTubsSide(const G4String& name, 58 G4double EndInnerRa 59 G4double EndOuterRa 60 G4double DPhi, 61 G4double EndPhi[2], 62 G4double EndZ[2], 63 G4double InnerRadiu 64 G4double OuterRadiu 65 G4double Kappa, 66 G4int handedness 67 68 ~G4TwistTubsSide() override; 69 70 G4ThreeVector GetNormal(const G4ThreeVecto 71 G4bool isGlo 72 73 G4int DistanceToSurface(const G4ThreeVecto 74 const G4ThreeVecto 75 G4ThreeVecto 76 G4double di 77 G4int ar 78 G4bool is 79 EValidate validate 80 81 G4int DistanceToSurface(const G4ThreeVecto 82 G4ThreeVecto 83 G4double 84 G4int 85 86 inline G4ThreeVector ProjectAtPXPZ(const G 87 G 88 89 inline G4ThreeVector SurfacePoint(G4double 90 G4bool i 91 inline G4double GetBoundaryMin(G4double ph 92 inline G4double GetBoundaryMax(G4double ph 93 inline G4double GetSurfaceArea() override 94 void GetFacets( G4int m, G4int n, G4double 95 G4int faces[][4], G4int is 96 97 G4TwistTubsSide(__void__&); 98 // Fake default constructor for usage re 99 // persistency for clients requiring pre 100 // persistifiable objects. 101 102 private: 103 104 G4double DistanceToPlane(const G4ThreeVect 105 const G4ThreeVect 106 const G4ThreeVect 107 const G4ThreeVect 108 const G4ThreeVect 109 const G4int 110 G4ThreeVect 111 G4ThreeVect 112 113 G4int GetAreaCode(const G4ThreeVector& xx, 114 G4bool wit 115 116 void SetCorners() override; 117 118 void SetCorners( G4double endInnerRad[2], 119 G4double endOuterRad[2], 120 G4double endPhi[2], 121 G4double endZ[2] ) ; 122 123 void SetBoundaries() override; 124 125 private: 126 127 G4double fKappa; // std::ta 128 }; 129 130 131 //============================================ 132 // inline functions 133 //============================================ 134 135 inline 136 G4ThreeVector G4TwistTubsSide::ProjectAtPXPZ(c 137 138 { 139 // Get Rho at p.z() on Hyperbolic Surface. 140 G4ThreeVector tmpp; 141 if (isglobal) { tmpp = fRot.inverse()*p - fT 142 else { tmpp = p; } 143 G4ThreeVector xx(p.x(), p.x() * fKappa * p.z 144 if (isglobal) { return (fRot * xx + fTrans); 145 return xx; 146 } 147 148 inline 149 G4ThreeVector 150 G4TwistTubsSide::SurfacePoint(G4double x, G4do 151 { 152 G4ThreeVector SurfPoint( x , x * fKappa * z 153 154 if (isGlobal) { return (fRot * SurfPoint + f 155 return SurfPoint; 156 } 157 158 inline 159 G4double G4TwistTubsSide::GetBoundaryMin(G4dou 160 { 161 return fAxisMin[0] ; // inner radius at z 162 } 163 164 inline 165 G4double G4TwistTubsSide::GetBoundaryMax(G4dou 166 { 167 return fAxisMax[0] ; // outer radius at z 168 } 169 170 inline 171 G4double G4TwistTubsSide::GetSurfaceArea() 172 { 173 // approximation only 174 return ( fAxisMax[0] - fAxisMin[0] ) * ( fAx 175 } 176 177 #endif 178