Geant4 VMC Version 6.6
Loading...
Searching...
No Matches
G4MonopolePhysics.cxx
Go to the documentation of this file.
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//
28//
29// $Id: G4MonopolePhysics.cc 111448 2018-08-10 07:54:47Z gcosmo $
30//
31//---------------------------------------------------------------------------
32//
33// ClassName: G4MonopolePhysics
34//
35// Author: V.Ivanchenko 13.03.2005
36//
37// Modified:
38//
39// 12.07.10 S.Burdin (changed the magnetic and electric charge variables
40// from integer to double)
41//----------------------------------------------------------------------------
42//
43//
44//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
45//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
46
47#include "G4MonopolePhysics.hh"
49
50#include "G4Monopole.hh"
51#include "G4ParticleDefinition.hh"
52#include "G4ProcessManager.hh"
53#include "G4ProcessVector.hh"
54
56#include "G4StepLimiter.hh"
57#include "G4Transportation.hh"
58#include "G4hIonisation.hh"
59#include "G4hMultipleScattering.hh"
60#include "G4hhIonisation.hh"
61#include "G4mplIonisation.hh"
62#include "G4mplIonisationWithDeltaModel.hh"
63
64#include "G4PhysicsListHelper.hh"
65
66#include "G4BuilderType.hh"
67#include "G4SystemOfUnits.hh"
68
69//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
70
72 : G4VPhysicsConstructor(nam), fMpl(nullptr)
73{
74 fMagCharge = 1.0;
75 // fMagCharge = -1.0;
76 // fElCharge = -50.0;
77 fElCharge = 0.0;
78 fMonopoleMass = 100. * GeV;
79 SetPhysicsType(bUnknown);
81}
82
83//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
84
86
87//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
88
93
94//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
95
97{
98 if (verboseLevel > 0) {
99 G4cout << "G4MonopolePhysics::ConstructProcess" << G4endl;
100 }
101
102 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
103 G4ProcessManager* pmanager = fMpl->GetProcessManager();
104
105 // defined monopole parameters and binning
106
107 G4double magn = fMpl->MagneticCharge();
108 G4double emin = fMonopoleMass / 20000.;
109 if (emin < keV) {
110 emin = keV;
111 }
112 G4double emax = std::max(10. * TeV, fMonopoleMass * 100);
113 G4int nbin = G4lrint(10 * std::log10(emax / emin));
114
115 // dedicated trasporation
116 if (magn != 0.0) {
117 G4int idxt(0);
118 pmanager->RemoveProcess(idxt);
119 pmanager->AddProcess(new G4MonopoleTransportation(fMpl), -1, 0, 0);
120 }
121
122 if (fMpl->GetPDGCharge() != 0.0) {
123 G4hIonisation* hhioni = new G4hIonisation();
124 hhioni->SetDEDXBinning(nbin);
125 hhioni->SetMinKinEnergy(emin);
126 hhioni->SetMaxKinEnergy(emax);
127 ph->RegisterProcess(hhioni, fMpl);
128 }
129 if (magn != 0.0) {
130 G4mplIonisation* mplioni = new G4mplIonisation(magn);
131 mplioni->SetDEDXBinning(nbin);
132 mplioni->SetMinKinEnergy(emin);
133 mplioni->SetMaxKinEnergy(emax);
134 ph->RegisterProcess(mplioni, fMpl);
135 }
136 ph->RegisterProcess(new G4StepLimiter(), fMpl);
137}
138
139//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
140
142
143//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
144
146
147//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
148
150
151//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Definition of the G4MonopolePhysicsMessenger class.
Definition of the G4MonopolePhysics class.
Definition of the G4MonopoleTransportation class.
Definition of the G4Monopole class.
virtual void ConstructProcess()
G4MonopolePhysicsMessenger * fMessenger
G4MonopolePhysics(const G4String &nam="Monopole Physics")
void SetMonopoleMass(G4double)
void SetElectricCharge(G4double)
virtual void ConstructParticle()
void SetMagneticCharge(G4double)
static G4Monopole * MonopoleDefinition(G4double mass=100.*CLHEP::GeV, G4double magCharge=1.0, G4double elCharge=0.0)
G4double MagneticCharge() const