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 // G4AdjointPosOnPhysVolGenerator 27 // 28 // Class description: 29 // 30 // This class is responsible for the generatio 31 // on the external surface of a user selected 32 // The particles are generated uniformly on th 33 // distribution set to a cosine law relative t 34 // It is equivalent to the flux going in from 35 // is considered outside. 36 // It uses ray tracking technique and can be a 37 // volumes. Using the ray tracking technique t 38 // is also computed. The area is needed to fix 39 // adjoint particle. 40 // At the time of the development of this clas 41 // volume surface and computation of surface w 42 // the general ray tracking technique was adop 43 // G4VSolid could be now (2009) used instead. 44 45 // Author: L. Desorgher, SpaceIT GmbH - 01.06. 46 // Contract: ESA contract 21435/08/NL/AT 47 // Customer: ESA/ESTEC 48 // ------------------------------------------- 49 #ifndef G4AdjointPosOnPhysVolGenerator_hh 50 #define G4AdjointPosOnPhysVolGenerator_hh 1 51 52 #include "G4VPhysicalVolume.hh" 53 #include "G4AffineTransform.hh" 54 #include "G4ThreeVector.hh" 55 56 class G4VSolid; 57 58 class G4AdjointPosOnPhysVolGenerator 59 { 60 //--------- 61 public: 62 //--------- 63 64 static G4AdjointPosOnPhysVolGenerator* Ge 65 66 G4VPhysicalVolume* DefinePhysicalVolume(co 67 void DefinePhysicalVolume1(const G4String& 68 G4double ComputeAreaOfExtSurface(); 69 G4double ComputeAreaOfExtSurface(G4int NSt 70 G4double ComputeAreaOfExtSurface(G4double 71 G4double ComputeAreaOfExtSurface(G4VSolid* 72 G4double ComputeAreaOfExtSurface(G4VSolid* 73 G4double ComputeAreaOfExtSurface(G4VSolid* 74 75 void GenerateAPositionOnTheExtSurfaceOfASo 76 77 78 void GenerateAPositionOnTheExtSurfaceOfThe 79 80 void GenerateAPositionOnTheExtSurfaceOfThe 81 82 void GenerateAPositionOnTheExtSurfaceOfThe 83 84 85 86 inline void SetSolid(G4VSolid* aSolid) 87 { theSolid=aSolid; } 88 inline G4double GetAreaOfExtSurfaceOfThePh 89 { return AreaOfExtSurfaceOfThePhysicalVo 90 inline G4double GetCosThDirComparedToNorma 91 { return CosThDirComparedToNormal; } 92 93 //--------- 94 private: // private methods 95 //--------- 96 G4AdjointPosOnPhysVolGenerator() = default 97 ~G4AdjointPosOnPhysVolGenerator() = default 98 G4double ComputeAreaOfExtSurfaceStartingFr 99 100 G4double ComputeAreaOfExtSurfaceStartingFr 101 102 void GenerateAPositionOnASolidBoundary(G4V 103 G4T 104 G4T 105 G4double GenerateAPositionOnASphereBoundar 106 107 108 G4double GenerateAPositionOnABoxBoundary(G 109 G 110 G 111 void ComputeTransformationFromPhysVolToWor 112 113 //--------- 114 private: // attributes 115 //--------- 116 117 static G4ThreadLocal G4AdjointPosOnPhysVolG 118 G4VSolid* theSolid = nullptr; 119 G4VPhysicalVolume* thePhysicalVolume = null 120 121 G4bool UseSphere{true}; 122 G4String ModelOfSurfaceSource{"OnSolid"}; 123 G4AffineTransform theTransformationFromPhys 124 G4double AreaOfExtSurfaceOfThePhysicalVolum 125 G4double CosThDirComparedToNormal{0.}; 126 }; 127 128 #endif 129