Import Geant4 11.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2022-12-09 14:43:28 +01:00
parent c07cea1fe0
commit 9f34590941
3810 changed files with 200490 additions and 182326 deletions
@@ -0,0 +1,37 @@
///\file "errorpropagation/errProp/.README.txt"
///\brief Example errProp README page
/*! \page ExampleerrProp Example errProp
This is an example illustrating the use of the error propagation utility.
A G4ErrorFreeTrajState is created to simulate a muon track of 20 GeV along the X axis. Then the track is propagated until the target is reached.
The geometry is a simplified typical HEP detector:
- An air beamline ( BEAM )
- An air central detector ( CDET )
- A copper calorimeter, divided in four ( ECAL )
- An aluminium calorimeter, divided in ten ( HCAL )
- An air muon detector ( MUON )
It is inmersed in a magnetic field along the Z axis with default value -1 kilogauss. This value can be changed with the command "/exerror/setField.
The type of target can be chosen with the enviromental variable G4ERROR_TARGET:
- PLANE_SURFACE : use a G4ErrorPlaneSurfaceTarget perpendicular to X at (2241. mm, 0, 0)
- CYL_SURFACE : use a G4ErrorCylSurfaceTarget parallel to Z of radius 2220 mm
- VOLUME : use a G4ErrorGeomVolumeTarget with volume name "MUON"
- TRKLEN : use a G4ErrorTrackLengthTarget with track length 2230 mm
The user may also choose if the propagation is done forwards (the natural way, loosing energy) or backwards (in opposite direction, gaining energy), with the enviromental variable G4ERROR_MODE:
- FORWARDS : propagate in the forward direction
- BACKWARDS : propagate in the backward direction
There are also two modes of propagation, that can be chosen with the enviromental variable G4ERROR_PROP
- UNTIL_TARGET : propagate until target, all steps in one go
- STEP_BY_STEP propagate until target, returning control to the user at each step
*/
@@ -0,0 +1,58 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 3.16...3.21)
project(errProp)
#----------------------------------------------------------------------------
# Find Geant4 package, no UI and Vis drivers activated
#
find_package(Geant4 REQUIRED)
#----------------------------------------------------------------------------
# Setup Geant4 include directories and compile definitions
#
include(${Geant4_USE_FILE})
#----------------------------------------------------------------------------
# Locate sources and headers for this project
#
include_directories(${PROJECT_SOURCE_DIR}/include
${Geant4_INCLUDE_DIR})
file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc)
file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)
#----------------------------------------------------------------------------
# Add the executable, and link it to the Geant4 libraries
#
add_executable(errProp errProp.cc ${sources} ${headers})
target_link_libraries(errProp ${Geant4_LIBRARIES} )
#----------------------------------------------------------------------------
# Copy all scripts to the build directory, i.e. the directory in which we
# build errorpropagation. This is so that we can run the executable directly because it
# relies on these scripts being in the current working directory.
#
set(errorpropagation_SCRIPTS
)
foreach(_script ${errorpropagation_SCRIPTS})
configure_file(
${PROJECT_SOURCE_DIR}/${_script}
${PROJECT_BINARY_DIR}/${_script}
COPYONLY
)
endforeach()
#----------------------------------------------------------------------------
# Add program to the project targets
# (this avoids the need of typing the program name after make)
#
add_custom_target(errorpropagation DEPENDS errProp)
#----------------------------------------------------------------------------
# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX
#
install(TARGETS errProp DESTINATION bin)
@@ -0,0 +1,19 @@
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------
name := errProp
G4TARGET := $(name)
G4EXLIB := true
ifndef G4INSTALL
G4INSTALL = ../../..
endif
.PHONY: all
all: lib bin
include $(G4INSTALL)/config/architecture.gmk
include $(G4INSTALL)/config/binmake.gmk
@@ -0,0 +1,69 @@
# Example errorpropagation History
See `CONTRIBUTING.rst` for details of **required** info/format for each entry,
which **must** added in reverse chronological order (newest at the top). It must **not**
be used as a substitute for writing good git commit messages!
## 2022-11-04 I. Hrivnacova (exerrprop-V11-00-02)
- Fixed Doxygen file descriptions
## 2022-13-09 I. Hrivnacova (exerrprop-V11-00-01)
- Moved the example in the new errProp directory and renamed the executable
from errprop in errProp.
## 2021-12-10 Ben Morgan (exerrprop-V11-00-00)
- Change to new Markdown History format
---
# History entries prior to 11.0
May 24, 2021 B. Morgan (exerrprop-V10-07-00)
- Bump required CMake version range to 3.12...3.20, matching core Geant4
Nov 03, 2020 B.Morgan (exerrprop-V10-06-00)
- Support same CMake version range as core Geant4
Jun 13, 2018 G.Cosmo (exerrprop-V10-04-00)
- Use implicit destructor in ExErrorMagneticField.
- Updated README.
Oct 16, 2014 I.Hrivnacova (exerrprop-V10-00-00)
- Fixed coding guidelines (long lines) in errprop.cc, ExErrorDetectorConstruction.cc
Feb 13, 2013 I.Hrivnacova (exerrprop-V09-06-00)
- Applied coding guidelines (virtual keyword, data member initialization)
Sep 4, 2012 I.Hrivnacova (exerrprop-V09-05-05)
- Adding explicit includes of G4SystemOfUnits.hh and G4PhysicalConstants.hh
where needed
- Replaced tabulators with space characters
Sep 4, 2012 I.Hrivnacova (exerrprop-V09-05-04)
- Updated CMakeLists.txt:
adding copying macros (empty), install target and comment lines
Jul 17, 2012 I.Hrivnacova (exerrprop-V09-05-03)
- Restored files descriptions and moved class descriptions in .hh
at the right place
Jul 17, 2012 I.Hrivnacova (exerrprop-V09-05-02)
- Improved .README file
Jul 6, 2012 P.Arce (exerrprop-V09-05-01)
- Reviewed examples according to coding guidelines
Oct 3, 2011 G.Folger (exerrprop-V09-04-01)
- Fix one left old style G4Exception.
Oct 3, 2011 G.Folger (exerrprop-V09-04-00)
- Fix gcc46 compilation warning in errprop.cc
Mar 6, 2009 G.Barrand (exerrprop-V09-02-00)
- GNUmakefile: removed logic for setting AIDA with G4ANALYSIS_USE.
since it already handled in the internal configuration scripts.
- Replaced usare of 'uint' with 'size_t' in errprop.cc (G.Cosmo).
May 28, 2007 P.Arce
- First version
@@ -0,0 +1,33 @@
This is an example illustrating the use of the error propagation utility.
A G4ErrorFreeTrajState is created to simulate a muon track of 20 GeV along the X axis. Then the track is propagated until the target is reached.
The geometry is a simplified typical HEP detector:
An air beamline ( BEAM )
An air central detector ( CDET )
A copper calorimeter, divided in four ( ECAL )
An aluminium calorimeter, divided in ten ( HCAL )
An air muon detector ( MUON )
It is inmersed in a magnetic field along the Z axis with default value -1 kilogauss. This value can be changed with the command "/exerror/setField.
The type of target can be chosen with the enviromental variable G4ERROR_TARGET:
PLANE_SURFACE : use a G4ErrorPlaneSurfaceTarget perpendicular to X at (2241. mm, 0, 0)
CYL_SURFACE : use a G4ErrorCylSurfaceTarget parallel to Z of radius 2220 mm
VOLUME : use a G4ErrorGeomVolumeTarget with volume name "MUON"
TRKLEN : use a G4ErrorTrackLengthTarget with track length 2230 mm
The user may also choose if the propagation is done forwards (the natural way, loosing energy) or backwards (in opposite direction, gaining energy), with the enviromental variable G4ERROR_MODE:
FORWARDS : propagate in the forward direction
BACKWARDS : propagate in the backward direction
There are also two modes of propagation, that can be chosen with the enviromental variable G4ERROR_PROP
UNTIL_TARGET : propagate until target, all steps in one go
STEP_BY_STEP propagate until target, returning control to the user at each step
@@ -0,0 +1,260 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
/// \file errProp/errProp.cc
/// \brief Main program of the errorpropagation example
//
// ------------------------------------------------------------
// GEANT 4 example main
// ------------------------------------------------------------
//
// History:
// - Created: P. Arce May 2007
//
#include "ExErrorDetectorConstruction.hh"
#include "G4SteppingVerbose.hh"
#include "G4ErrorPropagator.hh"
#include "G4ErrorPropagatorData.hh"
#include "G4ErrorPropagatorManager.hh"
#include "G4ErrorPlaneSurfaceTarget.hh"
#include "G4ErrorCylSurfaceTarget.hh"
#include "G4ErrorGeomVolumeTarget.hh"
#include "G4ErrorTrackLengthTarget.hh"
#include "G4ErrorFreeTrajState.hh"
#include "G4UImanager.hh"
#include "G4SystemOfUnits.hh"
void Initialize();
G4ErrorTarget* BuildTarget( G4int iTarget );
void ProcessEvent( G4int iProp, size_t nEv );
void Finalize();
G4ErrorTarget* theTarget;
G4ErrorMode theG4ErrorMode;
//-------------------------------------------------------------
int main()
{
Initialize();
//----- Choose propagation mode
// 0: propagate until target, all steps in one go
// 1: propagate until target, returning control to the user at each step
G4int iProp = 0;
char* prop = std::getenv("G4ERROR_PROP");
if( prop ) {
if( G4String(prop) == G4String("UNTIL_TARGET") ){
iProp = 0;
} else if ( G4String(prop) == G4String("STEP_BY_STEP") ) {
iProp = 1;
} else {
G4Exception("exG4eReco","Fatal error in Argument",
FatalErrorInArgument,
G4String("Variable G4ERROR_PROP = " + G4String(prop) +
" It must be: UNTIL_TARGET or STEP_BY_STEP").c_str());
}
} else {
G4Exception("exG4eReco","Fatal error in Argument",
JustWarning,
"Variable G4ERROR_PROP not defined, taking it = UNTIL_TARGET");
}
size_t nEvents = 3;
for( size_t ii = 0; ii < nEvents; ii++ ){
ProcessEvent( iProp, ii );
}
Finalize();
}
//-------------------------------------------------------------
void Initialize()
{
G4VSteppingVerbose::SetInstance(new G4SteppingVerbose);
// Initialize the GEANT4e manager
G4ErrorPropagatorManager* g4emgr
= G4ErrorPropagatorManager::GetErrorPropagatorManager();
G4ErrorPropagatorData* g4edata
= G4ErrorPropagatorData::GetErrorPropagatorData();
g4emgr->SetUserInitialization(new ExErrorDetectorConstruction);
G4UImanager::GetUIpointer()->ApplyCommand("/exerror/setField -10. kilogauss");
g4emgr->InitGeant4e();
G4UImanager::GetUIpointer()->ApplyCommand("/control/verbose 1");
G4UImanager::GetUIpointer()->ApplyCommand("/tracking/verbose 1");
G4UImanager::GetUIpointer()->ApplyCommand("/geant4e/limits/stepLength 100 mm");
//----- Choose target type:
// 1: PlaneSurfaceTarget
// 2: CylSurfaceTarget
// 3: GeomVolumeTarget
// 4: TrackLengthTarget
G4int iTarget = 1;
char* target = std::getenv("G4ERROR_TARGET");
if( target ) {
if( G4String(target) == G4String("PLANE_SURFACE") ) {
iTarget = 1;
}else if( G4String(target) == G4String("CYL_SURFACE") ) {
iTarget = 2;
}else if( G4String(target) == G4String("VOLUME") ) {
iTarget = 3;
}else if( G4String(target) == G4String("TRKLEN") ) {
iTarget = 4;
}else {
G4Exception("exG4eReco","Fatal error in Argument",
FatalErrorInArgument,
G4String("Variable G4ERROR_TARGET = " + G4String(target) +
" It must be: PLANE_SURFACE, CYL_SURFACE, VOLUME, TRKLEN").c_str());
}
} else {
G4Exception("exG4eReco","Fatal error in Argument",
JustWarning,"Variable G4ERROR_TARGET not defined, taking it = PLANE_SURFACE");
}
theTarget = BuildTarget( iTarget );
g4edata->SetTarget( theTarget );
theG4ErrorMode = G4ErrorMode_PropBackwards;
char* mode = std::getenv("G4ERROR_MODE");
if( mode ) {
if( G4String(mode) == G4String("FORWARDS") ) {
theG4ErrorMode = G4ErrorMode_PropForwards;
} else if( G4String(mode) == G4String("BACKWARDS") ) {
theG4ErrorMode = G4ErrorMode_PropBackwards;
} else {
G4Exception("exG4eReco","Fatal error in Argument",
FatalErrorInArgument,
G4String("Variable G4ERROR_MODE = " + G4String(mode) +
" It must be: FORWARDS or BACKWARDS").c_str());
}
} else {
G4Exception("exG4eReco","Fatal error in Argument",
JustWarning,"Variable G4ERROR_MODE not defined, taking it = BACKWARDS");
}
}
void ProcessEvent( G4int iProp, size_t )
{
// Set the starting trajectory.
G4ThreeVector xv3( 0, 0, 0 );
G4ThreeVector pv3( 20.0*GeV, 0.0, 0.0 );
G4ErrorTrajErr error( 5, 0 );
G4ErrorFreeTrajState* g4ErrorTrajState
= new G4ErrorFreeTrajState( "mu-", xv3, pv3, error );
G4ErrorPropagatorManager* g4emgr
= G4ErrorPropagatorManager::GetErrorPropagatorManager();
//int ierr = 0;
G4Point3D surfPos(224.*cm,0.,0.);
G4Normal3D surfNorm(1.,0.,0.);
//- G4ErrorTarget* theG4ErrorTarget
// = new G4ErrorPlaneSurfaceTarget(surfNorm, surfPos );
if( iProp == 0){
// Propagate until G4ErrorTarget is found all in one go
//ierr =
g4emgr->Propagate( g4ErrorTrajState, theTarget, theG4ErrorMode );
} else if( iProp == 1){
// Propagate until G4ErrorTarget is reached step by step
g4emgr->InitTrackPropagation();
// G4Track* aTrack
// = G4EventManager::GetEventManager()->GetTrackingManager()->GetTrack();
bool moreEvt = TRUE;
while( moreEvt ){
//ierr =
g4emgr->PropagateOneStep( g4ErrorTrajState, theG4ErrorMode );
//---- Check if target is reached
if( g4emgr->GetPropagator()->CheckIfLastStep( g4ErrorTrajState->GetG4Track() )) {
g4emgr->GetPropagator()
->InvokePostUserTrackingAction( g4ErrorTrajState->GetG4Track() );
moreEvt = 0;
G4cout << "STEP_BY_STEP propagation: Last Step " << G4endl;
}
}
}
G4cout << " $$$ PROPAGATION ENDED " << G4endl;
// extract current state info
G4Point3D posEnd = g4ErrorTrajState->GetPosition();
G4Normal3D momEnd = g4ErrorTrajState->GetMomentum();
G4ErrorTrajErr errorEnd = g4ErrorTrajState->GetError();
G4cout << " Position: " << posEnd << G4endl
<< " Momentum: " << momEnd << G4endl
<< " Error: " << errorEnd << G4endl;
}
//-------------------------------------------------------------
G4ErrorTarget* BuildTarget( G4int iTarget )
{
G4ErrorTarget* target = 0;
if( iTarget == 1 ) {
G4Point3D surfPos(221.*cm,0.,0.);
G4Normal3D surfNorm(1.,0.,0.);
target = new G4ErrorPlaneSurfaceTarget(surfNorm, surfPos );
}else if( iTarget == 2 ) {
G4double radius = 222*cm;
target = new G4ErrorCylSurfaceTarget(radius);
}else if( iTarget == 3 ) {
target = new G4ErrorGeomVolumeTarget("MUON");
}else if( iTarget == 4 ) {
target = new G4ErrorTrackLengthTarget(223.*cm);
}else {
G4Exception("exG4eReco","Fatal error in Argument",
FatalErrorInArgument,"Target type has to be between 1 and 4");
}
return target;
}
//-------------------------------------------------------------
void Finalize()
{
G4ErrorPropagatorManager::GetErrorPropagatorManager()->CloseGeometry();
}
@@ -0,0 +1,415 @@
############################################
!!! WARNING - FPE detection is activated !!!
############################################
################################
!!! G4Backtrace is activated !!!
################################
**************************************************************
Geant4 version Name: geant4-11-01-ref-00 (9-December-2022)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
: NIM A 835 (2016), 186-225
WWW : http://geant4.org/
**************************************************************
creating G4RunManagerKernel 0x24ca110
The materials defined are :
***** Table : Nb of materials = 4 *****
Material: G4_AIR density: 1.205 mg/cm3 RadL: 303.921 m Nucl.Int.Length: 710.095 m
Imean: 85.700 eV temperature: 293.15 K pressure: 1.00 atm
---> Element: C (C) Z = 6.0 N = 12 A = 12.011 g/mole
---> Isotope: C12 Z = 6 N = 12 A = 12.00 g/mole abundance: 98.930 %
---> Isotope: C13 Z = 6 N = 13 A = 13.00 g/mole abundance: 1.070 %
ElmMassFraction: 0.01 % ElmAbundance 0.02 %
---> Element: N (N) Z = 7.0 N = 14 A = 14.007 g/mole
---> Isotope: N14 Z = 7 N = 14 A = 14.00 g/mole abundance: 99.632 %
---> Isotope: N15 Z = 7 N = 15 A = 15.00 g/mole abundance: 0.368 %
ElmMassFraction: 75.53 % ElmAbundance 78.44 %
---> Element: O (O) Z = 8.0 N = 16 A = 15.999 g/mole
---> Isotope: O16 Z = 8 N = 16 A = 15.99 g/mole abundance: 99.757 %
---> Isotope: O17 Z = 8 N = 17 A = 17.00 g/mole abundance: 0.038 %
---> Isotope: O18 Z = 8 N = 18 A = 18.00 g/mole abundance: 0.205 %
ElmMassFraction: 23.18 % ElmAbundance 21.07 %
---> Element: Ar (Ar) Z = 18.0 N = 40 A = 39.948 g/mole
---> Isotope: Ar36 Z = 18 N = 36 A = 35.97 g/mole abundance: 0.337 %
---> Isotope: Ar38 Z = 18 N = 38 A = 37.96 g/mole abundance: 0.063 %
---> Isotope: Ar40 Z = 18 N = 40 A = 39.96 g/mole abundance: 99.600 %
ElmMassFraction: 1.28 % ElmAbundance 0.47 %
Material: G4_Al density: 2.699 g/cm3 RadL: 8.896 cm Nucl.Int.Length: 38.894 cm
Imean: 166.000 eV temperature: 293.15 K pressure: 1.00 atm
---> Element: Al (Al) Z = 13.0 N = 27 A = 26.982 g/mole
---> Isotope: Al27 Z = 13 N = 27 A = 26.98 g/mole abundance: 100.000 %
ElmMassFraction: 100.00 % ElmAbundance 100.00 %
Material: G4_Fe density: 7.874 g/cm3 RadL: 1.757 cm Nucl.Int.Length: 16.990 cm
Imean: 286.000 eV temperature: 293.15 K pressure: 1.00 atm
---> Element: Fe (Fe) Z = 26.0 N = 56 A = 55.845 g/mole
---> Isotope: Fe54 Z = 26 N = 54 A = 53.94 g/mole abundance: 5.845 %
---> Isotope: Fe56 Z = 26 N = 56 A = 55.93 g/mole abundance: 91.754 %
---> Isotope: Fe57 Z = 26 N = 57 A = 56.94 g/mole abundance: 2.119 %
---> Isotope: Fe58 Z = 26 N = 58 A = 57.93 g/mole abundance: 0.282 %
ElmMassFraction: 100.00 % ElmAbundance 100.00 %
Material: G4_Cu density: 8.960 g/cm3 RadL: 1.436 cm Nucl.Int.Length: 15.588 cm
Imean: 322.000 eV temperature: 293.15 K pressure: 1.00 atm
---> Element: Cu (Cu) Z = 29.0 N = 64 A = 63.546 g/mole
---> Isotope: Cu63 Z = 29 N = 63 A = 62.93 g/mole abundance: 69.170 %
---> Isotope: Cu65 Z = 29 N = 65 A = 64.93 g/mole abundance: 30.830 %
ElmMassFraction: 100.00 % ElmAbundance 100.00 %
HalfWorldLength 2250
World is registered to the default region.
G4ErrorRunManagerHelper::InitializePhysics
List of instantiated particles ============================================
e+ e- gamma geantino mu+ mu- pi+ pi- proton
Current application state is PreInit
Warning : Geant4 kernel is not Init state : Assuming Init state.
physicsList->Construct() start.
G4Transportation constructor> set fShortStepOptimisation to false
0x277dfe0G4ErrorPhysicsList:: particle process manager e+ = 0x2782cf0
0x277de40G4ErrorPhysicsList:: particle process manager e- = 0x27872b0
0x277dca0G4ErrorPhysicsList:: particle process manager gamma = 0x27873e0
0x277f320G4ErrorPhysicsList:: particle process manager geantino = 0x2787630
0x277e180G4ErrorPhysicsList:: particle process manager mu+ = 0x2787880
0x277e470G4ErrorPhysicsList:: particle process manager mu- = 0x2787ad0
0x277e880G4ErrorPhysicsList:: particle process manager pi+ = 0x2787d20
0x277ecd0G4ErrorPhysicsList:: particle process manager pi- = 0x2787f70
0x277f0f0G4ErrorPhysicsList:: particle process manager proton = 0x27881c0
physicsList->CheckParticleList() start.
physicsList->setCut() start.
=======================================================================
====== Electromagnetic Physics Parameters ========
=======================================================================
LPM effect enabled 1
Enable creation and use of sampling tables 0
Apply cuts on all EM processes 0
Use combined TransportationWithMsc Disabled
Use general process 0
Enable linear polarisation for gamma 0
Enable photoeffect sampling below K-shell 1
Enable sampling of quantum entanglement 0
X-section factor for integral approach 0.8
Min kinetic energy for tables 100 eV
Max kinetic energy for tables 100 TeV
Number of bins per decade of a table 7
Verbose level 1
Verbose level for worker thread 0
Bremsstrahlung energy threshold above which
primary e+- is added to the list of secondary 100 TeV
Bremsstrahlung energy threshold above which primary
muon/hadron is added to the list of secondary 100 TeV
Lowest triplet kinetic energy 1 MeV
Enable sampling of gamma linear polarisation 0
5D gamma conversion model type 0
5D gamma conversion model on isolated ion 0
Livermore data directory epics_2017
=======================================================================
====== Ionisation Parameters ========
=======================================================================
Step function for e+- (0.2, 1 mm)
Step function for muons/hadrons (0.2, 0.1 mm)
Step function for light ions (0.2, 0.1 mm)
Step function for general ions (0.2, 0.1 mm)
Lowest e+e- kinetic energy 1 keV
Lowest muon/hadron kinetic energy 1 keV
Use ICRU90 data 0
Fluctuations of dE/dx are enabled 1
Type of fluctuation model for leptons and hadrons Universal
Use built-in Birks satuaration 0
Build CSDA range enabled 0
Use cut as a final range enabled 0
Enable angular generator interface 0
Max kinetic energy for CSDA tables 1 GeV
Max kinetic energy for NIEL computation 0 eV
Linear loss limit 0.01
Read data from file for e+e- pair production by mu 0
=======================================================================
====== Multiple Scattering Parameters ========
=======================================================================
Type of msc step limit algorithm for e+- 1
Type of msc step limit algorithm for muons/hadrons 0
Msc lateral displacement for e+- enabled 1
Msc lateral displacement for muons and hadrons 0
Urban msc model lateral displacement alg96 1
Range factor for msc step limit for e+- 0.04
Range factor for msc step limit for muons/hadrons 0.2
Geometry factor for msc step limitation of e+- 2.5
Safety factor for msc step limit for e+- 0.6
Skin parameter for msc step limitation of e+- 1
Lambda limit for msc step limit for e+- 1 mm
Use Mott correction for e- scattering 0
Factor used for dynamic computation of angular
limit between single and multiple scattering 1
Fixed angular limit between single
and multiple scattering 3.1416 rad
Upper energy limit for e+- multiple scattering 100 MeV
Type of electron single scattering model 0
Type of nuclear form-factor 1
Screening factor 1
=======================================================================
conv: for gamma SubType=14 BuildTable=1
Lambda table from 1.022 MeV to 100 TeV, 18 bins/decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
BetheHeitlerLPM : Emin= 0 eV Emax= 100 TeV ModifiedTsai
compt: for gamma SubType=13 BuildTable=1
Lambda table from 100 eV to 1 MeV, 7 bins/decade, spline: 1
LambdaPrime table from 1 MeV to 100 TeV in 56 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
Klein-Nishina : Emin= 0 eV Emax= 100 TeV
phot: for gamma SubType=12 BuildTable=0
LambdaPrime table from 200 keV to 100 TeV in 61 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
PhotoElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila
Region <DefaultRegionForTheWorld> -- -- appears in <World> world volume
This region is in the mass world.
Root logical volume(s) : World
Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0]
Materials : G4_AIR G4_Cu G4_Al G4_Fe
Production cuts : gamma 10000 km e- 10000 km e+ 10000 km proton 10000 km
Region <DefaultRegionForParallelWorld> -- -- is not associated to any world.
Root logical volume(s) :
Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0]
Materials :
Production cuts : gamma 10000 km e- 10000 km e+ 10000 km proton 10000 km
========= Table of registered couples ============================
Index : 0 used in the geometry : Yes
Material : G4_AIR
Range cuts : gamma 10000 km e- 10000 km e+ 10000 km proton 10000 km
Energy thresholds : gamma 9.54965 GeV e- 9.54965 GeV e+ 9.54965 GeV proton 1 PeV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 1 used in the geometry : Yes
Material : G4_Cu
Range cuts : gamma 10000 km e- 10000 km e+ 10000 km proton 10000 km
Energy thresholds : gamma 9.54965 GeV e- 9.54965 GeV e+ 9.54965 GeV proton 1 PeV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 2 used in the geometry : Yes
Material : G4_Al
Range cuts : gamma 10000 km e- 10000 km e+ 10000 km proton 10000 km
Energy thresholds : gamma 9.54965 GeV e- 9.54965 GeV e+ 9.54965 GeV proton 1 PeV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 3 used in the geometry : Yes
Material : G4_Fe
Range cuts : gamma 10000 km e- 10000 km e+ 10000 km proton 10000 km
Energy thresholds : gamma 9.54965 GeV e- 9.54965 GeV e+ 9.54965 GeV proton 1 PeV
Region(s) which use this couple :
DefaultRegionForTheWorld
==================================================================
Start closing geometry.
G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Total memory consumed for geometry optimisation: 1 kByte
Total CPU time elapsed for geometry optimisation: 0 seconds
Voxelisation: top CPU users:
Percent Total CPU System CPU Memory Volume
------- ---------- ---------- -------- ----------
0.00 0.00 0.00 1k World
0.00 0.00 0.00 0k ECAL
0.00 0.00 0.00 1k HCAL
Voxelisation: top memory users:
Percent Memory Heads Nodes Pointers Total CPU Volume
------- -------- ------ ------ -------- ---------- ----------
44.50 0k 3 8 18 0.00 World
37.80 0k 1 10 10 0.00 HCAL
17.70 0k 1 4 4 0.00 ECAL
/tracking/verbose 1
/geant4e/limits/stepLength 100 mm
Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName
0 0 0 0 1.99e+04 0 0 0 BEAM initStep
### G4EnergyLossForExtrapolator::Initialisation tables= 0
G4TablesForExtrapolator::ComputeElectronDEDX for e-
G4TablesForExtrapolator::ComputeElectronDEDX for e+
G4TablesForExtrapolator::ComputeMuonDEDX for mu+
G4TablesForExtrapolator::ComputeProtonDEDX for proton
G4TablesForExtrapolator::ComputeTransportXS for e-
### G4EnergyLossForExtrapolator::BuildTables for 4 materials Nbins= 80 Emin(MeV)= 1 Emax(MeV)= 1e+08
1 50 0.0187 0 1.99e+04 0.0167 50 50 CDET Transportation
2 150 0.169 0 1.99e+04 0.0333 100 150 CDET G4ErrorStepLengthLimit
3 250 0.468 0 1.99e+04 0.0333 100 250 CDET G4ErrorStepLengthLimit
4 250 0.468 0 1.99e+04 1.94e-07 0.00058 250 DVEC Transportation
5 350 0.918 0 2.01e+04 183 100 350 DVEC G4ErrorStepLengthLimit
6 350 0.918 0 2.01e+04 0.00187 0.00102 350 DVEC Transportation
7 450 1.52 0 2.03e+04 183 100 450 DVEC G4ErrorStepLengthLimit
8 450 1.52 0 2.03e+04 0.00328 0.00179 450 DVEC Transportation
9 550 2.26 0 2.04e+04 183 100 550 DVEC G4ErrorStepLengthLimit
10 550 2.26 0 2.04e+04 0.00509 0.00278 550 DVEC Transportation
11 650 3.15 0 2.06e+04 183 100 650 DVEC G4ErrorStepLengthLimit
12 650 3.15 0 2.06e+04 0.00727 0.00396 650 SOLN Transportation
13 750 4.18 0 2.07e+04 59.6 100 750 SOLN G4ErrorStepLengthLimit
14 750 4.18 0 2.07e+04 0.00319 0.00535 750 DVEH Transportation
15 850 5.36 0 2.09e+04 165 100 850 DVEH G4ErrorStepLengthLimit
16 850 5.36 0 2.09e+04 0.0114 0.00694 850 DVEH Transportation
17 950 6.68 0 2.1e+04 165 100 950 DVEH G4ErrorStepLengthLimit
18 950 6.68 0 2.1e+04 0.0144 0.00872 950 DVEH Transportation
19 1.05e+03 8.14 0 2.12e+04 165 100 1.05e+03 DVEH G4ErrorStepLengthLimit
20 1.05e+03 8.14 0 2.12e+04 0.0176 0.0107 1.05e+03 DVEH Transportation
21 1.15e+03 9.74 0 2.13e+04 165 100 1.15e+03 DVEH G4ErrorStepLengthLimit
22 1.15e+03 9.74 0 2.13e+04 0.0212 0.0128 1.15e+03 DVEH Transportation
23 1.25e+03 11.5 0 2.15e+04 165 100 1.25e+03 DVEH G4ErrorStepLengthLimit
24 1.25e+03 11.5 0 2.15e+04 0.0251 0.0152 1.25e+03 DVEH Transportation
25 1.35e+03 13.4 0 2.17e+04 165 100 1.35e+03 DVEH G4ErrorStepLengthLimit
26 1.35e+03 13.4 0 2.17e+04 0.0292 0.0177 1.35e+03 DVEH Transportation
27 1.45e+03 15.4 0 2.18e+04 165 100 1.45e+03 DVEH G4ErrorStepLengthLimit
28 1.45e+03 15.4 0 2.18e+04 0.0337 0.0203 1.45e+03 DVEH Transportation
29 1.55e+03 17.5 0 2.2e+04 166 100 1.55e+03 DVEH G4ErrorStepLengthLimit
30 1.55e+03 17.5 0 2.2e+04 0.0384 0.0232 1.55e+03 DVEH Transportation
31 1.65e+03 19.8 0 2.22e+04 166 100 1.65e+03 DVEH G4ErrorStepLengthLimit
32 1.65e+03 19.8 0 2.22e+04 0.0434 0.0262 1.65e+03 DVEH Transportation
33 1.75e+03 22.2 0 2.23e+04 166 100 1.75e+03 DVEH G4ErrorStepLengthLimit
34 1.75e+03 22.2 0 2.23e+04 0.0487 0.0293 1.75e+03 MUON Transportation
35 1.85e+03 24.8 0 2.23e+04 0.0336 100 1.85e+03 MUON G4ErrorStepLengthLimit
36 1.95e+03 27.5 0 2.23e+04 0.0336 100 1.95e+03 MUON G4ErrorStepLengthLimit
37 2.05e+03 30.3 0 2.23e+04 0.0336 100 2.05e+03 MUON G4ErrorStepLengthLimit
38 2.15e+03 33.3 0 2.23e+04 0.0336 100 2.15e+03 MUON G4ErrorStepLengthLimit
39 2.21e+03 35.1 0 2.23e+04 0.0202 60.2 2.21e+03 MUON Transportation
$$$ PROPAGATION ENDED
Position: (2210,35.10134103703911,0)
Momentum: (22433.70312107119,696.1889753558929,0)
Error:
9.873297961869803e-08 0 3.726946525342548e-08 2.667645643729908e-06 0
0 3.518754725736791e-05 0 0 0.004070098790523185
3.726946525342548e-08 0 3.519222148196891e-05 0.004422001644952241 0
2.667645643729908e-06 0 0.004422001644952241 0.6258743853977757 0
0 0.004070098790523185 0 0 0.54095727675807
Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName
0 0 0 0 1.99e+04 0 0 0 BEAM initStep
1 50 0.0187 0 1.99e+04 0.0167 50 50 CDET Transportation
2 150 0.169 0 1.99e+04 0.0333 100 150 CDET G4ErrorStepLengthLimit
3 250 0.468 0 1.99e+04 0.0333 100 250 CDET G4ErrorStepLengthLimit
4 250 0.468 0 1.99e+04 1.94e-07 0.00058 250 DVEC Transportation
5 350 0.918 0 2.01e+04 183 100 350 DVEC G4ErrorStepLengthLimit
6 350 0.918 0 2.01e+04 0.00187 0.00102 350 DVEC Transportation
7 450 1.52 0 2.03e+04 183 100 450 DVEC G4ErrorStepLengthLimit
8 450 1.52 0 2.03e+04 0.00328 0.00179 450 DVEC Transportation
9 550 2.26 0 2.04e+04 183 100 550 DVEC G4ErrorStepLengthLimit
10 550 2.26 0 2.04e+04 0.00509 0.00278 550 DVEC Transportation
11 650 3.15 0 2.06e+04 183 100 650 DVEC G4ErrorStepLengthLimit
12 650 3.15 0 2.06e+04 0.00727 0.00396 650 SOLN Transportation
13 750 4.18 0 2.07e+04 59.6 100 750 SOLN G4ErrorStepLengthLimit
14 750 4.18 0 2.07e+04 0.00319 0.00535 750 DVEH Transportation
15 850 5.36 0 2.09e+04 165 100 850 DVEH G4ErrorStepLengthLimit
16 850 5.36 0 2.09e+04 0.0114 0.00694 850 DVEH Transportation
17 950 6.68 0 2.1e+04 165 100 950 DVEH G4ErrorStepLengthLimit
18 950 6.68 0 2.1e+04 0.0144 0.00872 950 DVEH Transportation
19 1.05e+03 8.14 0 2.12e+04 165 100 1.05e+03 DVEH G4ErrorStepLengthLimit
20 1.05e+03 8.14 0 2.12e+04 0.0176 0.0107 1.05e+03 DVEH Transportation
21 1.15e+03 9.74 0 2.13e+04 165 100 1.15e+03 DVEH G4ErrorStepLengthLimit
22 1.15e+03 9.74 0 2.13e+04 0.0212 0.0128 1.15e+03 DVEH Transportation
23 1.25e+03 11.5 0 2.15e+04 165 100 1.25e+03 DVEH G4ErrorStepLengthLimit
24 1.25e+03 11.5 0 2.15e+04 0.0251 0.0152 1.25e+03 DVEH Transportation
25 1.35e+03 13.4 0 2.17e+04 165 100 1.35e+03 DVEH G4ErrorStepLengthLimit
26 1.35e+03 13.4 0 2.17e+04 0.0292 0.0177 1.35e+03 DVEH Transportation
27 1.45e+03 15.4 0 2.18e+04 165 100 1.45e+03 DVEH G4ErrorStepLengthLimit
28 1.45e+03 15.4 0 2.18e+04 0.0337 0.0203 1.45e+03 DVEH Transportation
29 1.55e+03 17.5 0 2.2e+04 166 100 1.55e+03 DVEH G4ErrorStepLengthLimit
30 1.55e+03 17.5 0 2.2e+04 0.0384 0.0232 1.55e+03 DVEH Transportation
31 1.65e+03 19.8 0 2.22e+04 166 100 1.65e+03 DVEH G4ErrorStepLengthLimit
32 1.65e+03 19.8 0 2.22e+04 0.0434 0.0262 1.65e+03 DVEH Transportation
33 1.75e+03 22.2 0 2.23e+04 166 100 1.75e+03 DVEH G4ErrorStepLengthLimit
34 1.75e+03 22.2 0 2.23e+04 0.0487 0.0293 1.75e+03 MUON Transportation
35 1.85e+03 24.8 0 2.23e+04 0.0336 100 1.85e+03 MUON G4ErrorStepLengthLimit
36 1.95e+03 27.5 0 2.23e+04 0.0336 100 1.95e+03 MUON G4ErrorStepLengthLimit
37 2.05e+03 30.3 0 2.23e+04 0.0336 100 2.05e+03 MUON G4ErrorStepLengthLimit
38 2.15e+03 33.3 0 2.23e+04 0.0336 100 2.15e+03 MUON G4ErrorStepLengthLimit
39 2.21e+03 35.1 0 2.23e+04 0.0202 60.2 2.21e+03 MUON Transportation
$$$ PROPAGATION ENDED
Position: (2210,35.10134103703911,0)
Momentum: (22433.70312107119,696.1889753558929,0)
Error:
9.873297961869803e-08 0 3.726946525342548e-08 2.667645643729908e-06 0
0 3.518754725736791e-05 0 0 0.004070098790523185
3.726946525342548e-08 0 3.519222148196891e-05 0.004422001644952241 0
2.667645643729908e-06 0 0.004422001644952241 0.6258743853977757 0
0 0.004070098790523185 0 0 0.54095727675807
Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName
0 0 0 0 1.99e+04 0 0 0 BEAM initStep
1 50 0.0187 0 1.99e+04 0.0167 50 50 CDET Transportation
2 150 0.169 0 1.99e+04 0.0333 100 150 CDET G4ErrorStepLengthLimit
3 250 0.468 0 1.99e+04 0.0333 100 250 CDET G4ErrorStepLengthLimit
4 250 0.468 0 1.99e+04 1.94e-07 0.00058 250 DVEC Transportation
5 350 0.918 0 2.01e+04 183 100 350 DVEC G4ErrorStepLengthLimit
6 350 0.918 0 2.01e+04 0.00187 0.00102 350 DVEC Transportation
7 450 1.52 0 2.03e+04 183 100 450 DVEC G4ErrorStepLengthLimit
8 450 1.52 0 2.03e+04 0.00328 0.00179 450 DVEC Transportation
9 550 2.26 0 2.04e+04 183 100 550 DVEC G4ErrorStepLengthLimit
10 550 2.26 0 2.04e+04 0.00509 0.00278 550 DVEC Transportation
11 650 3.15 0 2.06e+04 183 100 650 DVEC G4ErrorStepLengthLimit
12 650 3.15 0 2.06e+04 0.00727 0.00396 650 SOLN Transportation
13 750 4.18 0 2.07e+04 59.6 100 750 SOLN G4ErrorStepLengthLimit
14 750 4.18 0 2.07e+04 0.00319 0.00535 750 DVEH Transportation
15 850 5.36 0 2.09e+04 165 100 850 DVEH G4ErrorStepLengthLimit
16 850 5.36 0 2.09e+04 0.0114 0.00694 850 DVEH Transportation
17 950 6.68 0 2.1e+04 165 100 950 DVEH G4ErrorStepLengthLimit
18 950 6.68 0 2.1e+04 0.0144 0.00872 950 DVEH Transportation
19 1.05e+03 8.14 0 2.12e+04 165 100 1.05e+03 DVEH G4ErrorStepLengthLimit
20 1.05e+03 8.14 0 2.12e+04 0.0176 0.0107 1.05e+03 DVEH Transportation
21 1.15e+03 9.74 0 2.13e+04 165 100 1.15e+03 DVEH G4ErrorStepLengthLimit
22 1.15e+03 9.74 0 2.13e+04 0.0212 0.0128 1.15e+03 DVEH Transportation
23 1.25e+03 11.5 0 2.15e+04 165 100 1.25e+03 DVEH G4ErrorStepLengthLimit
24 1.25e+03 11.5 0 2.15e+04 0.0251 0.0152 1.25e+03 DVEH Transportation
25 1.35e+03 13.4 0 2.17e+04 165 100 1.35e+03 DVEH G4ErrorStepLengthLimit
26 1.35e+03 13.4 0 2.17e+04 0.0292 0.0177 1.35e+03 DVEH Transportation
27 1.45e+03 15.4 0 2.18e+04 165 100 1.45e+03 DVEH G4ErrorStepLengthLimit
28 1.45e+03 15.4 0 2.18e+04 0.0337 0.0203 1.45e+03 DVEH Transportation
29 1.55e+03 17.5 0 2.2e+04 166 100 1.55e+03 DVEH G4ErrorStepLengthLimit
30 1.55e+03 17.5 0 2.2e+04 0.0384 0.0232 1.55e+03 DVEH Transportation
31 1.65e+03 19.8 0 2.22e+04 166 100 1.65e+03 DVEH G4ErrorStepLengthLimit
32 1.65e+03 19.8 0 2.22e+04 0.0434 0.0262 1.65e+03 DVEH Transportation
33 1.75e+03 22.2 0 2.23e+04 166 100 1.75e+03 DVEH G4ErrorStepLengthLimit
34 1.75e+03 22.2 0 2.23e+04 0.0487 0.0293 1.75e+03 MUON Transportation
35 1.85e+03 24.8 0 2.23e+04 0.0336 100 1.85e+03 MUON G4ErrorStepLengthLimit
36 1.95e+03 27.5 0 2.23e+04 0.0336 100 1.95e+03 MUON G4ErrorStepLengthLimit
37 2.05e+03 30.3 0 2.23e+04 0.0336 100 2.05e+03 MUON G4ErrorStepLengthLimit
38 2.15e+03 33.3 0 2.23e+04 0.0336 100 2.15e+03 MUON G4ErrorStepLengthLimit
39 2.21e+03 35.1 0 2.23e+04 0.0202 60.2 2.21e+03 MUON Transportation
$$$ PROPAGATION ENDED
Position: (2210,35.10134103703911,0)
Momentum: (22433.70312107119,696.1889753558929,0)
Error:
9.873297961869803e-08 0 3.726946525342548e-08 2.667645643729908e-06 0
0 3.518754725736791e-05 0 0 0.004070098790523185
3.726946525342548e-08 0 3.519222148196891e-05 0.004422001644952241 0
2.667645643729908e-06 0 0.004422001644952241 0.6258743853977757 0
0 0.004070098790523185 0 0 0.54095727675807
@@ -0,0 +1,92 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
/// \file errProp/include/ExErrorDetectorConstruction.hh
/// \brief Definition of the ExErrorDetectorConstruction class
//
#ifndef ExErrorDetectorConstruction_hh
#define ExErrorDetectorConstruction_hh 1
#include "globals.hh"
#include "G4VUserDetectorConstruction.hh"
#include "ExErrorMagneticField.hh"
class G4Box;
class G4LogicalVolume;
class G4VPhysicalVolume;
class G4Material;
class ExErrorDetectorMessenger;
class G4UserLimits;
/// Detector construction class
///
/// Creates a simplified typical HEP detector:
/// An air beamline ( BEAM )
/// An air central detector ( CDET )
/// A copper calorimeter, divided in four ( ECAL )
/// An aluminium calorimeter, divided in ten ( HCAL )
/// An air muon detector ( MUON )
///
/// History:
/// Created: May 2007
/// \author P. Arce
//------------------------------------------------------------------------
class ExErrorDetectorConstruction : public G4VUserDetectorConstruction
{
public:
ExErrorDetectorConstruction();
~ExErrorDetectorConstruction();
virtual G4VPhysicalVolume* Construct();
void SetMagField(G4double);
private:
G4double fXBEAM;
G4double fXCDET;
G4double fXECAL;
G4double fXSOLN;
G4double fXHCAL;
G4double fXMUON;
G4double fNdivECAL;
G4double fNdivHCAL;
G4double fYZLength;
G4double fXHalfWorldLength;
G4UserLimits* fUserLimits;
ExErrorMagneticField* fMagField; // pointer to the magnetic field
ExErrorDetectorMessenger* fDetectorMessenger; // pointer to the Messenger
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -0,0 +1,67 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
/// \file errProp/include/ExErrorDetectorMessenger.hh
/// \brief Definition of the ExErrorDetectorMessenger class
//
#ifndef ExErrorDetectorMessenger_hh
#define ExErrorDetectorMessenger_hh 1
#include "globals.hh"
#include "G4UImessenger.hh"
class ExErrorDetectorConstruction;
class G4UIdirectory;
class G4UIcmdWithAString;
class G4UIcmdWithADoubleAndUnit;
/// Detector messenger class
///
/// Defines a G4UIcommand to set the value of the constant field
///
/// History:
/// Created: May 2007
/// \author P. Arce
//------------------------------------------------------------------------
class ExErrorDetectorMessenger: public G4UImessenger
{
public:
ExErrorDetectorMessenger(ExErrorDetectorConstruction*);
~ExErrorDetectorMessenger();
virtual void SetNewValue(G4UIcommand*, G4String);
private:
ExErrorDetectorConstruction* fMyDetector;
G4UIdirectory* fMydetDir;
G4UIcmdWithADoubleAndUnit* fFieldCmd;
};
#endif
@@ -0,0 +1,64 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
/// \file errProp/include/ExErrorMagneticField.hh
/// \brief Definition of the ExErrorMagneticField class
//
#ifndef ExErrorMagneticField_H
#define ExErrorMagneticField_H
#include "G4UniformMagField.hh"
class G4FieldManager;
/// Magnetic field class
///
/// A uniform 1 kilogauss field along the Z axis
///
/// History:
/// Created: May 2007
/// \author P. Arce
//------------------------------------------------------------------------
class ExErrorMagneticField: public G4UniformMagField
{
public:
ExErrorMagneticField(G4ThreeVector); // The value of the field
ExErrorMagneticField(); // A zero field
//Set the field (0,0,fieldValue)
void SetFieldValue(G4double fieldValue);
void SetFieldValue(G4ThreeVector fieldVector);
protected:
// Find the global Field Manager
G4FieldManager* GetGlobalFieldManager(); // static
};
#endif
@@ -0,0 +1,246 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
/// \file errProp/src/ExErrorDetectorConstruction.cc
/// \brief Implementation of the ExErrorDetectorConstruction class
//
#include "ExErrorDetectorConstruction.hh"
#include "ExErrorDetectorMessenger.hh"
#include "ExErrorMagneticField.hh"
#include "G4NistManager.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4PVReplica.hh"
#include "G4UserLimits.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "G4SystemOfUnits.hh"
#include "G4ios.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
ExErrorDetectorConstruction::ExErrorDetectorConstruction()
: G4VUserDetectorConstruction(),
fXBEAM(5.*cm), fXCDET(20.*cm), fXECAL(40.*cm), fXSOLN(10.*cm), fXHCAL(100.*cm),
fXMUON(50.*cm), fNdivECAL(40./10.), fNdivHCAL(100./10.), fYZLength(50.*cm),
fXHalfWorldLength(fXBEAM + fXCDET + fXECAL + fXSOLN + fXHCAL + fXMUON),
fUserLimits(0), fMagField(0), fDetectorMessenger(0)
{
// create UserLimits
fUserLimits = new G4UserLimits();
fMagField = new ExErrorMagneticField(
G4ThreeVector(0.*kilogauss,0.*kilogauss,-1.*kilogauss));
fDetectorMessenger = new ExErrorDetectorMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
ExErrorDetectorConstruction::~ExErrorDetectorConstruction()
{
delete fMagField;
delete fDetectorMessenger;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VPhysicalVolume* ExErrorDetectorConstruction::Construct()
{
//--------- Material definition ---------
//Vacuum
/* a = 1.*g/mole;
density = 1.E-9*g/cm3;
G4Material* Vacuum = new G4Material(name="Vacuum", z=1., a, density);
*/
G4NistManager* nistMgr = G4NistManager::Instance();
G4Material* air = nistMgr->FindOrBuildMaterial("G4_AIR");
//Al
G4Material* al = nistMgr->FindOrBuildMaterial("G4_Al");
//Fe
G4Material* fe = nistMgr->FindOrBuildMaterial("G4_Fe");
//Cu
G4Material* cu = nistMgr->FindOrBuildMaterial("G4_Cu");
// Print all the materials defined.
//
G4cout << G4endl << "The materials defined are : " << G4endl << G4endl;
G4cout << *(G4Material::GetMaterialTable()) << G4endl;
//--- Sizes of the principal geometrical components (solids) --- (half lengths)
//double fXBEAM = 5.*2.*cm;
//double fXCDET = 90.*cm;
//double fXECAL = 40.*cm;
//double fXSOLN = 10.*cm;
//double fXHCAL = 100.*cm;
//double fXMUON = 50.*cm;
//double fNdivECAL = 10;
//double fNdivHCAL = 10;
//double fYZLength = 100.*cm;
// double fXWorldLength= fXBEAM + fXCDET + fXECAL + fXSOLN + fXHCAL + fXMUON;
//--------- Definitions of Solids, Logical Volumes, Physical Volumes ---------
//------------------------------
// World
//------------------------------
//- G4double HalfWorldLength = fXWorldLength;
G4cout << " HalfWorldLength " << fXHalfWorldLength << G4endl;
G4Box* solidWorld= new G4Box("world",fXHalfWorldLength,fYZLength,fYZLength);
G4LogicalVolume* logicWorld= new G4LogicalVolume( solidWorld, air, "World", 0, 0, 0);
// Must place the World Physical volume unrotated at (0,0,0).
//
G4VPhysicalVolume* physiWorld
= new G4PVPlacement(0, // no rotation
G4ThreeVector(), // at (0,0,0)
"World", // its name
logicWorld, // its logical volume
0, // its mother volume
false, // no boolean operations
0); // no field specific to volum
//------------------------------
// BEAM
//------------------------------
G4Box* solidBEAM = new G4Box("BEAM",fXBEAM,fYZLength,fYZLength);
G4LogicalVolume* logicBEAM = new G4LogicalVolume(solidBEAM,air,"BEAM",0,0,0);
G4ThreeVector positionBEAM = G4ThreeVector(0.,0.,0.);
//G4VPhysicalVolume* physiBEAM =
new G4PVPlacement(0, // no rotation
positionBEAM, // at (x,y,z)
"BEAM", // its name
logicBEAM, // its logical volume
physiWorld, // its mother volume
false, // no boolean operations
0); // no particular field
//------------------------------
// CDET (Central DETector)
//------------------------------
G4ThreeVector positionCdet = G4ThreeVector(fXBEAM + fXCDET/2.,0.,0.);
G4Box* solidCDET = new G4Box("CDET",fXCDET/2.,fYZLength,fYZLength);
G4LogicalVolume* logicCDET = new G4LogicalVolume(solidCDET,air,"Cdet",0,0,0);
// G4VPhysicalVolume* physiCDET =
new G4PVPlacement(0, // no rotation
positionCdet, // at (x,y,z)
"CDET", // its name
logicCDET, // its logical volume
physiWorld, // its mother volume
false, // no boolean operations
0); // no particular field
//------------------------------
// ECAL
//------------------------------
G4ThreeVector positionECAL = G4ThreeVector(fXBEAM + fXCDET + fXECAL/2., 0., 0.);
G4Box* solidECAL = new G4Box("ECAL",fXECAL/2.,fYZLength,fYZLength);
G4LogicalVolume* logicECAL = new G4LogicalVolume(solidECAL,cu,"ECAL",0,0,0);
G4VPhysicalVolume* physiECAL
= new G4PVPlacement(0, // no rotation
positionECAL, // at (x,y,z)
"ECAL", // its name
logicECAL, // its logical volume
physiWorld, // its mother volume
false, // no boolean operations
0); // no particular field
//--------- Divide it
G4Box* solidECALdiv = new G4Box("ECAL",fXECAL/2./fNdivECAL,fYZLength,fYZLength);
G4LogicalVolume* logicECALdiv = new G4LogicalVolume(solidECALdiv,cu,"ECALdiv",0,0,0);
new G4PVReplica("DVEC", logicECALdiv, physiECAL,
kXAxis, G4int(fNdivECAL), fXECAL/fNdivECAL);
//------------------------------
// SOLN
//------------------------------
G4ThreeVector positionSOLN
= G4ThreeVector(fXBEAM + fXCDET + fXECAL + fXSOLN/2., 0., 0.);
G4Box* solidSOLN = new G4Box("SOLN",fXSOLN/2.,fYZLength,fYZLength);
G4LogicalVolume* logicSOLN = new G4LogicalVolume(solidSOLN,al,"SOLN",0,0,0);
new G4PVPlacement(0, // no rotation
positionSOLN, // at (x,y,z)
"SOLN", // its name
logicSOLN, // its logical volume
physiWorld, // its mother volume
false, // no boolean operations
0); // no particular field
//------------------------------
// HCAL
//------------------------------
G4ThreeVector positionHCAL = G4ThreeVector(fXBEAM + fXCDET + fXECAL + fXSOLN + fXHCAL/2., 0., 0.);
G4Box* solidHCAL = new G4Box("HCAL",fXHCAL/2.,fYZLength,fYZLength);
G4LogicalVolume* logicHCAL = new G4LogicalVolume(solidHCAL,fe,"HCAL",0,0,0);
G4VPhysicalVolume* physiHCAL
= new G4PVPlacement(0, // no rotation
positionHCAL, // at (x,y,z)
"HCAL", // its name
logicHCAL, // its logical volume
physiWorld, // its mother volume
false, // no boolean operations
0); // no particular field
//--------- Divide it
G4Box* solidHCALdiv = new G4Box("HCAL",fXHCAL/2./fNdivHCAL,fYZLength,fYZLength);
G4LogicalVolume* logicHCALdiv = new G4LogicalVolume(solidHCALdiv,fe,"HCALdiv",0,0,0);
new G4PVReplica("DVEH", logicHCALdiv, physiHCAL,
kXAxis, G4int(fNdivHCAL), fXHCAL/fNdivHCAL);
//------------------------------
// MUON
//------------------------------
G4ThreeVector positionMUON
= G4ThreeVector(fXBEAM + fXCDET + fXECAL + fXSOLN + fXHCAL + fXMUON/2., 0., 0.);
G4Box* solidMUON = new G4Box("MUON",fXMUON/2.,fYZLength,fYZLength);
G4LogicalVolume* logicMUON = new G4LogicalVolume(solidMUON,air,"MUON",0,0,0);
new G4PVPlacement(0, // no rotation
positionMUON, // at (x,y,z)
"MUON", // its name
logicMUON, // its logical volume
physiWorld, // its mother volume
false, // no boolean operations
0); // no particular field
G4VisAttributes* worldVisAtt = new G4VisAttributes(0);
logicWorld->SetVisAttributes( worldVisAtt);
return physiWorld;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void ExErrorDetectorConstruction::SetMagField(G4double fieldValue)
{
fMagField->SetFieldValue(fieldValue);
}
@@ -0,0 +1,72 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
/// \file errProp/src/ExErrorDetectorMessenger.cc
/// \brief Implementation of the ExErrorDetectorMessenger class
//
#include "ExErrorDetectorMessenger.hh"
#include "ExErrorDetectorConstruction.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithADoubleAndUnit.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
ExErrorDetectorMessenger::ExErrorDetectorMessenger(ExErrorDetectorConstruction* myDet)
:G4UImessenger(),fMyDetector(myDet),fMydetDir(0),fFieldCmd(0)
{
fMydetDir = new G4UIdirectory("/exerror/");
fMydetDir->SetGuidance("ExError control.");
fFieldCmd = new G4UIcmdWithADoubleAndUnit("/exerror/setField",this);
fFieldCmd->SetGuidance("Define magnetic field.");
fFieldCmd->SetGuidance("Magnetic field will be in Z direction.");
fFieldCmd->SetParameterName("Bz",false);
fFieldCmd->SetDefaultUnit("tesla");
fFieldCmd->SetUnitCategory("Magnetic flux density");
fFieldCmd->AvailableForStates(G4State_PreInit,G4State_Init,G4State_Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
ExErrorDetectorMessenger::~ExErrorDetectorMessenger()
{
delete fFieldCmd;
delete fMydetDir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void ExErrorDetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
{
if( command == fFieldCmd ) {
fMyDetector->SetMagField(fFieldCmd->GetNewDoubleValue(newValue));
}
}
@@ -0,0 +1,81 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
/// \file errProp/src/ExErrorMagneticField.cc
/// \brief Implementation of the ExErrorMagneticField class
//
#include "ExErrorMagneticField.hh"
#include "G4FieldManager.hh"
#include "G4TransportationManager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
ExErrorMagneticField::ExErrorMagneticField()
: G4UniformMagField(G4ThreeVector())
{
GetGlobalFieldManager()->SetDetectorField(this);
GetGlobalFieldManager()->CreateChordFinder(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
ExErrorMagneticField::ExErrorMagneticField(G4ThreeVector fieldVector)
: G4UniformMagField(fieldVector)
{
GetGlobalFieldManager()->SetDetectorField(this);
GetGlobalFieldManager()->CreateChordFinder(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void ExErrorMagneticField::SetFieldValue(G4double fieldValue)
{
G4UniformMagField::SetFieldValue(G4ThreeVector(0,0,fieldValue));
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void ExErrorMagneticField::SetFieldValue(G4ThreeVector fieldVector)
{
// Find the Field Manager for the global field
G4FieldManager* fieldMgr= GetGlobalFieldManager();
if(fieldVector!=G4ThreeVector(0.,0.,0.))
{
G4UniformMagField::SetFieldValue(fieldVector);
fieldMgr->SetDetectorField(this);
} else {
// If the new field's value is Zero, then it is best to
// insure that it is not used for propagation.
G4MagneticField* magField = NULL;
fieldMgr->SetDetectorField(magField);
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4FieldManager* ExErrorMagneticField::GetGlobalFieldManager()
{
return G4TransportationManager::GetTransportationManager()->GetFieldManager();
}