Import Geant4 11.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2021-12-10 14:46:44 +01:00
committed by Ben Morgan
parent 6399a014b6
commit 80e2389dd8
3932 changed files with 202519 additions and 246221 deletions
@@ -58,10 +58,10 @@
DetectorConstruction::DetectorConstruction()
: G4VUserDetectorConstruction(),
fAbsorberMaterial(nullptr),fWorldMaterial(nullptr),fDefaultWorld(true),
fSolidWorld(nullptr),fLogicWorld(nullptr),fPhysiWorld(nullptr),
fSolidAbsorber(nullptr),fLogicAbsorber(nullptr),fPhysiAbsorber(nullptr),
fDetectorMessenger(nullptr)
fAbsorberMaterial(nullptr),fWorldMaterial(nullptr),
fSolidWorld(nullptr),fLogicWorld(nullptr),fPhysiWorld(nullptr),
fSolidAbsorber(nullptr),fLogicAbsorber(nullptr),fPhysiAbsorber(nullptr),
fDetectorMessenger(nullptr)
{
// default parameter values of the calorimeter
fAbsorberThickness = 1.*cm;
@@ -253,21 +253,16 @@ void DetectorConstruction::ComputeGeomParameters()
fXendAbs = fXposAbs+0.5*fAbsorberThickness;
G4double xmax = std::max(std::abs(fXstartAbs), std::abs(fXendAbs));
// change world size by the flag or if the absorber is large
if (fDefaultWorld || 2*xmax >= fWorldSizeX ||
fAbsorberSizeYZ >= fWorldSizeYZ)
{
fWorldSizeX = 3*xmax;
fWorldSizeYZ= 1.2*fAbsorberSizeYZ;
}
fWorldSizeX = 2.4*xmax;
fWorldSizeYZ= 1.2*fAbsorberSizeYZ;
if(nullptr != fPhysiWorld) { ChangeGeometry(); }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VPhysicalVolume* DetectorConstruction::Construct()
{
if(fPhysiWorld) { return fPhysiWorld; }
if(nullptr != fPhysiWorld) { return fPhysiWorld; }
// World
//
fSolidWorld = new G4Box("World", //its name
@@ -366,7 +361,6 @@ void DetectorConstruction::SetAbsorberThickness(G4double val)
{
fAbsorberThickness = val;
ComputeGeomParameters();
if(fPhysiWorld) { ChangeGeometry(); }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -375,7 +369,6 @@ void DetectorConstruction::SetAbsorberSizeYZ(G4double val)
{
fAbsorberSizeYZ = val;
ComputeGeomParameters();
if(fPhysiWorld) { ChangeGeometry(); }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -383,9 +376,7 @@ void DetectorConstruction::SetAbsorberSizeYZ(G4double val)
void DetectorConstruction::SetWorldSizeX(G4double val)
{
fWorldSizeX = val;
fDefaultWorld = false;
ComputeGeomParameters();
if(fPhysiWorld) { ChangeGeometry(); }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -393,16 +384,15 @@ void DetectorConstruction::SetWorldSizeX(G4double val)
void DetectorConstruction::SetWorldSizeYZ(G4double val)
{
fWorldSizeYZ = val;
fDefaultWorld = false;
ComputeGeomParameters();
if(fPhysiWorld) { ChangeGeometry(); }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::SetAbsorberXpos(G4double val)
{
if(!fPhysiWorld) { fXposAbs = val; }
fXposAbs = val;
ComputeGeomParameters();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
@@ -46,7 +46,6 @@ HistoManager::HistoManager()
HistoManager::~HistoManager()
{
delete G4AnalysisManager::Instance();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -57,6 +56,7 @@ void HistoManager::Book()
// The choice of analysis technology is done via selection of a namespace
// in HistoManager.hh
G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
analysisManager->SetDefaultFileType("root");
analysisManager->SetFileName(fFileName);
analysisManager->SetVerboseLevel(1);
analysisManager->SetActivation(true); // enable inactivation of histograms
@@ -44,8 +44,8 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* DC)
:G4VUserPrimaryGeneratorAction(),
fParticleGun(0),fDetector(DC),fRndmBeam(0),fGunMessenger(0)
:G4VUserPrimaryGeneratorAction(),
fParticleGun(0),fDetector(DC),fRndmBeam(0),fGunMessenger(0)
{
G4int n_particle = 1;
fParticleGun = new G4ParticleGun(n_particle);
@@ -83,6 +83,10 @@ void PrimaryGeneratorAction::SetDefaultKinematic()
void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
if(0 == anEvent->GetEventID()) {
G4double x0 = -0.5*(fDetector->GetWorldSizeX());
fParticleGun->SetParticlePosition(G4ThreeVector(x0, 0.0, 0.0));
}
//this function is called at the begining of event
//
//randomize the beam, if requested.
@@ -91,8 +95,8 @@ void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
G4ThreeVector oldPosition = fParticleGun->GetParticlePosition();
G4double rbeam = 0.5*(fDetector->GetAbsorberSizeYZ())*fRndmBeam;
G4double x0 = oldPosition.x();
G4double y0 = oldPosition.y() + (2*G4UniformRand()-1.)*rbeam;
G4double z0 = oldPosition.z() + (2*G4UniformRand()-1.)*rbeam;
G4double y0 = (2*G4UniformRand()-1.)*rbeam;
G4double z0 = (2*G4UniformRand()-1.)*rbeam;
fParticleGun->SetParticlePosition(G4ThreeVector(x0,y0,z0));
fParticleGun->GeneratePrimaryVertex(anEvent);
fParticleGun->SetParticlePosition(oldPosition);
@@ -39,18 +39,12 @@
#include "G4RunManager.hh"
#include "G4Track.hh"
#include "G4EmSecondaryParticleType.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
StackingAction::StackingAction(EventAction* EA)
: G4UserStackingAction(), fEventAction(EA),
fKillSecondary(0),fStackMessenger(0),fPhotoGamma(-1),fComptGamma(-1),
fPhotoAuger(-1),fComptAuger(-1),fPixeGamma(-1),fPixeAuger(-1),
fElectronDNAGamma(-1),fElectronDNAAuger(-1),fProtonDNAGamma(-1),
fProtonDNAAuger(-1),fHydrogenDNAGamma(-1),fHydrogenDNAAuger(-1),
fAlphaDNAGamma(-1),fAlphaDNAAuger(-1),fAlphaPlusDNAGamma(-1),
fAlphaPlusDNAAuger(-1),fHeliumDNAGamma(-1),fHeliumDNAAuger(-1),
fGenericIonDNAGamma(-1),fGenericIonDNAAuger(-1),fIDdefined(false)
: G4UserStackingAction(), fEventAction(EA)
{
fStackMessenger = new StackingMessenger(this);
}
@@ -72,47 +66,10 @@ StackingAction::ClassifyNewTrack(const G4Track* aTrack)
//keep primary particle
if (aTrack->GetParentID() == 0) { return fUrgent; }
if(!fIDdefined) {
fIDdefined = true;
fPhotoGamma = G4PhysicsModelCatalog::GetIndex("phot_fluo");
fComptGamma = G4PhysicsModelCatalog::GetIndex("compt_fluo");
fPhotoAuger = G4PhysicsModelCatalog::GetIndex("phot_auger");
fComptAuger = G4PhysicsModelCatalog::GetIndex("compt_auger");
fPixeGamma = G4PhysicsModelCatalog::GetIndex("gammaPIXE");
fPixeAuger = G4PhysicsModelCatalog::GetIndex("e-PIXE");
fElectronDNAGamma =
G4PhysicsModelCatalog::GetIndex("e-_G4DNAIonisation_fluo");
fElectronDNAAuger =
G4PhysicsModelCatalog::GetIndex("e-_G4DNAIonisation_auger");
fProtonDNAGamma =
G4PhysicsModelCatalog::GetIndex("proton_G4DNAIonisation_fluo");
fProtonDNAAuger =
G4PhysicsModelCatalog::GetIndex("proton_G4DNAIonisation_auger");
fHydrogenDNAGamma =
G4PhysicsModelCatalog::GetIndex("hydrogen_G4DNAIonisation_fluo");
fHydrogenDNAAuger =
G4PhysicsModelCatalog::GetIndex("hydrogen_G4DNAIonisation_auger");
fAlphaDNAGamma =
G4PhysicsModelCatalog::GetIndex("alpha_G4DNAIonisation_fluo");
fAlphaDNAAuger =
G4PhysicsModelCatalog::GetIndex("alpha_G4DNAIonisation_auger");
fAlphaPlusDNAGamma =
G4PhysicsModelCatalog::GetIndex("alpha+_G4DNAIonisation_fluo");
fAlphaPlusDNAAuger =
G4PhysicsModelCatalog::GetIndex("alpha+_G4DNAIonisation_auger");
fHeliumDNAGamma =
G4PhysicsModelCatalog::GetIndex("helium_G4DNAIonisation_fluo");
fHeliumDNAAuger =
G4PhysicsModelCatalog::GetIndex("helium_G4DNAIonisation_auger");
fGenericIonDNAGamma =
G4PhysicsModelCatalog::GetIndex("GenericIon_G4DNAIonisation_fluo");
fGenericIonDNAAuger =
G4PhysicsModelCatalog::GetIndex("GenericIon_G4DNAIonisation_auger");
}
G4int idx = aTrack->GetCreatorModelID();
G4int procID = aTrack->GetCreatorProcess()->GetProcessSubType();
G4int modelID = aTrack->GetCreatorModelID();
//count secondary particles
Run* run = static_cast<Run*>(
G4RunManager::GetRunManager()->GetNonConstCurrentRun());
run->CountParticles(aTrack->GetDefinition());
@@ -131,55 +88,40 @@ StackingAction::ClassifyNewTrack(const G4Track* aTrack)
if (charge != 0.) {
analysisManager->FillH1(2,energy);
analysisManager->FillH1(4,energy);
if(idx == fPhotoAuger || idx == fComptAuger) {
analysisManager->FillH1(50,energy);
analysisManager->FillH1(52,energy);
} else if(idx == fPixeAuger) {
analysisManager->FillH1(54,energy);
analysisManager->FillH1(56,energy);
} else if(idx == fElectronDNAAuger ||
idx == fProtonDNAAuger ||
idx == fHydrogenDNAAuger ||
idx == fAlphaDNAAuger ||
idx == fAlphaPlusDNAAuger ||
idx == fHeliumDNAAuger ||
idx == fGenericIonDNAAuger) {
if(procID >= 51 && procID <= 65) {
analysisManager->FillH1(58,energy);
analysisManager->FillH1(60,energy);
} else if(_AugerElectron == modelID) {
analysisManager->FillH1(50,energy);
analysisManager->FillH1(52,energy);
} else if(_ePIXE == modelID) {
analysisManager->FillH1(54,energy);
analysisManager->FillH1(56,energy);
}
}
if (aTrack->GetDefinition() == G4Gamma::Gamma()) {
analysisManager->FillH1(3,energy);
analysisManager->FillH1(5,energy);
if(idx == fPhotoGamma || idx == fComptGamma) {
analysisManager->FillH1(51,energy);
analysisManager->FillH1(53,energy);
} else if(idx == fPixeGamma) {
analysisManager->FillH1(55,energy);
analysisManager->FillH1(57,energy);
} else if(idx == fElectronDNAGamma ||
idx == fProtonDNAGamma ||
idx == fHydrogenDNAGamma ||
idx == fAlphaDNAGamma ||
idx == fAlphaPlusDNAGamma ||
idx == fHeliumDNAGamma ||
idx == fGenericIonDNAGamma) {
if(procID >= 51 && procID <= 65) {
analysisManager->FillH1(59,energy);
analysisManager->FillH1(61,energy);
} else if(_Fluorescence == modelID) {
analysisManager->FillH1(51,energy);
analysisManager->FillH1(53,energy);
} else if(_GammaPIXE == modelID) {
analysisManager->FillH1(55,energy);
analysisManager->FillH1(57,energy);
}
}
//stack or delete secondaries
G4ClassificationOfNewTrack status = fUrgent;
if (fKillSecondary) {
if (0 < fKillSecondary) {
if (fKillSecondary == 1) {
fEventAction->AddEnergy(energy);
status = fKill;
fEventAction->AddEnergy(energy);
}
if (aTrack->GetDefinition() == G4Gamma::Gamma()) {
status = fKill;
}
status = fKill;
}
return status;