Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // Author: Mathieu Karamitros 27 // Author: Mathieu Karamitros 28 28 29 // The code is developed in the framework of t 29 // The code is developed in the framework of the ESA AO7146 30 // 30 // 31 // We would be very happy hearing from you, se 31 // We would be very happy hearing from you, send us your feedback! :) 32 // 32 // 33 // In order for Geant4-DNA to be maintained an 33 // In order for Geant4-DNA to be maintained and still open-source, 34 // article citations are crucial. 34 // article citations are crucial. 35 // If you use Geant4-DNA chemistry and you pub 35 // If you use Geant4-DNA chemistry and you publish papers about your software, 36 // in addition to the general paper on Geant4- 36 // in addition to the general paper on Geant4-DNA: 37 // 37 // 38 // Int. J. Model. Simul. Sci. Comput. 1 (2010) 38 // Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 39 // 39 // 40 // we would be very happy if you could please 40 // we would be very happy if you could please also cite the following 41 // reference papers on chemistry: 41 // reference papers on chemistry: 42 // 42 // 43 // J. Comput. Phys. 274 (2014) 841-882 43 // J. Comput. Phys. 274 (2014) 841-882 44 // Prog. Nucl. Sci. Tec. 2 (2011) 503-508 44 // Prog. Nucl. Sci. Tec. 2 (2011) 503-508 45 45 46 #pragma once 46 #pragma once 47 47 48 #include "G4ITReactionChange.hh" 48 #include "G4ITReactionChange.hh" 49 #include "G4ITType.hh" 49 #include "G4ITType.hh" 50 #include "G4ITModelHandler.hh" 50 #include "G4ITModelHandler.hh" 51 #include "G4ITStepStatus.hh" 51 #include "G4ITStepStatus.hh" 52 #include <vector> 52 #include <vector> 53 53 54 class G4VITTimeStepComputer; 54 class G4VITTimeStepComputer; 55 class G4VITReactionProcess; 55 class G4VITReactionProcess; 56 class G4ITModelHandler; 56 class G4ITModelHandler; 57 class G4ITReactionSet; 57 class G4ITReactionSet; 58 class G4UserTimeStepAction; 58 class G4UserTimeStepAction; 59 class G4ITTrackingManager; 59 class G4ITTrackingManager; 60 class G4ITTrackHolder; 60 class G4ITTrackHolder; 61 61 62 /** 62 /** 63 * The G4ITModelProcessor will call the two pr 63 * The G4ITModelProcessor will call the two processes defined in G4VITModel. 64 * This processes act at the beginning and end 64 * This processes act at the beginning and end of each step. 65 * The first one, the TimeStepper will calcula 65 * The first one, the TimeStepper will calculate a time step to propagate all 66 * the track and eventually it can return some 66 * the track and eventually it can return some tracks that can likely react 67 * at the end of the step. 67 * at the end of the step. 68 * The second one, the ReactionProcess will ma 68 * The second one, the ReactionProcess will make the tracks reacting. 69 * \deprecated This class will be removed 69 * \deprecated This class will be removed 70 */ 70 */ 71 class G4ITModelProcessor 71 class G4ITModelProcessor 72 { 72 { 73 public: 73 public: 74 G4ITModelProcessor(); 74 G4ITModelProcessor(); 75 G4ITModelProcessor(const G4ITModelProcesso 75 G4ITModelProcessor(const G4ITModelProcessor& other) = delete; 76 G4ITModelProcessor& operator=(const G4ITMo 76 G4ITModelProcessor& operator=(const G4ITModelProcessor& other) = delete; 77 virtual ~G4ITModelProcessor(); 77 virtual ~G4ITModelProcessor(); 78 78 79 void SetModelHandler(G4ITModelHandler*); 79 void SetModelHandler(G4ITModelHandler*); 80 void SetTrackingManager(G4ITTrackingManage 80 void SetTrackingManager(G4ITTrackingManager* trackingManager); 81 81 82 void Initialize(); 82 void Initialize(); 83 83 84 void RegisterModel(double time, G4VITStepM 84 void RegisterModel(double time, G4VITStepModel*); 85 85 86 /** Restore the original state. This metho 86 /** Restore the original state. This method should be called only by G4Scheduler */ 87 void CleanProcessor(); 87 void CleanProcessor(); 88 88 89 G4double CalculateMinTimeStep(G4double cur 89 G4double CalculateMinTimeStep(G4double currentGlobalTime, 90 G4double def 90 G4double definedMinTimeStep); 91 91 92 void ComputeTrackReaction(G4ITStepStatus f 92 void ComputeTrackReaction(G4ITStepStatus fITStepStatus, 93 G4double fGlobal 93 G4double fGlobalTime, 94 G4double current 94 G4double currentTimeStep, 95 G4double previou 95 G4double previousTimeStep, 96 G4bool reachedUs 96 G4bool reachedUserTimeLimit, 97 G4double fTimeTo 97 G4double fTimeTolerance, 98 G4UserTimeStepAc 98 G4UserTimeStepAction* fpUserTimeStepAction, 99 G4int fVerbose); 99 G4int fVerbose); 100 100 101 void InitializeStepper(G4double currentGlo 101 void InitializeStepper(G4double currentGlobalTime, 102 G4double userMinTim 102 G4double userMinTime); 103 103 104 bool GetComputeTimeStep() const; 104 bool GetComputeTimeStep() const; 105 105 106 public: 106 public: >> 107 void CalculateTimeStep(const G4Track*, G4double userMinTimeStep); >> 108 >> 109 void DoCalculateStep(); >> 110 >> 111 void FindReaction(G4ITReactionSet* pReactionSet, >> 112 double currentStepTime, >> 113 double previousStepTime, >> 114 bool reachedUserStepTimeLimit); >> 115 107 const G4Track* GetTrack() const; 116 const G4Track* GetTrack() const; 108 117 109 protected: 118 protected: 110 void SetTrack(const G4Track*); 119 void SetTrack(const G4Track*); >> 120 void ExtractTimeStepperData(); 111 121 112 G4double fTSTimeStep; 122 G4double fTSTimeStep; 113 G4ITReactionSet* fReactionSet; 123 G4ITReactionSet* fReactionSet; 114 G4ITTrackingManager* fpTrackingManager; 124 G4ITTrackingManager* fpTrackingManager; 115 G4ITTrackHolder* fpTrackContainer; 125 G4ITTrackHolder* fpTrackContainer; 116 126 117 G4bool fInitialized; 127 G4bool fInitialized; 118 G4ITModelHandler* fpModelHandler; 128 G4ITModelHandler* fpModelHandler; 119 129 120 const G4Track* fpTrack; 130 const G4Track* fpTrack; 121 G4double fUserMinTimeStep; 131 G4double fUserMinTimeStep; 122 132 123 std::vector<G4VITStepModel*> fActiveModels 133 std::vector<G4VITStepModel*> fActiveModels; 124 G4VITStepModel* fpActiveModelWithMinTimeSt 134 G4VITStepModel* fpActiveModelWithMinTimeStep; 125 135 126 std::vector<std::unique_ptr<G4ITReactionCh 136 std::vector<std::unique_ptr<G4ITReactionChange>> fReactionInfo; 127 137 128 bool fComputeTimeStep; 138 bool fComputeTimeStep; 129 bool fComputeReaction; 139 bool fComputeReaction; 130 }; 140 }; 131 141 132 142