Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:58:04

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 //
0027 //
0028 // 
0029 // ------------------------------------------------------------
0030 //        GEANT 4  include file implementation
0031 // ------------------------------------------------------------
0032 //
0033 // Class description:
0034 //
0035 // G4CoupledTransportation is an optional process to transport  
0036 // a particle, in case of coupled navigation in parallel geometries
0037 //  i.e. the geometrical propagation will be done
0038 //   encountering the geometrical volumes of the detectors and
0039 //   those of parallel geometries (eg for biasing, scoring, fast simulation)
0040 // It is tasked with updating the "safety" to reflect the geometrical
0041 //   distance to the nearest volume, and the time of flight of the particle.
0042 
0043 // =======================================================================
0044 // Created:  17 May 2006, J. Apostolakis
0045 // =======================================================================
0046 #ifndef G4CoupledTransportation_hh
0047 #define G4CoupledTransportation_hh 1
0048 
0049 #include "G4Transportation.hh"
0050 
0051 #include "G4Track.hh"
0052 #include "G4Step.hh"
0053 
0054 class G4PathFinder;
0055 
0056 class G4CoupledTransportation : public G4Transportation
0057 {
0058 
0059   public:  // with description
0060 
0061      G4CoupledTransportation( G4int verbosityLevel= 0); 
0062      ~G4CoupledTransportation(); 
0063 
0064      G4double      AlongStepGetPhysicalInteractionLength(
0065                              const G4Track& track,
0066                                    G4double  previousStepSize,
0067                                    G4double  currentMinimumStep, 
0068                                    G4double& currentSafety,
0069                                    G4GPILSelection* selection
0070                             );
0071 
0072      // AlongStepDoIt is implemented by G4Transportation.
0073 
0074      G4VParticleChange* PostStepDoIt(
0075                              const G4Track& track,
0076                              const G4Step&  stepData
0077                             );
0078        // Responsible for the relocation
0079 
0080      // PostStepGetPhysicalInteractionLength is implemented by
0081      // G4Transportation to force PostStepDoIt, but not limiting the step.
0082 
0083      static void  SetSignifyStepsInAnyVolume( G4bool anyVol )
0084        { fSignifyStepInAnyVolume = anyVol; } 
0085      static G4bool GetSignifyStepsInAnyVolume()
0086        { return fSignifyStepInAnyVolume; }
0087      // Flag in step corresponds to first/last step in a volume 'any'
0088      // geometry (if this is true) or refers to first/last step in mass
0089      // geometry only (if false)
0090 
0091      // The following methods give access to first/last step in particular
0092      // geometry *independent* of the choice of the 'Signify' flag
0093      //
0094      G4bool IsFirstStepInAnyVolume() const { return fFirstStepInVolume; }
0095      G4bool IsLastStepInAnyVolume() const { return fGeometryLimitedStep; }
0096      G4bool IsFirstStepInMassVolume() const { return fFirstStepInMassVolume; }
0097      G4bool IsLastStepInMassVolume() const { return fMassGeometryLimitedStep; } 
0098 
0099   public:  // without description
0100 
0101      void StartTracking(G4Track* aTrack); 
0102      void EndTracking();
0103 
0104      static G4bool EnableUseMagneticMoment(G4bool useMoment=true)
0105       { return EnableMagneticMoment(useMoment); }
0106      // Old name ... obsolete
0107    
0108   protected:
0109 
0110      void ReportInexactEnergy(G4double startEnergy, G4double endEnergy);
0111        // Issue warning
0112 
0113      void ReportMove( G4ThreeVector OldVector, G4ThreeVector NewVector,
0114                       const G4String& Quantity );
0115    
0116   private:
0117 
0118      G4PathFinder*        fPathFinder;
0119        // The PathFinder used to transport the particle
0120 
0121      G4double             fPreviousMassSafety;
0122      G4double             fPreviousFullSafety;
0123 
0124      G4bool fMassGeometryLimitedStep;
0125        // Flag to determine whether a 'mass' boundary was reached.
0126 
0127   private:
0128 
0129      G4bool fFirstStepInMassVolume;
0130      // G4bool fLastStepInMassVolume; => use fMassGeometryLimitedStep 
0131 
0132      static G4bool fSignifyStepInAnyVolume;
0133        // True: First/Last step in any one of the geometries
0134        // False: First/Last step in volume of 'mass' geometry
0135 };
0136 
0137 #endif