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 #ifndef G4HadFinalState_hh 27 #define G4HadFinalState_hh 28 29 // Modifications: 30 // 20110810 M. Kelsey -- Store secondaries by value, not by pointer. 31 // Improve constness of argument passing. Drop stale flag. 32 // 20110907 M. Kelsey -- Improve constness of functions, discard add pointer, 33 // add function to concatenate vectors 34 35 #include "globals.hh" 36 #include "G4DynamicParticle.hh" 37 #include "G4HadSecondary.hh" 38 #include "G4LorentzRotation.hh" 39 #include "G4ThreeVector.hh" 40 #include <vector> 41 42 enum G4HadFinalStateStatus{isAlive, stopAndKill, suspend}; 43 44 45 class G4HadFinalState 46 { 47 public: 48 G4HadFinalState(); 49 50 inline 51 std::size_t GetNumberOfSecondaries() const { return theSecs.size(); } 52 void SetEnergyChange(G4double anEnergy); 53 inline 54 G4double GetEnergyChange() const { return theEnergy; } 55 inline 56 void SetMomentumChange(const G4ThreeVector& aV){ theDirection=aV; } 57 void SetMomentumChange(G4double x, G4double y, G4double z); 58 inline 59 const G4ThreeVector& GetMomentumChange() const { return theDirection; } 60 inline 61 void AddSecondary(G4DynamicParticle* aP, G4int mod=-1) { 62 theSecs.push_back(G4HadSecondary(aP, theW, mod)); 63 }; 64 inline 65 void AddSecondary(const G4HadSecondary& aHS) { theSecs.push_back(aHS); } 66 inline 67 void SetStatusChange(G4HadFinalStateStatus aS) { theStat=aS; } 68 inline 69 G4HadFinalStateStatus GetStatusChange() const { return theStat; } 70 void Clear(); 71 inline 72 const G4LorentzRotation& GetTrafoToLab() const { return theT; } 73 inline 74 void SetTrafoToLab(const G4LorentzRotation & aT) { theT = aT; } 75 inline 76 void SetWeightChange(G4double aW) { theW=aW; } 77 inline 78 G4double GetWeightChange() const { return theW; } 79 G4HadSecondary* GetSecondary(size_t i); 80 const G4HadSecondary* GetSecondary(size_t i) const; 81 inline 82 void SetLocalEnergyDeposit(G4double aE) { theEDep=aE; } 83 inline 84 G4double GetLocalEnergyDeposit() const { return theEDep;} 85 // void SecondariesAreStale(); // Deprecated; not needed for values 86 inline 87 void ClearSecondaries() { theSecs.clear(); } 88 89 // Concatenate lists efficiently 90 void AddSecondaries(const std::vector<G4HadSecondary>& addSecs); 91 inline 92 void AddSecondaries(const G4HadFinalState& addHFS) { 93 AddSecondaries(addHFS.theSecs); 94 } 95 inline 96 void AddSecondaries(const G4HadFinalState* addHFS) { 97 if (addHFS) AddSecondaries(addHFS->theSecs); 98 } 99 100 private: 101 G4ThreeVector theDirection; 102 G4double theEnergy; 103 std::vector<G4HadSecondary> theSecs; 104 G4HadFinalStateStatus theStat; 105 G4LorentzRotation theT; 106 G4double theW; 107 G4double theEDep; 108 }; 109 110 #endif 111