Import Geant4 11.0.0 source tree
This commit is contained in:
committed by
Ben Morgan
parent
6399a014b6
commit
80e2389dd8
@@ -1,6 +1,6 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# Setup the project
|
||||
cmake_minimum_required(VERSION 3.12...3.20)
|
||||
cmake_minimum_required(VERSION 3.16...3.21)
|
||||
set(name microelectronics)
|
||||
project(${name})
|
||||
|
||||
|
||||
@@ -8,6 +8,32 @@
|
||||
Package History file
|
||||
--------------------
|
||||
|
||||
25 November 2021 D. Lambert microelectronics-V10-07-07
|
||||
- README and microelectronics.mac files have been updated
|
||||
to focus on new improvements
|
||||
|
||||
22 November 2021 S. Guatelli microelectronics-V10-07-06
|
||||
- ROOT file script plot.C has been updated
|
||||
|
||||
06 November 2021 I. Hrivnacova microelectronics-V10-07-05
|
||||
- Added analysis manager Clear() call instead of
|
||||
deleting in the end of run (removed on July 19)
|
||||
|
||||
04 Nov 2021 - D. Lambert microelectronics-V10-07-04
|
||||
- Updated of the microelec example in order to
|
||||
chose the new microelec model (new materials)
|
||||
or the previous (only Si) model
|
||||
|
||||
7 October 2021 - I. Hrivnacova microelectronics-V10-07-03
|
||||
- Migration to new G4AnalysisManager.hh header;
|
||||
define the default output file type (root),
|
||||
removed Analysis.hh.
|
||||
|
||||
19 July 2021 - I. Hrivnacova microelectronics-V10-07-02
|
||||
- Updated for changes in the analysis category:
|
||||
removed deleting of the analysis manager,
|
||||
as this is now done by the Geant4 kernel.
|
||||
|
||||
24 May 2021 - B. Morgan (microelectronics-V10-07-01)
|
||||
- Bump required CMake version range to 3.12...3.20, matching core Geant4
|
||||
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
-------------------------------------------------------------------
|
||||
-------------------------------------------------------------------
|
||||
|
||||
=========================================================
|
||||
Geant4 - Microelectronics example
|
||||
=========================================================
|
||||
|
||||
README file
|
||||
----------------------
|
||||
|
||||
CORRESPONDING AUTHOR
|
||||
|
||||
M. Raine
|
||||
CEA, DAM, DIF, F-91297 Arpajon, France
|
||||
* e-mail:melanie.raine@cea.fr
|
||||
|
||||
---->0. INTRODUCTION.
|
||||
|
||||
The microelectronics example simulates the track of a 5 MeV proton in silicon.
|
||||
Geant4 standard EM models are used in the World volume while Geant4-MicroElec models
|
||||
are used in a Target volume, declared as a Region.
|
||||
|
||||
---->1. GEOMETRY SET-UP.
|
||||
|
||||
The geometry is a 1 um side cube (World) made of silicon containing a smaller cubic Target volume of silicon.
|
||||
|
||||
---->2. SET-UP
|
||||
|
||||
Make sure G4LEDATA points to the low energy electromagnetic libraries.
|
||||
|
||||
The variable G4ANALYSIS_USE must be set to 1.
|
||||
|
||||
The code should be compiled with cmake:
|
||||
$ cd $HOME
|
||||
$ mkdir microelectronics-build
|
||||
$ cd $HOME/microelectronics-build
|
||||
$ cmake -DGeant4_DIR=/your_path/geant4-install/lib64/Geant4-9.5.0 $HOME/microelectronics
|
||||
$ make
|
||||
|
||||
It works in MT mode.
|
||||
|
||||
---->3. HOW TO RUN THE EXAMPLE
|
||||
|
||||
In interactive mode, run:
|
||||
|
||||
./Microelectronics
|
||||
|
||||
The macro microelectronics.mac is executed by default.
|
||||
|
||||
To get visualization, make sure to uncomment the #/control/execute vis.mac
|
||||
line in the macro.
|
||||
|
||||
---->4. PHYSICS
|
||||
|
||||
This example shows:
|
||||
- how to use the Geant4-MicroElec processes,
|
||||
- how to affect them a name
|
||||
- how to combine them with Standard EM Physics.
|
||||
|
||||
A simple electron capture process is also provided in order to kill electrons
|
||||
below a chosen energy threshold, set in the Physics list.
|
||||
|
||||
Look at the PhyscisList.cc file.
|
||||
|
||||
---->5. SIMULATION OUTPUT AND RESULT ANALYZIS
|
||||
|
||||
The output results consists in a microelectronics.root file, containing for each simulation step:
|
||||
- the type of particle for the current step
|
||||
- the type of process for the current step
|
||||
- the track position of the current step (in nanometers)
|
||||
- the energy deposit along the current step (in eV)
|
||||
- the step length (in nm)
|
||||
- the total enery loss along the current step (in eV)
|
||||
|
||||
This file can be easily analyzed using for example the provided ROOT macro
|
||||
file plot.C; to do so :
|
||||
* be sure to have ROOT installed on your machine
|
||||
* be sure to be in the microelectronics directory
|
||||
* launch ROOT by typing root
|
||||
* under your ROOT session, type in : .X plot.C to execute the macro file
|
||||
* alternatively you can type directly under your session : root plot.C
|
||||
|
||||
The naming scheme on the displayed ROOT plots is as follows (see SteppingAction.cc):
|
||||
|
||||
-particles:
|
||||
e- : 1
|
||||
proton : 2
|
||||
ion : 3
|
||||
|
||||
-processes:
|
||||
e-_G4MicroElecElastic 11
|
||||
e-_G4MicroElecInelastic 12
|
||||
eCapture 13
|
||||
|
||||
p_G4MicroElecInelastic 14
|
||||
|
||||
ion_G4MicroElecInelastic 15
|
||||
|
||||
hIoni 16
|
||||
eIoni 17
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Should you have any enquiry, please do not hesitate to contact:
|
||||
melanie.raine@cea.fr
|
||||
@@ -25,7 +25,8 @@
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
// History :
|
||||
// 21/10/2021 DLa update to manage the change of material
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#ifndef DetectorConstruction_h
|
||||
@@ -45,6 +46,7 @@
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
class G4Region;
|
||||
class DetectorMessenger;
|
||||
|
||||
class DetectorConstruction : public G4VUserDetectorConstruction
|
||||
{
|
||||
@@ -56,6 +58,16 @@ public:
|
||||
|
||||
G4VPhysicalVolume* Construct();
|
||||
|
||||
void SetSize (G4double);
|
||||
void SetMaterial (const G4String&);
|
||||
|
||||
inline const G4VPhysicalVolume* GetWorld() const {return fPhysiWorld;};
|
||||
inline G4double GetSize() const {return fBoxSize;};
|
||||
inline const G4Material* GetMaterial() const {return fMaterial;};
|
||||
|
||||
void PrintParameters();
|
||||
void DefineMaterials();
|
||||
|
||||
G4Region* GetTargetRegion() {return fRegion;}
|
||||
|
||||
private:
|
||||
@@ -68,10 +80,16 @@ private:
|
||||
G4LogicalVolume* fLogicWorld;
|
||||
G4Box* fSolidWorld;
|
||||
|
||||
G4Material* fSiMaterial;
|
||||
G4Material* fWorldMaterial;
|
||||
G4LogicalVolume* flogicTarget;
|
||||
G4Box* ftargetSolid;
|
||||
|
||||
|
||||
G4double fBoxSize;
|
||||
G4Material* fMaterial;
|
||||
G4Region* fRegion;
|
||||
|
||||
void DefineMaterials();
|
||||
DetectorMessenger* fDetectorMessenger;
|
||||
|
||||
G4VPhysicalVolume* ConstructDetector();
|
||||
};
|
||||
|
||||
+39
-3
@@ -23,11 +23,47 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
/// \file electromagnetic/TestEm1/include/DetectorMessenger.hh
|
||||
/// \brief Definition of the DetectorMessenger class
|
||||
//
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#ifndef Analysis_h
|
||||
#define Analysis_h 1
|
||||
#ifndef DetectorMessenger_h
|
||||
#define DetectorMessenger_h 1
|
||||
|
||||
#include "g4root.hh"
|
||||
#include "G4UImessenger.hh"
|
||||
#include "globals.hh"
|
||||
|
||||
class DetectorConstruction;
|
||||
class G4UIdirectory;
|
||||
class G4UIcmdWithAString;
|
||||
class G4UIcmdWithADoubleAndUnit;
|
||||
class G4UIcmdWithoutParameter;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class DetectorMessenger: public G4UImessenger
|
||||
{
|
||||
public:
|
||||
|
||||
DetectorMessenger(DetectorConstruction* );
|
||||
~DetectorMessenger();
|
||||
|
||||
virtual void SetNewValue(G4UIcommand*, G4String);
|
||||
|
||||
private:
|
||||
|
||||
DetectorConstruction* fDetector;
|
||||
|
||||
G4UIdirectory* fmicroelectronicsDir;
|
||||
G4UIdirectory* fDetDir;
|
||||
G4UIcmdWithAString* fMaterCmd;
|
||||
G4UIcmdWithADoubleAndUnit* fSizeCmd;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// ClassName: ElectronCapture
|
||||
//
|
||||
// Description: The process to kill e- to save CPU
|
||||
//
|
||||
// Author: V.Ivanchenko 31 August 2010
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// Class description:
|
||||
//
|
||||
// ElectronCapture allows to remove unwanted e- from simulation in
|
||||
// order to improve CPU performance. There are two parameters:
|
||||
//
|
||||
// 1) low energy threshold for e- kinetic energy (default 0)
|
||||
// 2) the name of G4Region where process is active
|
||||
//
|
||||
//
|
||||
// If an electron track is killed then energy deposition is added to the step
|
||||
//
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#ifndef ElectronCapture_h
|
||||
#define ElectronCapture_h 1
|
||||
|
||||
#include "G4VDiscreteProcess.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4ParticleChangeForGamma.hh"
|
||||
|
||||
class G4Region;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class ElectronCapture : public G4VDiscreteProcess
|
||||
{
|
||||
public:
|
||||
|
||||
ElectronCapture(const G4String& regName, G4double ekinlimit);
|
||||
|
||||
virtual ~ElectronCapture();
|
||||
|
||||
void SetKinEnergyLimit(G4double);
|
||||
|
||||
virtual void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
|
||||
virtual G4double PostStepGetPhysicalInteractionLength( const G4Track& track,
|
||||
G4double previousStepSize,
|
||||
G4ForceCondition* condition);
|
||||
|
||||
virtual G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
|
||||
|
||||
protected:
|
||||
|
||||
virtual G4double GetMeanFreePath(const G4Track&, G4double,G4ForceCondition*);
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator as private
|
||||
ElectronCapture(const ElectronCapture&);
|
||||
ElectronCapture& operator = (const ElectronCapture &right);
|
||||
|
||||
G4double kinEnergyThreshold;
|
||||
G4String regionName;
|
||||
G4Region* region;
|
||||
G4ParticleChangeForGamma fParticleChange;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#ifndef MicroElecPhysics_h
|
||||
#define MicroElecPhysics_h 1
|
||||
|
||||
|
||||
#include "G4VUserPhysicsList.hh"
|
||||
#include "G4ProcessManager.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
class MicroElecPhysics: public G4VUserPhysicsList
|
||||
|
||||
{
|
||||
public:
|
||||
|
||||
MicroElecPhysics();
|
||||
virtual ~MicroElecPhysics();
|
||||
|
||||
void SetGammaCut(G4double);
|
||||
void SetElectronCut(G4double);
|
||||
void SetPositronCut(G4double);
|
||||
void SetProtonCut(G4double);
|
||||
|
||||
protected:
|
||||
|
||||
// these methods construct particles
|
||||
void ConstructBosons();
|
||||
void ConstructLeptons();
|
||||
void ConstructBarions();
|
||||
|
||||
// these methods construct physics processes and register them
|
||||
void ConstructGeneral();
|
||||
void ConstructEM();
|
||||
|
||||
// Construct particle and physics
|
||||
void ConstructParticle();
|
||||
void ConstructProcess();
|
||||
|
||||
// set cuts
|
||||
void SetCuts();
|
||||
|
||||
private:
|
||||
G4double cutForGamma;
|
||||
G4double cutForElectron;
|
||||
G4double cutForPositron;
|
||||
G4double cutForProton;
|
||||
|
||||
};
|
||||
#endif
|
||||
@@ -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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#ifndef MicroElecSiPhysics_h
|
||||
#define MicroElecSiPhysics_h 1
|
||||
|
||||
|
||||
#include "G4VUserPhysicsList.hh"
|
||||
#include "G4ProcessManager.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
class MicroElecSiPhysics: public G4VUserPhysicsList
|
||||
|
||||
{
|
||||
public:
|
||||
|
||||
MicroElecSiPhysics();
|
||||
virtual ~MicroElecSiPhysics();
|
||||
|
||||
void SetGammaCut(G4double);
|
||||
void SetElectronCut(G4double);
|
||||
void SetPositronCut(G4double);
|
||||
void SetProtonCut(G4double);
|
||||
|
||||
protected:
|
||||
|
||||
// these methods construct particles
|
||||
void ConstructBosons();
|
||||
void ConstructLeptons();
|
||||
void ConstructBarions();
|
||||
|
||||
// these methods construct physics processes and register them
|
||||
void ConstructGeneral();
|
||||
void ConstructEM();
|
||||
|
||||
// Construct particle and physics
|
||||
void ConstructParticle();
|
||||
void ConstructProcess();
|
||||
|
||||
// set cuts
|
||||
void SetCuts();
|
||||
|
||||
private:
|
||||
G4double cutForGamma;
|
||||
G4double cutForElectron;
|
||||
G4double cutForPositron;
|
||||
G4double cutForProton;
|
||||
|
||||
};
|
||||
#endif
|
||||
@@ -25,7 +25,10 @@
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
//
|
||||
// history :
|
||||
// 21/10/2021 : DLa update in order to manage G4MicroElecSiPhysics (previous model)
|
||||
// and G4MicroElecPhysics (new model)
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#include "G4Types.hh"
|
||||
@@ -35,33 +38,56 @@
|
||||
#include "G4VisExecutive.hh"
|
||||
#include "ActionInitialization.hh"
|
||||
#include "DetectorConstruction.hh"
|
||||
#include "PhysicsList.hh"
|
||||
#include "G4GenericPhysicsList.hh"
|
||||
#include "G4EmStandardPhysics.hh"
|
||||
#include "MicroElecSiPhysics.hh"
|
||||
#include "MicroElecPhysics.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
int main(int argc,char** argv)
|
||||
{
|
||||
G4UIExecutive* session = NULL;
|
||||
G4UIExecutive* session = nullptr;
|
||||
if (argc==1) // Define UI session for interactive mode.
|
||||
{
|
||||
session = new G4UIExecutive(argc, argv);
|
||||
}
|
||||
|
||||
// Choose the Random engine
|
||||
|
||||
G4Random::setTheEngine(new CLHEP::RanecuEngine);
|
||||
|
||||
// Construct the default run manager
|
||||
|
||||
auto* runManager = G4RunManagerFactory::CreateRunManager();
|
||||
G4int nThreads = 4;
|
||||
G4int nThreads = 1; // the new MicroElec works better with only one thread
|
||||
runManager->SetNumberOfThreads(nThreads);
|
||||
|
||||
// Set mandatory user initialization classes
|
||||
DetectorConstruction* detector = new DetectorConstruction;
|
||||
runManager->SetUserInitialization(detector);
|
||||
|
||||
runManager->SetUserInitialization(new PhysicsList);
|
||||
// Management of the MicroElec only Si
|
||||
// and the new MicroElec
|
||||
G4String fileName;
|
||||
fileName = "microelectronics.mac";
|
||||
G4bool microElecSiPhysics;
|
||||
microElecSiPhysics=false;
|
||||
if(argc>1)
|
||||
{
|
||||
if (G4String(argv[1])== "-onlySi") {microElecSiPhysics=true;}
|
||||
else {fileName=argv[1]; }
|
||||
if( argc>2)
|
||||
{
|
||||
if (G4String(argv[2])== "-onlySi"){ microElecSiPhysics=true;}
|
||||
else{ fileName=argv[2];}
|
||||
}
|
||||
}
|
||||
|
||||
if (microElecSiPhysics)
|
||||
{ G4cout << "Physic list : MicroElecSiPhysics (only Silicium)" << G4endl;
|
||||
runManager->SetUserInitialization(new MicroElecSiPhysics());
|
||||
}
|
||||
else
|
||||
{ G4cout << "Physic list : MicroElecPhysics" << G4endl;
|
||||
runManager->SetUserInitialization(new MicroElecPhysics());
|
||||
}
|
||||
|
||||
// User action initialization
|
||||
runManager->SetUserInitialization(new ActionInitialization(detector));
|
||||
@@ -84,7 +110,6 @@ int main(int argc,char** argv)
|
||||
else // Batch mode
|
||||
{
|
||||
G4String command = "/control/execute ";
|
||||
G4String fileName = argv[1];
|
||||
UImanager->ApplyCommand(command+fileName);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/tracking/verbose 0
|
||||
/run/verbose 2
|
||||
/process/eLoss/verbose 1
|
||||
/process/em/verbose 1
|
||||
/run/initialize
|
||||
/gun/particle proton
|
||||
/gun/energy 50 MeV
|
||||
|
||||
@@ -1,12 +1,26 @@
|
||||
/control/execute vis.mac
|
||||
/tracking/verbose 0
|
||||
|
||||
#/gun/particle ion
|
||||
#/gun/ion 20 48 15
|
||||
/gun/particle proton
|
||||
/gun/energy 5 MeV
|
||||
|
||||
#/run/numberOfThreads 2 #if MT is activated
|
||||
|
||||
/run/initialize
|
||||
/run/beamOn 2
|
||||
/control/execute vis.mac
|
||||
/tracking/verbose 0
|
||||
|
||||
|
||||
#/microelectronics/det/setMat G4_Ag
|
||||
#/microelectronics/det/setMat G4_Al
|
||||
#/microelectronics/det/setMat G4_C
|
||||
#/microelectronics/det/setMat G4_Cu
|
||||
#/microelectronics/det/setMat G4_Ge
|
||||
#/microelectronics/det/setMat G4_KAPTON
|
||||
#/microelectronics/det/setMat G4_Ni
|
||||
#/microelectronics/det/setMat G4_Si # default material
|
||||
#/microelectronics/det/setMat G4_SILICON_DIOXIDE
|
||||
#/microelectronics/det/setMat G4_Ti
|
||||
#/microelectronics/det/setMat G4_W
|
||||
|
||||
|
||||
#/gun/particle ion
|
||||
#/gun/ion 20 48 15
|
||||
/gun/particle proton
|
||||
/gun/energy 5 MeV
|
||||
|
||||
#/run/numberOfThreads 2 #if MT is activated
|
||||
|
||||
/run/initialize
|
||||
/run/beamOn 2
|
||||
|
||||
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
|
||||
|
||||
|
||||
**************************************************************
|
||||
Geant4 version Name: geant4-10-07-ref-06 (25-June-2021)
|
||||
Geant4 version Name: geant4-11-00-ref-00 (10-December-2021)
|
||||
Copyright : Geant4 Collaboration
|
||||
References : NIM A 506 (2003), 250-303
|
||||
: IEEE-TNS 53 (2006), 270-278
|
||||
@@ -19,9 +19,10 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
|
||||
WWW : http://geant4.org/
|
||||
**************************************************************
|
||||
|
||||
Physic list : MicroElecPhysics
|
||||
|
||||
### === G4UAtomicDeexcitation::InitialiseForNewRun()
|
||||
PhysicsList::SetCuts:CutLength : 1 um
|
||||
MicroElecPhysics::SetCuts:CutLength : 1 um
|
||||
Visualization Manager instantiating with verbosity "warnings (3)"...
|
||||
Visualization Manager initialising...
|
||||
Registering graphics systems...
|
||||
@@ -30,10 +31,8 @@ You have successfully registered the following graphics systems.
|
||||
Registered graphics systems are:
|
||||
ASCIITree (ATree)
|
||||
DAWNFILE (DAWNFILE)
|
||||
G4HepRep (HepRepXML)
|
||||
G4HepRepFile (HepRepFile)
|
||||
RayTracer (RayTracer)
|
||||
VRML1FILE (VRML1FILE)
|
||||
VRML2FILE (VRML2FILE)
|
||||
gMocrenFile (gMocrenFile)
|
||||
OpenGLImmediateQt (OGLIQt, OGLI)
|
||||
@@ -75,6 +74,84 @@ End of Run User Vis Actions: none
|
||||
|
||||
Some /vis commands (optionally) take a string to specify colour.
|
||||
"/vis/list" to see available colours.
|
||||
=======================================================================
|
||||
====== Electromagnetic Physics Parameters ========
|
||||
=======================================================================
|
||||
LPM effect enabled 1
|
||||
Enable creation and use of sampling tables 0
|
||||
Apply cuts on all EM processes 0
|
||||
Use general process 0
|
||||
Enable linear polarisation for gamma 0
|
||||
Enable sampling of quantum entanglement 0
|
||||
X-section factor for integral approach 0.8
|
||||
Min kinetic energy for tables 100 meV
|
||||
Max kinetic energy for tables 10 TeV
|
||||
Number of bins per decade of a table 20
|
||||
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 livermore
|
||||
=======================================================================
|
||||
====== 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 0 eV
|
||||
Lowest muon/hadron kinetic energy 1 keV
|
||||
Fluctuations of dE/dx are enabled 1
|
||||
Use ICRU90 data 0
|
||||
Use built-in Birks satuaration 0
|
||||
Build CSDA range enabled 0
|
||||
Use cut as a final range enabled 0
|
||||
Enable angular generator interface 1
|
||||
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
|
||||
=======================================================================
|
||||
====== Atomic Deexcitation Parameters ========
|
||||
=======================================================================
|
||||
Fluorescence enabled 1
|
||||
Fluorescence Bearden data files enabled 0
|
||||
Fluorescence ANSTO data files enabled 0
|
||||
Auger electron cascade enabled 1
|
||||
PIXE atomic de-excitation enabled 0
|
||||
De-excitation module ignores cuts 0
|
||||
Type of PIXE cross section for hadrons Empirical
|
||||
Type of PIXE cross section for e+- Livermore
|
||||
=======================================================================
|
||||
|
||||
### === Deexcitation model UAtomDeexcitation is activated for 2 regions:
|
||||
DefaultRegionForTheWorld 1 1 1
|
||||
@@ -85,87 +162,126 @@ Some /vis commands (optionally) take a string to specify colour.
|
||||
### === Ignore cuts flag: 0
|
||||
### === PIXE model for hadrons: Empirical
|
||||
### === PIXE model for e+-: Livermore
|
||||
****************************
|
||||
mermin model loaded !
|
||||
Material 1 / 2 : G4_Si
|
||||
Material 2 / 2 : G4_Si
|
||||
****************************
|
||||
mermin model loaded !
|
||||
Material 1 / 2 : G4_Si
|
||||
Inelastic/mermin_sigma_inelastic_e-_Si
|
||||
loaddata : Inelastic/mermin_sigma_inelastic_e-_Si
|
||||
Faster code = true
|
||||
Inelastic/cumulated_mermin_sigmadiff_inelastic_e-_Si.dat
|
||||
add to material vector
|
||||
Material 2 / 2 : G4_Si
|
||||
Inelastic/mermin_sigma_inelastic_e-_Si
|
||||
loaddata : Inelastic/mermin_sigma_inelastic_e-_Si
|
||||
Faster code = true
|
||||
Inelastic/cumulated_mermin_sigmadiff_inelastic_e-_Si.dat
|
||||
add to material vector
|
||||
****************************
|
||||
mermin model loaded !
|
||||
Material 1 / 2 : G4_Si
|
||||
Inelastic/mermin_sigma_inelastic_p_Si
|
||||
loaddata : Inelastic/mermin_sigma_inelastic_p_Si
|
||||
Faster code = true
|
||||
Inelastic/cumulated_mermin_sigmadiff_inelastic_p_Si.dat
|
||||
Material 2 / 2 : G4_Si
|
||||
Inelastic/mermin_sigma_inelastic_p_Si
|
||||
loaddata : Inelastic/mermin_sigma_inelastic_p_Si
|
||||
Faster code = true
|
||||
Inelastic/cumulated_mermin_sigmadiff_inelastic_p_Si.dat
|
||||
|
||||
msc: for e- SubType= 10
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
UrbanMsc : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
|
||||
UrbanMsc : Emin= 0 eV Emax= 10 TeV Nbins=220 100 eV - 10 TeV
|
||||
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
|
||||
===== EM models for the G4Region Target ======
|
||||
UrbanMsc : Emin= 100 MeV Emax= 100 TeV Nbins=42 100 MeV - 100 TeV
|
||||
UrbanMsc : Emin= 100 MeV Emax= 10 TeV Nbins=100 100 MeV - 10 TeV
|
||||
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
|
||||
|
||||
eIoni: for e- XStype:1 SubType=2
|
||||
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
|
||||
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
|
||||
dE/dx and range tables from 100 meV to 10 TeV in 280 bins
|
||||
Lambda tables from threshold to 10 TeV, 20 bins/decade, spline: 1
|
||||
StepFunction=(0.2, 1 mm), integ: 1, fluct: 1, linLossLim= 0.01
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
MollerBhabha : Emin= 0 meV Emax= 100 TeV
|
||||
MollerBhabha : Emin= 0 eV Emax= 10 TeV deltaVI
|
||||
===== EM models for the G4Region Target ======
|
||||
MollerBhabha : Emin= 100 MeV Emax= 10 TeV
|
||||
MollerBhabha : Emin= 10 MeV Emax= 10 TeV deltaVI
|
||||
|
||||
e-_G4MicroElecElastic: for e- SubType=51 BuildTable=0
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
DummyModel : Emin= 0 meV Emax= 100 TeV
|
||||
DummyModel : Emin= 0 eV Emax= 10 TeV
|
||||
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
|
||||
===== EM models for the G4Region Target ======
|
||||
MicroElecElasticModel : Emin= 0 meV Emax= 100 MeV
|
||||
MicroElecElasticModel : Emin= 0 eV Emax= 500 keV
|
||||
|
||||
e-_G4MicroElecInelastic: for e- SubType=53 BuildTable=0
|
||||
e-_G4Dielectrics: for e- SubType=53 BuildTable=0
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
DummyModel : Emin= 0 meV Emax= 100 TeV
|
||||
DummyModel : Emin= 0 eV Emax= 10 TeV
|
||||
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
|
||||
===== EM models for the G4Region Target ======
|
||||
MicroElecInelasticModel : Emin= 0 meV Emax= 100 MeV deltaVI Fluo
|
||||
MicroElecInelasticModel : Emin= 0 eV Emax= 10 MeV deltaVI Fluo
|
||||
|
||||
msc: for proton SubType= 10
|
||||
e-_G4LOPhononScattering: for e- SubType=51 BuildTable=0
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
UrbanMsc : Emin= 0 meV Emax= 100 TeV Nbins=84 100 eV - 100 TeV
|
||||
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
|
||||
DummyModel : Emin= 0 eV Emax= 10 TeV
|
||||
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
|
||||
===== EM models for the G4Region Target ======
|
||||
G4MicroElecLOPhononModel : Emin= 0 eV Emax= 10 MeV
|
||||
G4MicroElecSurface::Initialise: Ncouples= 2
|
||||
G4Surface, Material 1 / 2 : G4_Si
|
||||
G4Surface, Material 2 / 2 : G4_Si
|
||||
|
||||
hIoni: for proton XStype:1 SubType=2
|
||||
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
|
||||
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
|
||||
dE/dx and range tables from 100 meV to 10 TeV in 280 bins
|
||||
Lambda tables from threshold to 10 TeV, 20 bins/decade, spline: 1
|
||||
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.01
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
Bragg : Emin= 0 meV Emax= 2 MeV
|
||||
BetheBloch : Emin= 2 MeV Emax= 100 TeV
|
||||
Bragg : Emin= 0 eV Emax= 2 MeV deltaVI
|
||||
BetheBloch : Emin= 2 MeV Emax= 10 TeV deltaVI
|
||||
===== EM models for the G4Region Target ======
|
||||
Bragg : Emin= 0 meV Emax= 2 MeV
|
||||
BetheBloch : Emin= 10 GeV Emax= 10 TeV
|
||||
BetheBloch : Emin= 10 MeV Emax= 10 TeV deltaVI
|
||||
|
||||
p_G4MicroElecInelastic: for proton SubType=53 BuildTable=0
|
||||
p_G4Dielectrics: for proton SubType=53 BuildTable=0
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
DummyModel : Emin= 0 meV Emax= 100 TeV
|
||||
DummyModel : Emin= 0 eV Emax= 10 TeV
|
||||
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
|
||||
===== EM models for the G4Region Target ======
|
||||
MicroElecInelasticModel : Emin= 50 keV Emax= 10 GeV deltaVI Fluo
|
||||
DummyModel : Emin= 10 GeV Emax= 10 TeV
|
||||
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
|
||||
|
||||
msc: for GenericIon SubType= 10
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
UrbanMsc : Emin= 0 meV Emax= 100 TeV
|
||||
StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm
|
||||
MicroElecInelasticModel : Emin= 100 eV Emax= 10 MeV deltaVI Fluo
|
||||
|
||||
ionIoni: for GenericIon XStype:1 SubType=2
|
||||
dE/dx and range tables from 100 eV to 100 TeV in 84 bins
|
||||
Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1
|
||||
dE/dx and range tables from 100 meV to 10 TeV in 280 bins
|
||||
Lambda tables from threshold to 10 TeV, 20 bins/decade, spline: 1
|
||||
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.02
|
||||
Stopping Power data for 17 ion/material pairs
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
BraggIon : Emin= 0 meV Emax= 2 MeV
|
||||
BetheBloch : Emin= 2 MeV Emax= 100 TeV
|
||||
BraggIon : Emin= 0 eV Emax= 2 MeV deltaVI
|
||||
BetheBloch : Emin= 2 MeV Emax= 10 TeV deltaVI
|
||||
===== EM models for the G4Region Target ======
|
||||
BraggIon : Emin= 0 meV Emax= 2 MeV
|
||||
BetheBloch : Emin= 10 GeV Emax= 10 TeV
|
||||
BetheBloch : Emin= 10 MeV Emax= 10 TeV deltaVI
|
||||
|
||||
ion_G4MicroElecInelastic: for GenericIon SubType=53 BuildTable=0
|
||||
ion_G4Dielectrics: for GenericIon SubType=53 BuildTable=0
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
DummyModel : Emin= 0 meV Emax= 100 TeV
|
||||
DummyModel : Emin= 0 eV Emax= 10 TeV
|
||||
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
|
||||
===== EM models for the G4Region Target ======
|
||||
MicroElecInelasticModel : Emin= 50 keV Emax= 10 GeV deltaVI Fluo
|
||||
DummyModel : Emin= 10 GeV Emax= 10 TeV
|
||||
MicroElecInelasticModel : Emin= 100 eV Emax= 10 MeV deltaVI Fluo
|
||||
|
||||
ionIoni: for alpha XStype:1 SubType=2
|
||||
dE/dx and range tables from 100 meV to 10 TeV in 280 bins
|
||||
Lambda tables from threshold to 10 TeV, 20 bins/decade, spline: 1
|
||||
StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.02
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
BraggIon : Emin= 0 eV Emax=7.9452 MeV deltaVI
|
||||
BetheBloch : Emin=7.9452 MeV Emax= 10 TeV deltaVI
|
||||
===== EM models for the G4Region Target ======
|
||||
BetheBloch : Emin= 10 MeV Emax= 10 TeV deltaVI
|
||||
|
||||
alpha_G4Dielectrics: for alpha SubType=53 BuildTable=0
|
||||
===== EM models for the G4Region DefaultRegionForTheWorld ======
|
||||
DummyModel : Emin= 0 eV Emax= 10 TeV
|
||||
StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
|
||||
|
||||
Region <DefaultRegionForTheWorld> -- -- appears in <World> world volume
|
||||
@@ -193,14 +309,14 @@ Region <Target> -- -- appears in <World> world volume
|
||||
Index : 0 used in the geometry : Yes
|
||||
Material : G4_Si
|
||||
Range cuts : gamma 1 um e- 1 um e+ 1 um proton 1 um
|
||||
Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 100 eV
|
||||
Energy thresholds : gamma 1 keV e- 1 keV e+ 1 keV proton 100 eV
|
||||
Region(s) which use this couple :
|
||||
DefaultRegionForTheWorld
|
||||
|
||||
Index : 1 used in the geometry : Yes
|
||||
Material : G4_Si
|
||||
Range cuts : gamma 1 nm e- 1 nm e+ 1 nm proton 1 nm
|
||||
Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 100 meV
|
||||
Energy thresholds : gamma 1 keV e- 1 keV e+ 1 keV proton 100 meV
|
||||
Region(s) which use this couple :
|
||||
Target
|
||||
|
||||
@@ -214,20 +330,37 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics
|
||||
G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model.
|
||||
See commands in /vis/modeling/trajectories/ for other options.
|
||||
### Run 0 starts.
|
||||
##### Create analysis manager 0x19ac820
|
||||
Using Root analysis manager
|
||||
##### Create analysis manager 0x13a89a0
|
||||
Using analysis manager
|
||||
... set ntuple merging row mode : row-wise - done
|
||||
... create file : microelectronics.root - done
|
||||
... open analysis file : microelectronics.root - done
|
||||
... open analysis file : microelectronics.root - done
|
||||
Calling G4MicroElecElasticModel_new::Initialise()
|
||||
MicroElasticModel, Material 1 / 2 : G4_Si
|
||||
Si
|
||||
Reading TCS file
|
||||
Elastic Total Cross file : Elastic/elsepa_elastic_cross_e_Si
|
||||
loaddata : Elastic/elsepa_elastic_cross_e_Si
|
||||
Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.0/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat
|
||||
MicroElasticModel, Material 2 / 2 : G4_Si
|
||||
Si
|
||||
Reading TCS file
|
||||
Elastic Total Cross file : Elastic/elsepa_elastic_cross_e_Si
|
||||
loaddata : Elastic/elsepa_elastic_cross_e_Si
|
||||
Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.0/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat
|
||||
Run terminated.
|
||||
Run Summary
|
||||
Number of events processed : 10
|
||||
User=0.000000s Real=0.004297s Sys=0.000000s
|
||||
User=0.260000s Real=0.286508s Sys=0.010000s
|
||||
... write file : microelectronics.root - done
|
||||
... close file : microelectronics.root - done
|
||||
... clear all data - done
|
||||
Number and type of particles created outside region "Target" :
|
||||
N e- : 1
|
||||
_______________________
|
||||
Number and type of particles created in region "Target" :
|
||||
N e- : 130
|
||||
N e- : 891
|
||||
0 events have been kept for refreshing and/or reviewing.
|
||||
"/vis/reviewKeptEvents" to review them one by one.
|
||||
"/vis/enable", then "/vis/viewer/flush" or "/vis/viewer/rebuild" to see them accumulated.
|
||||
@@ -254,12 +387,12 @@ Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
|
||||
Pool ID '7G4Event', size : 0.000961 MB
|
||||
Pool ID '15G4PrimaryVertex', size : 0.000961 MB
|
||||
Pool ID '17G4PrimaryParticle', size : 0.000961 MB
|
||||
Pool ID '17G4DynamicParticle', size : 0.00481 MB
|
||||
Pool ID '7G4Track', size : 0.00865 MB
|
||||
Pool ID '17G4DynamicParticle', size : 0.00769 MB
|
||||
Pool ID '7G4Track', size : 0.0154 MB
|
||||
Pool ID '18G4TouchableHistory', size : 0.000961 MB
|
||||
Pool ID '15G4CountedObjectIvE', size : 0.000961 MB
|
||||
Number of memory pools allocated: 9 of which, static: 0
|
||||
Dynamic pools deleted: 9 / Total memory freed: 0.027 MB
|
||||
Dynamic pools deleted: 9 / Total memory freed: 0.037 MB
|
||||
============================================================
|
||||
G4Allocator objects are deleted.
|
||||
UImanager deleted.
|
||||
|
||||
@@ -10,17 +10,17 @@ gROOT->SetStyle("Plain");
|
||||
Double_t scale;
|
||||
|
||||
c1 = new TCanvas ("c1","",20,20,1000,500);
|
||||
c1.Divide(2,1);
|
||||
c1->Divide(2,1);
|
||||
|
||||
system ("rm -rf microelectronics.root");
|
||||
system ("hadd microelectronics.root microelectronics_*.root");
|
||||
//system ("rm -rf microelectronics.root");
|
||||
//system ("hadd microelectronics.root microelectronics_*.root");
|
||||
|
||||
TFile f("microelectronics.root");
|
||||
|
||||
TNtuple* ntuple;
|
||||
ntuple = (TNtuple*)f->Get("microelectronics");
|
||||
ntuple = (TNtuple*)f.Get("microelectronics");
|
||||
|
||||
c1.cd(1);
|
||||
c1->cd(1);
|
||||
gStyle->SetOptStat(000000);
|
||||
|
||||
// All
|
||||
@@ -37,7 +37,7 @@ c1.cd(1);
|
||||
|
||||
gPad->SetLogy();
|
||||
|
||||
c1.cd(2);
|
||||
c1->cd(2);
|
||||
|
||||
// Electrons
|
||||
ntuple->SetMarkerColor(2);
|
||||
|
||||
@@ -23,24 +23,43 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// History :
|
||||
// 21/10/2021 : DLa update to modify the material and the size
|
||||
// -------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "DetectorConstruction.hh"
|
||||
#include "DetectorMessenger.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "G4Region.hh"
|
||||
#include "G4ProductionCuts.hh"
|
||||
#include "G4RunManager.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
DetectorConstruction::DetectorConstruction()
|
||||
:fPhysiWorld(NULL), fLogicWorld(NULL), fSolidWorld(NULL)
|
||||
{}
|
||||
:G4VUserDetectorConstruction(), fPhysiWorld(nullptr), fLogicWorld(nullptr), fSolidWorld(nullptr), fWorldMaterial(nullptr), flogicTarget(nullptr), ftargetSolid(nullptr), fMaterial(nullptr), fRegion(nullptr)
|
||||
{
|
||||
fBoxSize = 1.0*um;
|
||||
DefineMaterials();
|
||||
SetMaterial("G4_Si");
|
||||
fDetectorMessenger = new DetectorMessenger(this);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
DetectorConstruction::~DetectorConstruction()
|
||||
{}
|
||||
{
|
||||
delete fPhysiWorld;
|
||||
delete fLogicWorld;
|
||||
delete fSolidWorld;
|
||||
//delete fWorldMaterial; // no delete because link to database
|
||||
delete flogicTarget;
|
||||
delete ftargetSolid;
|
||||
delete fMaterial;
|
||||
delete fRegion;
|
||||
delete fDetectorMessenger;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -58,31 +77,59 @@ void DetectorConstruction::DefineMaterials()
|
||||
|
||||
// Silicon is defined from NIST material database
|
||||
G4NistManager * man = G4NistManager::Instance();
|
||||
G4Material * Si = man->FindOrBuildMaterial("G4_Si");
|
||||
|
||||
// Default materials in setup.
|
||||
fSiMaterial = Si;
|
||||
fMaterial = man->FindOrBuildMaterial("G4_Si");
|
||||
fWorldMaterial = man->FindOrBuildMaterial("G4_Si"); // world material;
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
|
||||
void DetectorConstruction::SetMaterial(const G4String& materialChoice)
|
||||
{
|
||||
// search the material by its name
|
||||
G4Material* pttoMaterial =
|
||||
G4NistManager::Instance()->FindOrBuildMaterial(materialChoice);
|
||||
|
||||
if (pttoMaterial) {
|
||||
fMaterial = pttoMaterial;
|
||||
if ( flogicTarget ) { flogicTarget->SetMaterial(fMaterial); }
|
||||
} else {
|
||||
G4cout << "\n--> warning from DetectorConstruction::SetMaterial : "
|
||||
<< materialChoice << " not found" << G4endl;
|
||||
}
|
||||
G4RunManager::GetRunManager()->PhysicsHasBeenModified();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
G4VPhysicalVolume* DetectorConstruction::ConstructDetector()
|
||||
{
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
// WORLD VOLUME
|
||||
|
||||
fWorldSizeX = 1*um;
|
||||
fWorldSizeY = 1*um;
|
||||
fWorldSizeZ = 1*um;
|
||||
|
||||
G4double TargetSizeX = 1*um;
|
||||
G4double TargetSizeY = TargetSizeX;
|
||||
G4double TargetSizeZ = TargetSizeX;
|
||||
fBoxSize = TargetSizeX;
|
||||
|
||||
fWorldSizeX = TargetSizeX*2;
|
||||
fWorldSizeY = TargetSizeY*2;
|
||||
fWorldSizeZ = TargetSizeZ*2;
|
||||
|
||||
fSolidWorld = new G4Box("World", //its name
|
||||
fWorldSizeX/2,fWorldSizeY/2,fWorldSizeZ/2); //its size
|
||||
|
||||
|
||||
fLogicWorld = new G4LogicalVolume(fSolidWorld, //its solid
|
||||
fSiMaterial, //its material
|
||||
fWorldMaterial, //its material
|
||||
"World"); //its name
|
||||
|
||||
fPhysiWorld = new G4PVPlacement(0, //no rotation
|
||||
@@ -93,20 +140,20 @@ G4VPhysicalVolume* DetectorConstruction::ConstructDetector()
|
||||
false, //no boolean operation
|
||||
0); //copy number
|
||||
|
||||
G4double TargetSizeZ = 0.2*um;
|
||||
|
||||
G4Box* targetSolid = new G4Box("Target", //its name
|
||||
fWorldSizeX/2,fWorldSizeY/2,TargetSizeZ/2); //its size
|
||||
|
||||
ftargetSolid = new G4Box("Target", //its name
|
||||
TargetSizeX/2,TargetSizeY/2,TargetSizeZ/2); //its size
|
||||
|
||||
|
||||
G4LogicalVolume* logicTarget = new G4LogicalVolume(targetSolid, //its solid
|
||||
fSiMaterial, //its material
|
||||
flogicTarget = new G4LogicalVolume(ftargetSolid, //its solid
|
||||
fMaterial, //its material
|
||||
"Target"); //its name
|
||||
|
||||
new G4PVPlacement(0, //no rotation
|
||||
G4ThreeVector(), //at (0,0,0)
|
||||
"Target", //its name
|
||||
logicTarget, //its logical volume
|
||||
flogicTarget, //its logical volume
|
||||
fPhysiWorld, //its mother volume
|
||||
false, //no boolean operation
|
||||
0); //copy number
|
||||
@@ -118,7 +165,7 @@ G4VPhysicalVolume* DetectorConstruction::ConstructDetector()
|
||||
|
||||
G4VisAttributes* worldVisAtt1 = new G4VisAttributes(G4Colour(1.0,0.0,0.0));
|
||||
worldVisAtt1->SetVisibility(true);
|
||||
logicTarget->SetVisAttributes(worldVisAtt1);
|
||||
flogicTarget->SetVisAttributes(worldVisAtt1);
|
||||
|
||||
// Create Target G4Region and add logical volume
|
||||
|
||||
@@ -133,7 +180,31 @@ G4VPhysicalVolume* DetectorConstruction::ConstructDetector()
|
||||
cuts->SetProductionCut(defCut,"proton");
|
||||
|
||||
fRegion->SetProductionCuts(cuts);
|
||||
fRegion->AddRootLogicalVolume(logicTarget);
|
||||
fRegion->AddRootLogicalVolume(flogicTarget);
|
||||
|
||||
return fPhysiWorld;
|
||||
}
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void DetectorConstruction::SetSize(G4double value)
|
||||
{
|
||||
fBoxSize = value;
|
||||
if(ftargetSolid) {
|
||||
ftargetSolid->SetXHalfLength(fBoxSize/2);
|
||||
ftargetSolid->SetYHalfLength(fBoxSize/2);
|
||||
ftargetSolid->SetZHalfLength(fBoxSize/2);
|
||||
}
|
||||
fWorldSizeX = value*2.0;
|
||||
fWorldSizeY = value*2.0;
|
||||
fWorldSizeZ = value*2.0;
|
||||
|
||||
if(fSolidWorld) {
|
||||
fSolidWorld->SetXHalfLength(fWorldSizeX/2);
|
||||
fSolidWorld->SetYHalfLength(fWorldSizeY/2);
|
||||
fSolidWorld->SetZHalfLength(fWorldSizeZ/2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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 electromagnetic/microelectronics1/src/DetectorMessenger.cc
|
||||
/// \brief Implementation of the DetectorMessenger class
|
||||
//
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "DetectorMessenger.hh"
|
||||
|
||||
#include "DetectorConstruction.hh"
|
||||
#include "G4UIdirectory.hh"
|
||||
#include "G4UIcmdWithAString.hh"
|
||||
#include "G4UIcmdWithADoubleAndUnit.hh"
|
||||
#include "G4UIcmdWithoutParameter.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
DetectorMessenger::DetectorMessenger(DetectorConstruction * Det)
|
||||
:G4UImessenger(),fDetector(Det),
|
||||
fmicroelectronicsDir(0),
|
||||
fDetDir(0),
|
||||
fMaterCmd(0),
|
||||
fSizeCmd(0)
|
||||
{
|
||||
|
||||
fmicroelectronicsDir = new G4UIdirectory("/microelectronics/");
|
||||
fmicroelectronicsDir->SetGuidance("commands specific to this example");
|
||||
|
||||
fDetDir = new G4UIdirectory("/microelectronics/det/");
|
||||
fDetDir->SetGuidance("detector construction commands");
|
||||
|
||||
fMaterCmd = new G4UIcmdWithAString("/microelectronics/det/setMat",this);
|
||||
fMaterCmd->SetGuidance("Select material of the box.");
|
||||
fMaterCmd->SetParameterName("choice",false);
|
||||
fMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
fMaterCmd->SetToBeBroadcasted(false);
|
||||
|
||||
fSizeCmd = new G4UIcmdWithADoubleAndUnit("/microelectronics/det/setSize",this);
|
||||
fSizeCmd->SetGuidance("Set size of the box");
|
||||
fSizeCmd->SetParameterName("Size",false);
|
||||
fSizeCmd->SetRange("Size>0.");
|
||||
fSizeCmd->SetUnitCategory("Length");
|
||||
fSizeCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
fSizeCmd->SetToBeBroadcasted(false);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
DetectorMessenger::~DetectorMessenger()
|
||||
{
|
||||
delete fMaterCmd;
|
||||
delete fSizeCmd;
|
||||
delete fDetDir;
|
||||
delete fmicroelectronicsDir;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
|
||||
{
|
||||
if( command == fMaterCmd )
|
||||
{ fDetector->SetMaterial(newValue);}
|
||||
|
||||
if( command == fSizeCmd )
|
||||
{ fDetector->SetSize(fSizeCmd->GetNewDoubleValue(newValue));}
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
@@ -0,0 +1,133 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// ClassName: ElectronCapture
|
||||
//
|
||||
// Description: The process to kill particles to save CPU
|
||||
//
|
||||
// Author: V.Ivanchenko 31 August 2010
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "ElectronCapture.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4Step.hh"
|
||||
#include "G4Track.hh"
|
||||
#include "G4Region.hh"
|
||||
#include "G4RegionStore.hh"
|
||||
#include "G4Electron.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
ElectronCapture::ElectronCapture(const G4String& regName, G4double ekinlim)
|
||||
: G4VDiscreteProcess("eCapture", fElectromagnetic), kinEnergyThreshold(ekinlim),
|
||||
regionName(regName), region(0)
|
||||
{
|
||||
if(regName == "" || regName == "world") {
|
||||
regionName = "DefaultRegionForTheWorld";
|
||||
}
|
||||
pParticleChange = &fParticleChange;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
ElectronCapture::~ElectronCapture()
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void ElectronCapture::SetKinEnergyLimit(G4double val)
|
||||
{
|
||||
kinEnergyThreshold = val;
|
||||
if(verboseLevel > 0) {
|
||||
G4cout << "### ElectronCapture: Tracking cut E(MeV) = "
|
||||
<< kinEnergyThreshold/MeV << G4endl;
|
||||
}
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void ElectronCapture::BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
{
|
||||
region = (G4RegionStore::GetInstance())->GetRegion(regionName);
|
||||
if(region && verboseLevel > 0) {
|
||||
G4cout << "### ElectronCapture: Tracking cut E(MeV) = "
|
||||
<< kinEnergyThreshold/MeV << " is assigned to " << regionName
|
||||
<< G4endl;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4bool ElectronCapture::IsApplicable(const G4ParticleDefinition&)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
G4double
|
||||
ElectronCapture::PostStepGetPhysicalInteractionLength(const G4Track& aTrack,
|
||||
G4double,
|
||||
G4ForceCondition* condition)
|
||||
{
|
||||
// condition is set to "Not Forced"
|
||||
*condition = NotForced;
|
||||
|
||||
G4double limit = DBL_MAX;
|
||||
if(region) {
|
||||
if(aTrack.GetVolume()->GetLogicalVolume()->GetRegion() == region &&
|
||||
aTrack.GetKineticEnergy() < kinEnergyThreshold) { limit = 0.0; }
|
||||
}
|
||||
return limit;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4VParticleChange* ElectronCapture::PostStepDoIt(const G4Track& aTrack,
|
||||
const G4Step&)
|
||||
{
|
||||
pParticleChange->Initialize(aTrack);
|
||||
pParticleChange->ProposeTrackStatus(fStopAndKill);
|
||||
pParticleChange->ProposeLocalEnergyDeposit(aTrack.GetKineticEnergy());
|
||||
fParticleChange.SetProposedKineticEnergy(0.0);
|
||||
return pParticleChange;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4double ElectronCapture::GetMeanFreePath(const G4Track&,G4double,
|
||||
G4ForceCondition*)
|
||||
{
|
||||
return DBL_MAX;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
@@ -0,0 +1,424 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#include "MicroElecPhysics.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
|
||||
|
||||
// Geant4-MicroElec MODELS
|
||||
|
||||
#include "G4MicroElecElastic.hh"
|
||||
#include "G4MicroElecElasticModel_new.hh"
|
||||
|
||||
#include "G4MicroElecInelastic.hh"
|
||||
#include "G4MicroElecInelasticModel_new.hh"
|
||||
|
||||
#include "G4MicroElecLOPhononScattering.hh"
|
||||
#include "G4MicroElecLOPhononModel.hh"
|
||||
#include "G4MicroElecSurface.hh"
|
||||
|
||||
//
|
||||
|
||||
#include "G4LossTableManager.hh"
|
||||
#include "G4EmConfigurator.hh"
|
||||
#include "G4VEmModel.hh"
|
||||
#include "G4DummyModel.hh"
|
||||
#include "G4eIonisation.hh"
|
||||
#include "G4hIonisation.hh"
|
||||
#include "G4ionIonisation.hh"
|
||||
#include "G4eMultipleScattering.hh"
|
||||
#include "G4hMultipleScattering.hh"
|
||||
#include "G4BraggModel.hh"
|
||||
#include "G4BraggIonModel.hh"
|
||||
#include "G4BetheBlochModel.hh"
|
||||
#include "G4UrbanMscModel.hh"
|
||||
#include "G4MollerBhabhaModel.hh"
|
||||
#include "G4IonFluctuations.hh"
|
||||
#include "G4UniversalFluctuation.hh"
|
||||
|
||||
#include "ElectronCapture.hh"
|
||||
|
||||
#include "G4UAtomicDeexcitation.hh"
|
||||
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
MicroElecPhysics::MicroElecPhysics(): G4VUserPhysicsList()
|
||||
{
|
||||
defaultCutValue = 1*micrometer;
|
||||
cutForGamma = defaultCutValue;
|
||||
cutForElectron = defaultCutValue;
|
||||
cutForPositron = defaultCutValue;
|
||||
cutForProton = defaultCutValue;
|
||||
|
||||
SetVerboseLevel(1);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
MicroElecPhysics::~MicroElecPhysics()
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecPhysics::ConstructParticle()
|
||||
{
|
||||
ConstructBosons();
|
||||
ConstructLeptons();
|
||||
ConstructBarions();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecPhysics::ConstructBosons()
|
||||
{
|
||||
// gamma
|
||||
G4Gamma::GammaDefinition();
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecPhysics::ConstructLeptons()
|
||||
{
|
||||
// leptons
|
||||
G4Electron::ElectronDefinition();
|
||||
G4Positron::PositronDefinition();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecPhysics::ConstructBarions()
|
||||
{
|
||||
// baryons
|
||||
G4Proton::ProtonDefinition();
|
||||
G4GenericIon::GenericIonDefinition();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecPhysics::ConstructProcess()
|
||||
{
|
||||
AddTransportation();
|
||||
ConstructEM();
|
||||
ConstructGeneral();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecPhysics::ConstructEM()
|
||||
{
|
||||
|
||||
G4EmParameters* param = G4EmParameters::Instance();
|
||||
//param->SetDefaults();
|
||||
param->SetBuildCSDARange(true);
|
||||
//param->SetMscStepLimitType(fUseSafetyPlus);
|
||||
//param->SetMscStepLimitType(fUseDistanceToBoundary);
|
||||
param->SetMscStepLimitType(fUseSafety);
|
||||
param->RegionsMicroElec();
|
||||
// physicList ISS
|
||||
param->SetDefaults();
|
||||
param->SetMinEnergy(0.1*eV);
|
||||
param->SetMaxEnergy(10 * TeV);
|
||||
param->SetLowestElectronEnergy(0 * eV); //<--- Energie de cut dans le vide!!! A fixer 0eV pour ne pas fausser les SEY
|
||||
param->SetNumberOfBinsPerDecade(20);
|
||||
param->ActivateAngularGeneratorForIonisation(true);
|
||||
param->SetAugerCascade(true);//*/
|
||||
|
||||
auto particleIterator=GetParticleIterator();
|
||||
particleIterator->reset();
|
||||
|
||||
while( (*particleIterator)() )
|
||||
{
|
||||
|
||||
G4ParticleDefinition* particle = particleIterator->value();
|
||||
G4ProcessManager* pmanager = particle->GetProcessManager();
|
||||
G4String particleName = particle->GetParticleName();
|
||||
|
||||
// *********************************
|
||||
// 1) Processes for the World region
|
||||
// *********************************
|
||||
|
||||
if (particleName == "e-") {
|
||||
|
||||
|
||||
// STANDARD msc is active in the world
|
||||
G4eMultipleScattering* msc = new G4eMultipleScattering();
|
||||
msc->AddEmModel(1, new G4UrbanMscModel());
|
||||
pmanager->AddProcess(msc, -1, 1, -1);
|
||||
|
||||
// STANDARD ionisation is active in the world
|
||||
G4eIonisation* eion = new G4eIonisation();
|
||||
pmanager->AddProcess(eion, -1, 2, 2);
|
||||
|
||||
// MicroElec elastic is not active in the world
|
||||
//G4MicroElecElasticCorrected* theMicroElecElasticProcess = new G4MicroElecElasticCorrected("e-_G4MicroElecElastic");
|
||||
//theMicroElecElasticProcess->SetEmModel(new G4DummyModel(),1);
|
||||
//pmanager->AddDiscreteProcess(theMicroElecElasticProcess);
|
||||
|
||||
G4MicroElecElastic* theMicroElecElasticProcess = new G4MicroElecElastic("e-_G4MicroElecElastic");
|
||||
theMicroElecElasticProcess->SetEmModel(new G4DummyModel(),1);
|
||||
// G4MicroElecElasticModel_new* mod = new G4MicroElecElasticModel_new();
|
||||
//theMicroElecElasticProcess->AddEmModel(0,mod);
|
||||
pmanager->AddDiscreteProcess(theMicroElecElasticProcess);
|
||||
|
||||
// MicroElec ionisation is not active in the world
|
||||
/*G4MicroElecInelastic* microelecioni = new G4MicroElecInelastic("e-_G4MicroElecInelastic");
|
||||
microelecioni->SetEmModel(new G4DummyModel(),1);
|
||||
pmanager->AddDiscreteProcess(microelecioni);*/
|
||||
|
||||
G4MicroElecInelastic* microelecioni = new G4MicroElecInelastic("e-_G4Dielectrics");
|
||||
microelecioni->SetEmModel(new G4DummyModel(),1);
|
||||
pmanager->AddDiscreteProcess(microelecioni);
|
||||
|
||||
//Phonons for SiO2
|
||||
|
||||
G4MicroElecLOPhononScattering* opticalPhonon = new G4MicroElecLOPhononScattering("e-_G4LOPhononScattering");
|
||||
opticalPhonon->SetEmModel(new G4DummyModel(), 1);
|
||||
pmanager->AddDiscreteProcess(opticalPhonon);
|
||||
|
||||
/*G4LOPhononScattering* LO60 = new G4LOPhononScattering("e-_G4LO60");
|
||||
LO60->SetEmModel(new G4DummyModel(), 1);
|
||||
pmanager->AddDiscreteProcess(LO60);//*/
|
||||
|
||||
|
||||
|
||||
G4MicroElecSurface* MicroElecSurf = new G4MicroElecSurface("e-_G4MicroElecSurface");
|
||||
MicroElecSurf->SetProcessManager(pmanager);
|
||||
pmanager->AddDiscreteProcess(MicroElecSurf);//*/
|
||||
|
||||
ElectronCapture* ecap = new ElectronCapture("Target",0.9*eV); //<--- Piges pour Al2O3
|
||||
pmanager->AddDiscreteProcess(ecap);//*/
|
||||
|
||||
} else if ( particleName == "proton" ) {
|
||||
|
||||
// STANDARD msc is active in the world
|
||||
/*G4hMultipleScattering* msc = new G4hMultipleScattering();
|
||||
msc->AddEmModel(1, new G4UrbanMscModel());
|
||||
pmanager->AddProcess(msc, -1, 1, -1);*/
|
||||
|
||||
|
||||
// STANDARD ionisation is active in the world
|
||||
G4hIonisation* hion = new G4hIonisation();
|
||||
pmanager->AddProcess(hion, -1, 2, 2);
|
||||
|
||||
// Dielectric ionisation is not active in the world
|
||||
G4MicroElecInelastic* dielectricioni = new G4MicroElecInelastic("p_G4Dielectrics");
|
||||
dielectricioni->SetEmModel(new G4DummyModel(),1);
|
||||
//dielectricioni->SetEmModel(new G4DummyModel(),2);
|
||||
pmanager->AddDiscreteProcess(dielectricioni);
|
||||
|
||||
} else if(particleName == "alpha") {
|
||||
|
||||
|
||||
// STANDARD ionisation is active in the world
|
||||
G4ionIonisation* hion = new G4ionIonisation();
|
||||
pmanager->AddProcess(hion, -1, 2, 2);
|
||||
// Dielectric ionisation is not active in the world
|
||||
G4MicroElecInelastic* dielectricioni = new G4MicroElecInelastic("alpha_G4Dielectrics");
|
||||
dielectricioni->SetEmModel(new G4DummyModel(),1);
|
||||
dielectricioni->SetEmModel(new G4DummyModel(),2);
|
||||
pmanager->AddDiscreteProcess(dielectricioni);
|
||||
|
||||
} else if (particleName == "GenericIon") {
|
||||
|
||||
// STANDARD msc is active in the world
|
||||
/*G4hMultipleScattering* msc = new G4hMultipleScattering();
|
||||
msc->AddEmModel(1, new G4UrbanMscModel());
|
||||
pmanager->AddProcess(new G4hMultipleScattering, -1, 1, -1);*/
|
||||
|
||||
/*G4CoulombScattering* cs = new G4CoulombScattering();
|
||||
cs->AddEmModel(0, new G4IonCoulombScatteringModel());
|
||||
cs->SetBuildTableFlag(false);
|
||||
pmanager->AddDiscreteProcess(cs);*/
|
||||
|
||||
|
||||
|
||||
// STANDARD ionisation is active in the world
|
||||
G4ionIonisation* hion = new G4ionIonisation();
|
||||
pmanager->AddProcess(hion, -1, 2, 2);
|
||||
|
||||
// Dielectric ionisation is not actived in the world
|
||||
G4MicroElecInelastic* dielectricioni = new G4MicroElecInelastic("ion_G4Dielectrics");
|
||||
dielectricioni->SetEmModel(new G4DummyModel(),1);
|
||||
dielectricioni->SetEmModel(new G4DummyModel(),2);
|
||||
pmanager->AddDiscreteProcess(dielectricioni);
|
||||
}
|
||||
}
|
||||
|
||||
// **************************************
|
||||
// 2) Define processes for Target region
|
||||
// **************************************
|
||||
|
||||
// STANDARD EM processes should be inactivated when corresponding MicroElec processes are used
|
||||
// - STANDARD EM e- processes are inactivated below 100 MeV
|
||||
// - STANDARD EM proton & ion processes are inactivated below standEnergyLimit
|
||||
//
|
||||
G4EmConfigurator* em_config = G4LossTableManager::Instance()->EmConfigurator();
|
||||
|
||||
G4VEmModel* mod;
|
||||
// *** e-
|
||||
|
||||
// ---> STANDARD EM processes are inactivated below 100 MeV
|
||||
|
||||
G4UrbanMscModel* msc = new G4UrbanMscModel();
|
||||
msc->SetActivationLowEnergyLimit(100*MeV);
|
||||
em_config->SetExtraEmModel("e-","msc",msc,"Target");
|
||||
|
||||
|
||||
mod = new G4MollerBhabhaModel();
|
||||
mod->SetActivationLowEnergyLimit(10*MeV);
|
||||
em_config->SetExtraEmModel("e-","eIoni",mod,"Target",0.0,10*TeV, new G4UniversalFluctuation());
|
||||
|
||||
|
||||
// ---> MicroElec processes activated
|
||||
|
||||
|
||||
mod = new G4MicroElecElasticModel_new();
|
||||
em_config->SetExtraEmModel("e-","e-_G4MicroElecElastic",mod,"Target",0.1*eV,100*MeV);
|
||||
|
||||
mod = new G4MicroElecInelasticModel_new();
|
||||
em_config->SetExtraEmModel("e-","e-_G4Dielectrics",mod,"Target",0.1*eV,10*MeV);
|
||||
|
||||
// G4double hw = 0.15*eV;
|
||||
|
||||
//Old phonon
|
||||
|
||||
/*mod = new LOPhononModel(0.153*eV,false);
|
||||
em_config->SetExtraEmModel("e-", "e-_G4LOPhononScattering", mod, "Target", 0.153*eV, 10 * MeV);
|
||||
|
||||
mod = new LOPhononModel(0.063*eV,false);
|
||||
em_config->SetExtraEmModel("e-", "e-_G4LO60", mod, "Target", 0.06*eV, 10 * MeV);//*/
|
||||
|
||||
//Phonons LO pour sio2 et al2o3
|
||||
|
||||
mod = new G4MicroElecLOPhononModel();
|
||||
em_config->SetExtraEmModel("e-", "e-_G4LOPhononScattering", mod, "Target", 0.1 * eV, 10 * MeV);//*/
|
||||
|
||||
|
||||
// *** proton ----------------------------------------------------------
|
||||
|
||||
// ---> STANDARD EM processes inactivated below standEnergyLimit
|
||||
|
||||
// STANDARD msc is still active
|
||||
// Inactivate following STANDARD processes
|
||||
|
||||
// il faut desactiver Bragg puisque notre modle descend en-dessous de 50 keV
|
||||
/*mod = new G4BraggModel();
|
||||
mod->SetActivationHighEnergyLimit(50*keV);
|
||||
em_config->SetExtraEmModel("proton","hIoni",mod,"Target",0.0,2*MeV, new G4IonFluctuations());*/
|
||||
|
||||
mod = new G4BetheBlochModel();
|
||||
mod->SetActivationLowEnergyLimit(10*MeV);
|
||||
em_config->SetExtraEmModel("proton","hIoni",mod,"Target",2*MeV,10*TeV, new G4IonFluctuations());
|
||||
|
||||
// ---> Dielectric processes activated
|
||||
|
||||
|
||||
mod = new G4MicroElecInelasticModel_new();
|
||||
mod->SetActivationLowEnergyLimit(100*eV);
|
||||
em_config->SetExtraEmModel("proton","p_G4Dielectrics",mod,"Target",100*eV,10*MeV);
|
||||
//em_config->SetExtraEmModel("proton","p_G4Dielectrics",new G4DummyModel,"Target",10*MeV,10*TeV);
|
||||
|
||||
//*/
|
||||
|
||||
|
||||
// *** alpha ----------------------------------------------------------
|
||||
mod = new G4BetheBlochModel();
|
||||
mod->SetActivationLowEnergyLimit(10*MeV);
|
||||
em_config->SetExtraEmModel("alpha","ionIoni",mod,"Target",10*MeV,10*TeV, new G4IonFluctuations());
|
||||
|
||||
/*mod = new G4MicroElecInelasticModel_new();
|
||||
//mod->SetActivationLowEnergyLimit(100*eV);
|
||||
em_config->SetExtraEmModel("alpha","alpha_G4Dielectrics",mod,"Target",0.0,10*MeV);//*/
|
||||
|
||||
// *** ion ----------------------------------------------------------
|
||||
|
||||
// ---> STANDARD EM processes inactivated below standEnergyLimit
|
||||
|
||||
// STANDARD msc is still active
|
||||
// Inactivate following STANDARD processes
|
||||
|
||||
|
||||
/*mod = new G4BraggIonModel();
|
||||
mod->SetActivationHighEnergyLimit(50*keV);
|
||||
em_config->SetExtraEmModel("GenericIon","ionIoni",mod,"Target",0.0,2*MeV, new G4IonFluctuations());*/
|
||||
|
||||
mod = new G4BetheBlochModel();
|
||||
mod->SetActivationLowEnergyLimit(10*MeV);
|
||||
em_config->SetExtraEmModel("GenericIon","ionIoni",mod,"Target",10*MeV,10*TeV, new G4IonFluctuations());
|
||||
|
||||
// ---> Dielectric processes activated
|
||||
mod = new G4MicroElecInelasticModel_new();
|
||||
mod->SetActivationLowEnergyLimit(100*eV);
|
||||
em_config->SetExtraEmModel("GenericIon","ion_G4Dielectrics",mod,"Target",0.0,10*MeV);
|
||||
//em_config->SetExtraEmModel("GenericIon","ion_G4Dielectrics",new G4DummyModel,"Target",10*GeV,10*TeV);
|
||||
|
||||
// Deexcitation
|
||||
//
|
||||
G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
|
||||
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
|
||||
de->SetFluo(true);
|
||||
de->SetAuger(true);
|
||||
de->SetPIXE(true);
|
||||
de->InitialiseForNewRun();
|
||||
|
||||
// G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(5*eV, 100.0*GeV);
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecPhysics::ConstructGeneral()
|
||||
{ }
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecPhysics::SetCuts()
|
||||
{
|
||||
if (verboseLevel >0)
|
||||
{
|
||||
G4cout << "MicroElecPhysics::SetCuts:";
|
||||
G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl;
|
||||
}
|
||||
|
||||
// set cut values for gamma at first and for e- second and next for e+,
|
||||
// because some processes for e+/e- need cut values for gamma
|
||||
SetCutValue(cutForGamma, "gamma");
|
||||
SetCutValue(cutForElectron, "e-");
|
||||
SetCutValue(cutForPositron, "e+");
|
||||
SetCutValue(cutForProton, "proton");
|
||||
|
||||
if (verboseLevel>0) { DumpCutValuesTable(); }
|
||||
}
|
||||
@@ -0,0 +1,317 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#include "MicroElecSiPhysics.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
|
||||
// Geant4-MicroElec MODELS
|
||||
|
||||
#include "G4MicroElecElastic.hh"
|
||||
#include "G4MicroElecElasticModel.hh"
|
||||
|
||||
#include "G4MicroElecInelastic.hh"
|
||||
#include "G4MicroElecInelasticModel.hh"
|
||||
//
|
||||
|
||||
#include "G4LossTableManager.hh"
|
||||
#include "G4EmConfigurator.hh"
|
||||
#include "G4VEmModel.hh"
|
||||
#include "G4DummyModel.hh"
|
||||
#include "G4eIonisation.hh"
|
||||
#include "G4hIonisation.hh"
|
||||
#include "G4ionIonisation.hh"
|
||||
#include "G4eMultipleScattering.hh"
|
||||
#include "G4hMultipleScattering.hh"
|
||||
#include "G4BraggModel.hh"
|
||||
#include "G4BraggIonModel.hh"
|
||||
#include "G4BetheBlochModel.hh"
|
||||
#include "G4UrbanMscModel.hh"
|
||||
#include "G4MollerBhabhaModel.hh"
|
||||
#include "G4IonFluctuations.hh"
|
||||
#include "G4UniversalFluctuation.hh"
|
||||
|
||||
#include "ElectronCapture.hh"
|
||||
|
||||
#include "G4UAtomicDeexcitation.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
MicroElecSiPhysics::MicroElecSiPhysics(): G4VUserPhysicsList()
|
||||
{
|
||||
defaultCutValue = 1*micrometer;
|
||||
cutForGamma = defaultCutValue;
|
||||
cutForElectron = defaultCutValue;
|
||||
cutForPositron = defaultCutValue;
|
||||
cutForProton = defaultCutValue;
|
||||
|
||||
SetVerboseLevel(1);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
MicroElecSiPhysics::~MicroElecSiPhysics()
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecSiPhysics::ConstructParticle()
|
||||
{
|
||||
ConstructBosons();
|
||||
ConstructLeptons();
|
||||
ConstructBarions();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecSiPhysics::ConstructBosons()
|
||||
{
|
||||
// gamma
|
||||
G4Gamma::GammaDefinition();
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecSiPhysics::ConstructLeptons()
|
||||
{
|
||||
// leptons
|
||||
G4Electron::ElectronDefinition();
|
||||
G4Positron::PositronDefinition();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecSiPhysics::ConstructBarions()
|
||||
{
|
||||
// baryons
|
||||
G4Proton::ProtonDefinition();
|
||||
G4GenericIon::GenericIonDefinition();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecSiPhysics::ConstructProcess()
|
||||
{
|
||||
AddTransportation();
|
||||
ConstructEM();
|
||||
ConstructGeneral();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecSiPhysics::ConstructEM()
|
||||
{
|
||||
|
||||
auto particleIterator=GetParticleIterator();
|
||||
particleIterator->reset();
|
||||
|
||||
while( (*particleIterator)() )
|
||||
{
|
||||
|
||||
G4ParticleDefinition* particle = particleIterator->value();
|
||||
G4ProcessManager* pmanager = particle->GetProcessManager();
|
||||
G4String particleName = particle->GetParticleName();
|
||||
|
||||
// *********************************
|
||||
// 1) Processes for the World region
|
||||
// *********************************
|
||||
|
||||
if (particleName == "e-") {
|
||||
|
||||
// STANDARD msc is active in the world
|
||||
G4eMultipleScattering* msc = new G4eMultipleScattering();
|
||||
msc->AddEmModel(1, new G4UrbanMscModel());
|
||||
pmanager->AddProcess(msc, -1, 1, -1);
|
||||
|
||||
// STANDARD ionisation is active in the world
|
||||
G4eIonisation* eion = new G4eIonisation();
|
||||
pmanager->AddProcess(eion, -1, 2, 2);
|
||||
|
||||
// MicroElec elastic is not active in the world
|
||||
G4MicroElecElastic* theMicroElecElasticProcess = new G4MicroElecElastic("e-_G4MicroElecElastic");
|
||||
theMicroElecElasticProcess->SetEmModel(new G4DummyModel());
|
||||
pmanager->AddDiscreteProcess(theMicroElecElasticProcess);
|
||||
|
||||
// MicroElec ionisation is not active in the world
|
||||
G4MicroElecInelastic* microelecioni = new G4MicroElecInelastic("e-_G4MicroElecInelastic");
|
||||
microelecioni->SetEmModel(new G4DummyModel());
|
||||
pmanager->AddDiscreteProcess(microelecioni);
|
||||
|
||||
// THE FOLLOWING PROCESS WILL KILL ALL ELECTRONS BELOW A SELECTED ENERY THRESHOLD
|
||||
// Capture of low-energy e-
|
||||
ElectronCapture* ecap = new ElectronCapture("Target", 16.7*eV);
|
||||
pmanager->AddDiscreteProcess(ecap);
|
||||
|
||||
} else if ( particleName == "proton" ) {
|
||||
|
||||
// STANDARD msc is active in the world
|
||||
G4hMultipleScattering* msc = new G4hMultipleScattering();
|
||||
msc->AddEmModel(1, new G4UrbanMscModel());
|
||||
pmanager->AddProcess(msc, -1, 1, -1);
|
||||
|
||||
// STANDARD ionisation is active in the world
|
||||
G4hIonisation* hion = new G4hIonisation();
|
||||
pmanager->AddProcess(hion, -1, 2, 2);
|
||||
|
||||
// MicroElec ionisation is not active in the world
|
||||
G4MicroElecInelastic* microelecioni = new G4MicroElecInelastic("p_G4MicroElecInelastic");
|
||||
microelecioni->SetEmModel(new G4DummyModel());
|
||||
microelecioni->SetEmModel(new G4DummyModel());
|
||||
pmanager->AddDiscreteProcess(microelecioni);
|
||||
|
||||
} else if (particleName == "GenericIon") {
|
||||
|
||||
// STANDARD msc is active in the world
|
||||
G4hMultipleScattering* msc = new G4hMultipleScattering();
|
||||
msc->AddEmModel(1, new G4UrbanMscModel());
|
||||
pmanager->AddProcess(new G4hMultipleScattering, -1, 1, -1);
|
||||
|
||||
// STANDARD ionisation is active in the world
|
||||
G4ionIonisation* hion = new G4ionIonisation();
|
||||
pmanager->AddProcess(hion, -1, 2, 2);
|
||||
|
||||
// MicroElec ionisation is not active in the world
|
||||
G4MicroElecInelastic* microelecioni = new G4MicroElecInelastic("ion_G4MicroElecInelastic");
|
||||
microelecioni->SetEmModel(new G4DummyModel());
|
||||
microelecioni->SetEmModel(new G4DummyModel());
|
||||
pmanager->AddDiscreteProcess(microelecioni);
|
||||
}
|
||||
}
|
||||
|
||||
// **************************************
|
||||
// 2) Define processes for Target region
|
||||
// **************************************
|
||||
|
||||
// STANDARD EM processes should be inactivated when corresponding MicroElec processes are used
|
||||
// - STANDARD EM e- processes are inactivated below 100 MeV
|
||||
// - STANDARD EM proton & ion processes are inactivated below standEnergyLimit
|
||||
//
|
||||
G4EmConfigurator* em_config = G4LossTableManager::Instance()->EmConfigurator();
|
||||
|
||||
G4VEmModel* mod;
|
||||
// *** e-
|
||||
|
||||
// ---> STANDARD EM processes are inactivated below 100 MeV
|
||||
|
||||
G4UrbanMscModel* msc = new G4UrbanMscModel();
|
||||
msc->SetActivationLowEnergyLimit(100*MeV);
|
||||
em_config->SetExtraEmModel("e-","msc",msc,"Target");
|
||||
|
||||
mod = new G4MollerBhabhaModel();
|
||||
mod->SetActivationLowEnergyLimit(100*MeV);
|
||||
em_config->SetExtraEmModel("e-","eIoni",mod,"Target",0.0,10*TeV, new G4UniversalFluctuation());
|
||||
|
||||
// ---> MicroElec processes activated
|
||||
|
||||
mod = new G4MicroElecElasticModel();
|
||||
em_config->SetExtraEmModel("e-","e-_G4MicroElecElastic",mod,"Target",0.0,100*MeV);
|
||||
|
||||
mod = new G4MicroElecInelasticModel();
|
||||
em_config->SetExtraEmModel("e-","e-_G4MicroElecInelastic",mod,"Target",16.7*eV,100*MeV);
|
||||
|
||||
// *** proton
|
||||
|
||||
// ---> STANDARD EM processes inactivated below standEnergyLimit
|
||||
|
||||
// STANDARD msc is still active
|
||||
// Inactivate following STANDARD processes
|
||||
|
||||
mod = new G4BraggModel();
|
||||
mod->SetActivationHighEnergyLimit(50*keV);
|
||||
em_config->SetExtraEmModel("proton","hIoni",mod,"Target",0.0,2*MeV, new G4IonFluctuations());
|
||||
|
||||
mod = new G4BetheBlochModel();
|
||||
mod->SetActivationLowEnergyLimit(10*GeV);
|
||||
em_config->SetExtraEmModel("proton","hIoni",mod,"Target",2*MeV,10*TeV, new G4IonFluctuations());
|
||||
|
||||
// ---> MicroElec processes activated
|
||||
mod = new G4MicroElecInelasticModel();
|
||||
mod->SetActivationLowEnergyLimit(50*keV);
|
||||
em_config->SetExtraEmModel("proton","p_G4MicroElecInelastic",mod,"Target",0.0,10*GeV);
|
||||
em_config->SetExtraEmModel("proton","p_G4MicroElecInelastic",new G4DummyModel,
|
||||
"Target",10*GeV,10*TeV);
|
||||
|
||||
// *** ion
|
||||
|
||||
// ---> STANDARD EM processes inactivated below standEnergyLimit
|
||||
|
||||
// STANDARD msc is still active
|
||||
// Inactivate following STANDARD processes
|
||||
|
||||
mod = new G4BraggIonModel();
|
||||
mod->SetActivationHighEnergyLimit(50*keV);
|
||||
em_config->SetExtraEmModel("GenericIon","ionIoni",mod,"Target",0.0,2*MeV, new G4IonFluctuations());
|
||||
|
||||
mod = new G4BetheBlochModel();
|
||||
mod->SetActivationLowEnergyLimit(10*GeV);
|
||||
em_config->SetExtraEmModel("GenericIon","ionIoni",mod,"Target",2*MeV,10*TeV, new G4IonFluctuations());
|
||||
|
||||
// ---> MicroElec processes activated
|
||||
mod = new G4MicroElecInelasticModel();
|
||||
mod->SetActivationLowEnergyLimit(50*keV);
|
||||
em_config->SetExtraEmModel("GenericIon","ion_G4MicroElecInelastic",mod,
|
||||
"Target",0.0,10*GeV);
|
||||
em_config->SetExtraEmModel("GenericIon","ion_G4MicroElecInelastic",new G4DummyModel,
|
||||
"Target",10*GeV,10*TeV);
|
||||
|
||||
// Deexcitation
|
||||
//
|
||||
G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
|
||||
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
|
||||
de->SetFluo(true);
|
||||
de->SetAuger(true);
|
||||
de->SetPIXE(true);
|
||||
de->InitialiseForNewRun();
|
||||
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecSiPhysics::ConstructGeneral()
|
||||
{ }
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void MicroElecSiPhysics::SetCuts()
|
||||
{
|
||||
if (verboseLevel >0)
|
||||
{
|
||||
G4cout << "MicroElecSiPhysics::SetCuts:";
|
||||
G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl;
|
||||
}
|
||||
|
||||
// set cut values for gamma at first and for e- second and next for e+,
|
||||
// because some processes for e+/e- need cut values for gamma
|
||||
SetCutValue(cutForGamma, "gamma");
|
||||
SetCutValue(cutForElectron, "e-");
|
||||
SetCutValue(cutForPositron, "e+");
|
||||
SetCutValue(cutForProton, "proton");
|
||||
|
||||
if (verboseLevel>0) { DumpCutValuesTable(); }
|
||||
}
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "TrackingAction.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4RunManager.hh"
|
||||
#include "Analysis.hh"
|
||||
#include "G4AnalysisManager.hh"
|
||||
#include "G4Threading.hh"
|
||||
|
||||
void PrintNParticles(std::map<const G4ParticleDefinition*, int>& container);
|
||||
@@ -153,12 +153,13 @@ void RunAction::EndWorker(const G4Run* run)
|
||||
// Write Histo
|
||||
//
|
||||
WriteHistogram();
|
||||
|
||||
|
||||
///////////////
|
||||
// Complete cleanup
|
||||
//
|
||||
delete G4AnalysisManager::Instance();
|
||||
|
||||
G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
|
||||
analysisManager->Clear();
|
||||
|
||||
///////////////
|
||||
// Printouts
|
||||
//
|
||||
@@ -211,6 +212,7 @@ void RunAction::CreateHistogram()
|
||||
|
||||
G4cout << "##### Create analysis manager " << " " << this << G4endl;
|
||||
G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
|
||||
analysisManager->SetDefaultFileType("root");
|
||||
|
||||
G4cout << "Using " << analysisManager->GetType() << " analysis manager" << G4endl;
|
||||
|
||||
|
||||
@@ -28,13 +28,12 @@
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#include "Analysis.hh"
|
||||
|
||||
#include "SteppingAction.hh"
|
||||
#include "RunAction.hh"
|
||||
#include "DetectorConstruction.hh"
|
||||
#include "PrimaryGeneratorAction.hh"
|
||||
|
||||
#include "G4AnalysisManager.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "G4SteppingManager.hh"
|
||||
#include "G4VTouchable.hh"
|
||||
|
||||
Reference in New Issue
Block a user