Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 ////////////////////////////////////////////// 27 // 28 // File: G4NeutronDecay.cc 29 // Author: L.G. Sarmiento (Lund) 30 // Date: 10 October 2015 31 // 32 ////////////////////////////////////////////// 33 34 #include "G4NeutronDecay.hh" 35 #include "G4IonTable.hh" 36 #include "Randomize.hh" 37 #include "G4ThreeVector.hh" 38 #include "G4DynamicParticle.hh" 39 #include "G4DecayProducts.hh" 40 #include "G4PhysicalConstants.hh" 41 #include "G4SystemOfUnits.hh" 42 #include <iostream> 43 #include <iomanip> 44 45 G4NeutronDecay::G4NeutronDecay(const G4Particl 46 const G4double& br 47 const G4double& ex 48 const G4Ions::G4Fl 49 : G4NuclearDecay("neutron decay", Neutron, ex 50 { 51 SetParent(theParentNucleus); // Store name 52 SetBR(branch); 53 54 SetNumberOfDaughters(2); 55 G4IonTable* theIonTable = 56 (G4IonTable*)(G4ParticleTable::GetParticle 57 G4int daughterZ = theParentNucleus->GetAtomi 58 G4int daughterA = theParentNucleus->GetAtomi 59 SetDaughter(0, theIonTable->GetIon(daughterZ 60 SetDaughter(1, "neutron"); 61 } 62 63 64 G4NeutronDecay::~G4NeutronDecay() 65 {} 66 67 68 G4DecayProducts* G4NeutronDecay::DecayIt(G4dou 69 { 70 // Fill G4MT_parent with theParentNucleus (s 71 CheckAndFillParent(); 72 73 // Fill G4MT_daughters with neutron and resi 74 CheckAndFillDaughters(); 75 76 G4double neutronMass = G4MT_daughters[1]->Ge 77 // Excitation energy included in PDG mass 78 G4double nucleusMass = G4MT_daughters[0]->Ge 79 80 // Q value was calculated from atomic masses 81 // Use it to get correct neutron energy. 82 G4double cmMomentum = std::sqrt(transitionQ* 83 (transitionQ + 84 (transitionQ + 85 (transitionQ + 86 87 // Set up final state 88 // parentParticle is set at rest here becaus 89 // is done later 90 G4DynamicParticle parentParticle(G4MT_parent 91 G4DecayProducts* products = new G4DecayProdu 92 93 G4double costheta = 2.*G4UniformRand()-1.0; 94 G4double sintheta = std::sqrt(1.0 - costheta 95 G4double phi = twopi*G4UniformRand()*rad; 96 G4ThreeVector direction(sintheta*std::cos(ph 97 costheta); 98 99 G4double KE = std::sqrt(cmMomentum*cmMomentu 100 - neutronMass; 101 G4DynamicParticle* daughterparticle = 102 new G4DynamicParticle(G4MT_daughters[1], d 103 products->PushProducts(daughterparticle); 104 105 KE = std::sqrt(cmMomentum*cmMomentum + nucle 106 daughterparticle = 107 new G4DynamicParticle(G4MT_daughters[0], - 108 products->PushProducts(daughterparticle); 109 110 // Energy conservation check 111 // For neutron decays, do final energy check 112 // which is well-measured using atomic mass 113 // should not be used since they are not usu 114 // always decay atoms and not fully stripped 115 /* 116 G4int nProd = products->entries(); 117 G4DynamicParticle* temp = 0; 118 G4double Esum = 0.0; 119 for (G4int i = 0; i < nProd; i++) { 120 temp = products->operator[](i); 121 Esum += temp->GetKineticEnergy(); 122 } 123 G4double eCons = (transitionQ - Esum)/keV; 124 if (eCons > 1.e-07) G4cout << " Neutron deca 125 */ 126 return products; 127 } 128 129 130 void G4NeutronDecay::DumpNuclearInfo() 131 { 132 G4cout << " G4NeutronDecay for parent nucleu 133 G4cout << " decays to " << GetDaughterName(0 134 << " with branching ratio " << GetBR( 135 << transitionQ << G4endl; 136 } 137 138