Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/event/include/G4AdjointPosOnPhysVolGenerator.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /event/include/G4AdjointPosOnPhysVolGenerator.hh (Version 11.3.0) and /event/include/G4AdjointPosOnPhysVolGenerator.hh (Version 10.1.p1)


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