Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // >> 27 // $Id: G4CollisionNN.cc,v 1.4 2010-03-12 15:45:18 gunter Exp $ // 27 28 28 29 29 #include "globals.hh" 30 #include "globals.hh" 30 #include "G4CollisionNN.hh" 31 #include "G4CollisionNN.hh" 31 #include "G4CollisionComposite.hh" 32 #include "G4CollisionComposite.hh" 32 #include "G4VCollision.hh" 33 #include "G4VCollision.hh" 33 #include "G4CollisionVector.hh" 34 #include "G4CollisionVector.hh" 34 #include "G4KineticTrack.hh" 35 #include "G4KineticTrack.hh" 35 #include "G4VCrossSectionSource.hh" 36 #include "G4VCrossSectionSource.hh" 36 #include "G4XNNTotal.hh" 37 #include "G4XNNTotal.hh" 37 #include "G4Proton.hh" 38 #include "G4Proton.hh" 38 #include "G4Neutron.hh" 39 #include "G4Neutron.hh" 39 #include "G4CollisionNNElastic.hh" 40 #include "G4CollisionNNElastic.hh" 40 #include "G4CollisionnpElastic.hh" 41 #include "G4CollisionnpElastic.hh" 41 #include "G4CollisionNNToNDelta.hh" 42 #include "G4CollisionNNToNDelta.hh" 42 #include "G4CollisionNNToDeltaDelta.hh" 43 #include "G4CollisionNNToDeltaDelta.hh" 43 #include "G4CollisionNNToNDeltastar.hh" 44 #include "G4CollisionNNToNDeltastar.hh" 44 #include "G4CollisionNNToDeltaDeltastar.hh" 45 #include "G4CollisionNNToDeltaDeltastar.hh" 45 #include "G4CollisionNNToNNstar.hh" 46 #include "G4CollisionNNToNNstar.hh" 46 #include "G4CollisionNNToDeltaNstar.hh" 47 #include "G4CollisionNNToDeltaNstar.hh" 47 #include "G4Pair.hh" 48 #include "G4Pair.hh" 48 49 49 typedef GROUP8(G4CollisionnpElastic, G4Collisi 50 typedef GROUP8(G4CollisionnpElastic, G4CollisionNNElastic, 50 G4CollisionNNToNDelta, G4Collisi 51 G4CollisionNNToNDelta, G4CollisionNNToDeltaDelta, 51 G4CollisionNNToNDeltastar, G4Collision 52 G4CollisionNNToNDeltastar, G4CollisionNNToDeltaDeltastar, 52 G4CollisionNNToNNstar, G4CollisionNNTo 53 G4CollisionNNToNNstar, G4CollisionNNToDeltaNstar) theChannels; 53 54 54 G4CollisionNN::G4CollisionNN() 55 G4CollisionNN::G4CollisionNN() 55 { 56 { 56 components=0; << 57 crossSectionSource = new G4XNNTotal(); 57 crossSectionSource = new G4XNNTotal(); 58 G4CollisionComposite::Register aR; 58 G4CollisionComposite::Register aR; 59 G4ForEach<theChannels>::Apply(&aR, this); 59 G4ForEach<theChannels>::Apply(&aR, this); 60 } 60 } 61 61 62 62 63 G4CollisionNN::~G4CollisionNN() 63 G4CollisionNN::~G4CollisionNN() 64 { 64 { 65 if (components) { << 66 delete components; << 67 components=0; << 68 } << 69 delete crossSectionSource; 65 delete crossSectionSource; 70 crossSectionSource = 0; 66 crossSectionSource = 0; 71 } 67 } 72 68 73 69 74 const std::vector<G4String>& G4CollisionNN::Ge 70 const std::vector<G4String>& G4CollisionNN::GetListOfColliders(G4int ) const 75 { 71 { 76 throw G4HadronicException(__FILE__, __LINE 72 throw G4HadronicException(__FILE__, __LINE__, "G4CollisionNN::GetListOfColliders - Argument outside valid range"); 77 return colliders1; 73 return colliders1; 78 } 74 } 79 75 80 76 81 G4double G4CollisionNN::CrossSection(const G4K 77 G4double G4CollisionNN::CrossSection(const G4KineticTrack& aTrk1, 82 const G4KineticTrack& aTrk2) const 78 const G4KineticTrack& aTrk2) const 83 { 79 { 84 G4double sigma = 0.; 80 G4double sigma = 0.; 85 81 86 // nucleon-nucleon cross-sections made for o 82 // nucleon-nucleon cross-sections made for on-shell particles. 87 // here we take the kinetic energy as the qu 83 // here we take the kinetic energy as the quantity relevant 88 // for calculating the scattering cross-sect 84 // for calculating the scattering cross-sections for off-shell hadrons 89 85 90 const G4VCrossSectionSource* xSource = GetCr 86 const G4VCrossSectionSource* xSource = GetCrossSectionSource(); 91 G4LorentzVector p1 = aTrk1.Get4Momentum(); 87 G4LorentzVector p1 = aTrk1.Get4Momentum(); 92 G4LorentzVector p2 = aTrk2.Get4Momentum(); 88 G4LorentzVector p2 = aTrk2.Get4Momentum(); 93 G4double t1 = p1.e()-aTrk1.GetActualMass(); 89 G4double t1 = p1.e()-aTrk1.GetActualMass(); 94 G4double t2 = p2.e()-aTrk2.GetActualMass(); 90 G4double t2 = p2.e()-aTrk2.GetActualMass(); 95 p1.setE(t1+aTrk1.GetDefinition()->GetPDGMass 91 p1.setE(t1+aTrk1.GetDefinition()->GetPDGMass()); 96 p2.setE(t2+aTrk2.GetDefinition()->GetPDGMass 92 p2.setE(t2+aTrk2.GetDefinition()->GetPDGMass()); 97 G4KineticTrack trk1(aTrk1); 93 G4KineticTrack trk1(aTrk1); 98 trk1.Set4Momentum(p1); 94 trk1.Set4Momentum(p1); 99 G4KineticTrack trk2(aTrk2); 95 G4KineticTrack trk2(aTrk2); 100 trk2.Set4Momentum(p2); 96 trk2.Set4Momentum(p2); 101 if( (p1+p2).mag()<aTrk1.GetDefinition()->Get 97 if( (p1+p2).mag()<aTrk1.GetDefinition()->GetPDGMass()+aTrk2.GetDefinition()->GetPDGMass()) 102 { 98 { 103 return 0.; 99 return 0.; 104 } 100 } 105 101 106 if (xSource != 0) 102 if (xSource != 0) 107 { 103 { 108 // There is a cross section for this Col 104 // There is a cross section for this Collision 109 sigma = xSource->CrossSection(trk1,trk2) 105 sigma = xSource->CrossSection(trk1,trk2); 110 } 106 } 111 return sigma; 107 return sigma; 112 } 108 } 113 109 114 110