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 9.4.p3)


  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,v 1.2 2009-11-18 17:57:59 gcosmo Exp $
                                                   >>  27 // GEANT4 tag $Name: not supported by cvs2svn $
 27 //                                                 28 //
 28 // Class description:                          <<  29 /////////////////////////////////////////////////////////////////////////////////
                                                   >>  30 //      Class Name: G4AdjointPosOnPhysVolGenerator
                                                   >>  31 //  Author:         L. Desorgher
                                                   >>  32 //  Organisation:   SpaceIT GmbH
                                                   >>  33 //  Contract: ESA contract 21435/08/NL/AT
                                                   >>  34 //  Customer:       ESA/ESTEC
                                                   >>  35 /////////////////////////////////////////////////////////////////////////////////
 29 //                                                 36 //
 30 // This class is responsible for the generatio <<  37 // CHANGE HISTORY
 31 // on the external surface of a user selected  <<  38 // --------------
 32 // The particles are generated uniformly on th <<  39 //      ChangeHistory: 
 33 // distribution set to a cosine law relative t <<  40 //    1st June 2006 creation by L. Desorgher      
 34 // It is equivalent to the flux going in from  <<  41 //
 35 // is considered outside.                      <<  42 //-------------------------------------------------------------
 36 // It uses ray tracking technique and can be a <<  43 //  Documentation:
 37 // volumes. Using the ray tracking technique t <<  44 //    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 <<  45 //    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.                           <<  46 //    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 <<  47 //    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 <<  48 //    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 <<  49 //    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.  <<  50 //    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                                                <<  51 //
 45 // Author: L. Desorgher, SpaceIT GmbH - 01.06. <<  52 //    
 46 // Contract: ESA contract 21435/08/NL/AT       <<  53 //
 47 // Customer: ESA/ESTEC                         <<  54 #ifndef G4AdjointPosOnPhysVolGenerator_h
 48 // ------------------------------------------- <<  55 #define G4AdjointPosOnPhysVolGenerator_h 1
 49 #ifndef G4AdjointPosOnPhysVolGenerator_hh      << 
 50 #define G4AdjointPosOnPhysVolGenerator_hh 1    << 
 51                                                    56 
 52 #include "G4VPhysicalVolume.hh"                    57 #include "G4VPhysicalVolume.hh"
 53 #include "G4AffineTransform.hh"                    58 #include "G4AffineTransform.hh"
 54 #include "G4ThreeVector.hh"                        59 #include "G4ThreeVector.hh"
 55                                                    60 
 56 class G4VSolid;                                    61 class G4VSolid;
 57                                                    62 
 58 class G4AdjointPosOnPhysVolGenerator               63 class G4AdjointPosOnPhysVolGenerator 
                                                   >>  64 ///////////////////////
 59 {                                                  65 {
 60 //---------                                    << 
 61   public:                                      << 
 62 //---------                                    << 
 63                                                    66 
 64     static  G4AdjointPosOnPhysVolGenerator* Ge <<  67 //--------
                                                   >>  68   public: //without description
                                                   >>  69 //--------
                                                   >>  70 
                                                   >>  71    static  G4AdjointPosOnPhysVolGenerator* GetInstance();
 65                                                    72    
 66     G4VPhysicalVolume* DefinePhysicalVolume(co <<  73 //--------
 67     void DefinePhysicalVolume1(const G4String& <<  74   public:  //public methods
 68     G4double ComputeAreaOfExtSurface();        <<  75 //--------
 69     G4double ComputeAreaOfExtSurface(G4int NSt <<  76   G4VPhysicalVolume* DefinePhysicalVolume(const G4String& aName);
 70     G4double ComputeAreaOfExtSurface(G4double  <<  77   void DefinePhysicalVolume1(const G4String& aName);
 71     G4double ComputeAreaOfExtSurface(G4VSolid* <<  78   G4double ComputeAreaOfExtSurface();
 72     G4double ComputeAreaOfExtSurface(G4VSolid* <<  79   G4double ComputeAreaOfExtSurface(G4int NStat);
 73     G4double ComputeAreaOfExtSurface(G4VSolid* <<  80   G4double ComputeAreaOfExtSurface(G4double epsilon);
                                                   >>  81   G4double ComputeAreaOfExtSurface(G4VSolid* aSolid);
                                                   >>  82   G4double ComputeAreaOfExtSurface(G4VSolid* aSolid,G4int NStat);
                                                   >>  83   G4double ComputeAreaOfExtSurface(G4VSolid* aSolid,G4double epsilon);
 74                                                    84  
 75     void GenerateAPositionOnTheExtSurfaceOfASo <<  85   void GenerateAPositionOnTheExtSurfaceOfASolid(G4VSolid* aSolid,G4ThreeVector& p, G4ThreeVector&  direction);
 76                                                <<  86   void GenerateAPositionOnTheExtSurfaceOfTheSolid(G4ThreeVector& p, G4ThreeVector&  direction);
 77                                                <<  87   void GenerateAPositionOnTheExtSurfaceOfThePhysicalVolume(G4ThreeVector& p, G4ThreeVector&  direction);
 78     void GenerateAPositionOnTheExtSurfaceOfThe <<  88   void GenerateAPositionOnTheExtSurfaceOfThePhysicalVolume(G4ThreeVector& p, G4ThreeVector&  direction,
 79                                                <<  89                       G4double& costh_to_normal);
 80     void GenerateAPositionOnTheExtSurfaceOfThe <<  90 
 81                                                <<  91   //inline public methods
 82     void GenerateAPositionOnTheExtSurfaceOfThe <<  92    
 83                                                <<  93   inline void SetSolid(G4VSolid* aSolid){theSolid=aSolid;}
 84                                                <<  94   inline G4double GetAreaOfExtSurfaceOfThePhysicalVolume(){return AreaOfExtSurfaceOfThePhysicalVolume;}
 85                                                <<  95   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                                                    96   
 93 //---------                                        97 //---------   
 94   private:   // private methods                <<  98    private:   //private methods
 95 //---------                                        99 //---------  
 96     G4AdjointPosOnPhysVolGenerator() = default << 100    G4AdjointPosOnPhysVolGenerator();
 97    ~G4AdjointPosOnPhysVolGenerator() = default << 101   ~G4AdjointPosOnPhysVolGenerator();
 98     G4double ComputeAreaOfExtSurfaceStartingFr << 102    G4double ComputeAreaOfExtSurfaceStartingFromSphere(G4VSolid* aSolid,G4int NStat);
 99                                                << 103    G4double ComputeAreaOfExtSurfaceStartingFromBox(G4VSolid* aSolid,G4int NStat);
100     G4double ComputeAreaOfExtSurfaceStartingFr << 104    void GenerateAPositionOnASolidBoundary(G4VSolid* aSolid,G4ThreeVector& p, G4ThreeVector&  direction);
101                                                << 105    G4double GenerateAPositionOnASphereBoundary(G4VSolid* aSolid,G4ThreeVector& p, G4ThreeVector&  direction);
102     void GenerateAPositionOnASolidBoundary(G4V << 106    G4double GenerateAPositionOnABoxBoundary(G4VSolid* aSolid,G4ThreeVector& p, G4ThreeVector&  direction);
103                                            G4T << 107    void ComputeTransformationFromPhysVolToWorld();
104                                            G4T << 
105     G4double GenerateAPositionOnASphereBoundar << 
106                                                << 
107                                                << 
108     G4double GenerateAPositionOnABoxBoundary(G << 
109                                              G << 
110                                              G << 
111     void ComputeTransformationFromPhysVolToWor << 
112                                                   108 
113 //---------                                       109 //---------   
114   private:   // attributes                     << 110    private: //attributes
115 //---------                                       111 //---------   
116                                                << 112    static G4AdjointPosOnPhysVolGenerator* theInstance;
117    static G4ThreadLocal G4AdjointPosOnPhysVolG << 113    G4VSolid* theSolid;
118    G4VSolid* theSolid = nullptr;               << 114    G4VPhysicalVolume* thePhysicalVolume;
119    G4VPhysicalVolume* thePhysicalVolume = null << 115    G4int NStat;
120                                                << 116    G4double epsilon;
121    G4bool UseSphere{true};                     << 117    G4bool UseSphere;
122    G4String ModelOfSurfaceSource{"OnSolid"};   << 118    G4String ModelOfSurfaceSource;
                                                   >> 119    G4double ExtSourceRadius;
                                                   >> 120    G4double ExtSourceDx,ExtSourceDy,ExtSourceDz ;
123    G4AffineTransform theTransformationFromPhys    121    G4AffineTransform theTransformationFromPhysVolToWorld;
124    G4double AreaOfExtSurfaceOfThePhysicalVolum << 122    G4double AreaOfExtSurfaceOfThePhysicalVolume;
125    G4double CosThDirComparedToNormal{0.};      << 123    G4double CosThDirComparedToNormal;
126 };                                                124 };
127                                                   125 
128 #endif                                            126 #endif
                                                   >> 127 
129                                                   128