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 const G4Track* GetTrack() const; 107 const G4Track* GetTrack() const; 108 108 109 protected: 109 protected: 110 void SetTrack(const G4Track*); 110 void SetTrack(const G4Track*); 111 111 112 G4double fTSTimeStep; 112 G4double fTSTimeStep; 113 G4ITReactionSet* fReactionSet; 113 G4ITReactionSet* fReactionSet; 114 G4ITTrackingManager* fpTrackingManager; 114 G4ITTrackingManager* fpTrackingManager; 115 G4ITTrackHolder* fpTrackContainer; 115 G4ITTrackHolder* fpTrackContainer; 116 116 117 G4bool fInitialized; 117 G4bool fInitialized; 118 G4ITModelHandler* fpModelHandler; 118 G4ITModelHandler* fpModelHandler; 119 119 120 const G4Track* fpTrack; 120 const G4Track* fpTrack; 121 G4double fUserMinTimeStep; 121 G4double fUserMinTimeStep; 122 122 123 std::vector<G4VITStepModel*> fActiveModels 123 std::vector<G4VITStepModel*> fActiveModels; 124 G4VITStepModel* fpActiveModelWithMinTimeSt 124 G4VITStepModel* fpActiveModelWithMinTimeStep; 125 125 126 std::vector<std::unique_ptr<G4ITReactionCh 126 std::vector<std::unique_ptr<G4ITReactionChange>> fReactionInfo; 127 127 128 bool fComputeTimeStep; 128 bool fComputeTimeStep; 129 bool fComputeReaction; 129 bool fComputeReaction; 130 }; 130 }; 131 131 132 132