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 //// 27 // Author: Mathieu Karamitros 28 //// 29 // The code is developed in the framework of the ESA AO7146 30 // 31 // We would be very happy hearing from you, so do not hesitate to 32 // send us your feedback! 33 // 34 // In order for Geant4-DNA to be maintained and still open-source, 35 // article citations are crucial. 36 // If you use Geant4-DNA chemistry and you publish papers about 37 // your software, in addition to the general paper on Geant4-DNA: 38 // 39 // The Geant4-DNA project, S. Incerti et al., 40 // Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 41 // 42 // we ask that you please cite the following papers reference papers 43 // related to chemistry: 44 // 45 // Diffusion-controlled reactions modelling in Geant4-DNA, 46 // M. Karamitros et al., 2014 (submitted) 47 // Modeling Radiation Chemistry in the Geant4 Toolkit, M. Karamitros et al., 48 // Prog. Nucl. Sci. Tec. 2 (2011) 503-508 49 50 #ifndef G4VITTimeStepper_H 51 #define G4VITTimeStepper_H 52 53 #include "G4Track.hh" 54 #include "G4ITReactionTable.hh" 55 #include "G4ReferenceCountedHandle.hh" 56 #include "AddClone_def.hh" 57 #include "G4memory.hh" 58 59 //typedef G4ReferenceCountedHandle< std::vector<G4Track*> > G4TrackVectorHandle; 60 using G4TrackVectorHandle = std::shared_ptr<std::vector<G4Track *>>; 61 62 /** 63 * Before stepping all tracks G4Scheduler calls all the G4VITModel 64 * which may contain a G4VITTimeStepper (optionnal). 65 * G4VITTimeStepper returns what should be the next global time step. 66 * Time step that will be used to step all tracks. 67 */ 68 69 class G4VITTimeStepComputer 70 { 71 public: 72 G4VITTimeStepComputer(); 73 virtual ~G4VITTimeStepComputer(); 74 75 G4VITTimeStepComputer(const G4VITTimeStepComputer&); 76 G4VITTimeStepComputer& operator=(const G4VITTimeStepComputer& other); 77 78 /** This macro defined in AddClone_def **/ 79 G4IT_TO_BE_CLONED(G4VITTimeStepComputer) 80 81 // First initialization (done once for all at the begin of the run) 82 // eg. check if the reaction table is given ... 83 inline virtual void Initialize(){;} 84 85 // Preparation part 86 static void SetTimes(const G4double&, const G4double&); 87 // inline virtual void PrepareForAllProcessors(){;} 88 inline virtual void Prepare() ; 89 90 virtual G4double CalculateStep(const G4Track&, const G4double&) = 0; 91 virtual G4double CalculateMinTimeStep(G4double, G4double) = 0; 92 93 inline G4TrackVectorHandle GetReactants(); 94 inline virtual void ResetReactants() 95 // {fReactants = 0;} 96 {fReactants.reset();} 97 98 // 99 inline G4double GetSampledMinTimeStep() ; 100 101 inline void SetReactionTable(const G4ITReactionTable*); 102 inline const G4ITReactionTable* GetReactionTable(); 103 104 105 protected : 106 static G4ThreadLocal G4double fCurrentGlobalTime ; 107 static G4ThreadLocal G4double fUserMinTimeStep ; 108 109 G4double fSampledMinTimeStep ; 110 G4TrackVectorHandle fReactants; 111 112 const G4ITReactionTable* fpReactionTable; 113 114 private: 115 G4int fVerbose ; 116 }; 117 118 inline void G4VITTimeStepComputer::SetReactionTable(const G4ITReactionTable* table) 119 { 120 fpReactionTable = table; 121 } 122 123 inline const G4ITReactionTable* G4VITTimeStepComputer::GetReactionTable() 124 { 125 return fpReactionTable ; 126 } 127 128 inline void G4VITTimeStepComputer::Prepare() 129 { 130 // fReactants = 0 ; 131 fReactants.reset() ; 132 } 133 134 inline G4double G4VITTimeStepComputer::GetSampledMinTimeStep() 135 { 136 return fSampledMinTimeStep ; 137 } 138 139 inline G4TrackVectorHandle G4VITTimeStepComputer::GetReactants() 140 { 141 return fReactants ; 142 } 143 #endif // G4VITTimeStepper_H 144