Import Geant4 10.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-10 12:08:39 +02:00
parent 286caacf06
commit c9b32a6c0a
5770 changed files with 1050949 additions and 367105 deletions
@@ -26,7 +26,7 @@
/// \file RE06/src/RE06DetectorConstruction.cc
/// \brief Implementation of the RE06DetectorConstruction class
//
// $Id: RE06DetectorConstruction.cc 75123 2013-10-28 09:53:28Z gcosmo $
// $Id: RE06DetectorConstruction.cc 83381 2014-08-21 14:18:13Z gcosmo $
//
#include "RE06DetectorConstruction.hh"
@@ -63,13 +63,14 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4ThreadLocal G4bool RE06DetectorConstruction::fConstructedSDandField = false;
RE06DetectorConstruction::RE06DetectorConstruction()
: G4VUserDetectorConstruction(),
fNumberOfLayers(40),
fTotalThickness (2.0*m),
fLayerThickness(0.),
fConstructed(false),
fConstructedSDandField(false),
fWorldMaterial(0),
fAbsorberMaterial(0),
fGapMaterial(0),
@@ -107,12 +108,11 @@ RE06DetectorConstruction::~RE06DetectorConstruction()
G4VPhysicalVolume* RE06DetectorConstruction::Construct()
{
// if(!fConstructed)
if(!fConstructed)
{
fConstructed = true;
DefineMaterials();
SetupGeometry();
SetupDetectors();
}
if (GetVerboseLevel()>0) {
PrintCalorParameters();
@@ -120,9 +120,9 @@ G4VPhysicalVolume* RE06DetectorConstruction::Construct()
return fWorldPhysical;
}
void RE06DetectorConstruction::ConstructSDandField() {
// if(!fConstructedSDandField)
void RE06DetectorConstruction::ConstructSDandField()
{
if(!fConstructedSDandField)
{
fConstructedSDandField = true;
SetupDetectors();
@@ -26,7 +26,7 @@
/// \file RE06/src/RE06ParallelWorld.cc
/// \brief Implementation of the RE06ParallelWorld class
//
// $Id: RE06ParallelWorld.cc 75123 2013-10-28 09:53:28Z gcosmo $
// $Id: RE06ParallelWorld.cc 83381 2014-08-21 14:18:13Z gcosmo $
//
#include "RE06ParallelWorld.hh"
@@ -51,6 +51,8 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4ThreadLocal G4bool RE06ParallelWorld::fSDConstructed = false;
RE06ParallelWorld::RE06ParallelWorld(G4String worldName)
:G4VUserParallelWorld(worldName),
fConstructed(false),
@@ -83,7 +85,6 @@ void RE06ParallelWorld::Construct()
{
fConstructed = true;
SetupGeometry();
//SetupDetectors();
}
}
@@ -91,7 +92,11 @@ void RE06ParallelWorld::Construct()
void RE06ParallelWorld::ConstructSD()
{
if(!fSDConstructed)
{
fSDConstructed = true;
SetupDetectors();
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -1,338 +0,0 @@
//
// ********************************************************************
// * 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 RE06/src/RE06PhysicsList.cc
/// \brief Implementation of the RE06PhysicsList class
//
// $Id: RE06PhysicsList.cc 66526 2012-12-19 13:41:33Z ihrivnac $
//
#include "RE06PhysicsList.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4ios.hh"
#include "G4SystemOfUnits.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE06PhysicsList::RE06PhysicsList(): G4VUserPhysicsList()
{
defaultCutValue = 1.0*mm;
SetVerboseLevel(1);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE06PhysicsList::~RE06PhysicsList()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE06PhysicsList::ConstructParticle()
{
// In this method, static member functions should be called
// for all particles which you want to use.
// This ensures that objects of these particle types will be
// created in the program.
ConstructBosons();
ConstructLeptons();
ConstructMesons();
ConstructBaryons();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE06PhysicsList::ConstructBosons()
{
// pseudo-particles
G4Geantino::GeantinoDefinition();
G4ChargedGeantino::ChargedGeantinoDefinition();
// gamma
G4Gamma::GammaDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE06PhysicsList::ConstructLeptons()
{
// leptons
G4Electron::ElectronDefinition();
G4Positron::PositronDefinition();
G4MuonPlus::MuonPlusDefinition();
G4MuonMinus::MuonMinusDefinition();
G4NeutrinoE::NeutrinoEDefinition();
G4AntiNeutrinoE::AntiNeutrinoEDefinition();
G4NeutrinoMu::NeutrinoMuDefinition();
G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE06PhysicsList::ConstructMesons()
{
// mesons
G4PionPlus::PionPlusDefinition();
G4PionMinus::PionMinusDefinition();
G4PionZero::PionZeroDefinition();
G4Eta::EtaDefinition();
G4EtaPrime::EtaPrimeDefinition();
G4KaonPlus::KaonPlusDefinition();
G4KaonMinus::KaonMinusDefinition();
G4KaonZero::KaonZeroDefinition();
G4AntiKaonZero::AntiKaonZeroDefinition();
G4KaonZeroLong::KaonZeroLongDefinition();
G4KaonZeroShort::KaonZeroShortDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE06PhysicsList::ConstructBaryons()
{
// barions
G4Proton::ProtonDefinition();
G4AntiProton::AntiProtonDefinition();
G4Neutron::NeutronDefinition();
G4AntiNeutron::AntiNeutronDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE06PhysicsList::ConstructProcess()
{
AddTransportation();
ConstructGeneral();
ConstructEM();
}
#include "G4ComptonScattering.hh"
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4eMultipleScattering.hh"
#include "G4MuMultipleScattering.hh"
#include "G4hMultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
#include "G4MuIonisation.hh"
#include "G4MuBremsstrahlung.hh"
#include "G4MuPairProduction.hh"
#include "G4hIonisation.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE06PhysicsList::ConstructEM()
{
G4bool displacementFlg = true; // for multiple scattering
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String particleName = particle->GetParticleName();
if (particleName == "gamma") {
// gamma
pmanager->AddDiscreteProcess(new G4GammaConversion());
pmanager->AddDiscreteProcess(new G4ComptonScattering());
pmanager->AddDiscreteProcess(new G4PhotoElectricEffect());
} else if (particleName == "e-") {
//electron
G4eMultipleScattering* theeminusMultipleScattering
= new G4eMultipleScattering();
theeminusMultipleScattering->SetLateralDisplasmentFlag(displacementFlg);
G4VProcess* theeminusIonisation = new G4eIonisation();
G4VProcess* theeminusBremsstrahlung = new G4eBremsstrahlung();
//
// add processes
pmanager->AddProcess(theeminusMultipleScattering);
pmanager->AddProcess(theeminusIonisation);
pmanager->AddProcess(theeminusBremsstrahlung);
//
// set ordering for AlongStepDoIt
pmanager->SetProcessOrdering(theeminusMultipleScattering, idxAlongStep,1);
pmanager->SetProcessOrdering(theeminusIonisation, idxAlongStep,2);
pmanager->SetProcessOrdering(theeminusBremsstrahlung, idxAlongStep,3);
//
// set ordering for PostStepDoIt
pmanager->SetProcessOrdering(theeminusMultipleScattering, idxPostStep,1);
pmanager->SetProcessOrdering(theeminusIonisation, idxPostStep,2);
pmanager->SetProcessOrdering(theeminusBremsstrahlung, idxPostStep,3);
} else if (particleName == "e+") {
//positron
G4eMultipleScattering* theeplusMultipleScattering
= new G4eMultipleScattering();
theeplusMultipleScattering->SetLateralDisplasmentFlag(displacementFlg);
G4VProcess* theeplusIonisation = new G4eIonisation();
G4VProcess* theeplusBremsstrahlung = new G4eBremsstrahlung();
G4VProcess* theeplusAnnihilation = new G4eplusAnnihilation();
//
// add processes
pmanager->AddProcess(theeplusMultipleScattering);
pmanager->AddProcess(theeplusIonisation);
pmanager->AddProcess(theeplusBremsstrahlung);
pmanager->AddProcess(theeplusAnnihilation);
//
// set ordering for AtRestDoIt
pmanager->SetProcessOrderingToFirst(theeplusAnnihilation, idxAtRest);
//
// set ordering for AlongStepDoIt
pmanager->SetProcessOrdering(theeplusMultipleScattering, idxAlongStep,1);
pmanager->SetProcessOrdering(theeplusIonisation, idxAlongStep,2);
pmanager->SetProcessOrdering(theeplusBremsstrahlung, idxAlongStep,3);
//
// set ordering for PostStepDoIt
pmanager->SetProcessOrdering(theeplusMultipleScattering, idxPostStep,1);
pmanager->SetProcessOrdering(theeplusIonisation, idxPostStep,2);
pmanager->SetProcessOrdering(theeplusBremsstrahlung, idxPostStep,3);
pmanager->SetProcessOrdering(theeplusAnnihilation, idxPostStep,4);
} else if( particleName == "mu+" ||
particleName == "mu-" ) {
//muon
G4MuMultipleScattering* aMultipleScattering
= new G4MuMultipleScattering();
aMultipleScattering->SetLateralDisplasmentFlag(displacementFlg);
G4VProcess* aBremsstrahlung = new G4MuBremsstrahlung();
G4VProcess* aPairProduction = new G4MuPairProduction();
G4VProcess* anIonisation = new G4MuIonisation();
//
// add processes
pmanager->AddProcess(anIonisation);
pmanager->AddProcess(aMultipleScattering);
pmanager->AddProcess(aBremsstrahlung);
pmanager->AddProcess(aPairProduction);
//
// set ordering for AlongStepDoIt
pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep,1);
pmanager->SetProcessOrdering(anIonisation, idxAlongStep,2);
pmanager->SetProcessOrdering(aBremsstrahlung, idxAlongStep,3);
pmanager->SetProcessOrdering(aPairProduction, idxAlongStep,4);
//
// set ordering for PostStepDoIt
pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep,1);
pmanager->SetProcessOrdering(anIonisation, idxPostStep,2);
pmanager->SetProcessOrdering(aBremsstrahlung, idxPostStep,3);
pmanager->SetProcessOrdering(aPairProduction, idxPostStep,4);
} else if ((!particle->IsShortLived()) &&
(particle->GetPDGCharge() != 0.0) &&
(particle->GetParticleName() != "chargedgeantino")) {
// all others charged particles except geantino
G4hMultipleScattering* aMultipleScattering = new G4hMultipleScattering();
aMultipleScattering->SetLateralDisplasmentFlag(displacementFlg);
G4VProcess* anIonisation = new G4hIonisation();
//
// add processes
pmanager->AddProcess(anIonisation);
pmanager->AddProcess(aMultipleScattering);
//
// set ordering for AlongStepDoIt
pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep,1);
pmanager->SetProcessOrdering(anIonisation, idxAlongStep,2);
//
// set ordering for PostStepDoIt
pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep,1);
pmanager->SetProcessOrdering(anIonisation, idxPostStep,2);
}
}
}
#include "G4Decay.hh"
#include "G4ParallelWorldScoringProcess.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE06PhysicsList::ConstructGeneral()
{
// Add Decay Process and Parallel world Scoring Process
G4Decay* theDecayProcess = new G4Decay();
G4ParallelWorldScoringProcess* theParallelWorldScoringProcess
= new G4ParallelWorldScoringProcess("ParaWorldScoringProc");
theParallelWorldScoringProcess->SetParallelWorld("ParallelScoringWorld");
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
if (theDecayProcess->IsApplicable(*particle)) {
pmanager ->AddProcess(theDecayProcess);
pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
}
pmanager->AddProcess(theParallelWorldScoringProcess);
pmanager
->SetProcessOrderingToLast(theParallelWorldScoringProcess, idxAtRest);
pmanager
->SetProcessOrdering(theParallelWorldScoringProcess, idxAlongStep, 1);
pmanager
->SetProcessOrderingToLast(theParallelWorldScoringProcess, idxPostStep);
}
}
#include "G4Region.hh"
#include "G4RegionStore.hh"
#include "G4ProductionCuts.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE06PhysicsList::SetCuts()
{
if (verboseLevel >0){
G4cout << "RE06PhysicsList::SetCuts: default cut length : "
<< G4BestUnit(defaultCutValue,"Length") << G4endl;
}
// These values are used as the default production thresholds
// for the world volume.
SetCutsWithDefault();
// Production thresholds for detector regions
G4String regName[] = {"Calor-A","Calor-B","Calor-C"};
G4double fuc = 1.;
for(G4int i=0;i<3;i++)
{
G4Region* reg = G4RegionStore::GetInstance()->GetRegion(regName[i]);
G4ProductionCuts* cuts = new G4ProductionCuts;
cuts->SetProductionCut(defaultCutValue*fuc);
reg->SetProductionCuts(cuts);
fuc *= 10.;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -26,7 +26,7 @@
/// \file RE06/src/RE06SteppingVerbose.cc
/// \brief Implementation of the RE06SteppingVerbose class
//
// $Id: RE06SteppingVerbose.cc 66526 2012-12-19 13:41:33Z ihrivnac $
// $Id: RE06SteppingVerbose.cc 84600 2014-10-17 07:43:51Z gcosmo $
//
#include "RE06SteppingVerbose.hh"
@@ -91,7 +91,8 @@ void RE06SteppingVerbose::Report()
for(G4int i=0;i<fNofRegions;i++)
{
G4cout << G4endl;
G4cout << "Region <" << (*G4RegionStore::GetInstance())[i]->GetName() << ">" << G4endl;
G4cout << "Region <"
<< (*G4RegionStore::GetInstance())[i]->GetName() << ">" << G4endl;
G4cout << " All particles : User=" << fTimers[i]->GetUserElapsed()
<< " Real=" << fTimers[i]->GetRealElapsed()
<< " Sys=" << fTimers[i]->GetSystemElapsed() << G4endl;
@@ -107,11 +108,13 @@ void RE06SteppingVerbose::Report()
void RE06SteppingVerbose::NewStep()
{
CopyState();
G4Region* reg = fTrack->GetStep()->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetRegion();
G4Region* reg = fTrack->GetStep()->GetPreStepPoint()
->GetPhysicalVolume()->GetLogicalVolume()->GetRegion();
fRegIdx = FindRegion(reg);
fTimers[fRegIdx]->Start();
G4ParticleDefinition* pd = fTrack->GetDefinition();
if(pd==G4Electron::ElectronDefinition() || pd==G4Positron::PositronDefinition()) fEp = true;
if(pd==G4Electron::ElectronDefinition() ||
pd==G4Positron::PositronDefinition()) fEp = true;
if(fEp) fTimers[fNofRegions+fRegIdx]->Start();
}