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 29 #include "globals.hh" 30 #include "G4CollisionNN.hh" 31 #include "G4CollisionComposite.hh" 32 #include "G4VCollision.hh" 33 #include "G4CollisionVector.hh" 34 #include "G4KineticTrack.hh" 35 #include "G4VCrossSectionSource.hh" 36 #include "G4XNNTotal.hh" 37 #include "G4Proton.hh" 38 #include "G4Neutron.hh" 39 #include "G4CollisionNNElastic.hh" 40 #include "G4CollisionnpElastic.hh" 41 #include "G4CollisionNNToNDelta.hh" 42 #include "G4CollisionNNToDeltaDelta.hh" 43 #include "G4CollisionNNToNDeltastar.hh" 44 #include "G4CollisionNNToDeltaDeltastar.hh" 45 #include "G4CollisionNNToNNstar.hh" 46 #include "G4CollisionNNToDeltaNstar.hh" 47 #include "G4Pair.hh" 48 49 typedef GROUP8(G4CollisionnpElastic, G4CollisionNNElastic, 50 G4CollisionNNToNDelta, G4CollisionNNToDeltaDelta, 51 G4CollisionNNToNDeltastar, G4CollisionNNToDeltaDeltastar, 52 G4CollisionNNToNNstar, G4CollisionNNToDeltaNstar) theChannels; 53 54 G4CollisionNN::G4CollisionNN() 55 { 56 components=0; 57 crossSectionSource = new G4XNNTotal(); 58 G4CollisionComposite::Register aR; 59 G4ForEach<theChannels>::Apply(&aR, this); 60 } 61 62 63 G4CollisionNN::~G4CollisionNN() 64 { 65 if (components) { 66 delete components; 67 components=0; 68 } 69 delete crossSectionSource; 70 crossSectionSource = 0; 71 } 72 73 74 const std::vector<G4String>& G4CollisionNN::GetListOfColliders(G4int ) const 75 { 76 throw G4HadronicException(__FILE__, __LINE__, "G4CollisionNN::GetListOfColliders - Argument outside valid range"); 77 return colliders1; 78 } 79 80 81 G4double G4CollisionNN::CrossSection(const G4KineticTrack& aTrk1, 82 const G4KineticTrack& aTrk2) const 83 { 84 G4double sigma = 0.; 85 86 // nucleon-nucleon cross-sections made for on-shell particles. 87 // here we take the kinetic energy as the quantity relevant 88 // for calculating the scattering cross-sections for off-shell hadrons 89 90 const G4VCrossSectionSource* xSource = GetCrossSectionSource(); 91 G4LorentzVector p1 = aTrk1.Get4Momentum(); 92 G4LorentzVector p2 = aTrk2.Get4Momentum(); 93 G4double t1 = p1.e()-aTrk1.GetActualMass(); 94 G4double t2 = p2.e()-aTrk2.GetActualMass(); 95 p1.setE(t1+aTrk1.GetDefinition()->GetPDGMass()); 96 p2.setE(t2+aTrk2.GetDefinition()->GetPDGMass()); 97 G4KineticTrack trk1(aTrk1); 98 trk1.Set4Momentum(p1); 99 G4KineticTrack trk2(aTrk2); 100 trk2.Set4Momentum(p2); 101 if( (p1+p2).mag()<aTrk1.GetDefinition()->GetPDGMass()+aTrk2.GetDefinition()->GetPDGMass()) 102 { 103 return 0.; 104 } 105 106 if (xSource != 0) 107 { 108 // There is a cross section for this Collision 109 sigma = xSource->CrossSection(trk1,trk2); 110 } 111 return sigma; 112 } 113 114