Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // class G4ErrorPropagationNavigator 27 // 28 // Class Description: 29 // 30 // Class for performing double navigation in the detector geometry and 31 // on the target surface for error propagation. It overloads ComputeStep() 32 // and ComputeSafety() methods. 33 34 // Created. P. Arce, September 2004 35 // -------------------------------------------------------------------- 36 37 #ifndef G4ErrorPropagationNavigator_hh 38 #define G4ErrorPropagationNavigator_hh 1 39 40 #include "G4Navigator.hh" 41 #include "G4ThreeVector.hh" 42 43 class G4ErrorPropagationNavigator : public G4Navigator 44 { 45 public: 46 47 G4ErrorPropagationNavigator() = default; 48 ~G4ErrorPropagationNavigator() override = default; 49 50 G4double ComputeStep (const G4ThreeVector &pGlobalPoint, 51 const G4ThreeVector &pDirection, 52 const G4double pCurrentProposedStepLength, 53 G4double &pNewSafety) override; 54 // Calls the navigation in the detector geometry and then checks 55 // if the distance to surface is smaller than the proposed step 56 57 G4double ComputeSafety(const G4ThreeVector &globalpoint, 58 const G4double pProposedMaxLength = DBL_MAX, 59 const G4bool keepState = true) override; 60 // Calls the navigation in the detector geometry and then checks 61 // if the distance to surface is smaller than the proposed safety 62 63 G4ThreeVector GetGlobalExitNormal(const G4ThreeVector& point, 64 G4bool* valid) override; 65 // Return Exit Surface Normal and validity too. Can only be called if 66 // the Navigator's last Step has crossed a volume geometrical boundary. 67 // Normal points out of the volume exited and/or into the volume entered. 68 69 G4double TargetSafetyFromPoint( const G4ThreeVector &pGlobalpoint ); 70 // Isotropic safety for 'Target' 71 72 //-- NOT implemented, as it is difficult to define the coordinate system: 73 // G4ThreeVector GetLocalExitNormal(G4bool* valid); 74 // G4ThreeVector GetLocalExitNormalAndCheck(const G4ThreeVector& point, 75 // G4bool* valid); 76 // Convention: 77 // The *local* normal is in the coordinate system of the *final* volume. 78 }; 79 80 #endif 81