Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/management/src/G4HadronicInteraction.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 // Hadronic Interaction  base class
 28 // original by H.P. Wellisch
 29 // modified by J.L. Chuma, TRIUMF, 21-Mar-1997
 30 // Last modified: 04-Apr-1997
 31 // reimplemented 1.11.2003 JPW.
 32 // 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body
 33 
 34 #include <iostream>
 35 
 36 #include "G4HadronicInteraction.hh"
 37 #include "G4SystemOfUnits.hh"
 38 #include "G4HadronicInteractionRegistry.hh"
 39 #include "G4HadronicParameters.hh"
 40 
 41 G4HadronicInteraction::G4HadronicInteraction(const G4String& modelName) :
 42   verboseLevel(0), theMinEnergy(0.0), 
 43   isBlocked(false), recoilEnergyThreshold(0.0), theModelName(modelName),
 44   epCheckLevels(DBL_MAX, DBL_MAX)
 45 { 
 46   theMaxEnergy = G4HadronicParameters::Instance()->GetMaxEnergy();
 47   registry = G4HadronicInteractionRegistry::Instance();
 48   registry->RegisterMe(this);
 49 }
 50 
 51 G4HadronicInteraction::~G4HadronicInteraction()
 52 {
 53   registry->RemoveMe(this);
 54 }
 55 
 56 void G4HadronicInteraction::BuildPhysicsTable(const G4ParticleDefinition&)
 57 {}
 58 
 59 void G4HadronicInteraction::InitialiseModel()
 60 {}
 61 
 62 G4HadFinalState* 
 63 G4HadronicInteraction::ApplyYourself(const G4HadProjectile&, G4Nucleus&)
 64 {
 65   return nullptr;
 66 }
 67 
 68 G4double 
 69 G4HadronicInteraction::SampleInvariantT(const G4ParticleDefinition*, 
 70           G4double, G4int, G4int)
 71 {
 72   return 0.0;
 73 }
 74 
 75 G4bool G4HadronicInteraction::IsApplicable(const G4HadProjectile&, 
 76              G4Nucleus&)
 77 { 
 78   return true;
 79 }
 80 
 81 G4double G4HadronicInteraction::GetMinEnergy(
 82    const G4Material *aMaterial, const G4Element *anElement ) const
 83 {
 84   if(!IsBlocked()) { return theMinEnergy; } 
 85   if( IsBlocked(aMaterial) || IsBlocked(anElement) ) { return DBL_MAX; }
 86   if(!theMinEnergyListElements.empty()) {
 87     for(auto const& elmlist : theMinEnergyListElements) {
 88   if( anElement == elmlist.second )
 89     { return elmlist.first; }
 90     }
 91   }
 92   if(!theMinEnergyList.empty()) {
 93     for(auto const & matlist : theMinEnergyList) {
 94       if( aMaterial == matlist.second )
 95   { return matlist.first; }
 96     }
 97   }
 98   return theMinEnergy;
 99 }
100  
101 void G4HadronicInteraction::SetMinEnergy(G4double anEnergy,
102            const G4Element *anElement )
103 {
104   Block(); 
105   if(!theMinEnergyListElements.empty()) {
106     for(auto & elmlist : theMinEnergyListElements) {
107       if( anElement == elmlist.second ) {
108   elmlist.first = anEnergy;
109   return;
110       }
111     }
112   }
113   theMinEnergyListElements.push_back(std::pair<G4double, const G4Element *>(anEnergy, anElement));
114 }
115  
116 void G4HadronicInteraction::SetMinEnergy(G4double anEnergy,
117            const G4Material *aMaterial )
118 {
119   Block(); 
120   if(!theMinEnergyList.empty()) {
121     for(auto & matlist : theMinEnergyList) {
122       if( aMaterial == matlist.second ) {
123   matlist.first = anEnergy;
124   return;
125       }
126     }
127   }
128   theMinEnergyList.push_back(std::pair<G4double, const G4Material *>(anEnergy, aMaterial));
129 }
130  
131 G4double G4HadronicInteraction::GetMaxEnergy(const G4Material *aMaterial, 
132                const G4Element *anElement ) const
133 {
134   if(!IsBlocked()) { return theMaxEnergy; } 
135   if( IsBlocked(aMaterial) || IsBlocked(anElement) ) { return 0.0; }
136   if(!theMaxEnergyListElements.empty()) {
137     for(auto const& elmlist : theMaxEnergyListElements) {
138       if( anElement == elmlist.second )
139   { return elmlist.first; }
140     }
141   }
142   if(!theMaxEnergyList.empty()) {
143     for(auto const& matlist : theMaxEnergyList) {
144       if( aMaterial == matlist.second )
145   { return matlist.first; }
146     }
147   }
148   return theMaxEnergy;
149 }
150  
151 void G4HadronicInteraction::SetMaxEnergy(G4double anEnergy,
152            const G4Element *anElement ) 
153 {
154   Block(); 
155   if(!theMaxEnergyListElements.empty()) {
156     for(auto & elmlist : theMaxEnergyListElements) {
157       if( anElement == elmlist.second ) {
158         elmlist.first = anEnergy;
159         return;
160       }
161     }
162   }
163   theMaxEnergyListElements.push_back(std::pair<G4double, const G4Element *>(anEnergy, anElement));
164 }
165 
166 void G4HadronicInteraction::SetMaxEnergy(G4double anEnergy, const G4Material *aMaterial )
167 {
168   Block(); 
169   if(!theMaxEnergyList.empty()) {
170     for(auto & matlist: theMaxEnergyList) {
171       if( aMaterial == matlist.second ) {
172   matlist.first = anEnergy;
173   return;
174       }
175     }
176   }
177   theMaxEnergyList.push_back(std::pair<G4double, const G4Material *>(anEnergy, aMaterial));
178 }
179 
180 void G4HadronicInteraction::DeActivateFor( const G4Material *aMaterial )
181 {
182   Block(); 
183   theBlockedList.push_back(aMaterial);
184 }
185 
186 void G4HadronicInteraction::DeActivateFor( const G4Element *anElement )
187 {
188   Block(); 
189   theBlockedListElements.push_back(anElement);
190 }
191 
192 
193 G4bool G4HadronicInteraction::IsBlocked(const G4Material* aMaterial) const
194 {
195   for (auto const& mat : theBlockedList) {
196     if (aMaterial == mat) return true;
197   }
198   return false;
199 }
200 
201 
202 G4bool G4HadronicInteraction::IsBlocked(const G4Element* anElement) const
203 {
204   for (auto const& elm : theBlockedListElements) {
205     if (anElement == elm) return true;
206   }
207   return false;
208 }
209 
210 const std::pair<G4double, G4double> G4HadronicInteraction::GetFatalEnergyCheckLevels() const
211 {
212   // default level of Check
213   return std::pair<G4double, G4double>(2.*perCent, 1. * GeV);
214 }
215 
216 std::pair<G4double, G4double>
217 G4HadronicInteraction::GetEnergyMomentumCheckLevels() const
218 {
219   return epCheckLevels;
220 }
221 
222 void G4HadronicInteraction::ModelDescription(std::ostream& outFile) const
223 {
224   outFile << "The description for this model has not been written yet.\n";
225 }
226 
227