Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4EmExtraPhysics.cc
이 파일의 문서화 페이지로 가기
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 // $Id: G4EmExtraPhysics.cc 66704 2013-01-10 18:20:17Z gunter $
27 //
28 //---------------------------------------------------------------------------
29 //
30 // ClassName: G4EmExtraPhysics
31 //
32 // Author: 2002 J.P. Wellisch
33 //
34 // Modified:
35 //
36 // 10.11.2005 V.Ivanchenko edit to provide a standard
37 // 19.06.2006 V.Ivanchenko add mu-nuclear process
38 // 16.10.2012 A.Ribon: renamed G4EmExtraBertiniPhysics as G4EmExtraPhysics
39 // 10.04.2014 A.Dotti: Add MT functionality for messenger
40 // 24.04.2014 A.Ribon: switched on muon-nuclear by default
41 // 29.01.2018 V.Grichine, adding neutrinos
42 //
43 //
45 
46 #include "G4EmExtraPhysics.hh"
47 
48 #include "G4SystemOfUnits.hh"
49 
50 #include "G4ParticleDefinition.hh"
51 #include "G4ParticleTable.hh"
52 #include "G4Gamma.hh"
53 #include "G4Electron.hh"
54 #include "G4Positron.hh"
55 #include "G4MuonPlus.hh"
56 #include "G4MuonMinus.hh"
57 #include "G4AntiNeutrinoE.hh"
58 #include "G4NeutrinoE.hh"
59 #include "G4AntiNeutrinoMu.hh"
60 #include "G4NeutrinoMu.hh"
61 #include "G4AntiNeutrinoTau.hh"
62 #include "G4NeutrinoTau.hh"
63 
67 #include "G4MuonNuclearProcess.hh"
68 #include "G4MuonVDNuclearModel.hh"
69 
71 #include "G4AnnihiToMuPair.hh"
72 #include "G4eeToHadrons.hh"
73 
78 
79 #include "G4PhysicsListHelper.hh"
80 #include "G4BuilderType.hh"
81 #include "G4AutoDelete.hh"
82 
83 // factory
85 //
87 
98 
105 
107 
113 
116 
117 
119 
121  G4VPhysicsConstructor("G4GammaLeptoNuclearPhys"),
122  verbose(ver)
123 {
124  theMessenger = new G4EmMessenger(this);
126  if(verbose > 1) G4cout << "### G4EmExtraPhysics" << G4endl;
127 }
128 
130  : G4EmExtraPhysics(1)
131 {}
132 
134 {
135  delete theMessenger;
136  theMessenger = nullptr;
137 }
138 
140 {
141  synActivated = val;
142 }
143 
145 {
146  synActivatedForAll = val;
147  if(synActivatedForAll) { synActivated = true; }
148 }
149 
151 {
152  gnActivated = val;
153 }
154 
156 {
157  gLENDActivated = val;
158 }
159 
161 {
162  eActivated = val;
163 }
164 
166 {
167  munActivated = val;
168 }
169 
171 {
172  gmumuActivated = val;
173 }
174 
176 {
177  pmumuActivated = val;
178 }
179 
181 {
182  phadActivated = val;
183 }
184 
186 {
187  if(val > 0.0) gmumuFactor = val;
188 }
189 
191 {
192  if(val > 0.0) pmumuFactor = val;
193 }
194 
196 {
197  if(val > 0.0) phadFactor = val;
198 }
199 
201 
203 {
204  fNuActivated = val;
205 }
206 
208 {
209  if(bf > 0.0) fNuEleCcBias = bf;
210 }
211 
213 {
214  if(bf > 0.0) fNuEleNcBias = bf;
215 }
216 
218 {
219  if(bf > 0.0) fNuNucleusBias = bf;
220 }
221 
223 {
224  fNuDetectorName = dn;
225 }
226 
228 
230 {
231  G4Gamma::Gamma();
236 
243 }
244 
246 {
252 
259 
261  if(gnActivated) {
262  if ( gLENDActivated != true ) {
264  } else {
266  }
267  theGNPhysics->Build();
268  }
269  if(munActivated) {
270  G4MuonNuclearProcess* muNucProcess = new G4MuonNuclearProcess();
271  G4MuonVDNuclearModel* muNucModel = new G4MuonVDNuclearModel();
272  muNucProcess->RegisterMe(muNucModel);
273  ph->RegisterProcess( muNucProcess, muonplus);
274  ph->RegisterProcess( muNucProcess, muonminus);
275  }
276  if(gmumuActivated) {
279  ph->RegisterProcess(theGammaToMuMu, gamma);
280  }
281  if(pmumuActivated) {
284  ph->RegisterProcess(thePosiToMuMu, positron);
285  }
286  if(phadActivated) {
289  ph->RegisterProcess(thePosiToHadrons, positron);
290  }
291  if(synActivated) {
293  ph->RegisterProcess( theSynchRad, electron);
294  ph->RegisterProcess( theSynchRad, positron);
295  if(synActivatedForAll) {
296  auto myParticleIterator=GetParticleIterator();
297  myParticleIterator->reset();
298  G4ParticleDefinition* particle = nullptr;
299 
300  while( (*myParticleIterator)() ) {
301  particle = myParticleIterator->value();
302  if( particle->GetPDGStable() && particle->GetPDGCharge() != 0.0) {
303  if(verbose > 1) {
304  G4cout << "### G4SynchrotronRadiation for "
305  << particle->GetParticleName() << G4endl;
306  }
307  ph->RegisterProcess( theSynchRad, particle);
308  }
309  }
310  }
311  }
312  if( fNuActivated )
313  {
316 
319 
321 
324  theNuEleProcess->RegisterMe(ccModel);
325  theNuEleProcess->RegisterMe(ncModel);
326 
327  ph->RegisterProcess(theNuEleProcess, anuelectron);
328  ph->RegisterProcess(theNuEleProcess, nuelectron);
329  ph->RegisterProcess(theNuEleProcess, anumuon);
330  ph->RegisterProcess(theNuEleProcess, numuon);
331  ph->RegisterProcess(theNuEleProcess, anutau);
332  ph->RegisterProcess(theNuEleProcess, nutau);
333  }
334 }
335 
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
static G4double gmumuFactor
void ElectroNuclear(G4bool val)
void SetNuDetectorName(const G4String &dn)
void GammaToMuMu(G4bool val)
void PositronToMuMuFactor(G4double val)
static G4double fNuNucleusBias
void SetNuEleNcBias(G4double bf)
void RegisterMe(G4HadronicInteraction *a)
#define G4endl
Definition: G4ios.hh:61
static G4ThreadLocal G4eeToHadrons * thePosiToHadrons
static G4double fNuEleNcBias
const G4String & GetParticleName() const
static G4bool eActivated
static G4bool pmumuActivated
G4double GetPDGCharge() const
void NeutrinoActivated(G4bool val)
static G4MuonMinus * MuonMinus()
Definition: G4MuonMinus.cc:100
#define G4ThreadLocal
Definition: tls.hh:69
void PositronToHadronsFactor(G4double val)
void SetBiasingFactors(G4double bfCc, G4double bfNc)
static G4ThreadLocal G4SynchrotronRadiation * theSynchRad
void GammaNuclear(G4bool val)
static G4double fNuEleCcBias
static G4Gamma * Gamma()
Definition: G4Gamma.cc:86
static G4bool gmumuActivated
void PositronToHadrons(G4bool val)
static G4bool munActivated
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
static G4ThreadLocal G4AnnihiToMuPair * thePosiToMuMu
static G4ThreadLocal G4NeutrinoElectronTotXsc * theNuEleTotXsc
static G4double phadFactor
virtual ~G4EmExtraPhysics()
static G4bool gnActivated
static G4String fNuDetectorName
static G4NeutrinoMu * NeutrinoMu()
Definition: G4NeutrinoMu.cc:85
static G4AntiNeutrinoE * AntiNeutrinoE()
static G4ThreadLocal G4GammaConversionToMuons * theGammaToMuMu
static G4bool gLENDActivated
static G4AntiNeutrinoMu * AntiNeutrinoMu()
static G4ThreadLocal G4BertiniElectroNuclearBuilder * theGNPhysics
void SynchAll(G4bool val)
static G4Positron * Positron()
Definition: G4Positron.cc:94
void Synch(G4bool val)
void LENDGammaNuclear(G4bool val)
static G4Electron * Electron()
Definition: G4Electron.cc:94
void SetNuEleCcBias(G4double bf)
G4bool GetPDGStable() const
static G4bool phadActivated
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
static G4bool fNuActivated
void SetCrossSecFactor(G4double fac)
void SetCrossSecFactor(G4double fac)
static G4PhysicsListHelper * GetPhysicsListHelper()
static G4bool synActivatedForAll
int G4int
Definition: G4Types.hh:78
static G4NeutrinoE * NeutrinoE()
Definition: G4NeutrinoE.cc:85
static G4MuonPlus * MuonPlus()
Definition: G4MuonPlus.cc:99
static G4bool synActivated
G4GLOB_DLL std::ostream G4cout
G4EmExtraPhysics(G4int ver=1)
G4ParticleTable::G4PTblDicIterator * GetParticleIterator() const
G4EmMessenger * theMessenger
void MuonNuclear(G4bool val)
void SetNuNucleusBias(G4double bf)
static G4ThreadLocal G4NeutrinoElectronProcess * theNuEleProcess
static G4AntiNeutrinoTau * AntiNeutrinoTau()
void SetBiasingFactors(G4double bfCc, G4double bfNc)
static G4double pmumuFactor
void PositronToMuMu(G4bool val)
void GammaToMuMuFactor(G4double val)
static G4NeutrinoTau * NeutrinoTau()