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 // 28 // Hadronic Process: Nuclear De-excitations 29 // by V. Lara 30 31 #ifndef G4StatMFChannel_h 32 #define G4StatMFChannel_h 1 33 34 #include <deque> 35 #include <vector> 36 37 #include "G4StatMFParameters.hh" 38 #include "G4StatMFFragment.hh" 39 40 41 class G4StatMFChannel { 42 43 public: 44 // Default Constructor 45 G4StatMFChannel(); 46 47 // Destructor 48 ~G4StatMFChannel(); 49 50 private: 51 52 // Copy constructor 53 G4StatMFChannel(const G4StatMFChannel & right); 54 55 // operators 56 G4StatMFChannel & operator=(const G4StatMFChannel & right); 57 58 G4bool operator==(const G4StatMFChannel & right) const; 59 G4bool operator!=(const G4StatMFChannel & right) const; 60 61 public: 62 63 void CreateFragment(G4int A, G4int Z); 64 65 inline size_t GetMultiplicity(void) { return _theFragments.size();} 66 67 // Return false if there is some unphysical fragment 68 G4bool CheckFragments(void); 69 70 G4double GetFragmentsCoulombEnergy(void); 71 72 G4double GetFragmentsEnergy(G4double T) const; 73 74 G4FragmentVector * GetFragments(G4int anA, G4int anZ, G4double T); 75 76 private: 77 78 // This method calculates asymptotic fragments momenta. 79 void CoulombImpulse(G4int anA, G4int anZ, G4double T); 80 81 void PlaceFragments(G4int anA); 82 83 void SolveEqOfMotion(G4int anA, G4int anZ, G4double T); 84 85 // Calculates fragments momentum components at the breakup instant. 86 // Fragment kinetic energies will be calculated according to the 87 // Boltzamann distribution at given temperature. 88 void FragmentsMomenta(G4int NF, G4int idx, G4double T); 89 90 // Rotates a 3-vector P to close momentum triangle Pa + V + P = 0 91 G4ThreeVector RotateMomentum(G4ThreeVector Pa, G4ThreeVector V, 92 G4ThreeVector P); 93 94 private: 95 96 std::deque<G4StatMFFragment*> _theFragments; 97 std::vector<G4ThreeVector> Pos; 98 std::vector<G4ThreeVector> Vel; 99 std::vector<G4ThreeVector> Accel; 100 101 G4int _NumOfNeutralFragments; 102 103 G4int _NumOfChargedFragments; 104 105 struct DeleteFragment 106 { 107 template<typename T> 108 void operator()(const T* ptr) const 109 { 110 delete ptr; 111 } 112 }; 113 114 }; 115 116 #endif 117 118 119 120 121 122 123 124