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