Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/transportation/include/G4CoupledTransportation.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 ]

  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 //
 27 //
 28 // 
 29 // ------------------------------------------------------------
 30 //        GEANT 4  include file implementation
 31 // ------------------------------------------------------------
 32 //
 33 // Class description:
 34 //
 35 // G4CoupledTransportation is an optional process to transport  
 36 // a particle, in case of coupled navigation in parallel geometries
 37 //  i.e. the geometrical propagation will be done
 38 //   encountering the geometrical volumes of the detectors and
 39 //   those of parallel geometries (eg for biasing, scoring, fast simulation)
 40 // It is tasked with updating the "safety" to reflect the geometrical
 41 //   distance to the nearest volume, and the time of flight of the particle.
 42 
 43 // =======================================================================
 44 // Created:  17 May 2006, J. Apostolakis
 45 // =======================================================================
 46 #ifndef G4CoupledTransportation_hh
 47 #define G4CoupledTransportation_hh 1
 48 
 49 #include "G4Transportation.hh"
 50 
 51 #include "G4Track.hh"
 52 #include "G4Step.hh"
 53 
 54 class G4PathFinder;
 55 
 56 class G4CoupledTransportation : public G4Transportation
 57 {
 58 
 59   public:  // with description
 60 
 61      G4CoupledTransportation( G4int verbosityLevel= 0); 
 62      ~G4CoupledTransportation(); 
 63 
 64      G4double      AlongStepGetPhysicalInteractionLength(
 65                              const G4Track& track,
 66                                    G4double  previousStepSize,
 67                                    G4double  currentMinimumStep, 
 68                                    G4double& currentSafety,
 69                                    G4GPILSelection* selection
 70                             );
 71 
 72      // AlongStepDoIt is implemented by G4Transportation.
 73 
 74      G4VParticleChange* PostStepDoIt(
 75                              const G4Track& track,
 76                              const G4Step&  stepData
 77                             );
 78        // Responsible for the relocation
 79 
 80      // PostStepGetPhysicalInteractionLength is implemented by
 81      // G4Transportation to force PostStepDoIt, but not limiting the step.
 82 
 83      static void  SetSignifyStepsInAnyVolume( G4bool anyVol )
 84        { fSignifyStepInAnyVolume = anyVol; } 
 85      static G4bool GetSignifyStepsInAnyVolume()
 86        { return fSignifyStepInAnyVolume; }
 87      // Flag in step corresponds to first/last step in a volume 'any'
 88      // geometry (if this is true) or refers to first/last step in mass
 89      // geometry only (if false)
 90 
 91      // The following methods give access to first/last step in particular
 92      // geometry *independent* of the choice of the 'Signify' flag
 93      //
 94      G4bool IsFirstStepInAnyVolume() const { return fFirstStepInVolume; }
 95      G4bool IsLastStepInAnyVolume() const { return fGeometryLimitedStep; }
 96      G4bool IsFirstStepInMassVolume() const { return fFirstStepInMassVolume; }
 97      G4bool IsLastStepInMassVolume() const { return fMassGeometryLimitedStep; } 
 98 
 99   public:  // without description
100 
101      void StartTracking(G4Track* aTrack); 
102      void EndTracking();
103 
104      static G4bool EnableUseMagneticMoment(G4bool useMoment=true)
105       { return EnableMagneticMoment(useMoment); }
106      // Old name ... obsolete
107    
108   protected:
109 
110      void ReportInexactEnergy(G4double startEnergy, G4double endEnergy);
111        // Issue warning
112 
113      void ReportMove( G4ThreeVector OldVector, G4ThreeVector NewVector,
114                       const G4String& Quantity );
115    
116   private:
117 
118      G4PathFinder*        fPathFinder;
119        // The PathFinder used to transport the particle
120 
121      G4double             fPreviousMassSafety;
122      G4double             fPreviousFullSafety;
123 
124      G4bool fMassGeometryLimitedStep;
125        // Flag to determine whether a 'mass' boundary was reached.
126 
127   private:
128 
129      G4bool fFirstStepInMassVolume;
130      // G4bool fLastStepInMassVolume; => use fMassGeometryLimitedStep 
131 
132      static G4bool fSignifyStepInAnyVolume;
133        // True: First/Last step in any one of the geometries
134        // False: First/Last step in volume of 'mass' geometry
135 };
136 
137 #endif  
138