ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4ParticleChangeForTransport.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4ParticleChangeForTransport.hh
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 class header file
31 //
32 //
33 // ------------------------------------------------------------
34 // Implemented for the new scheme 10 May. 1998 H.Kurahige
35 // Added theMaterialChange 16 FEb. 2000 H.Kurahige
36 // Remove thePolarizationChange 12 Feb. 2001 H.Kurashige
37 // Modification for G4TouchableHandle 22 Oct. 2001 R.Chytracek
38 // Add MaterialCutsCouple 8 Oct. 2002 H.Kurashige
39 //
40 // Class Description
41 // This class is a concrete class for ParticleChange for transportation
42 //
43 #ifndef G4ParticleChangeForTransport_h
44 #define G4ParticleChangeForTransport_h 1
45 
46 #include "globals.hh"
47 #include "G4ios.hh"
48 #include "G4TouchableHandle.hh"
49 #include "G4ParticleChange.hh"
50 
53 
55 {
56  public:
57  // default constructor
59 
60  // destructor
62 
63  protected:
64  // hide copy constructor and assignment operator as protected
67 
68  public: // with description
69  // ----------------------------------------------------
70  // --- the following methods are for updating G4Step -----
71  // Return the pointer to the G4Step after updating the Step information
72  // by using final state information of the track given by a physics
73  // process
74  virtual G4Step* UpdateStepForAlongStep(G4Step* Step);
75  virtual G4Step* UpdateStepForAtRest(G4Step* Step);
76  virtual G4Step* UpdateStepForPostStep(G4Step* Step);
77  // A physics process gives the final state of the particle
78  // based on information of G4Track (or equivalently the PreStepPoint)
79 
80  virtual void Initialize(const G4Track&);
81  // Initialize all propoerties by using G4Track information
82 
83  // ----------------------------------------------------
84  //--- methods to keep information of the final state--
85  // IMPORTANT NOTE: Although the name of the class and methods are
86  // "Change", what it stores (and returns in get) are the "FINAL"
87  // values of the Position, Momentum, etc.
88 
90  void SetTouchableHandle(const G4TouchableHandle& fTouchable);
91  // Get/Set the touchable of the current particle.
92  // Note: Touchable in PostStepPoint will be updated only after PostStepDoIt
93 
95  void SetMaterialInTouchable(G4Material* fMaterial);
96  // Get/Propose the material in the touchable of the current particle.
97 
99  void SetMaterialCutsCoupleInTouchable(const G4MaterialCutsCouple* fMaterialCutsCouple);
100  // Get/Set the materialCutsCouple in the touchable of the current particle.
101 
103  void SetSensitiveDetectorInTouchable(G4VSensitiveDetector* fSensitiveDetector);
104  // Get/Set the sensitive detector in the touchable of the current particle.
105 
106  G4bool GetMomentumChanged() const;
108 
109  public:
110  virtual void DumpInfo() const;
111 
112  protected:
114  // The changed touchable of a given particle.
115 
116  public:
117 
118  // Prototype implementation of smooth representation of curved trajectories.
119  // Auxiliary points are ThreeVectors for now; change to G4AuxiliaryPoints.
120 
121  inline void SetPointerToVectorOfAuxiliaryPoints( std::vector<G4ThreeVector>* theNewVectorPointer );
122  inline std::vector<G4ThreeVector>* GetPointerToVectorOfAuxiliaryPoints() const;
123 
124  private:
126  // The flag which is set if momentum is changed in current step
130  // The material (and MaterialCutsCouple) where given track
131  // currently locates
132 
133  private:
134  std::vector<G4ThreeVector>* fpVectorOfAuxiliaryPointsPointer;
135 };
136 
137 #include "G4ParticleChangeForTransport.icc"
138 
139 #endif
140 
141 
142 
143 
144 
145