Import Geant4 11.3.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2024-06-28 13:08:51 +02:00
parent f7b23877ed
commit e58e650b32
5232 changed files with 239416 additions and 244360 deletions
+25 -28
View File
@@ -28,26 +28,24 @@
//
//
//
//
//
#include "RE02DetectorConstruction.hh"
#include "QGS_BIC.hh"
#include "RE02ActionInitialization.hh"
#include "RE02DetectorConstruction.hh"
#include "G4RunManagerFactory.hh"
#include "G4UImanager.hh"
#include "G4SystemOfUnits.hh"
#include "G4SystemOfUnits.hh"
#include "G4UIExecutive.hh"
#include "G4UImanager.hh"
#include "G4VisExecutive.hh"
//
int main(int argc,char** argv) {
int main(int argc, char** argv)
{
// Instantiate G4UIExecutive if there are no arguments (interactive mode)
G4UIExecutive* ui = nullptr;
if ( argc == 1 ) {
if (argc == 1) {
ui = new G4UIExecutive(argc, argv);
}
@@ -57,21 +55,21 @@ int main(int argc,char** argv) {
//---
// Create Detector
RE02DetectorConstruction* detector = new RE02DetectorConstruction;
detector->SetPhantomSize(G4ThreeVector(200*mm,200*mm,400*mm)); //Default
detector->SetNumberOfSegmentsInPhantom(100,100,200); //Default
detector->SetPhantomSize(G4ThreeVector(200 * mm, 200 * mm, 400 * mm)); // Default
detector->SetNumberOfSegmentsInPhantom(100, 100, 200); // Default
// If your machine does not have enough memory,
// please try to reduce Number of Segements in phantom.
//detector->SetNumberOfSegmentsInPhantom(1,1,100); // For small memory size.
// detector->SetNumberOfSegmentsInPhantom(1,1,100); // For small memory size.
//
detector->SetLeadSegment(TRUE); // Default (Water and Lead)
detector->SetLeadSegment(TRUE); // Default (Water and Lead)
// Water and Lead segments are placed alternately, by defult.,
// If you want to simulation homogeneous water phantom, please set it FALSE.
//detector->SetLeadSegment(FALSE); // Homogeneous water phantom
// detector->SetLeadSegment(FALSE); // Homogeneous water phantom
//
runManager->SetUserInitialization(detector);
//
runManager->SetUserInitialization(new QGS_BIC());
// Visualization, if you choose to have it!
G4VisManager* visManager = new G4VisExecutive;
visManager->Initialize();
@@ -79,25 +77,25 @@ int main(int argc,char** argv) {
// UserAction classes
runManager->SetUserInitialization(new RE02ActionInitialization);
//Initialize G4 kernel
// Initialize G4 kernel
runManager->Initialize();
//get the pointer to the User Interface manager
G4UImanager * pUI = G4UImanager::GetUIpointer();
if(ui)
// Define (G)UI terminal for interactive mode
{
pUI->ApplyCommand("/control/execute vis.mac");
ui->SessionStart();
delete ui;
// get the pointer to the User Interface manager
G4UImanager* pUI = G4UImanager::GetUIpointer();
if (ui)
// Define (G)UI terminal for interactive mode
{
pUI->ApplyCommand("/control/execute vis.mac");
ui->SessionStart();
delete ui;
}
else
// Batch mode
{
{
G4String command = "/control/execute ";
G4String fileName = argv[1];
pUI->ApplyCommand(command+fileName);
pUI->ApplyCommand(command + fileName);
}
delete visManager;
@@ -107,4 +105,3 @@ int main(int argc,char** argv) {
}
//
@@ -31,20 +31,19 @@
#ifndef RE02ActionInitialization_H
#define RE02ActionInitialization_H 1
#include "globals.hh"
#include "G4VUserActionInitialization.hh"
#include "globals.hh"
class RE02ActionInitialization : public G4VUserActionInitialization
{
public:
RE02ActionInitialization();//G4bool bParallelWorld);
RE02ActionInitialization(); // G4bool bParallelWorld);
virtual ~RE02ActionInitialization();
virtual void Build() const;
virtual void BuildForMaster() const;
private:
private:
};
#endif
@@ -32,9 +32,9 @@
#ifndef RE02DetectorConstruction_h
#define RE02DetectorConstruction_h 1
#include "globals.hh"
#include "G4VUserDetectorConstruction.hh"
#include "G4MultiFunctionalDetector.hh"
#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"
class G4Box;
class G4LogicalVolume;
@@ -47,34 +47,34 @@ class G4Material;
/// (Description)
///
/// Detector construction for example RE02.
///
/// [Geometry]
///
/// [Geometry]
/// The world volume is defined as 200 cm x 200 cm x 200 cm box with Air.
/// Water phantom is defined as 200 mm x 200 mm x 400 mm box with Water.
/// The water phantom is divided into 100 segments in x,y plane using
/// replication,
/// and then divided into 200 segments perpendicular to z axis using nested
/// parameterised volume.
/// and then divided into 200 segments perpendicular to z axis using nested
/// parameterised volume.
/// These values are defined at constructor,
/// e.g. the size of water phantom (fPhantomSize), and number of segmentation
/// of water phantom (fNx, fNy, fNz).
///
/// By default, lead plates are inserted into the position of even order
/// By default, lead plates are inserted into the position of even order
/// segments.
/// NIST database is used for materials.
///
///
/// [Scorer]
/// Assignment of G4MultiFunctionalDetector and G4PrimitiveScorer
/// Assignment of G4MultiFunctionalDetector and G4PrimitiveScorer
/// is demonstrated in this example.
/// -------------------------------------------------
/// The collection names of defined Primitives are
/// 0 PhantomSD/totalEDep
/// 0 PhantomSD/totalEDep
/// 1 PhantomSD/protonEDep
/// 2 PhantomSD/protonNStep
/// 3 PhantomSD/chargedPassCellFlux
/// 4 PhantomSD/chargedCellFlux
/// 5 PhantomSD/chargedSurfFlux
/// 4 PhantomSD/chargedCellFlux
/// 5 PhantomSD/chargedSurfFlux
/// 6 PhantomSD/gammaSurfCurr000
/// 7 PhantomSD/gammaSurfCurr001
/// 9 PhantomSD/gammaSurdCurr002
@@ -94,10 +94,10 @@ class G4Material;
/// - const G4ThreeVector& GetPhantomSize() const
/// gets the water phantom size
///
/// - void SetNumberOfSegmentsInPhantom(G4int nx, G4int ny, G4int nz)
/// - void SetNumberOfSegmentsInPhantom(G4int nx, G4int ny, G4int nz)
/// sets the number of segments of the water phantom
///
/// - void GetNumberOfSegmentsInPhantom(G4int& nx, G4int& ny, G4int& nz)
/// - void GetNumberOfSegmentsInPhantom(G4int& nx, G4int& ny, G4int& nz)
/// gets the number of segments of the water phantom
///
/// - void SetLeadSegment(G4bool flag=TRUE)
@@ -109,36 +109,43 @@ class G4Material;
//
class RE02DetectorConstruction : public G4VUserDetectorConstruction
{
public:
// constructor and destructor.
RE02DetectorConstruction();
virtual ~RE02DetectorConstruction();
public:
// constructor and destructor.
RE02DetectorConstruction();
virtual ~RE02DetectorConstruction();
public:
// virtual method from G4VUserDetectorConstruction.
virtual G4VPhysicalVolume* Construct();
virtual void ConstructSDandField();
public:
// virtual method from G4VUserDetectorConstruction.
virtual G4VPhysicalVolume* Construct();
virtual void ConstructSDandField();
public:
// Get/Set Access methods for data members
// Size of Whater Phantom
void SetPhantomSize(G4ThreeVector size) { fPhantomSize=size; }
const G4ThreeVector& GetPhantomSize() const { return fPhantomSize; }
// Number of segments of water phantom
void SetNumberOfSegmentsInPhantom(G4int nx, G4int ny, G4int nz)
{ fNx=nx; fNy=ny; fNz=nz; }
void GetNumberOfSegmentsInPhantom(G4int& nx, G4int& ny, G4int& nz)
const{ nx=fNx; ny = fNy; nz = fNz; }
// Insert Lead plate in water or simple homogeneous water phantom
void SetLeadSegment(G4bool flag=TRUE){ fInsertLead = flag; }
G4bool IsLeadSegment(){ return fInsertLead; }
private:
// Data members
G4ThreeVector fPhantomSize; // Size of Water Phantom
G4int fNx,fNy,fNz; // Number of segmentation of water phantom.
G4bool fInsertLead; // Flag for inserting lead plate in water phantom
G4LogicalVolume* fLVPhantomSens;
public:
// Get/Set Access methods for data members
// Size of Whater Phantom
void SetPhantomSize(G4ThreeVector size) { fPhantomSize = size; }
const G4ThreeVector& GetPhantomSize() const { return fPhantomSize; }
// Number of segments of water phantom
void SetNumberOfSegmentsInPhantom(G4int nx, G4int ny, G4int nz)
{
fNx = nx;
fNy = ny;
fNz = nz;
}
void GetNumberOfSegmentsInPhantom(G4int& nx, G4int& ny, G4int& nz) const
{
nx = fNx;
ny = fNy;
nz = fNz;
}
// Insert Lead plate in water or simple homogeneous water phantom
void SetLeadSegment(G4bool flag = TRUE) { fInsertLead = flag; }
G4bool IsLeadSegment() { return fInsertLead; }
private:
// Data members
G4ThreeVector fPhantomSize; // Size of Water Phantom
G4int fNx, fNy, fNz; // Number of segmentation of water phantom.
G4bool fInsertLead; // Flag for inserting lead plate in water phantom
G4LogicalVolume* fLVPhantomSens;
};
#endif
@@ -28,7 +28,7 @@
//
//
//
#ifndef RE02EventAction_h
#define RE02EventAction_h 1
@@ -47,17 +47,15 @@ class G4Event;
//
class RE02EventAction : public G4UserEventAction
{
public:
RE02EventAction();
~RE02EventAction();
public:
RE02EventAction();
~RE02EventAction();
public:
virtual void BeginOfEventAction(const G4Event*);
virtual void EndOfEventAction(const G4Event*);
public:
virtual void BeginOfEventAction(const G4Event*);
virtual void EndOfEventAction(const G4Event*);
};
//
#endif
@@ -31,10 +31,11 @@
#ifndef RE02NESTEDPARAMETERISATION_HH
#define RE02NESTEDPARAMETERISATION_HH
#include "G4Types.hh"
#include "G4VNestedParameterisation.hh"
#include "G4ThreeVector.hh"
#include "G4Types.hh"
#include "G4VNestedParameterisation.hh"
#include "G4VTouchable.hh"
#include <vector>
class G4VPhysicalVolume;
@@ -82,88 +83,67 @@ class G4Hype;
/// according to copyNo
/// Its position is defined as G4ThreeVector(0.,0.,fpZ[copyNo]).
///
/// - void ComputeDimensions(G4Box &, const G4int,
/// - void ComputeDimensions(G4Box &, const G4int,
/// const G4VPhysicalVolume *) const
/// returns dimensions of this parameterized volume with the physical
/// returns dimensions of this parameterized volume with the physical
/// volume of the 3rd argument.
///
//
class RE02NestedPhantomParameterisation: public G4VNestedParameterisation
class RE02NestedPhantomParameterisation : public G4VNestedParameterisation
{
public: // with description
RE02NestedPhantomParameterisation(const G4ThreeVector& voxelSize,
G4int nz,
RE02NestedPhantomParameterisation(const G4ThreeVector& voxelSize, G4int nz,
std::vector<G4Material*>& mat);
~RE02NestedPhantomParameterisation();
~RE02NestedPhantomParameterisation();
// Methods required in derived classes
// -----------------------------------
G4Material* ComputeMaterial(G4VPhysicalVolume *currentVol,
const G4int repNo,
const G4VTouchable *parentTouch=0
);
// Required method, as it is the reason for this class.
// Must cope with parentTouch=0 for navigator's SetupHierarchy
G4Material* ComputeMaterial(G4VPhysicalVolume* currentVol, const G4int repNo,
const G4VTouchable* parentTouch = 0);
// Required method, as it is the reason for this class.
// Must cope with parentTouch=0 for navigator's SetupHierarchy
G4int GetNumberOfMaterials() const;
G4int GetNumberOfMaterials() const;
G4Material* GetMaterial(G4int idx) const;
// Needed to define materials for instances of Nested Parameterisation
// Current convention: each call should return the materials
// of all instances with the same mother/ancestor volume.
// Needed to define materials for instances of Nested Parameterisation
// Current convention: each call should return the materials
// of all instances with the same mother/ancestor volume.
void ComputeTransformation(const G4int no,
G4VPhysicalVolume *currentPV) const;
void ComputeTransformation(const G4int no, G4VPhysicalVolume* currentPV) const;
// Methods optional in derived classes
// -----------------------------------
// Additional standard Parameterisation methods,
// Additional standard Parameterisation methods,
// which can be optionally defined, in case solid is used.
void ComputeDimensions(G4Box &,
const G4int,
const G4VPhysicalVolume *) const;
void ComputeDimensions(G4Box&, const G4int, const G4VPhysicalVolume*) const;
private: // Dummy declarations to get rid of warnings ...
private: // Dummy declarations to get rid of warnings ...
void ComputeDimensions(G4Trd&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Trap&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Cons&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Sphere&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Orb&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Ellipsoid&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Torus&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Para&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Hype&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Tubs&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Polycone&, const G4int, const G4VPhysicalVolume*) const {}
void ComputeDimensions(G4Polyhedra&, const G4int, const G4VPhysicalVolume*) const {}
// G4Material* ComputeMaterial(const G4int repNo,
// G4VPhysicalVolume* currentVol,
// const G4VTouchable* parentTouch)
// { return ComputeMaterial( currentVol, repNo, parentTouch ); }
using G4VNestedParameterisation::ComputeMaterial;
void ComputeDimensions (G4Trd&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Trap&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Cons&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Sphere&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Orb&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Ellipsoid&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Torus&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Para&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Hype&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Tubs&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Polycone&,const G4int,const G4VPhysicalVolume*)
const {}
void ComputeDimensions (G4Polyhedra&,const G4int,const G4VPhysicalVolume*)
const {}
// G4Material* ComputeMaterial(const G4int repNo,
// G4VPhysicalVolume* currentVol,
// const G4VTouchable* parentTouch)
// { return ComputeMaterial( currentVol, repNo, parentTouch ); }
using G4VNestedParameterisation::ComputeMaterial;
private:
G4double fdX,fdY,fdZ;
G4int fNz;
//
std::vector<G4double> fpZ;
std::vector<G4Material*> fMat;
private:
G4double fdX, fdY, fdZ;
G4int fNz;
//
std::vector<G4double> fpZ;
std::vector<G4Material*> fMat;
};
#endif
@@ -48,20 +48,19 @@
///
///
// Created: 2005-11-14 Tsukasa ASO, Akinori Kimura.
//
//
///////////////////////////////////////////////////////////////////////////////
class RE02PSCellFlux : public G4PSCellFlux
{
public: // with description
RE02PSCellFlux(G4String name,G4int nx,G4int ny, G4int nz);
virtual ~RE02PSCellFlux();
public: // with description
RE02PSCellFlux(G4String name, G4int nx, G4int ny, G4int nz);
virtual ~RE02PSCellFlux();
protected: // with description
virtual G4int GetIndex(G4Step*);
protected: // with description
virtual G4int GetIndex(G4Step*);
private:
G4int fNx, fNy, fNz;
G4int fNx, fNy, fNz;
};
#endif
@@ -37,20 +37,19 @@
// (Description)
// This is a primitive scorer class for scoring energy deposit.
//
// Created: 2005-11-14 Tsukasa ASO, Akinori Kimura
// Created: 2005-11-14 Tsukasa ASO, Akinori Kimura
///////////////////////////////////////////////////////////////////////////////
class RE02PSEnergyDeposit : public G4PSEnergyDeposit
{
public: // with description
RE02PSEnergyDeposit(G4String name,G4int nx,G4int ny, G4int nz);
virtual ~RE02PSEnergyDeposit();
public: // with description
RE02PSEnergyDeposit(G4String name, G4int nx, G4int ny, G4int nz);
virtual ~RE02PSEnergyDeposit();
protected: // with description
virtual G4int GetIndex(G4Step*);
protected: // with description
virtual G4int GetIndex(G4Step*);
private:
G4int fNx, fNy, fNz;
G4int fNx, fNy, fNz;
};
#endif
@@ -54,16 +54,14 @@
class RE02PSFlatSurfaceCurrent : public G4PSFlatSurfaceCurrent
{
public: // with description
RE02PSFlatSurfaceCurrent(G4String name, G4int direction,
G4int nx,G4int ny, G4int nz);
virtual ~RE02PSFlatSurfaceCurrent();
public: // with description
RE02PSFlatSurfaceCurrent(G4String name, G4int direction, G4int nx, G4int ny, G4int nz);
virtual ~RE02PSFlatSurfaceCurrent();
protected: // with description
virtual G4int GetIndex(G4Step*);
protected: // with description
virtual G4int GetIndex(G4Step*);
private:
G4int fNx, fNy, fNz;
G4int fNx, fNy, fNz;
};
#endif
@@ -57,16 +57,14 @@
class RE02PSFlatSurfaceFlux : public G4PSFlatSurfaceFlux
{
public: // with description
RE02PSFlatSurfaceFlux(G4String name, G4int direction,
G4int nx,G4int ny, G4int nz);
virtual ~RE02PSFlatSurfaceFlux();
public: // with description
RE02PSFlatSurfaceFlux(G4String name, G4int direction, G4int nx, G4int ny, G4int nz);
virtual ~RE02PSFlatSurfaceFlux();
protected: // with description
virtual G4int GetIndex(G4Step*);
protected: // with description
virtual G4int GetIndex(G4Step*);
private:
G4int fNx, fNy, fNz;
G4int fNx, fNy, fNz;
};
#endif
@@ -43,15 +43,14 @@
class RE02PSNofStep : public G4PSNofStep
{
public: // with description
RE02PSNofStep(G4String name,G4int nx,G4int ny, G4int nz);
virtual ~RE02PSNofStep();
public: // with description
RE02PSNofStep(G4String name, G4int nx, G4int ny, G4int nz);
virtual ~RE02PSNofStep();
protected: // with description
virtual G4int GetIndex(G4Step*);
protected: // with description
virtual G4int GetIndex(G4Step*);
private:
G4int fNx, fNy, fNz;
G4int fNx, fNy, fNz;
};
#endif
@@ -48,16 +48,15 @@
class RE02PSPassageCellFlux : public G4PSPassageCellFlux
{
public: // with description
RE02PSPassageCellFlux(G4String name,G4int nx,G4int ny, G4int nz);
virtual ~RE02PSPassageCellFlux();
public: // with description
RE02PSPassageCellFlux(G4String name, G4int nx, G4int ny, G4int nz);
virtual ~RE02PSPassageCellFlux();
protected: // with description
virtual G4int GetIndex(G4Step*);
protected: // with description
virtual G4int GetIndex(G4Step*);
private:
G4int fNx, fNy, fNz;
G4int fNx, fNy, fNz;
};
#endif
@@ -28,7 +28,7 @@
//
//
//
#ifndef RE02PrimaryGeneratorAction_h
#define RE02PrimaryGeneratorAction_h 1
@@ -43,26 +43,24 @@ class G4Event;
/// User primary particle generator class
///
/// - void GeneratePrimaries(G4Event*)
/// an incident particle is proton with 150 MeV energy at the position
/// an incident particle is proton with 150 MeV energy at the position
/// (x,y,-100 cm) toward the (0,0,1) direction. The x and y positions are
/// uniformly varied from -5 mm to 5 mm, respectively.
//
class RE02PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
RE02PrimaryGeneratorAction();
~RE02PrimaryGeneratorAction();
RE02PrimaryGeneratorAction();
~RE02PrimaryGeneratorAction();
public:
virtual void GeneratePrimaries(G4Event*);
private:
G4double fSigmaPosition; // Initial beam spot size in x-y plane.
G4double fSigmaPosition; // Initial beam spot size in x-y plane.
G4ParticleGun* fParticleGun;
};
//
#endif
@@ -27,24 +27,24 @@
/// \brief Definition of the RE02Run class
//
//
//
//
#ifndef RE02Run_h
#define RE02Run_h 1
#include "G4Run.hh"
#include "G4Event.hh"
#include "G4Run.hh"
#include "G4THitsMap.hh"
#include <vector>
//---------------------------------------------------------------------
/// User run class
///
/// (Description)
/// An example implementation for the multi-functional-detector and
/// (Description)
/// An example implementation for the multi-functional-detector and
/// primitive scorers.
/// This RE02Run class has collections which accumulate event information
/// This RE02Run class has collections which accumulate event information
/// into run information.
///
/// - constructor
@@ -60,7 +60,7 @@
/// - G4THitsMap<G4double>* GetHitsMap(G4int i)
/// gets a run HitsMap of the i-th primitive scorer
///
/// - G4THitsMap<G4double>* GetHitsMap(const G4String& detName,
/// - G4THitsMap<G4double>* GetHitsMap(const G4String& detName,
/// const G4String& colName)
/// gets a run HitsMap with the detName and the colName
///
@@ -71,39 +71,38 @@
/// shows all HitsMap information of this run.
/// This method calls G4THisMap::PrintAll() for individual HitsMap.
//---------------------------------------------------------------------
class RE02Run : public G4Run {
class RE02Run : public G4Run
{
public:
// constructor and destructor.
// vector of multifunctionaldetector name has to given to constructor.
RE02Run(const std::vector<G4String> mfdName);
virtual ~RE02Run();
public:
// constructor and destructor.
// vector of multifunctionaldetector name has to given to constructor.
RE02Run(const std::vector<G4String> mfdName);
virtual ~RE02Run();
public:
// virtual method from G4Run.
// The method is overriden in this class for scoring.
virtual void RecordEvent(const G4Event*);
virtual void Merge(const G4Run*);
public:
// virtual method from G4Run.
// The method is overriden in this class for scoring.
virtual void RecordEvent(const G4Event*);
virtual void Merge(const G4Run*);
// Access methods for scoring information.
// - Number of HitsMap for this RUN.
// This is equal to number of collections.
G4int GetNumberOfHitsMap() const { return fRunMap.size(); }
// - Get HitsMap of this RUN.
// by sequential number, by multifucntional name and collection name,
// and by collection name with full path.
G4THitsMap<G4double>* GetHitsMap(G4int i) { return fRunMap[i]; }
G4THitsMap<G4double>* GetHitsMap(const G4String& detName, const G4String& colName);
G4THitsMap<G4double>* GetHitsMap(const G4String& fullName);
// - Dump All HitsMap of this RUN.
// This method calls G4THisMap::PrintAll() for individual HitsMap.
void DumpAllScorer();
// Access methods for scoring information.
// - Number of HitsMap for this RUN.
// This is equal to number of collections.
G4int GetNumberOfHitsMap() const {return fRunMap.size();}
// - Get HitsMap of this RUN.
// by sequential number, by multifucntional name and collection name,
// and by collection name with full path.
G4THitsMap<G4double>* GetHitsMap(G4int i){return fRunMap[i];}
G4THitsMap<G4double>* GetHitsMap(const G4String& detName,
const G4String& colName);
G4THitsMap<G4double>* GetHitsMap(const G4String& fullName);
// - Dump All HitsMap of this RUN.
// This method calls G4THisMap::PrintAll() for individual HitsMap.
void DumpAllScorer();
private:
std::vector<G4String> fCollName;
std::vector<G4int> fCollID;
std::vector<G4THitsMap<G4double>*> fRunMap;
private:
std::vector<G4String> fCollName;
std::vector<G4int> fCollID;
std::vector<G4THitsMap<G4double>*> fRunMap;
};
//
@@ -27,8 +27,8 @@
/// \brief Definition of the RE02RunAction class
//
//
//
//
//
//
//
#ifndef RE02RunAction_h
@@ -36,13 +36,14 @@
#include "G4UserRunAction.hh"
#include "globals.hh"
#include <vector>
class G4Run;
//=======================================================================
// RE02RunAction
//
//
// Generate Run object and Dumping Run summary.
//
// T.Aso Created. 2007.Nov.
@@ -55,7 +56,7 @@ class G4Run;
/// instanciates a run of RE02Run with a sensitive detector name
///
/// - void BeginOfRunAction(const G4Run*)
/// shows the run number
/// shows the run number
///
/// - void EndOfRunAction(const G4Run*)
/// shows accumulated information of primitive scorers and
@@ -67,38 +68,31 @@ class G4Run;
//
class RE02RunAction : public G4UserRunAction
{
public:
// constructor and destructor
RE02RunAction();
virtual ~RE02RunAction();
public:
// constructor and destructor
RE02RunAction();
virtual ~RE02RunAction();
public:
// virtual method from G4UserRunAction.
virtual G4Run* GenerateRun();
virtual void BeginOfRunAction(const G4Run*);
virtual void EndOfRunAction(const G4Run*);
public:
// virtual method from G4UserRunAction.
virtual G4Run* GenerateRun();
virtual void BeginOfRunAction(const G4Run*);
virtual void EndOfRunAction(const G4Run*);
public:
// Utility method for converting segment number of
// water phantom to copyNo of HitsMap.
G4int CopyNo(G4int ix, G4int iy, G4int iz)
{ return (iy*(fNx*fNz)+ix*fNz+iz); }
public:
// Utility method for converting segment number of
// water phantom to copyNo of HitsMap.
G4int CopyNo(G4int ix, G4int iy, G4int iz) { return (iy * (fNx * fNz) + ix * fNz + iz); }
private:
// Data member
// - vector of MultiFunctionalDetecor names.
std::vector<G4String> fSDName;
// for conversion of sengment number to copyNo.
G4int fNx, fNy, fNz;
private:
// Data member
// - vector of MultiFunctionalDetecor names.
std::vector<G4String> fSDName;
// for conversion of sengment number to copyNo.
G4int fNx, fNy, fNz;
};
//
#endif
+32 -17
View File
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-02-patch-02 (21-June-2024)
Geant4 version Name: geant4-11-02-ref-06 (28-June-2024)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -54,14 +54,21 @@ Registered graphics systems are:
RayTracerX (RayTracerX)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
Default graphics system is: TSG_OFFSCREEN (based on batch session).
Default window size hint is: 600x600-0+0 (based on G4VisManager initialisation).
Note: Parameters specified on the command line will override these defaults.
Use "vis/open" without parameters to get these defaults.
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
or you may omit the driver parameter and choose at run time:
- by argument in the construction of G4VisExecutive
- by environment variable "G4VIS_DEFAULT_DRIVER"
- by entry in "~/.g4session"
- by build flags.
- Note: This feature is not allowed in batch mode.
For further information see "examples/basic/B1/exampleB1.cc"
and "vis.mac".
Registering model factories...
@@ -211,6 +218,15 @@ gamma
/gun/energy 356. keV
#
/gun/position 0 0 -100. cm
-------- WWWW ------- G4Exception-START -------- WWWW -------
*** G4Exception : Event0401
issued by : G4VPrimaryGenerator::SetParticlePosition
Invalid vertex position ((0,0,-1000)). Position MUST be located -inside- the world volume.
Gun position has NOT been changed!
*** This is just a warning message. ***
-------- WWWW -------- G4Exception-END --------- WWWW -------
/gun/direction 0 0 1
#
/run/beamOn 10
@@ -357,7 +373,7 @@ eBrem: for e+ XStype:4 SubType=3
eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai
eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai
annihil: for e+ XStype:2 SubType=5 BuildTable=0
annihil: for e+ XStype:2 SubType=5 AtRestModel:Simple BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
eplus2gg : Emin= 0 eV Emax= 100 TeV
@@ -925,7 +941,7 @@ Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
Level density (1/MeV) 0.075
Use simple level density model 1
Use discrete excitation energy of the residual 1
Use discrete excitation energy of the residual 0
Time limit for long lived isomeres 1 ns
Isomer production flag 1
Internal e- conversion flag 1
@@ -1354,7 +1370,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu
Run terminated.
Run Summary
Number of events processed : 10
User=0.000000s Real=0.002538s Sys=0.000000s
User=0.000000s Real=0.002727s Sys=0.000000s
PrimitiveScorer RUN PhantomSD,totalEDep
Number of entries 10
PrimitiveScorer RUN PhantomSD,protonEDep
@@ -1584,11 +1600,12 @@ Run Summary
Graphics systems deleted.
Visualization Manager deleting...
G4 kernel has come to Quit state.
UserDetectorConstruction deleted.
UserPhysicsList deleted.
UserActionInitialization deleted.
UserWorkerInitialization deleted.
UserWorkerThreadInitialization deleted.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x247d9b0
UserPhysicsList deleted 0x247da20
UserActionInitialization deleted 0x268e340
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
UserPrimaryGenerator deleted.
RunManager is deleting RunManagerKernel.
@@ -1602,8 +1619,6 @@ G4RNGHelper object is deleted.
Pool ID '20G4NavigationLevelRep', size : 0.00673 MB
Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
Pool ID '17G4DynamicParticle', size : 0.00192 MB
Pool ID '16G4SmartVoxelNode', size : 0.0192 MB
Pool ID '17G4SmartVoxelProxy', size : 0.00961 MB
Pool ID '7G4Event', size : 0.000961 MB
Pool ID '15G4PrimaryVertex', size : 0.000961 MB
Pool ID '17G4PrimaryParticle', size : 0.000961 MB
@@ -1611,8 +1626,8 @@ Pool ID '15G4HCofThisEvent', size : 0.000961 MB
Pool ID '7G4Track', size : 0.00385 MB
Pool ID '18G4TouchableHistory', size : 0.000961 MB
Pool ID '15G4CountedObjectIvE', size : 0.000961 MB
Number of memory pools allocated: 12 of which, static: 0
Dynamic pools deleted: 12 / Total memory freed: 0.048 MB
Number of memory pools allocated: 10 of which, static: 0
Dynamic pools deleted: 10 / Total memory freed: 0.019 MB
============================================================
G4Allocator objects are deleted.
UImanager deleted.
+130 -115
View File
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-02-patch-02 (21-June-2024)
Geant4 version Name: geant4-11-02-ref-06 (28-June-2024)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -54,14 +54,21 @@ Registered graphics systems are:
RayTracerX (RayTracerX)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
Default graphics system is: TSG_OFFSCREEN (based on batch session).
Default window size hint is: 600x600-0+0 (based on G4VisManager initialisation).
Note: Parameters specified on the command line will override these defaults.
Use "vis/open" without parameters to get these defaults.
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
or you may omit the driver parameter and choose at run time:
- by argument in the construction of G4VisExecutive
- by environment variable "G4VIS_DEFAULT_DRIVER"
- by entry in "~/.g4session"
- by build flags.
- Note: This feature is not allowed in batch mode.
For further information see "examples/basic/B1/exampleB1.cc"
and "vis.mac".
Registering model factories...
@@ -209,6 +216,15 @@ gamma
/gun/energy 30. MeV
#
/gun/position 0 0 -100 cm
-------- WWWW ------- G4Exception-START -------- WWWW -------
*** G4Exception : Event0401
issued by : G4VPrimaryGenerator::SetParticlePosition
Invalid vertex position ((0,0,-1000)). Position MUST be located -inside- the world volume.
Gun position has NOT been changed!
*** This is just a warning message. ***
-------- WWWW -------- G4Exception-END --------- WWWW -------
/gun/direction 0 0 1
#
/run/beamOn 10000
@@ -355,7 +371,7 @@ eBrem: for e+ XStype:4 SubType=3
eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai
eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai
annihil: for e+ XStype:2 SubType=5 BuildTable=0
annihil: for e+ XStype:2 SubType=5 AtRestModel:Simple BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
eplus2gg : Emin= 0 eV Emax= 100 TeV
@@ -923,7 +939,7 @@ Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
Level density (1/MeV) 0.075
Use simple level density model 1
Use discrete excitation energy of the residual 1
Use discrete excitation energy of the residual 0
Time limit for long lived isomeres 1 ns
Isomer production flag 1
Internal e- conversion flag 1
@@ -1034,124 +1050,124 @@ See commands in /vis/modeling/trajectories/ for other options.
Run terminated.
Run Summary
Number of events processed : 10000
User=10.780000s Real=12.159889s Sys=0.050000s
User=10.060000s Real=10.389782s Sys=0.030000s
PrimitiveScorer RUN PhantomSD,totalEDep
Number of entries 52027
Number of entries 51910
PrimitiveScorer RUN PhantomSD,protonEDep
Number of entries 31
Number of entries 18
PrimitiveScorer RUN PhantomSD,protonNStep
Number of entries 31
Number of entries 18
PrimitiveScorer RUN PhantomSD,chargedPassCellFlux
Number of entries 20657
Number of entries 20357
PrimitiveScorer RUN PhantomSD,chargedCellFlux
Number of entries 51831
Number of entries 51696
PrimitiveScorer RUN PhantomSD,chargedSurfFlux
Number of entries 11958
Number of entries 12007
PrimitiveScorer RUN PhantomSD,gammaSurfCurr000
Number of entries 31
Number of entries 26
PrimitiveScorer RUN PhantomSD,gammaSurfCurr001
Number of entries 349
Number of entries 335
PrimitiveScorer RUN PhantomSD,gammaSurfCurr002
Number of entries 50713
Number of entries 51536
PrimitiveScorer RUN PhantomSD,gammaSurfCurr003
Number of entries 72315
Number of entries 72382
=============================================================
Number of event processed : 10000
=============================================================
#Z Cell# totalEDep protonEDep protonNStep chargedPassCellFlux chargedCellFlux chargedSurfFlux gammaSurfCurr000 gammaSurfCurr001 gammaSurfCurr002 gammaSurfCurr003
0 44.386 MeV 0 eV 0 2864.82 /cm2 3018.04 /cm2 2372.6 /cm2 0 /cm2 25 /cm2 525 /cm2 300 /cm2
1 515.569 MeV 0 eV 0 3520.71 /cm2 4829.25 /cm2 415766 /cm2 0 /cm2 75 /cm2 1175 /cm2 675 /cm2
2 56.7764 MeV 0 eV 0 3604.73 /cm2 3915.16 /cm2 7315.55 /cm2 0 /cm2 0 /cm2 3375 /cm2 3900 /cm2
3 290.932 MeV 0 eV 0 1721.66 /cm2 2720.68 /cm2 4333.46 /cm2 0 /cm2 25 /cm2 3775 /cm2 3650 /cm2
4 19.8145 MeV 0 eV 0 1185.08 /cm2 1352.58 /cm2 2323.47 /cm2 0 /cm2 0 /cm2 2950 /cm2 3775 /cm2
5 102.578 MeV 0 eV 0 229.567 /cm2 953.196 /cm2 1526.8 /cm2 0 /cm2 0 /cm2 2250 /cm2 3100 /cm2
6 7.86254 MeV 0 eV 0 468.151 /cm2 549.581 /cm2 654.286 /cm2 0 /cm2 0 /cm2 2075 /cm2 2650 /cm2
7 44.8579 MeV 0 eV 0 73.8981 /cm2 411.001 /cm2 1089.25 /cm2 0 /cm2 0 /cm2 1825 /cm2 2750 /cm2
8 2.88322 MeV 0 eV 0 45.1992 /cm2 150.994 /cm2 151.94 /cm2 0 /cm2 0 /cm2 1250 /cm2 2500 /cm2
9 36.1381 MeV 0 eV 0 121.287 /cm2 311.86 /cm2 389.103 /cm2 0 /cm2 0 /cm2 875 /cm2 1925 /cm2
10 2.91052 MeV 0 eV 0 157.833 /cm2 178.921 /cm2 232.874 /cm2 0 /cm2 0 /cm2 925 /cm2 1625 /cm2
11 17.9066 MeV 0 eV 0 24.8926 /cm2 163.363 /cm2 165.055 /cm2 0 /cm2 0 /cm2 650 /cm2 1450 /cm2
12 1.59431 MeV 0 eV 0 103.174 /cm2 119.835 /cm2 78.6724 /cm2 0 /cm2 0 /cm2 475 /cm2 1100 /cm2
13 18.6114 MeV 0 eV 0 15.9593 /cm2 165.464 /cm2 1172.54 /cm2 0 /cm2 0 /cm2 225 /cm2 1075 /cm2
14 2.90419 MeV 0 eV 0 129.487 /cm2 184.259 /cm2 104.245 /cm2 0 /cm2 25 /cm2 300 /cm2 1100 /cm2
15 10.6198 MeV 0 eV 0 21.5993 /cm2 81.4308 /cm2 222.427 /cm2 0 /cm2 0 /cm2 400 /cm2 950 /cm2
16 1.09779 MeV 0 eV 0 75.416 /cm2 76.0432 /cm2 60.4938 /cm2 0 /cm2 0 /cm2 400 /cm2 775 /cm2
17 11.3059 MeV 0 eV 0 72.6344 /cm2 111.529 /cm2 51.6244 /cm2 0 /cm2 0 /cm2 175 /cm2 625 /cm2
18 779.377 keV 0 eV 0 27.0639 /cm2 42.7092 /cm2 129.45 /cm2 0 /cm2 0 /cm2 100 /cm2 450 /cm2
19 11.927 MeV 0 eV 0 6.79688 /cm2 101.403 /cm2 38.2673 /cm2 0 /cm2 0 /cm2 100 /cm2 575 /cm2
20 280.605 keV 0 eV 0 15.2339 /cm2 15.2339 /cm2 0 /cm2 0 /cm2 0 /cm2 75 /cm2 475 /cm2
21 5.83575 MeV 0 eV 0 0 /cm2 55.0113 /cm2 0 /cm2 0 /cm2 0 /cm2 225 /cm2 400 /cm2
22 491.304 keV 0 eV 0 5.491 /cm2 29.1653 /cm2 0 /cm2 0 /cm2 0 /cm2 125 /cm2 250 /cm2
23 6.60744 MeV 0 eV 0 0.416297 /cm2 48.5831 /cm2 362.44 /cm2 0 /cm2 0 /cm2 150 /cm2 250 /cm2
24 937.689 keV 0 eV 0 46.4278 /cm2 61.4511 /cm2 0 /cm2 0 /cm2 0 /cm2 300 /cm2 150 /cm2
25 3.15325 MeV 0 eV 0 5.57218 /cm2 28.9431 /cm2 27.5931 /cm2 0 /cm2 0 /cm2 150 /cm2 150 /cm2
26 671.931 keV 0 eV 0 53.913 /cm2 53.9166 /cm2 110.713 /cm2 0 /cm2 0 /cm2 150 /cm2 150 /cm2
27 1.3406 MeV 0 eV 0 5.14124 /cm2 12.4285 /cm2 27.1077 /cm2 0 /cm2 0 /cm2 175 /cm2 225 /cm2
28 23.9282 keV 0 eV 0 2.90245 /cm2 2.90245 /cm2 0 /cm2 0 /cm2 0 /cm2 125 /cm2 225 /cm2
29 970.405 keV 0 eV 0 5.89056 /cm2 9.18227 /cm2 32.656 /cm2 0 /cm2 0 /cm2 75 /cm2 125 /cm2
30 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 175 /cm2
31 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 150 /cm2
32 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 125 /cm2
33 296.613 keV 0 eV 0 0.711623 /cm2 0.9259 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 100 /cm2
34 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 100 /cm2
35 575.943 keV 0 eV 0 3.10075 /cm2 3.8622 /cm2 0 /cm2 0 /cm2 0 /cm2 75 /cm2 175 /cm2
36 59.3084 keV 0 eV 0 3.61915 /cm2 3.61915 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 175 /cm2
37 242.955 keV 0 eV 0 0.161291 /cm2 0.873565 /cm2 78.4966 /cm2 0 /cm2 0 /cm2 50 /cm2 100 /cm2
38 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2
39 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
40 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
41 420.032 keV 0 eV 0 0 /cm2 3.00295 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2
42 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
43 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
44 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
45 826.542 keV 0 eV 0 8.35001 /cm2 8.35001 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
46 521.356 keV 0 eV 0 30.9717 /cm2 33.3225 /cm2 36.5514 /cm2 0 /cm2 0 /cm2 25 /cm2 25 /cm2
0 42.2327 MeV 0 eV 0 2913.37 /cm2 3046.65 /cm2 2441.59 /cm2 0 /cm2 0 /cm2 575 /cm2 275 /cm2
1 521.973 MeV 0 eV 0 3659.68 /cm2 4931.24 /cm2 4491.65 /cm2 0 /cm2 50 /cm2 1575 /cm2 750 /cm2
2 58.3239 MeV 0 eV 0 3667.74 /cm2 3967.82 /cm2 5509.12 /cm2 0 /cm2 0 /cm2 3775 /cm2 3350 /cm2
3 303.959 MeV 0 eV 0 1660.32 /cm2 2855.69 /cm2 2944 /cm2 0 /cm2 0 /cm2 3525 /cm2 3075 /cm2
4 28.3144 MeV 0 eV 0 1704.13 /cm2 1881.83 /cm2 3817.96 /cm2 0 /cm2 0 /cm2 3325 /cm2 3450 /cm2
5 122.958 MeV 0 eV 0 571.062 /cm2 1126.25 /cm2 2443.75 /cm2 0 /cm2 50 /cm2 2550 /cm2 3050 /cm2
6 9.51299 MeV 0 eV 0 543.698 /cm2 647.291 /cm2 470.587 /cm2 0 /cm2 0 /cm2 2350 /cm2 2950 /cm2
7 67.5444 MeV 0 eV 0 228.732 /cm2 617.927 /cm2 763.297 /cm2 0 /cm2 25 /cm2 1925 /cm2 2750 /cm2
8 5.97265 MeV 0 eV 0 329.553 /cm2 371.688 /cm2 773.819 /cm2 0 /cm2 0 /cm2 1500 /cm2 2100 /cm2
9 61.3121 MeV 0 eV 0 103.418 /cm2 571.021 /cm2 329.328 /cm2 0 /cm2 0 /cm2 1175 /cm2 1950 /cm2
10 4.4351 MeV 0 eV 0 149.576 /cm2 245.572 /cm2 694.391 /cm2 0 /cm2 0 /cm2 675 /cm2 1800 /cm2
11 18.5561 MeV 0 eV 0 23.5878 /cm2 159.29 /cm2 151.702 /cm2 0 /cm2 0 /cm2 725 /cm2 1650 /cm2
12 2.52666 MeV 0 eV 0 108.322 /cm2 168.5 /cm2 177.486 /cm2 0 /cm2 0 /cm2 650 /cm2 1450 /cm2
13 27.429 MeV 0 eV 0 121.541 /cm2 272.004 /cm2 268.992 /cm2 0 /cm2 0 /cm2 375 /cm2 1375 /cm2
14 3.5216 MeV 0 eV 0 190.821 /cm2 211.883 /cm2 186.624 /cm2 0 /cm2 0 /cm2 400 /cm2 1150 /cm2
15 7.01702 MeV 0 eV 0 14.0926 /cm2 56.7483 /cm2 81.2818 /cm2 0 /cm2 0 /cm2 525 /cm2 1075 /cm2
16 1.41876 MeV 0 eV 0 114.334 /cm2 114.334 /cm2 68.7782 /cm2 0 /cm2 0 /cm2 250 /cm2 675 /cm2
17 12.1807 MeV 0 eV 0 37.7173 /cm2 115.282 /cm2 359.888 /cm2 0 /cm2 0 /cm2 250 /cm2 475 /cm2
18 582.702 keV 0 eV 0 31.2308 /cm2 31.2308 /cm2 0 /cm2 0 /cm2 0 /cm2 175 /cm2 650 /cm2
19 12.4225 MeV 0 eV 0 10.5381 /cm2 102.539 /cm2 870.813 /cm2 0 /cm2 0 /cm2 200 /cm2 475 /cm2
20 2.84438 MeV 0 eV 0 148.005 /cm2 189.199 /cm2 68.1002 /cm2 0 /cm2 0 /cm2 350 /cm2 350 /cm2
21 7.08656 MeV 0 eV 0 24.3932 /cm2 69.4336 /cm2 26.4078 /cm2 0 /cm2 0 /cm2 275 /cm2 375 /cm2
22 1.49265 MeV 0 eV 0 33.7237 /cm2 88.3176 /cm2 26.1053 /cm2 0 /cm2 0 /cm2 200 /cm2 200 /cm2
23 6.83995 MeV 0 eV 0 0 /cm2 59.3401 /cm2 0 /cm2 0 /cm2 0 /cm2 175 /cm2 200 /cm2
24 229.495 keV 0 eV 0 0 /cm2 7.34187 /cm2 0 /cm2 0 /cm2 0 /cm2 100 /cm2 275 /cm2
25 1.76602 MeV 0 eV 0 0 /cm2 10.27 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 275 /cm2
26 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 175 /cm2
27 1.03531 MeV 0 eV 0 1.09018 /cm2 8.32663 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 150 /cm2
28 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 125 /cm2
29 3.09284 MeV 0 eV 0 0 /cm2 27.7223 /cm2 0 /cm2 0 /cm2 0 /cm2 100 /cm2 75 /cm2
30 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 75 /cm2
31 320.013 keV 0 eV 0 0 /cm2 1.55202 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 175 /cm2
32 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 150 /cm2
33 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 50 /cm2
34 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2
35 323.595 keV 0 eV 0 0 /cm2 1.30391 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 25 /cm2
36 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2
37 281.255 keV 0 eV 0 0 /cm2 0.96567 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 50 /cm2
38 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 75 /cm2
39 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 25 /cm2
40 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 25 /cm2
41 273.795 keV 0 eV 0 0 /cm2 0.909026 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
42 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 25 /cm2
43 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
44 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
45 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
46 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
47 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
48 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
49 2.01004 MeV 0 eV 0 0 /cm2 21.0106 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2
50 972.411 keV 0 eV 0 46.7949 /cm2 60.8169 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2
49 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
50 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
51 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2
52 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 50 /cm2
53 684.999 keV 0 eV 0 0 /cm2 5.23611 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2
54 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
55 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
52 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2
53 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
54 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
55 906.795 keV 0 eV 0 0 /cm2 6.90754 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
56 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
57 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
58 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2
59 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2
60 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2
61 206.772 keV 0 eV 0 0 /cm2 0.450992 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2
62 598.052 keV 0 eV 0 11.8606 /cm2 33.4972 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 0 /cm2
63 544.4 keV 0 eV 0 0 /cm2 4.44881 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
64 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
65 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
57 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
58 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
59 750.453 keV 0 eV 0 0 /cm2 6.44167 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
60 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
61 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
62 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
63 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
64 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
65 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
66 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
67 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
68 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
69 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
70 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
71 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
71 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2
72 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
73 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
74 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
75 770.854 keV 0 eV 0 0 /cm2 6.05763 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
74 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
75 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
76 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
77 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
78 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
79 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
80 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
81 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
82 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
83 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
84 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
85 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
86 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
87 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
88 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
89 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
90 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
91 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
92 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
77 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
78 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
79 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
80 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
81 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
82 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
83 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
84 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
85 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
86 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
87 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
88 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
89 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
90 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
91 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
92 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2
93 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
94 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
95 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2
@@ -1264,11 +1280,12 @@ Run Summary
Graphics systems deleted.
Visualization Manager deleting...
G4 kernel has come to Quit state.
UserDetectorConstruction deleted.
UserPhysicsList deleted.
UserActionInitialization deleted.
UserWorkerInitialization deleted.
UserWorkerThreadInitialization deleted.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x11839b0
UserPhysicsList deleted 0x1183a20
UserActionInitialization deleted 0x1394340
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
UserPrimaryGenerator deleted.
RunManager is deleting RunManagerKernel.
@@ -1276,25 +1293,23 @@ G4SDManager deleted.
EventManager deleted.
Units table cleared.
TransportationManager deleted.
Total navigation history collections cleaned: 19
Total navigation history collections cleaned: 20
G4RNGHelper object is deleted.
================== Deleting memory pools ===================
Pool ID '20G4NavigationLevelRep', size : 0.0279 MB
Pool ID '20G4NavigationLevelRep', size : 0.0298 MB
Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
Pool ID '17G4DynamicParticle', size : 0.0106 MB
Pool ID '16G4SmartVoxelNode', size : 0.0192 MB
Pool ID '17G4SmartVoxelProxy', size : 0.00961 MB
Pool ID '17G4DynamicParticle', size : 0.00961 MB
Pool ID '7G4Event', size : 0.000961 MB
Pool ID '15G4PrimaryVertex', size : 0.000961 MB
Pool ID '17G4PrimaryParticle', size : 0.000961 MB
Pool ID '15G4HCofThisEvent', size : 0.000961 MB
Pool ID '7G4Track', size : 0.0211 MB
Pool ID '18G4TouchableHistory', size : 0.00192 MB
Pool ID '7G4Track', size : 0.0183 MB
Pool ID '18G4TouchableHistory', size : 0.00288 MB
Pool ID '15G4CountedObjectIvE', size : 0.000961 MB
Pool ID '10G4Fragment', size : 0.000961 MB
Pool ID '17G4ReactionProduct', size : 0.000961 MB
Number of memory pools allocated: 14 of which, static: 0
Dynamic pools deleted: 14 / Total memory freed: 0.098 MB
Pool ID '10G4Fragment', size : 0.00192 MB
Pool ID '17G4ReactionProduct', size : 0.00192 MB
Number of memory pools allocated: 12 of which, static: 0
Dynamic pools deleted: 12 / Total memory freed: 0.07 MB
============================================================
G4Allocator objects are deleted.
UImanager deleted.
+32 -17
View File
@@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo
**************************************************************
Geant4 version Name: geant4-11-02-patch-02 (21-June-2024)
Geant4 version Name: geant4-11-02-ref-06 (28-June-2024)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -54,14 +54,21 @@ Registered graphics systems are:
RayTracerX (RayTracerX)
Qt3D (Qt3D)
TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK)
TOOLSSG_X11_ZB (TSG_X11_ZB, TSGX11ZB)
TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK)
TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB)
TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG)
TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB)
Default graphics system is: TSG_OFFSCREEN (based on batch session).
Default window size hint is: 600x600-0+0 (based on G4VisManager initialisation).
Note: Parameters specified on the command line will override these defaults.
Use "vis/open" without parameters to get these defaults.
You may choose a graphics system (driver) with a parameter of
the command "/vis/open" or "/vis/sceneHandler/create",
or you may omit the driver parameter and choose at run time:
- by argument in the construction of G4VisExecutive
- by environment variable "G4VIS_DEFAULT_DRIVER"
- by entry in "~/.g4session"
- by build flags.
- Note: This feature is not allowed in batch mode.
For further information see "examples/basic/B1/exampleB1.cc"
and "vis.mac".
Registering model factories...
@@ -211,6 +218,15 @@ gamma
#/gun/energy 356. keV
#
/gun/position 0 0 -100. cm
-------- WWWW ------- G4Exception-START -------- WWWW -------
*** G4Exception : Event0401
issued by : G4VPrimaryGenerator::SetParticlePosition
Invalid vertex position ((0,0,-1000)). Position MUST be located -inside- the world volume.
Gun position has NOT been changed!
*** This is just a warning message. ***
-------- WWWW -------- G4Exception-END --------- WWWW -------
/gun/direction 0 0 1
#
/run/beamOn 10000
@@ -357,7 +373,7 @@ eBrem: for e+ XStype:4 SubType=3
eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai
eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai
annihil: for e+ XStype:2 SubType=5 BuildTable=0
annihil: for e+ XStype:2 SubType=5 AtRestModel:Simple BuildTable=0
===== EM models for the G4Region DefaultRegionForTheWorld ======
eplus2gg : Emin= 0 eV Emax= 100 TeV
@@ -925,7 +941,7 @@ Min energy per nucleon for multifragmentation 200 GeV
Limit excitation energy for Fermi BreakUp 20 MeV
Level density (1/MeV) 0.075
Use simple level density model 1
Use discrete excitation energy of the residual 1
Use discrete excitation energy of the residual 0
Time limit for long lived isomeres 1 ns
Isomer production flag 1
Internal e- conversion flag 1
@@ -1036,7 +1052,7 @@ See commands in /vis/modeling/trajectories/ for other options.
Run terminated.
Run Summary
Number of events processed : 10000
User=0.150000s Real=0.155088s Sys=0.000000s
User=0.160000s Real=0.164177s Sys=0.000000s
PrimitiveScorer RUN PhantomSD,totalEDep
Number of entries 81
PrimitiveScorer RUN PhantomSD,protonEDep
@@ -1266,11 +1282,12 @@ Run Summary
Graphics systems deleted.
Visualization Manager deleting...
G4 kernel has come to Quit state.
UserDetectorConstruction deleted.
UserPhysicsList deleted.
UserActionInitialization deleted.
UserWorkerInitialization deleted.
UserWorkerThreadInitialization deleted.
Deleting G4Run (id:0)
UserDetectorConstruction deleted 0x23c39b0
UserPhysicsList deleted 0x23c3a20
UserActionInitialization deleted 0x25d4340
UserWorkerInitialization deleted 0
UserWorkerThreadInitialization deleted 0
UserRunAction deleted.
UserPrimaryGenerator deleted.
RunManager is deleting RunManagerKernel.
@@ -1284,8 +1301,6 @@ G4RNGHelper object is deleted.
Pool ID '20G4NavigationLevelRep', size : 0.00865 MB
Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB
Pool ID '17G4DynamicParticle', size : 0.00192 MB
Pool ID '16G4SmartVoxelNode', size : 0.0192 MB
Pool ID '17G4SmartVoxelProxy', size : 0.00961 MB
Pool ID '7G4Event', size : 0.000961 MB
Pool ID '15G4PrimaryVertex', size : 0.000961 MB
Pool ID '17G4PrimaryParticle', size : 0.000961 MB
@@ -1293,8 +1308,8 @@ Pool ID '15G4HCofThisEvent', size : 0.000961 MB
Pool ID '7G4Track', size : 0.00288 MB
Pool ID '18G4TouchableHistory', size : 0.000961 MB
Pool ID '15G4CountedObjectIvE', size : 0.000961 MB
Number of memory pools allocated: 12 of which, static: 0
Dynamic pools deleted: 12 / Total memory freed: 0.049 MB
Number of memory pools allocated: 10 of which, static: 0
Dynamic pools deleted: 10 / Total memory freed: 0.02 MB
============================================================
G4Allocator objects are deleted.
UImanager deleted.
@@ -29,17 +29,22 @@
//
#include "RE02ActionInitialization.hh"
#include "RE02EventAction.hh"
#include "RE02PrimaryGeneratorAction.hh"
#include "RE02RunAction.hh"
#include "RE02EventAction.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02ActionInitialization::RE02ActionInitialization()
{;}
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02ActionInitialization::~RE02ActionInitialization()
{;}
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE02ActionInitialization::Build() const
@@ -59,4 +64,3 @@ void RE02ActionInitialization::BuildForMaster() const
G4UserRunAction* run_action = new RE02RunAction;
SetUserAction(run_action);
}
@@ -28,34 +28,30 @@
//
//
//
#include "RE02DetectorConstruction.hh"
#include "G4PSEnergyDeposit3D.hh"
#include "G4PSNofStep3D.hh"
#include "G4PSCellFlux3D.hh"
#include "G4PSPassageCellFlux3D.hh"
#include "G4PSFlatSurfaceFlux3D.hh"
#include "G4PSFlatSurfaceCurrent3D.hh"
#include "G4SDParticleWithEnergyFilter.hh"
#include "G4SDParticleFilter.hh"
#include "G4SDChargedFilter.hh"
#include "G4NistManager.hh"
#include "G4Material.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4SDManager.hh"
#include "G4PVParameterised.hh"
#include "RE02NestedPhantomParameterisation.hh"
#include "G4VisAttributes.hh"
#include "G4Box.hh"
#include "G4Colour.hh"
#include "G4SystemOfUnits.hh"
#include "G4LogicalVolume.hh"
#include "G4Material.hh"
#include "G4NistManager.hh"
#include "G4PSCellFlux3D.hh"
#include "G4PSEnergyDeposit3D.hh"
#include "G4PSFlatSurfaceCurrent3D.hh"
#include "G4PSFlatSurfaceFlux3D.hh"
#include "G4PSNofStep3D.hh"
#include "G4PSPassageCellFlux3D.hh"
#include "G4PVParameterised.hh"
#include "G4PVPlacement.hh"
#include "G4SDChargedFilter.hh"
#include "G4SDManager.hh"
#include "G4SDParticleFilter.hh"
#include "G4SDParticleWithEnergyFilter.hh"
#include "G4SystemOfUnits.hh"
#include "G4VisAttributes.hh"
#include "G4ios.hh"
//=======================================================================
@@ -64,34 +60,34 @@
// (Description)
//
// Detector construction for example RE02.
//
// [Geometry]
//
// [Geometry]
// The world volume is defined as 200 cm x 200 cm x 200 cm box with Air.
// Water phantom is defined as 200 mm x 200 mm x 400 mm box with Water.
// The water phantom is divided into 100 segments in x,y plane using
// replication,
// and then divided into 200 segments perpendicular to z axis using nested
// parameterised volume.
// and then divided into 200 segments perpendicular to z axis using nested
// parameterised volume.
// These values are defined at constructor,
// e.g. the size of water phantom (fPhantomSize), and number of segmentation
// of water phantom (fNx, fNy, fNz).
//
// By default, lead plates are inserted into the position of even order
// By default, lead plates are inserted into the position of even order
// segments.
// NIST database is used for materials.
//
//
// [Scorer]
// Assignment of G4MultiFunctionalDetector and G4PrimitiveScorer
// Assignment of G4MultiFunctionalDetector and G4PrimitiveScorer
// is demonstrated in this example.
// -------------------------------------------------
// The collection names of defined Primitives are
// 0 PhantomSD/totalEDep
// 0 PhantomSD/totalEDep
// 1 PhantomSD/protonEDep
// 2 PhantomSD/protonNStep
// 3 PhantomSD/chargedPassCellFlux
// 4 PhantomSD/chargedCellFlux
// 5 PhantomSD/chargedSurfFlux
// 4 PhantomSD/chargedCellFlux
// 5 PhantomSD/chargedSurfFlux
// 6 PhantomSD/gammaSurfCurr000
// 7 PhantomSD/gammaSurfCurr001
// 9 PhantomSD/gammaSurdCurr002
@@ -102,34 +98,35 @@
//=======================================================================
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02DetectorConstruction::RE02DetectorConstruction()
: G4VUserDetectorConstruction()
RE02DetectorConstruction::RE02DetectorConstruction() : G4VUserDetectorConstruction()
{
// Default size of water phantom,and segmentation.
fPhantomSize.setX(200.*mm);
fPhantomSize.setY(200.*mm);
fPhantomSize.setZ(400.*mm);
fNx = fNy = fNz = 100;
fInsertLead = TRUE;
fPhantomSize.setX(200. * mm);
fPhantomSize.setY(200. * mm);
fPhantomSize.setZ(400. * mm);
fNx = fNy = fNz = 100;
fInsertLead = TRUE;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02DetectorConstruction::~RE02DetectorConstruction()
{;}
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VPhysicalVolume* RE02DetectorConstruction::Construct()
G4VPhysicalVolume* RE02DetectorConstruction::Construct()
{
//=====================
// Material Definitions
//=====================
//
//
//-------- NIST Materials ----------------------------------------------------
// Material Information imported from NIST database.
//
G4NistManager* NISTman = G4NistManager::Instance();
G4Material* air = NISTman->FindOrBuildMaterial("G4_AIR");
G4Material* water = NISTman->FindOrBuildMaterial("G4_WATER");
G4Material* air = NISTman->FindOrBuildMaterial("G4_AIR");
G4Material* water = NISTman->FindOrBuildMaterial("G4_WATER");
G4Material* lead = NISTman->FindOrBuildMaterial("G4_Pb");
//
@@ -138,31 +135,29 @@ RE02DetectorConstruction::~RE02DetectorConstruction()
G4cout << *(G4Material::GetMaterialTable()) << G4endl;
//============================================================================
// Definitions of Solids, Logical Volumes, Physical Volumes
// Definitions of Solids, Logical Volumes, Physical Volumes
//============================================================================
//-------------
// World Volume
// World Volume
//-------------
G4ThreeVector worldSize = G4ThreeVector(200*cm, 200*cm, 200*cm);
G4Box * solidWorld
= new G4Box("world", worldSize.x()/2., worldSize.y()/2., worldSize.z()/2.);
G4LogicalVolume * logicWorld
= new G4LogicalVolume(solidWorld, air, "World", 0, 0, 0);
G4ThreeVector worldSize = G4ThreeVector(200 * cm, 200 * cm, 200 * cm);
//
G4Box* solidWorld =
new G4Box("world", worldSize.x() / 2., worldSize.y() / 2., worldSize.z() / 2.);
G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, air, "World", 0, 0, 0);
//
// Must place the World Physical volume unrotated at (0,0,0).
G4VPhysicalVolume * physiWorld
= new G4PVPlacement(0, // no rotation
G4ThreeVector(), // at (0,0,0)
logicWorld, // its logical volume
"World", // its name
0, // its mother volume
false, // no boolean operations
0); // copy number
G4VPhysicalVolume* physiWorld = new G4PVPlacement(0, // no rotation
G4ThreeVector(), // at (0,0,0)
logicWorld, // its logical volume
"World", // its name
0, // its mother volume
false, // no boolean operations
0); // copy number
//---------------
// Water Phantom
//---------------
@@ -172,36 +167,33 @@ RE02DetectorConstruction::~RE02DetectorConstruction()
//................................
//-- Default size of water phantom is defined at constructor.
G4ThreeVector phantomSize = fPhantomSize;
G4Box * solidPhantom
= new G4Box("phantom",
phantomSize.x()/2., phantomSize.y()/2., phantomSize.z()/2.);
G4LogicalVolume * logicPhantom
= new G4LogicalVolume(solidPhantom, water, "Phantom", 0, 0, 0);
G4ThreeVector phantomSize = fPhantomSize;
G4Box* solidPhantom =
new G4Box("phantom", phantomSize.x() / 2., phantomSize.y() / 2., phantomSize.z() / 2.);
G4LogicalVolume* logicPhantom = new G4LogicalVolume(solidPhantom, water, "Phantom", 0, 0, 0);
G4RotationMatrix* rot = new G4RotationMatrix();
//rot->rotateY(30.*deg);
// rot->rotateY(30.*deg);
G4ThreeVector positionPhantom;
//G4VPhysicalVolume * physiPhantom =
new G4PVPlacement(rot, // no rotation
positionPhantom, // at (x,y,z)
logicPhantom, // its logical volume
"Phantom", // its name
logicWorld, // its mother volume
false, // no boolean operations
0); // copy number
// G4VPhysicalVolume * physiPhantom =
new G4PVPlacement(rot, // no rotation
positionPhantom, // at (x,y,z)
logicPhantom, // its logical volume
"Phantom", // its name
logicWorld, // its mother volume
false, // no boolean operations
0); // copy number
//..............................................
// Phantom segmentation using Parameterisation
//..............................................
//
G4cout << "<-- RE02DetectorConstruction::Construct-------" <<G4endl;
G4cout << " Water Phantom Size " << fPhantomSize/mm << G4endl;
G4cout << " Segmentation ("<< fNx<<","<<fNy<<","<<fNz<<")"<< G4endl;
G4cout << " Lead plate at even copy # (0-False,1-True): " << IsLeadSegment()
<< G4endl;
G4cout << "<---------------------------------------------"<< G4endl;
G4cout << "<-- RE02DetectorConstruction::Construct-------" << G4endl;
G4cout << " Water Phantom Size " << fPhantomSize / mm << G4endl;
G4cout << " Segmentation (" << fNx << "," << fNy << "," << fNz << ")" << G4endl;
G4cout << " Lead plate at even copy # (0-False,1-True): " << IsLeadSegment() << G4endl;
G4cout << "<---------------------------------------------" << G4endl;
// Number of segmentation.
// - Default number of segmentation is defined at constructor.
G4int nxCells = fNx;
@@ -209,29 +201,27 @@ RE02DetectorConstruction::~RE02DetectorConstruction()
G4int nzCells = fNz;
G4ThreeVector sensSize;
sensSize.setX(phantomSize.x()/(G4double)nxCells);
sensSize.setY(phantomSize.y()/(G4double)nyCells);
sensSize.setZ(phantomSize.z()/(G4double)nzCells);
sensSize.setX(phantomSize.x() / (G4double)nxCells);
sensSize.setY(phantomSize.y() / (G4double)nyCells);
sensSize.setZ(phantomSize.z() / (G4double)nzCells);
// i.e Voxel size will be 2.0 x 2.0 x 2.0 mm3 cube by default.
//
//
// Replication of Water Phantom Volume.
// Y Slice
G4String yRepName("RepY");
G4VSolid* solYRep =
new G4Box(yRepName,phantomSize.x()/2.,sensSize.y()/2.,phantomSize.z()/2.);
G4LogicalVolume* logYRep =
new G4LogicalVolume(solYRep,water,yRepName);
//G4PVReplica* yReplica =
new G4PVReplica(yRepName,logYRep,logicPhantom,kYAxis,fNy,sensSize.y());
new G4Box(yRepName, phantomSize.x() / 2., sensSize.y() / 2., phantomSize.z() / 2.);
G4LogicalVolume* logYRep = new G4LogicalVolume(solYRep, water, yRepName);
// G4PVReplica* yReplica =
new G4PVReplica(yRepName, logYRep, logicPhantom, kYAxis, fNy, sensSize.y());
// X Slice
G4String xRepName("RepX");
G4VSolid* solXRep =
new G4Box(xRepName,sensSize.x()/2.,sensSize.y()/2.,phantomSize.z()/2.);
G4LogicalVolume* logXRep =
new G4LogicalVolume(solXRep,water,xRepName);
//G4PVReplica* xReplica =
new G4PVReplica(xRepName,logXRep,logYRep,kXAxis,fNx,sensSize.x());
new G4Box(xRepName, sensSize.x() / 2., sensSize.y() / 2., phantomSize.z() / 2.);
G4LogicalVolume* logXRep = new G4LogicalVolume(solXRep, water, xRepName);
// G4PVReplica* xReplica =
new G4PVReplica(xRepName, logXRep, logYRep, kXAxis, fNx, sensSize.x());
//
//..................................
@@ -239,57 +229,55 @@ RE02DetectorConstruction::~RE02DetectorConstruction()
//..................................
// Z Slice
G4String zVoxName("phantomSens");
G4VSolid* solVoxel =
new G4Box(zVoxName,sensSize.x()/2.,sensSize.y()/2.,sensSize.z()/2.);
fLVPhantomSens = new G4LogicalVolume(solVoxel,water,zVoxName);
G4VSolid* solVoxel = new G4Box(zVoxName, sensSize.x() / 2., sensSize.y() / 2., sensSize.z() / 2.);
fLVPhantomSens = new G4LogicalVolume(solVoxel, water, zVoxName);
//
//
std::vector<G4Material*> phantomMat(2,water);
if ( IsLeadSegment() ) phantomMat[1]=lead;
std::vector<G4Material*> phantomMat(2, water);
if (IsLeadSegment()) phantomMat[1] = lead;
//
// Parameterisation for transformation of voxels.
// (voxel size is fixed in this example.
// (voxel size is fixed in this example.
// e.g. nested parameterisation handles material and transfomation of voxels.)
RE02NestedPhantomParameterisation* paramPhantom
= new RE02NestedPhantomParameterisation(sensSize/2.,nzCells,phantomMat);
//G4VPhysicalVolume * physiPhantomSens =
new G4PVParameterised("PhantomSens", // their name
fLVPhantomSens, // their logical volume
logXRep, // Mother logical volume
kUndefined, // Are placed along this axis
nzCells, // Number of cells
paramPhantom); // Parameterisation.
RE02NestedPhantomParameterisation* paramPhantom =
new RE02NestedPhantomParameterisation(sensSize / 2., nzCells, phantomMat);
// G4VPhysicalVolume * physiPhantomSens =
new G4PVParameterised("PhantomSens", // their name
fLVPhantomSens, // their logical volume
logXRep, // Mother logical volume
kUndefined, // Are placed along this axis
nzCells, // Number of cells
paramPhantom); // Parameterisation.
// Optimization flag is avaiable for,
// kUndefined, kXAxis, kYAxis, kZAxis.
//
//===============================
// Visualization attributes
//===============================
// Visualization attributes
//===============================
G4VisAttributes* boxVisAtt = new G4VisAttributes(G4Colour(1.0,1.0,1.0));
logicWorld ->SetVisAttributes(boxVisAtt);
//logicWorld->SetVisAttributes(G4VisAttributes::GetInvisible());
G4VisAttributes* boxVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0));
logicWorld->SetVisAttributes(boxVisAtt);
// logicWorld->SetVisAttributes(G4VisAttributes::GetInvisible());
// Mother volume of WaterPhantom
G4VisAttributes* phantomVisAtt = new G4VisAttributes(G4Colour(1.0,1.0,0.0));
G4VisAttributes* phantomVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 0.0));
logicPhantom->SetVisAttributes(phantomVisAtt);
// Replica
G4VisAttributes* yRepVisAtt = new G4VisAttributes(G4Colour(0.0,1.0,0.0));
G4VisAttributes* yRepVisAtt = new G4VisAttributes(G4Colour(0.0, 1.0, 0.0));
logYRep->SetVisAttributes(yRepVisAtt);
G4VisAttributes* xRepVisAtt = new G4VisAttributes(G4Colour(0.0,1.0,0.0));
G4VisAttributes* xRepVisAtt = new G4VisAttributes(G4Colour(0.0, 1.0, 0.0));
logXRep->SetVisAttributes(xRepVisAtt);
// Skip the visualization for those voxels.
fLVPhantomSens->SetVisAttributes(G4VisAttributes::GetInvisible());
return physiWorld;
}
void RE02DetectorConstruction::ConstructSDandField() {
void RE02DetectorConstruction::ConstructSDandField()
{
//================================================
// Sensitive detectors : MultiFunctionalDetector
//================================================
@@ -299,17 +287,16 @@ void RE02DetectorConstruction::ConstructSDandField() {
//
// Sensitive Detector Name
G4String phantomSDname = "PhantomSD";
//------------------------
// MultiFunctionalDetector
//------------------------
//
// Define MultiFunctionalDetector with name.
G4MultiFunctionalDetector* mFDet
= new G4MultiFunctionalDetector(phantomSDname);
pSDman->AddNewDetector( mFDet ); // Register SD to SDManager.
fLVPhantomSens->SetSensitiveDetector(mFDet); // Assign SD to the logical volume.
G4MultiFunctionalDetector* mFDet = new G4MultiFunctionalDetector(phantomSDname);
pSDman->AddNewDetector(mFDet); // Register SD to SDManager.
fLVPhantomSens->SetSensitiveDetector(mFDet); // Assign SD to the logical volume.
//---------------------------------------
// SDFilter : Sensitive Detector Filters
//---------------------------------------
@@ -318,22 +305,20 @@ void RE02DetectorConstruction::ConstructSDandField() {
// and particle name(particleName),
// or particle names are given by add("particle name"); method.
//
G4String fltName,particleName;
G4String fltName, particleName;
//
//-- proton filter
G4SDParticleFilter* protonFilter =
new G4SDParticleFilter(fltName="protonFilter", particleName="proton");
new G4SDParticleFilter(fltName = "protonFilter", particleName = "proton");
//
//-- electron filter
G4SDParticleFilter* electronFilter =
new G4SDParticleFilter(fltName="electronFilter");
electronFilter->add(particleName="e+"); // accept electrons.
electronFilter->add(particleName="e-"); // accept positorons.
G4SDParticleFilter* electronFilter = new G4SDParticleFilter(fltName = "electronFilter");
electronFilter->add(particleName = "e+"); // accept electrons.
electronFilter->add(particleName = "e-"); // accept positorons.
//
//-- charged particle filter
G4SDChargedFilter* chargedFilter =
new G4SDChargedFilter(fltName="chargedFilter");
G4SDChargedFilter* chargedFilter = new G4SDChargedFilter(fltName = "chargedFilter");
//------------------------
// PS : Primitive Scorers
//------------------------
@@ -343,30 +328,26 @@ void RE02DetectorConstruction::ConstructSDandField() {
//-- Primitive Scorer for Energy Deposit.
// Total, by protons, by electrons.
G4String psName;
G4PSEnergyDeposit3D * scorer0 = new G4PSEnergyDeposit3D(psName="totalEDep",
fNx,fNy,fNz);
G4PSEnergyDeposit3D * scorer1 = new G4PSEnergyDeposit3D(psName="protonEDep",
fNx,fNy,fNz);
G4PSEnergyDeposit3D* scorer0 = new G4PSEnergyDeposit3D(psName = "totalEDep", fNx, fNy, fNz);
G4PSEnergyDeposit3D* scorer1 = new G4PSEnergyDeposit3D(psName = "protonEDep", fNx, fNy, fNz);
scorer1->SetFilter(protonFilter);
//
//-- Number of Steps for protons
G4PSNofStep3D * scorer2 =
new G4PSNofStep3D(psName="protonNStep",fNx,fNy,fNz);
G4PSNofStep3D* scorer2 = new G4PSNofStep3D(psName = "protonNStep", fNx, fNy, fNz);
scorer2->SetFilter(protonFilter);
//
//-- CellFlux for charged particles
G4PSPassageCellFlux3D * scorer3 =
new G4PSPassageCellFlux3D(psName="chargedPassCellFlux", fNx,fNy,fNz);
G4PSCellFlux3D * scorer4 =
new G4PSCellFlux3D(psName="chargedCellFlux", fNx,fNy,fNz);
G4PSFlatSurfaceFlux3D * scorer5 =
new G4PSFlatSurfaceFlux3D(psName="chargedSurfFlux", fFlux_InOut,fNx,fNy,fNz);
G4PSPassageCellFlux3D* scorer3 =
new G4PSPassageCellFlux3D(psName = "chargedPassCellFlux", fNx, fNy, fNz);
G4PSCellFlux3D* scorer4 = new G4PSCellFlux3D(psName = "chargedCellFlux", fNx, fNy, fNz);
G4PSFlatSurfaceFlux3D* scorer5 =
new G4PSFlatSurfaceFlux3D(psName = "chargedSurfFlux", fFlux_InOut, fNx, fNy, fNz);
scorer3->SetFilter(chargedFilter);
scorer4->SetFilter(chargedFilter);
scorer5->SetFilter(chargedFilter);
//
//------------------------------------------------------------
// Register primitive scorers to MultiFunctionalDetector
@@ -377,7 +358,7 @@ void RE02DetectorConstruction::ConstructSDandField() {
mFDet->RegisterPrimitive(scorer3);
mFDet->RegisterPrimitive(scorer4);
mFDet->RegisterPrimitive(scorer5);
//========================
// More additional Primitive Scoreres
//========================
@@ -390,23 +371,21 @@ void RE02DetectorConstruction::ConstructSDandField() {
// 100 keV to 1 MeV, gammaSurfCurr002
// 1 MeV to 10 MeV. gammaSurfCurr003
//
for ( G4int i = 0; i < 4; i++){
for (G4int i = 0; i < 4; i++) {
std::ostringstream name;
name << "gammaSurfCurr" << std::setfill('0') << std::setw(3) << i;
G4String psgName = name.str();
G4double kmin = std::pow(10.,(G4double)i)*keV;
G4double kmax = std::pow(10.,(G4double)(i+1))*keV;
G4double kmin = std::pow(10., (G4double)i) * keV;
G4double kmax = std::pow(10., (G4double)(i + 1)) * keV;
//-- Particle with kinetic energy filter.
G4SDParticleWithEnergyFilter* pkinEFilter =
new G4SDParticleWithEnergyFilter(fltName="gammaE filter",kmin,kmax);
new G4SDParticleWithEnergyFilter(fltName = "gammaE filter", kmin, kmax);
pkinEFilter->add("gamma"); // Accept only gamma.
pkinEFilter->show(); // Show accepting condition to stdout.
pkinEFilter->show(); // Show accepting condition to stdout.
//-- Surface Current Scorer which scores number of tracks in unit area.
G4PSFlatSurfaceCurrent3D * scorer =
new G4PSFlatSurfaceCurrent3D(psgName,fCurrent_InOut,fNx,fNy,fNz);
scorer->SetFilter(pkinEFilter); // Assign filter.
G4PSFlatSurfaceCurrent3D* scorer =
new G4PSFlatSurfaceCurrent3D(psgName, fCurrent_InOut, fNx, fNy, fNz);
scorer->SetFilter(pkinEFilter); // Assign filter.
mFDet->RegisterPrimitive(scorer); // Register it to MultiFunctionalDetector.
}
}
@@ -28,38 +28,33 @@
//
//
//
#include "RE02EventAction.hh"
#include "G4Event.hh"
#include "G4EventManager.hh"
#include "G4TrajectoryContainer.hh"
#include "G4Trajectory.hh"
#include "G4TrajectoryContainer.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02EventAction::RE02EventAction()
: G4UserEventAction()
{}
RE02EventAction::RE02EventAction() : G4UserEventAction() {}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02EventAction::~RE02EventAction()
{}
RE02EventAction::~RE02EventAction() {}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE02EventAction::BeginOfEventAction(const G4Event*)
{}
void RE02EventAction::BeginOfEventAction(const G4Event*) {}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE02EventAction::EndOfEventAction(const G4Event* evt)
{
G4int event_id = evt->GetEventID();
// periodic printing
//
if (event_id < 10 ||
(event_id < 1000 && event_id%100 == 0) ||
(event_id < 10000 && event_id%1000 == 0) ||
(event_id < 100000 && event_id%10000 == 0)) {
if (event_id < 10 || (event_id < 1000 && event_id % 100 == 0)
|| (event_id < 10000 && event_id % 1000 == 0) || (event_id < 100000 && event_id % 10000 == 0))
{
G4cout << ">>> Event " << evt->GetEventID() << G4endl;
#ifdef print_stored_trajectories
// get number of stored trajectories
@@ -67,11 +62,9 @@ void RE02EventAction::EndOfEventAction(const G4Event* evt)
G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer();
G4int n_trajectories = 0;
if (trajectoryContainer) n_trajectories = trajectoryContainer->entries();
G4cout << " " << n_trajectories
<< " trajectories stored in this event." << G4endl;
G4cout << " " << n_trajectories << " trajectories stored in this event." << G4endl;
#endif
}
}
//
@@ -30,12 +30,12 @@
///////////////////////////////////////////////////////////////////////////////
#include "RE02NestedPhantomParameterisation.hh"
#include "G4VPhysicalVolume.hh"
#include "G4VTouchable.hh"
#include "G4ThreeVector.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4Material.hh"
#include "G4ThreeVector.hh"
#include "G4VPhysicalVolume.hh"
#include "G4VTouchable.hh"
//=======================================================================
// (RE02NestedPhantomParameterisation)
@@ -49,29 +49,30 @@
////////////////////////////////////////////////////////////////////
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02NestedPhantomParameterisation
::RE02NestedPhantomParameterisation(const G4ThreeVector& voxelSize,
G4int nz,
std::vector<G4Material*>& mat):
G4VNestedParameterisation(),
fdX(voxelSize.x()),fdY(voxelSize.y()),fdZ(voxelSize.z()),
fNz(nz),fMat(mat)
RE02NestedPhantomParameterisation ::RE02NestedPhantomParameterisation(
const G4ThreeVector& voxelSize, G4int nz, std::vector<G4Material*>& mat)
: G4VNestedParameterisation(),
fdX(voxelSize.x()),
fdY(voxelSize.y()),
fdZ(voxelSize.z()),
fNz(nz),
fMat(mat)
{
// Position of voxels.
// x and y positions are already defined in DetectorConstruction
// Position of voxels.
// x and y positions are already defined in DetectorConstruction
// by using replicated volume. Here only we need to define is z positions
// of voxles.
fpZ.clear();
G4double zp;
for ( G4int iz = 0; iz < fNz; iz++){
zp = (-fNz+1+2*iz)*fdZ;
for (G4int iz = 0; iz < fNz; iz++) {
zp = (-fNz + 1 + 2 * iz) * fdZ;
fpZ.push_back(zp);
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02NestedPhantomParameterisation::~RE02NestedPhantomParameterisation(){
RE02NestedPhantomParameterisation::~RE02NestedPhantomParameterisation()
{
fpZ.clear();
}
@@ -79,22 +80,25 @@ RE02NestedPhantomParameterisation::~RE02NestedPhantomParameterisation(){
//
// Material assignment to geometry.
//
G4Material* RE02NestedPhantomParameterisation
::ComputeMaterial(G4VPhysicalVolume* /*currentVol*/, const G4int copyNo,
const G4VTouchable* parentTouch)
G4Material* RE02NestedPhantomParameterisation ::ComputeMaterial(G4VPhysicalVolume* /*currentVol*/,
const G4int copyNo,
const G4VTouchable* parentTouch)
{
if(parentTouch==0) return fMat[0]; // protection for initialization and
// vis at idle state
// Copy number of voxels.
if (parentTouch == 0)
return fMat[0]; // protection for initialization and
// vis at idle state
// Copy number of voxels.
// Copy number of X and Y are obtained from replication number.
// Copy nymber of Z is the copy number of current voxel.
G4int ix = parentTouch->GetReplicaNumber(0);
G4int iy = parentTouch->GetReplicaNumber(1);
G4int iz = copyNo;
// For demonstration purpose,a couple of materials are chosen alternately.
G4Material* mat=0;
if ( ix%2 == 0 && iy%2 == 0 && iz%2 == 0 ) mat = fMat[0];
else mat = fMat[1];
G4Material* mat = 0;
if (ix % 2 == 0 && iy % 2 == 0 && iz % 2 == 0)
mat = fMat[0];
else
mat = fMat[1];
return mat;
}
@@ -102,9 +106,10 @@ G4Material* RE02NestedPhantomParameterisation
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//
// Number of Materials
// Material scanner is required for preparing physics tables and so on before
// Material scanner is required for preparing physics tables and so on before
// stating simulation, so that G4 has to know number of materials.
G4int RE02NestedPhantomParameterisation::GetNumberOfMaterials() const{
G4int RE02NestedPhantomParameterisation::GetNumberOfMaterials() const
{
return fMat.size();
}
@@ -113,7 +118,8 @@ G4int RE02NestedPhantomParameterisation::GetNumberOfMaterials() const{
// GetMaterial
// This is needed for material scanner and realizing geometry.
//
G4Material* RE02NestedPhantomParameterisation::GetMaterial(G4int i) const{
G4Material* RE02NestedPhantomParameterisation::GetMaterial(G4int i) const
{
return fMat[i];
}
@@ -121,9 +127,10 @@ G4Material* RE02NestedPhantomParameterisation::GetMaterial(G4int i) const{
//
// Transformation of voxels.
//
void RE02NestedPhantomParameterisation
::ComputeTransformation(const G4int copyNo, G4VPhysicalVolume* physVol) const{
G4ThreeVector position(0.,0.,fpZ[copyNo]);
void RE02NestedPhantomParameterisation ::ComputeTransformation(const G4int copyNo,
G4VPhysicalVolume* physVol) const
{
G4ThreeVector position(0., 0., fpZ[copyNo]);
physVol->SetTranslation(position);
}
@@ -131,8 +138,9 @@ void RE02NestedPhantomParameterisation
//
// Dimensions are always same in this RE02 example.
//
void RE02NestedPhantomParameterisation
::ComputeDimensions(G4Box& box, const G4int, const G4VPhysicalVolume* ) const{
void RE02NestedPhantomParameterisation ::ComputeDimensions(G4Box& box, const G4int,
const G4VPhysicalVolume*) const
{
box.SetXHalfLength(fdX);
box.SetYHalfLength(fdY);
box.SetZHalfLength(fdZ);
@@ -47,23 +47,27 @@
// This is a primitive scorer class for scoring cell charge.
// The Cell Charge is defined by a sum of charge inside the cell
// which calculates the deposited charge in the cell.
//
//
//
//
//
//
//
// Created: 2006-06-20 Tsukasa ASO, Akinori Kimura.
//
//
///////////////////////////////////////////////////////////////////////////////
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSCellFlux::RE02PSCellFlux(G4String name,G4int nx, G4int ny, G4int nz)
:G4PSCellFlux(name),fNx(nx),fNy(ny),fNz(nz)
{;}
RE02PSCellFlux::RE02PSCellFlux(G4String name, G4int nx, G4int ny, G4int nz)
: G4PSCellFlux(name), fNx(nx), fNy(ny), fNz(nz)
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSCellFlux::~RE02PSCellFlux()
{;}
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4int RE02PSCellFlux::GetIndex(G4Step* aStep)
@@ -72,8 +76,10 @@ G4int RE02PSCellFlux::GetIndex(G4Step* aStep)
G4int ix = touchable->GetReplicaNumber(1);
G4int iy = touchable->GetReplicaNumber(2);
G4int iz = touchable->GetReplicaNumber(0);
G4int tmp = fNy;
if (tmp) return iy*fNx*fNz+ix*fNz+iz;
else return iy*fNx*fNz+ix*fNz+iz;
if (tmp)
return iy * fNx * fNz + ix * fNz + iz;
else
return iy * fNx * fNz + ix * fNz + iz;
}
@@ -47,24 +47,27 @@
// This is a primitive scorer class for scoring cell charge.
// The Cell Charge is defined by a sum of charge inside the cell
// which calculates the deposited charge in the cell.
//
//
//
//
//
//
//
// Created: 2006-06-20 Tsukasa ASO, Akinori Kimura.
//
//
///////////////////////////////////////////////////////////////////////////////
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSEnergyDeposit::RE02PSEnergyDeposit(G4String name,
G4int nx, G4int ny, G4int nz)
:G4PSEnergyDeposit(name),fNx(nx),fNy(ny),fNz(nz)
{;}
RE02PSEnergyDeposit::RE02PSEnergyDeposit(G4String name, G4int nx, G4int ny, G4int nz)
: G4PSEnergyDeposit(name), fNx(nx), fNy(ny), fNz(nz)
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSEnergyDeposit::~RE02PSEnergyDeposit()
{;}
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4int RE02PSEnergyDeposit::GetIndex(G4Step* aStep)
@@ -75,6 +78,8 @@ G4int RE02PSEnergyDeposit::GetIndex(G4Step* aStep)
G4int iz = touchable->GetReplicaNumber(0);
G4int tmp = fNy;
if (tmp) return iy*fNx*fNz+ix*fNz+iz;
else return iy*fNx*fNz+ix*fNz+iz;
if (tmp)
return iy * fNx * fNz + ix * fNz + iz;
else
return iy * fNx * fNz + ix * fNz + iz;
}
@@ -47,25 +47,28 @@
// This is a primitive scorer class for scoring cell charge.
// The Cell Charge is defined by a sum of charge inside the cell
// which calculates the deposited charge in the cell.
//
//
//
//
//
//
//
// Created: 2006-06-20 Tsukasa ASO, Akinori Kimura.
//
//
///////////////////////////////////////////////////////////////////////////////
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSFlatSurfaceCurrent::RE02PSFlatSurfaceCurrent(G4String name,
G4int direction,
G4int nx, G4int ny, G4int nz)
:G4PSFlatSurfaceCurrent(name,direction),fNx(nx),fNy(ny),fNz(nz)
{;}
RE02PSFlatSurfaceCurrent::RE02PSFlatSurfaceCurrent(G4String name, G4int direction, G4int nx,
G4int ny, G4int nz)
: G4PSFlatSurfaceCurrent(name, direction), fNx(nx), fNy(ny), fNz(nz)
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSFlatSurfaceCurrent::~RE02PSFlatSurfaceCurrent()
{;}
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4int RE02PSFlatSurfaceCurrent::GetIndex(G4Step* aStep)
@@ -74,8 +77,10 @@ G4int RE02PSFlatSurfaceCurrent::GetIndex(G4Step* aStep)
G4int ix = touchable->GetReplicaNumber(1);
G4int iy = touchable->GetReplicaNumber(2);
G4int iz = touchable->GetReplicaNumber(0);
G4int tmp = fNy;
if (tmp) return iy*fNx*fNz+ix*fNz+iz;
else return iy*fNx*fNz+ix*fNz+iz;
if (tmp)
return iy * fNx * fNz + ix * fNz + iz;
else
return iy * fNx * fNz + ix * fNz + iz;
}
@@ -47,24 +47,28 @@
// This is a primitive scorer class for scoring cell charge.
// The Cell Charge is defined by a sum of charge inside the cell
// which calculates the deposited charge in the cell.
//
//
//
//
//
//
//
// Created: 2006-06-20 Tsukasa ASO, Akinori Kimura.
//
//
///////////////////////////////////////////////////////////////////////////////
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSFlatSurfaceFlux::RE02PSFlatSurfaceFlux(G4String name, G4int direction,
G4int nx, G4int ny, G4int nz)
:G4PSFlatSurfaceFlux(name,direction),fNx(nx),fNy(ny),fNz(nz)
{;}
RE02PSFlatSurfaceFlux::RE02PSFlatSurfaceFlux(G4String name, G4int direction, G4int nx, G4int ny,
G4int nz)
: G4PSFlatSurfaceFlux(name, direction), fNx(nx), fNy(ny), fNz(nz)
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSFlatSurfaceFlux::~RE02PSFlatSurfaceFlux()
{;}
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4int RE02PSFlatSurfaceFlux::GetIndex(G4Step* aStep)
@@ -73,8 +77,10 @@ G4int RE02PSFlatSurfaceFlux::GetIndex(G4Step* aStep)
G4int ix = touchable->GetReplicaNumber(1);
G4int iy = touchable->GetReplicaNumber(2);
G4int iz = touchable->GetReplicaNumber(0);
G4int tmp = fNy;
if (tmp) return iy*fNx*fNz+ix*fNz+iz;
else return iy*fNx*fNz+ix*fNz+iz;
if (tmp)
return iy * fNx * fNz + ix * fNz + iz;
else
return iy * fNx * fNz + ix * fNz + iz;
}
@@ -47,23 +47,27 @@
// This is a primitive scorer class for scoring cell charge.
// The Cell Charge is defined by a sum of charge inside the cell
// which calculates the deposited charge in the cell.
//
//
//
//
//
//
//
// Created: 2006-06-20 Tsukasa ASO, Akinori Kimura.
//
//
///////////////////////////////////////////////////////////////////////////////
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSNofStep::RE02PSNofStep(G4String name,G4int nx, G4int ny, G4int nz)
:G4PSNofStep(name),fNx(nx),fNy(ny),fNz(nz)
{;}
RE02PSNofStep::RE02PSNofStep(G4String name, G4int nx, G4int ny, G4int nz)
: G4PSNofStep(name), fNx(nx), fNy(ny), fNz(nz)
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSNofStep::~RE02PSNofStep()
{;}
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4int RE02PSNofStep::GetIndex(G4Step* aStep)
@@ -72,8 +76,10 @@ G4int RE02PSNofStep::GetIndex(G4Step* aStep)
G4int ix = touchable->GetReplicaNumber(1);
G4int iy = touchable->GetReplicaNumber(2);
G4int iz = touchable->GetReplicaNumber(0);
G4int tmp = fNy;
if (tmp) return iy*fNx*fNz+ix*fNz+iz;
else return iy*fNx*fNz+ix*fNz+iz;
if (tmp)
return iy * fNx * fNz + ix * fNz + iz;
else
return iy * fNx * fNz + ix * fNz + iz;
}
@@ -47,24 +47,27 @@
// This is a primitive scorer class for scoring cell charge.
// The Cell Charge is defined by a sum of charge inside the cell
// which calculates the deposited charge in the cell.
//
//
//
//
//
//
//
// Created: 2006-06-20 Tsukasa ASO, Akinori Kimura.
//
//
///////////////////////////////////////////////////////////////////////////////
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSPassageCellFlux::RE02PSPassageCellFlux(G4String name,
G4int nx, G4int ny, G4int nz)
:G4PSPassageCellFlux(name),fNx(nx),fNy(ny),fNz(nz)
{;}
RE02PSPassageCellFlux::RE02PSPassageCellFlux(G4String name, G4int nx, G4int ny, G4int nz)
: G4PSPassageCellFlux(name), fNx(nx), fNy(ny), fNz(nz)
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RE02PSPassageCellFlux::~RE02PSPassageCellFlux()
{;}
{
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4int RE02PSPassageCellFlux::GetIndex(G4Step* aStep)
@@ -73,8 +76,10 @@ G4int RE02PSPassageCellFlux::GetIndex(G4Step* aStep)
G4int ix = touchable->GetReplicaNumber(1);
G4int iy = touchable->GetReplicaNumber(2);
G4int iz = touchable->GetReplicaNumber(0);
G4int tmp = fNy;
if (tmp) return iy*fNx*fNz+ix*fNz+iz;
else return iy*fNx*fNz+ix*fNz+iz;
if (tmp)
return iy * fNx * fNz + ix * fNz + iz;
else
return iy * fNx * fNz + ix * fNz + iz;
}
@@ -32,38 +32,37 @@
#include "RE02PrimaryGeneratorAction.hh"
#include "G4Event.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleGun.hh"
#include "G4ParticleTable.hh"
#include "G4ParticleDefinition.hh"
#include "G4SystemOfUnits.hh"
#include "Randomize.hh"
#include "globals.hh"
#include "G4SystemOfUnits.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//
RE02PrimaryGeneratorAction::RE02PrimaryGeneratorAction()
: G4VUserPrimaryGeneratorAction(),
fParticleGun(0)
: G4VUserPrimaryGeneratorAction(), fParticleGun(0)
{
G4int n_particle = 1;
fParticleGun = new G4ParticleGun(n_particle);
// default particle
// default particle
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4ParticleDefinition* particle = particleTable->FindParticle("proton");
fParticleGun->SetParticleDefinition(particle);
fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.0,0.0,1.));
fParticleGun->SetParticleEnergy(150.0*MeV);
//
// default beam position
G4double position = -200./2.*cm;
//
// Initial beam spot size in sigma.; This is not a part of ParticleGun.
fSigmaPosition = 10.* mm;
fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.0, 0.0, 1.));
fParticleGun->SetParticleEnergy(150.0 * MeV);
//
// default beam position
G4double position = -200. / 2. * cm;
//
// Initial beam spot size in sigma.; This is not a part of ParticleGun.
fSigmaPosition = 10. * mm;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//
fParticleGun->SetParticlePosition(G4ThreeVector(0.*cm, 0.*cm, position));
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//
fParticleGun->SetParticlePosition(G4ThreeVector(0. * cm, 0. * cm, position));
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -76,11 +75,10 @@ RE02PrimaryGeneratorAction::~RE02PrimaryGeneratorAction()
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//
void RE02PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
{
G4ThreeVector position = fParticleGun->GetParticlePosition();
G4double dx = (G4UniformRand()-0.5)*fSigmaPosition;
G4double dy = (G4UniformRand()-0.5)*fSigmaPosition;
G4double dx = (G4UniformRand() - 0.5) * fSigmaPosition;
G4double dy = (G4UniformRand() - 0.5) * fSigmaPosition;
position.setX(dx);
position.setY(dy);
fParticleGun->SetParticlePosition(position);
@@ -32,7 +32,7 @@
//=====================================================================
//
// (Description)
// RE02Run Class is for accumulating scored quantities which is
// RE02Run Class is for accumulating scored quantities which is
// scored using G4MutiFunctionalDetector and G4VPrimitiveScorer.
// Accumulation is done using G4THitsMap object.
//
@@ -41,10 +41,10 @@
// was assigned at instantiation of MultiFunctionalDetector(MFD).
// Then RE02Run constructor automatically scans primitive scorers
// in the MFD, and obtains collectionIDs of all collections associated
// to those primitive scorers. Futhermore, the G4THitsMap objects
// to those primitive scorers. Futhermore, the G4THitsMap objects
// for accumulating during a RUN are automatically created too.
// (*) Collection Name is same as primitive scorer name.
//
//
// The resultant information is kept inside RE02Run objects as
// data members.
// std::vector<G4String> fCollName; // Collection Name,
@@ -57,14 +57,14 @@
//=====================================================================
#include "RE02Run.hh"
#include "G4SDManager.hh"
#include "G4MultiFunctionalDetector.hh"
#include "G4SDManager.hh"
#include "G4VPrimitiveScorer.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//
// Constructor.
// Constructor.
// (The vector of MultiFunctionalDetector name has to given.)
RE02Run::RE02Run(const std::vector<G4String> mfdName) : G4Run()
{
@@ -74,36 +74,35 @@ RE02Run::RE02Run(const std::vector<G4String> mfdName) : G4Run()
// Get CollectionIDs for HitCollections.
//=================================================
G4int nMfd = mfdName.size();
for ( G4int idet = 0; idet < nMfd ; idet++){ // Loop for all MFD.
for (G4int idet = 0; idet < nMfd; idet++) { // Loop for all MFD.
G4String detName = mfdName[idet];
//--- Seek and Obtain MFD objects from SDmanager.
G4MultiFunctionalDetector* mfd =
(G4MultiFunctionalDetector*)(pSDman->FindSensitiveDetector(detName));
//
if ( mfd ){
if (mfd) {
//--- Loop over the registered primitive scorers.
for (G4int icol = 0; icol < mfd->GetNumberOfPrimitives(); icol++){
for (G4int icol = 0; icol < mfd->GetNumberOfPrimitives(); icol++) {
// Get Primitive Scorer object.
G4VPrimitiveScorer* scorer=mfd->GetPrimitive(icol);
G4VPrimitiveScorer* scorer = mfd->GetPrimitive(icol);
// collection name and collectionID for HitsCollection,
// where type of HitsCollection is G4THitsMap in case of primitive
// where type of HitsCollection is G4THitsMap in case of primitive
// scorer.
// The collection name is given by <MFD name>/<Primitive Scorer name>.
G4String collectionName = scorer->GetName();
G4String fullCollectionName = detName+"/"+collectionName;
G4int collectionID = pSDman->GetCollectionID(fullCollectionName);
G4String fullCollectionName = detName + "/" + collectionName;
G4int collectionID = pSDman->GetCollectionID(fullCollectionName);
//
if ( collectionID >= 0 ){
G4cout << "++ "<<fullCollectionName<< " id " << collectionID
<< G4endl;
if (collectionID >= 0) {
G4cout << "++ " << fullCollectionName << " id " << collectionID << G4endl;
// Store obtained HitsCollection information into data members.
// And, creates new G4THitsMap for accumulating quantities during RUN.
fCollName.push_back(fullCollectionName);
fCollID.push_back(collectionID);
fRunMap.push_back(new G4THitsMap<G4double>(detName,collectionName));
}else{
G4cout << "** collection " << fullCollectionName << " not found. "
<< G4endl;
fRunMap.push_back(new G4THitsMap<G4double>(detName, collectionName));
}
else {
G4cout << "** collection " << fullCollectionName << " not found. " << G4endl;
}
}
}
@@ -118,8 +117,8 @@ RE02Run::~RE02Run()
{
//--- Clear HitsMap for RUN
G4int nMap = fRunMap.size();
for ( G4int i = 0; i < nMap; i++){
if(fRunMap[i] ) fRunMap[i]->clear();
for (G4int i = 0; i < nMap; i++) {
if (fRunMap[i]) fRunMap[i]->clear();
}
fCollName.clear();
fCollID.clear();
@@ -145,14 +144,15 @@ void RE02Run::RecordEvent(const G4Event* aEvent)
// Sum up HitsMap of this Event into HitsMap of this RUN
//=======================================================
G4int nCol = fCollID.size();
for ( G4int i = 0; i < nCol ; i++ ){ // Loop over HitsCollection
G4THitsMap<G4double>* evtMap=0;
if ( fCollID[i] >= 0 ){ // Collection is attached to pHCE
for (G4int i = 0; i < nCol; i++) { // Loop over HitsCollection
G4THitsMap<G4double>* evtMap = 0;
if (fCollID[i] >= 0) { // Collection is attached to pHCE
evtMap = (G4THitsMap<G4double>*)(pHCE->GetHC(fCollID[i]));
}else{
G4cout <<" Error evtMap Not Found "<< i << G4endl;
}
if ( evtMap ) {
else {
G4cout << " Error evtMap Not Found " << i << G4endl;
}
if (evtMap) {
//=== Sum up HitsMap of this event to HitsMap of RUN.===
*fRunMap[i] += *evtMap;
//======================================================
@@ -160,21 +160,21 @@ void RE02Run::RecordEvent(const G4Event* aEvent)
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RE02Run::Merge(const G4Run * aRun) {
const RE02Run * localRun = static_cast<const RE02Run *>(aRun);
void RE02Run::Merge(const G4Run* aRun)
{
const RE02Run* localRun = static_cast<const RE02Run*>(aRun);
//=======================================================
// Merge HitsMap of working threads
//=======================================================
G4int nCol = localRun->fCollID.size();
for ( G4int i = 0; i < nCol ; i++ ){ // Loop over HitsCollection
if ( localRun->fCollID[i] >= 0 ){
for (G4int i = 0; i < nCol; i++) { // Loop over HitsCollection
if (localRun->fCollID[i] >= 0) {
*fRunMap[i] += *localRun->fRunMap[i];
}
}
G4Run::Merge(aRun);
}
@@ -185,10 +185,10 @@ void RE02Run::Merge(const G4Run * aRun) {
//-----
// Access HitsMap.
// By MultiFunctionalDetector name and Collection Name.
G4THitsMap<G4double>* RE02Run::GetHitsMap(const G4String& detName,
const G4String& colName){
G4String fullName = detName+"/"+colName;
return GetHitsMap(fullName);
G4THitsMap<G4double>* RE02Run::GetHitsMap(const G4String& detName, const G4String& colName)
{
G4String fullName = detName + "/" + colName;
return GetHitsMap(fullName);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -197,14 +197,15 @@ G4THitsMap<G4double>* RE02Run::GetHitsMap(const G4String& detName,
// Access HitsMap.
// By full description of collection name, that is
// <MultiFunctional Detector Name>/<Primitive Scorer Name>
G4THitsMap<G4double>* RE02Run::GetHitsMap(const G4String& fullName){
G4int nCol = fCollName.size();
for ( G4int i = 0; i < nCol; i++){
if ( fCollName[i] == fullName ){
return fRunMap[i];
}
G4THitsMap<G4double>* RE02Run::GetHitsMap(const G4String& fullName)
{
G4int nCol = fCollName.size();
for (G4int i = 0; i < nCol; i++) {
if (fCollName[i] == fullName) {
return fRunMap[i];
}
return NULL;
}
return NULL;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -212,25 +213,23 @@ G4THitsMap<G4double>* RE02Run::GetHitsMap(const G4String& fullName){
//-----
// - Dump All HitsMap of this RUN. (for debuging and monitoring of quantity).
// This method calls G4THisMap::PrintAll() for individual HitsMap.
void RE02Run::DumpAllScorer(){
void RE02Run::DumpAllScorer()
{
// - Number of HitsMap in this RUN.
G4int n = GetNumberOfHitsMap();
// - GetHitsMap and dump values.
for ( G4int i = 0; i < n ; i++ ){
G4THitsMap<G4double>* runMap =GetHitsMap(i);
if ( runMap ) {
G4cout << " PrimitiveScorer RUN "
<< runMap->GetSDname() <<","<< runMap->GetName() << G4endl;
for (G4int i = 0; i < n; i++) {
G4THitsMap<G4double>* runMap = GetHitsMap(i);
if (runMap) {
G4cout << " PrimitiveScorer RUN " << runMap->GetSDname() << "," << runMap->GetName()
<< G4endl;
G4cout << " Number of entries " << runMap->entries() << G4endl;
//// std::map<G4int,G4double*>::iterator itr = runMap->GetMap()->begin();
//// for(; itr != runMap->GetMap()->end(); itr++) {
//// G4cout << " copy no.: " << itr->first
//// << " Run Value : " << *(itr->second)
//// << G4endl;
//// }
//// std::map<G4int,G4double*>::iterator itr = runMap->GetMap()->begin();
//// for(; itr != runMap->GetMap()->end(); itr++) {
//// G4cout << " copy no.: " << itr->first
//// << " Run Value : " << *(itr->second)
//// << G4endl;
//// }
}
}
}
@@ -27,31 +27,30 @@
/// \brief Implementation of the RE02RunAction class
//
//
//
//
#include "RE02RunAction.hh"
#include "RE02Run.hh"
//-- In order to obtain detector information.
#include "G4RunManager.hh"
#include "RE02DetectorConstruction.hh"
#include "G4THitsMap.hh"
#include "G4RunManager.hh"
#include "G4SystemOfUnits.hh"
#include "G4THitsMap.hh"
#include "G4UnitsTable.hh"
#include "G4SystemOfUnits.hh"
#include <fstream>
//=======================================================================
// RE02RunAction
//
//
//
//
//=======================================================================
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// Constructor
RE02RunAction::RE02RunAction()
: G4UserRunAction(),
fNx(0), fNy(0), fNz(0)
RE02RunAction::RE02RunAction() : G4UserRunAction(), fNx(0), fNy(0), fNz(0)
{
// - Prepare data member for RE02Run.
// vector represents a list of MultiFunctionalDetector names.
@@ -66,7 +65,7 @@ RE02RunAction::~RE02RunAction()
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//==
//==
G4Run* RE02RunAction::GenerateRun()
{
// Generate new RUN object, which is specially
@@ -83,10 +82,10 @@ void RE02RunAction::BeginOfRunAction(const G4Run* aRun)
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//==
//==
void RE02RunAction::EndOfRunAction(const G4Run* aRun)
{
if(!IsMaster()) return;
if (!IsMaster()) return;
//- RE02Run object.
RE02Run* re02Run = (RE02Run*)aRun;
@@ -98,38 +97,28 @@ void RE02RunAction::EndOfRunAction(const G4Run* aRun)
//- water phantom (Detector) Information.
//-- Number of segments in the water phantom.
const RE02DetectorConstruction* detector =
(const RE02DetectorConstruction*)
(G4RunManager::GetRunManager()->GetUserDetectorConstruction());
detector->GetNumberOfSegmentsInPhantom(fNx,fNy,fNz); //Fill fNx,y,z.
(const RE02DetectorConstruction*)(G4RunManager::GetRunManager()->GetUserDetectorConstruction());
detector->GetNumberOfSegmentsInPhantom(fNx, fNy, fNz); // Fill fNx,y,z.
//---------------------------------------------
// Dump accumulated quantities for this RUN.
// (Display only central region of x-y plane)
//---------------------------------------------
G4THitsMap<G4double>* totEdep = re02Run->GetHitsMap("PhantomSD/totalEDep");
G4THitsMap<G4double>* proEdep = re02Run->GetHitsMap("PhantomSD/protonEDep");
G4THitsMap<G4double>* totEdep = re02Run->GetHitsMap("PhantomSD/totalEDep");
G4THitsMap<G4double>* proEdep = re02Run->GetHitsMap("PhantomSD/protonEDep");
G4THitsMap<G4double>* proNstep = re02Run->GetHitsMap("PhantomSD/protonNStep");
G4THitsMap<G4double>* passCFx =
re02Run->GetHitsMap("PhantomSD/chargedPassCellFlux");
G4THitsMap<G4double>* cFx =
re02Run->GetHitsMap("PhantomSD/chargedCellFlux");
G4THitsMap<G4double>* surfFx =
re02Run->GetHitsMap("PhantomSD/chargedSurfFlux");
G4THitsMap<G4double>* gCurr00 =
re02Run->GetHitsMap("PhantomSD/gammaSurfCurr000");
G4THitsMap<G4double>* gCurr01 =
re02Run->GetHitsMap("PhantomSD/gammaSurfCurr001");
G4THitsMap<G4double>* gCurr02 =
re02Run->GetHitsMap("PhantomSD/gammaSurfCurr002");
G4THitsMap<G4double>* gCurr03 =
re02Run->GetHitsMap("PhantomSD/gammaSurfCurr003");
G4THitsMap<G4double>* passCFx = re02Run->GetHitsMap("PhantomSD/chargedPassCellFlux");
G4THitsMap<G4double>* cFx = re02Run->GetHitsMap("PhantomSD/chargedCellFlux");
G4THitsMap<G4double>* surfFx = re02Run->GetHitsMap("PhantomSD/chargedSurfFlux");
G4THitsMap<G4double>* gCurr00 = re02Run->GetHitsMap("PhantomSD/gammaSurfCurr000");
G4THitsMap<G4double>* gCurr01 = re02Run->GetHitsMap("PhantomSD/gammaSurfCurr001");
G4THitsMap<G4double>* gCurr02 = re02Run->GetHitsMap("PhantomSD/gammaSurfCurr002");
G4THitsMap<G4double>* gCurr03 = re02Run->GetHitsMap("PhantomSD/gammaSurfCurr003");
G4cout << "============================================================="
<< G4endl;
G4cout << " Number of event processed : "<< aRun->GetNumberOfEvent() << G4endl;
G4cout << "============================================================="
<< G4endl;
G4cout << std::setw( 8) << "#Z Cell#";
G4cout << "=============================================================" << G4endl;
G4cout << " Number of event processed : " << aRun->GetNumberOfEvent() << G4endl;
G4cout << "=============================================================" << G4endl;
G4cout << std::setw(8) << "#Z Cell#";
G4cout << std::setw(16) << totEdep->GetName();
G4cout << std::setw(16) << proEdep->GetName();
G4cout << std::setw(12) << proNstep->GetName();
@@ -139,56 +128,49 @@ void RE02RunAction::EndOfRunAction(const G4Run* aRun)
G4cout << std::setw(20) << gCurr00->GetName();
G4cout << std::setw(20) << gCurr01->GetName();
G4cout << std::setw(20) << gCurr02->GetName();
G4cout << std::setw(20) << gCurr03->GetName()
<< G4endl;
G4int ix = fNx/2;
G4int iy = fNy/2;
G4cout << std::setw(20) << gCurr03->GetName() << G4endl;
G4int ix = fNx / 2;
G4int iy = fNy / 2;
G4int iz;
//G4double totE, proE, proN,pasCF,CF,surfF,gCr0,gCr1,gCr2,gCr3;
for ( iz = 0; iz < fNz; iz++){
G4double* totED = (*totEdep)[CopyNo(ix,iy,iz)];
G4double* proED = (*proEdep)[CopyNo(ix,iy,iz)];
G4double* proNS = (*proNstep)[CopyNo(ix,iy,iz)];
G4double* pasCF = (*passCFx)[CopyNo(ix,iy,iz)];
G4double* cF = (*cFx)[CopyNo(ix,iy,iz)];
G4double* sfx = (*surfFx)[CopyNo(ix,iy,iz)];
G4double* gcur0 = (*gCurr00)[CopyNo(ix,iy,iz)];
G4double* gcur1 = (*gCurr01)[CopyNo(ix,iy,iz)];
G4double* gcur2 = (*gCurr02)[CopyNo(ix,iy,iz)];
G4double* gcur3 = (*gCurr03)[CopyNo(ix,iy,iz)];
if ( !totED ) totED = new G4double(0.0);
if ( !proED ) proED = new G4double(0.0);
if ( !proNS ) proNS = new G4double(0.0);
if ( !pasCF ) pasCF = new G4double(0.0);
if ( !cF ) cF = new G4double(0.0);
if ( !sfx ) sfx = new G4double(0.0);
if ( !gcur0 ) gcur0 = new G4double(0.0);
if ( !gcur1 ) gcur1 = new G4double(0.0);
if ( !gcur2 ) gcur2 = new G4double(0.0);
if ( !gcur3 ) gcur3 = new G4double(0.0);
G4cout << std::setw( 6) << iz << " "
<< std::setw(12) << G4BestUnit(*totED,"Energy")
<< std::setw(12) << G4BestUnit(*proED,"Energy")
<< std::setw(12) << (*proNS) << " "
<< std::setw(13) << (*pasCF)*cm*cm <<" /cm2"
<< std::setw(15) << (*cF)*cm*cm <<" /cm2"
<< std::setw(15) << (*sfx)*cm*cm <<" /cm2"
<< std::setw(15) << (*gcur0)*cm*cm <<" /cm2"
<< std::setw(15) << (*gcur1)*cm*cm <<" /cm2"
<< std::setw(15) << (*gcur2)*cm*cm <<" /cm2"
<< std::setw(15) << (*gcur3)*cm*cm <<" /cm2"
<< G4endl;
// G4double totE, proE, proN,pasCF,CF,surfF,gCr0,gCr1,gCr2,gCr3;
for (iz = 0; iz < fNz; iz++) {
G4double* totED = (*totEdep)[CopyNo(ix, iy, iz)];
G4double* proED = (*proEdep)[CopyNo(ix, iy, iz)];
G4double* proNS = (*proNstep)[CopyNo(ix, iy, iz)];
G4double* pasCF = (*passCFx)[CopyNo(ix, iy, iz)];
G4double* cF = (*cFx)[CopyNo(ix, iy, iz)];
G4double* sfx = (*surfFx)[CopyNo(ix, iy, iz)];
G4double* gcur0 = (*gCurr00)[CopyNo(ix, iy, iz)];
G4double* gcur1 = (*gCurr01)[CopyNo(ix, iy, iz)];
G4double* gcur2 = (*gCurr02)[CopyNo(ix, iy, iz)];
G4double* gcur3 = (*gCurr03)[CopyNo(ix, iy, iz)];
if (!totED) totED = new G4double(0.0);
if (!proED) proED = new G4double(0.0);
if (!proNS) proNS = new G4double(0.0);
if (!pasCF) pasCF = new G4double(0.0);
if (!cF) cF = new G4double(0.0);
if (!sfx) sfx = new G4double(0.0);
if (!gcur0) gcur0 = new G4double(0.0);
if (!gcur1) gcur1 = new G4double(0.0);
if (!gcur2) gcur2 = new G4double(0.0);
if (!gcur3) gcur3 = new G4double(0.0);
G4cout << std::setw(6) << iz << " " << std::setw(12) << G4BestUnit(*totED, "Energy")
<< std::setw(12) << G4BestUnit(*proED, "Energy") << std::setw(12) << (*proNS) << " "
<< std::setw(13) << (*pasCF) * cm * cm << " /cm2" << std::setw(15) << (*cF) * cm * cm
<< " /cm2" << std::setw(15) << (*sfx) * cm * cm << " /cm2" << std::setw(15)
<< (*gcur0) * cm * cm << " /cm2" << std::setw(15) << (*gcur1) * cm * cm << " /cm2"
<< std::setw(15) << (*gcur2) * cm * cm << " /cm2" << std::setw(15) << (*gcur3) * cm * cm
<< " /cm2" << G4endl;
}
G4cout << "============================================="<<G4endl;
std::ofstream file("totED.txt");
for ( iz = 0; iz < fNz; iz++){
for ( iy = 0; iy < fNy; iy++){
for ( ix = 0; ix < fNx; ix++){
G4double* totED = (*totEdep)[CopyNo(ix,iy,iz)];
if ( !totED ) totED = new G4double(0.0);
file << ix << " "<<iy<<" "<<iz<<" "<< *totED/MeV << G4endl;
G4cout << "=============================================" << G4endl;
std::ofstream file("totED.txt");
for (iz = 0; iz < fNz; iz++) {
for (iy = 0; iy < fNy; iy++) {
for (ix = 0; ix < fNx; ix++) {
G4double* totED = (*totEdep)[CopyNo(ix, iy, iz)];
if (!totED) totED = new G4double(0.0);
file << ix << " " << iy << " " << iz << " " << *totED / MeV << G4endl;
}
}
}