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