G4AdjointPosOnPhysVolGenerator.hh

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // $Id$
00027 //
00029 //      Class Name:     G4AdjointPosOnPhysVolGenerator
00030 //      Author:         L. Desorgher
00031 //      Organisation:   SpaceIT GmbH
00032 //      Contract:       ESA contract 21435/08/NL/AT
00033 //      Customer:       ESA/ESTEC
00035 //
00036 // CHANGE HISTORY
00037 // --------------
00038 //      ChangeHistory: 
00039 //              1st June 2006 creation by L. Desorgher                  
00040 //
00041 //-------------------------------------------------------------
00042 //      Documentation:
00043 //              This class is responsible for the generation of primary adjoint particle on the external surface of a user selected volume.
00044 //              The particle are generated uniformly on the surface with the angular distribution  set to a cosine law relative to normal of the surface.
00045 //              It is equivalent to  the flux going in  from the surface if an  isotropic flux is considered outside. 
00046 //              It uses ray tracking technique and can be applied to all kind of convex volume. Uisng the ray tracking technique the area 
00047 //              of the external surface is also computed. The area is needed to fix the weight of the primary adjoint particle.  
00048 //              At the time of the development of this class, generation of particle on volume surface and computation of surface was limited in G4, 
00049 //              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! 
00050 //
00051 //              
00052 //
00053 #ifndef G4AdjointPosOnPhysVolGenerator_h
00054 #define G4AdjointPosOnPhysVolGenerator_h 1
00055 
00056 #include "G4VPhysicalVolume.hh"
00057 #include "G4AffineTransform.hh"
00058 #include "G4ThreeVector.hh"
00059 
00060 class G4VSolid;
00061 
00062 class G4AdjointPosOnPhysVolGenerator 
00064 {
00065 
00066 //--------
00067   public: //without description
00068 //--------
00069 
00070    static  G4AdjointPosOnPhysVolGenerator* GetInstance();
00071    
00072 //--------
00073   public:  //public methods
00074 //--------
00075   G4VPhysicalVolume* DefinePhysicalVolume(const G4String& aName);
00076   void DefinePhysicalVolume1(const G4String& aName);
00077   G4double ComputeAreaOfExtSurface();
00078   G4double ComputeAreaOfExtSurface(G4int NStat);
00079   G4double ComputeAreaOfExtSurface(G4double epsilon);
00080   G4double ComputeAreaOfExtSurface(G4VSolid* aSolid);
00081   G4double ComputeAreaOfExtSurface(G4VSolid* aSolid,G4int NStat);
00082   G4double ComputeAreaOfExtSurface(G4VSolid* aSolid,G4double epsilon);
00083  
00084   void GenerateAPositionOnTheExtSurfaceOfASolid(G4VSolid* aSolid,G4ThreeVector& p, G4ThreeVector&  direction);
00085   void GenerateAPositionOnTheExtSurfaceOfTheSolid(G4ThreeVector& p, G4ThreeVector&  direction);
00086   void GenerateAPositionOnTheExtSurfaceOfThePhysicalVolume(G4ThreeVector& p, G4ThreeVector&  direction);
00087   void GenerateAPositionOnTheExtSurfaceOfThePhysicalVolume(G4ThreeVector& p, G4ThreeVector&  direction,
00088                                                                                 G4double& costh_to_normal);
00089 
00090   //inline public methods
00091    
00092   inline void SetSolid(G4VSolid* aSolid){theSolid=aSolid;}
00093   inline G4double GetAreaOfExtSurfaceOfThePhysicalVolume(){return AreaOfExtSurfaceOfThePhysicalVolume;}
00094   inline G4double GetCosThDirComparedToNormal(){return CosThDirComparedToNormal;}
00095   
00096 //---------   
00097    private:   //private methods
00098 //---------  
00099    G4AdjointPosOnPhysVolGenerator();
00100   ~G4AdjointPosOnPhysVolGenerator();
00101    G4double ComputeAreaOfExtSurfaceStartingFromSphere(G4VSolid* aSolid,G4int NStat);
00102    G4double ComputeAreaOfExtSurfaceStartingFromBox(G4VSolid* aSolid,G4int NStat);
00103    void GenerateAPositionOnASolidBoundary(G4VSolid* aSolid,G4ThreeVector& p, G4ThreeVector&  direction);
00104    G4double GenerateAPositionOnASphereBoundary(G4VSolid* aSolid,G4ThreeVector& p, G4ThreeVector&  direction);
00105    G4double GenerateAPositionOnABoxBoundary(G4VSolid* aSolid,G4ThreeVector& p, G4ThreeVector&  direction);
00106    void ComputeTransformationFromPhysVolToWorld();
00107 
00108 //---------   
00109    private: //attributes
00110 //---------   
00111    static G4AdjointPosOnPhysVolGenerator* theInstance;
00112    G4VSolid* theSolid;
00113    G4VPhysicalVolume* thePhysicalVolume;
00114    G4bool UseSphere;
00115    G4String ModelOfSurfaceSource;
00116    G4AffineTransform theTransformationFromPhysVolToWorld;
00117    G4double AreaOfExtSurfaceOfThePhysicalVolume;
00118    G4double CosThDirComparedToNormal;
00119 };
00120 
00121 #endif
00122 

Generated on Mon May 27 17:47:37 2013 for Geant4 by  doxygen 1.4.7