Import Geant4 11.0.0 source tree
This commit is contained in:
committed by
Ben Morgan
parent
6399a014b6
commit
80e2389dd8
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user