|
||||
File indexing completed on 2025-01-18 09:58:33
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 // Author: Mathieu Karamitros 0028 0029 // The code is developed in the framework of the ESA AO7146 0030 // 0031 // We would be very happy hearing from you, send us your feedback! :) 0032 // 0033 // In order for Geant4-DNA to be maintained and still open-source, 0034 // article citations are crucial. 0035 // If you use Geant4-DNA chemistry and you publish papers about your software, 0036 // in addition to the general paper on Geant4-DNA: 0037 // 0038 // Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 0039 // 0040 // we would be very happy if you could please also cite the following 0041 // reference papers on chemistry: 0042 // 0043 // J. Comput. Phys. 274 (2014) 841-882 0044 // Prog. Nucl. Sci. Tec. 2 (2011) 503-508 0045 0046 #ifndef G4ITReactionChange_H 0047 #define G4ITReactionChange_H 0048 0049 #include "globals.hh" 0050 #include "G4ParticleChange.hh" 0051 #include <vector> 0052 0053 /** 0054 * Similar to G4ParticleChange, but deal with two tracks 0055 * rather than one. 0056 */ 0057 0058 class G4ITReactionChange 0059 { 0060 public: 0061 /** Default constructor */ 0062 G4ITReactionChange(); 0063 /** Default destructor */ 0064 virtual ~G4ITReactionChange(); 0065 0066 //_____________________________________________________ 0067 // To be used by reaction processes 0068 void Initialize(const G4Track&, 0069 const G4Track&, 0070 G4VParticleChange* particleChangeA = nullptr, 0071 G4VParticleChange* particleChangeB = nullptr); 0072 void AddSecondary(G4Track* aSecondary); 0073 inline void KillParents(G4bool); 0074 0075 // If both parents are not killed therefore 0076 // we can used the particle change 0077 // you will have to give the pointers 0078 // of your particleChange while initializing 0079 // but it might tell you that energy is not 0080 // conserved for instance 0081 G4VParticleChange* GetParticleChange(const G4Track*); 0082 0083 //_____________________________________________________ 0084 // Not to be used in reaction processes 0085 void UpdateStepInfo(G4Step*, G4Step*); 0086 G4Track* GetSecondary(G4int) const; 0087 std::vector<G4Track*>* GetfSecondary(); 0088 0089 G4int GetNumberOfSecondaries() const; 0090 G4bool WereParentsKilled() const; 0091 0092 const G4Track* GetTrackA(); 0093 const G4Track* GetTrackB(); 0094 0095 protected: 0096 /** Copy constructor 0097 * \param other Object to copy from 0098 */ 0099 G4ITReactionChange(const G4ITReactionChange& other); 0100 /** Assignment operator 0101 * \param other Object to assign from 0102 * \return A reference to this 0103 */ 0104 G4ITReactionChange& operator=(const G4ITReactionChange& other); 0105 // equal/unequal operator 0106 G4bool operator==(const G4ITReactionChange &right) const; 0107 G4bool operator!=(const G4ITReactionChange &right) const; 0108 // "equal" means that the objects have the same pointer. 0109 protected: 0110 std::map<const G4Track*, G4VParticleChange*> fParticleChange; 0111 std::vector<G4Track*>* fSecondaries{nullptr}; 0112 G4int fNumberOfSecondaries{0}; 0113 G4bool fKillParents{false}; 0114 G4bool fParticleChangeIsSet{false}; 0115 }; 0116 0117 inline G4Track* G4ITReactionChange::GetSecondary(G4int anIndex) const 0118 { 0119 if (fSecondaries != nullptr) return (*fSecondaries)[anIndex]; 0120 return nullptr; 0121 } 0122 0123 inline G4int G4ITReactionChange::GetNumberOfSecondaries() const 0124 { 0125 return fNumberOfSecondaries; 0126 } 0127 0128 inline void G4ITReactionChange::KillParents(G4bool kill) 0129 { 0130 fKillParents = kill; 0131 } 0132 0133 inline G4bool G4ITReactionChange::WereParentsKilled() const 0134 { 0135 return fKillParents; 0136 } 0137 0138 inline std::vector<G4Track*>* G4ITReactionChange::GetfSecondary() 0139 { 0140 return fSecondaries; 0141 } 0142 0143 #endif // G4ITReactionChange_H
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |