Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • clantz2/zdclg
  • shengy3/zdclg
  • dmaclea2/zdclg
3 results
Show changes
Commits on Source (58)
///\file "optical/OpNovice/.README.txt"
///\brief Example OpNovice README page
/*! \page ExampleOpNovice Example OpNovice
This example presently illustrates the following basic concepts, and in
particular (indicated with ***), how to use G4 for optical photon
generation and transport. Other extended example of what is possible
in Geant4 with optical photons can be found at
examples/extended/optical/LXe and wls
\section ExampleOpNovice_s1 main()
Define Random Number Engine and initial seed
\section ExampleOpNovice_s2 G4VUserPhysicsList
- Define particles; including - *** G4OpticalPhoton ***
- Define processes; including
- *** G4Cerenkov ***
- *** G4Scintillation ***
- *** G4OpAbsorption ***
- *** G4OpRayleigh ***
- *** G4OpBoundaryProcess ***
A messenger command allows to define interactivly the
verbose level and the maximum number of Cerenkov photons per step
(see for instance OpNovice.in)
\section ExampleOpNovice_s3 G4VUserDetectorConstruction
- Define material: Air and Water
- Define simple G4box geometry
- *** add G4MaterialPropertiesTable to G4Material ***
- *** define G4LogicalSurface(s) ***
- *** define G4OpticalSurface ***
- *** add G4MaterialPropertiesTable to G4OpticalSurface ***
\section ExampleOpNovice_s4 G4VUserPrimaryGeneratorAction
Use G4ParticleGun to shoot a charge particle into a Cerenkov radiator
A messenger command allows to define interactivly the polarization of an
primary optical photon (see for instance optPhoton.mac)
\section ExampleOpNovice_s5 G4UserRunAction
- Define G4Timer (start/stop)
- Set verbose levels
\section ExampleOpNovice_s6 G4UserStackingAction
Show how to count the number of secondary particles in an event
\section ExampleOpNovice_s7 Visualisation
The Visualization Manager is set in the main().
The initialisation of the drawing is done via a set of /vis/ commands
in the macro vis.mac. This macro is automatically read from
the main in case of interactive running mode.
The detector has a default view which is a longitudinal view of the tank.
The tracks are drawn at the end of event, and erased at the end of run.
\section ExampleOpNovice_s8 How to start
- compile and link to generate an executable
\verbatim
% cd OpNovice
% gmake
\endverbatim
This example handles the program arguments in a new way.
It can be run with the following optional arguments:
\verbatim
% OpNovice [-m macro ] [-u UIsession] [-t nThreads]
\endverbatim
The -t option is available only in multi-threading mode
and it allows the user to override the Geant4 default number of
threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS
environment variable which has the top priority.
- execute OpNovice in 'batch' mode from macro files
\verbatim
% OpNovice -m OpNovice.in
\endverbatim
- execute OpNovice in 'interactive mode' with visualization
\verbatim
% OpNovice
....
Idle> type your commands. For instance:
Idle> /control/execute optPhoton.mac
....
Idle> exit
\endverbatim
*/
#include "TCanvas.h"
#include "TH2.h"
#include "TFile.h"
#include "TTree.h"
#include "TStyle.h"
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
float xRange, zRange;
if(argc == 0) return 0;
TFile *f = new TFile( argv[1] );
if(f->IsZombie()){
cout << Form("%s.root does not exist... exiting",argv[1]) << endl;
return 0;
}
string name = argv[1];
if(name.find("/") != string::npos) name.erase( 0, name.find_last_of("/") + 1 );
if(name.find(".") != string::npos) name.erase( name.find_last_of(".") );
TTree *t = (TTree*)f->Get("lightGuide");
vector<double> *x=0,*z=0;
t->SetBranchAddress("X",&x);
t->SetBranchAddress("Z",&z);
xRange = (argc > 2) ? atof( argv[2] ) : 40.;
zRange = (argc > 3) ? atof( argv[3] ) : 80.;
TCanvas *c = new TCanvas("Data","Data",1280,720);
TH2D *h = new TH2D("eff","Relative Efficiency",44,-1*zRange/2.,zRange/2.,21,-1*xRange/2.,xRange/2.);
//h->SetCanExtend(0);
int nEvents = t->GetEntries();
for(int ev = 0; ev < nEvents; ev++){
t->GetEntry(ev);
int nPoints = x->size();
for(int i = 0; i < nPoints; i++){
h->Fill(z->at(i),x->at(i));
}
}
gStyle->SetOptStat(0);
h->Scale(1.0/h->GetMaximum());
h->Draw("COLZ");
h->SetAxisRange(0.4,1.0,"Z");
c->Print( Form("%s.png",name.c_str()) );
delete f;
return 1;
}
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(OpNovice)
project(lightGuide)
#----------------------------------------------------------------------------
# Find Geant4 package, activating all available UI and Vis drivers by default
......@@ -12,14 +12,13 @@ option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON)
if(WITH_GEANT4_UIVIS)
find_package(Geant4 REQUIRED ui_all vis_all)
else()
find_package(Geant4 REQUIRED)
find_package(Geant4 REQUIRED )
endif()
#----------------------------------------------------------------------------
# Find ROOT
list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
find_package (ROOT REQUIRED)
include(${ROOT_USE_FILE})
#----------------------------------------------------------------------------
# Setup Geant4 include directories and compile definitions
#
......@@ -36,24 +35,30 @@ file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)
#----------------------------------------------------------------------------
# Add the executable, and link it to the Geant4 libraries
#
add_executable(OpNovice OpNovice.cc ${sources} ${headers})
target_link_libraries(OpNovice ${Geant4_LIBRARIES} ${ROOT_LIBRARIES} )
add_executable(lightGuide lightGuide.cc ${sources} ${headers})
target_link_libraries(lightGuide ${Geant4_LIBRARIES} ${ROOT_LIBRARIES})
add_executable(plotHisto ${DEPENDENCIES} Analysis/plotHisto.cc)
TARGET_LINK_LIBRARIES(plotHisto ${ROOT_LIBRARIES})
#----------------------------------------------------------------------------
#Add Compiler flags
#
add_definitions(-Wno-shadow)
#----------------------------------------------------------------------------
# Copy all scripts to the build directory, i.e. the directory in which we
# build OpNovice. This is so that we can run the executable directly because it
# build lightGuide. This is so that we can run the executable directly because it
# relies on these scripts being in the current working directory.
#
set(OpNovice_SCRIPTS
OpNovice.out
OpNovice.in
optPhoton.mac
gui.mac
set(lightGuide_SCRIPTS
vis.mac
run1.mac
beam.mac
geometry.mac
)
foreach(_script ${OpNovice_SCRIPTS})
foreach(_script ${lightGuide_SCRIPTS})
configure_file(
${PROJECT_SOURCE_DIR}/${_script}
${PROJECT_BINARY_DIR}/${_script}
......@@ -64,4 +69,11 @@ endforeach()
#----------------------------------------------------------------------------
# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX
#
install(TARGETS OpNovice DESTINATION bin)
install(TARGETS lightGuide DESTINATION bin )
install(TARGETS plotHisto DESTINATION bin )
install(FILES run1.mac DESTINATION bin )
install(FILES geometry.mac DESTINATION bin )
install(FILES beam.mac DESTINATION bin )
install(FILES vis.mac DESTINATION bin)
install(FILES hist.mac DESTINATION bin)
install(DIRECTORY models/ DESTINATION models)
......@@ -6,6 +6,8 @@ name := OpNovice
G4TARGET := $(name)
G4EXLIB := true
include ../../cadmesh.gmk
ifndef G4INSTALL
G4INSTALL = ../../..
endif
......
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
Example OpNovice History file
-----------------------------
This file should be used by the G4 example coordinator to briefly
summarize all major modifications introduced in the code and keep
track of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
July 31, 2018 I. Hrivnacova (OpNovice-V10-04-02)
- Macro review:
- Added test for /OpNovice/phys/cerenkovMaxPhotons command at the end
of OpNovice.in macro
- Updated README files
May 17, 2018 J. Allison (OpNovice-V10-04-01)
- Remove G4UI_USE and G4VIS_USE.
- Move instantiation of G4UIExecutive to start of main.
May 08, 2018 B. Morgan (OpNovice-V10-04-00)
- Include G4Types before use of G4MULTITHREADED. For forward
compatibility with move to #defines over -D for G4 preprocessor
symbols.
August 18, 2017 J.Allison (OpNovice-V10-03-02)
- Fix gui.mac, which executed vis.mac (it should not!).
Mar 22, 2017 P.Gumplinger (OpNovice-V10-03-00/OpNovice-V10-03-01)
- exercise the new DAVIS LUT surface model
Nov 02, 2016 L.Garnier (OpNovice-V10-02-01)
- Remove icons.mac. Automatically include since interfaces-V10-02-07
Nov 02, 2016 I. Hrivnacova (OpNovice-V10-02-00)
- Added file descriptions for Doxygen documentation
Oct 14, 2016 G.Folger (OpNovice-V10-00-00) - not tagged
- remove direct use of theParticleIterator, use GetParticleTableIterator().
fix required by clang39 on Linux and MAC
Jun 15, 2015 - P. Gumplinger (OpNovice-V10-01-04)
- introduce G4ThreadLocal in OpNovicePhysicsList class
Jun 09, 2015 - P. Gumplinger (OpNovice-V10-01-03)
- revert back to kernel initialization in main
Jun 05, 2015 - P. Gumplinger (OpNovice-V10-01-02)
- reduce output size and move kernel initialization to input macro
May 22, 2015 - P. Gumplinger (OpNovice-V10-01-01)
- apply coding guideline 3.3
May 16, 2015 J. Allison (OpNovice-V10-01-00)
- Replaced !G4Threading::IsWorkerThread() by G4Threading::IsMasterThread().
October 27, 2014 A. Dotti (OpNovice-V10-00-06)
- Migration to new UI system. Requires:
xrays-V10-00-06, op-V10-00-09, phys-ctro-em-V10-00-17
July 11, 2014 P. Gumplinger (OpNovice-V10-00-05)
- Use implicit dimensioning for all arrays in
OpNoviceDetectorConstruction.cc and assert that they are the
same (thanks to M. Kelsey for suggesting this)
December 23, 2013 M. Asai (OpNovice-V10-00-04)
- Limit invokation of static method only from master/sequential.
December 22, 2013 M. Asai (OpNovice-V10-00-03)
- Avoid static G4Scintillation method invoked through a pointer.
December 18, 2013 M. Asai/P. Gumplinger (OpNovice-V10-00-02)
- allows changes to G4Cerenkov and G4Scintillation in Idle state
December 16, 2013 M. Asai (OpNovice-V10-00-01)
- Fix race condision issue in OpNovicePhysicsList.
December 04, 2013 P. Gumplinger (OpNovice-V10-00-00)
- Fixes in gui.mac:
Commented out command specific to B2 example
Let execute vis.mac first to make the command in added menus available;
Corrected wireframe parameter
November 28, 2013 P. Gumplinger (OpNovice-V09-06-11)
- add gui.mac, icons.mac and run.png
November 2, 2013 P. Gumplinger (OpNovice-V09-06-10)
- place G4Random::setTheSeed(myseed) so that it is executed for both
sequential and MT mode
October 31, 2013 P. Gumplinger (OpNovice-V09-06-09)
- to work with ctests-V09-06-19
October 29, 2013 P. Gumplinger (OpNovice-V09-06-08)
- remove all reference to LXeWorkerInitialization and remove SetNumberOfThreads
October 25, 2013 P. Gumplinger (OpNovice-V09-06-07)
- Instantiate SteppingVerbose in a new method in OpNoviceActionInitialization
and removed LXeWorkerInitialization (not needed anymore)
- Add OpNoviceSteppingAction to count secondary optical photons to compare
with OpNoviceStackingAction
11 June 2013, V.Ivanchenko (OpNovice-V09-06-06)
- OpNovicePhysicsList - construct all particles to avoid exception
in execution of ConstructParticle() method; removed unnecessary
methods to construct individual particle types
02 June 2013, P.Gumplinger (OpNovice-V09-06-05)
- make MultiThread (MT) capable
27 May 2013, I.Hrivnacova (OpNovice-V09-06-04)
- Updated .README file
27 May 2013, I.Hrivnacova (OpNovice-V09-06-03)
- Apply Examples Coding Guidelines
(data members/base class initialization)
13 May 2013 P. Gumplinger (OpNovice-V09-06-02)
- Add .README file
06 May 2013 P. Gumplinger (OpNovice-V09-06-01)
- Apply all Examples Coding Guidelines
18 Dec 2012 I. Hrivnacova (OpNovice-V09-06-00)
- Fixed CMake build: removed add_custom_target(..)
17 Dec 2012 P. Gumplinger
- move the example to /extended/optical/novice (from /novice/N06) and
rename N06 to OpNovice
20 June 2012 P. Gumplinger (exampleN06-V09-05-01)
- remove SetModel from ExN06PhysicsList.cc to cowork with op-V09-05-04
24 January 2012 P. Gumplinger (exampleN06-V09-05-00)
- set /tracking/verbose 3 in exampleN06.in and optPhoton.mac
to also test timing of optical photons - see Problem #1275
29 November 2011 Ben Morgan (exampleN06-V09-04-01)
- CMakeLists.txt edited to add standard UI/Vis activation and copying of scripts
to build directory, plus comments and neatification.
14th October 2011 P. Gumplinger (exampleN06-V09-04-00)
- modify to work with materials-V09-04-15 and use spline interpolation
for some of the G4MaterialPropertyVector (e.g. G4PhysicsOrderedFreeVector)
23rd October 2010 P. Gumplinger (exampleN06-V09-03-01)
- add G4OpMieHG scattering process and associated material properties
4th June 2010 Joseph Perl (exampleN06-V09-03-00)
- Updated vis usage
09th November 2009 Peter Gumplinger (exampleN06-V09-02-01)
- use G4eMultipleScattering, G4MuMultipleScattering and
G4hMultipleScattering instead of G4MultipleScattering
30th October 2009 John Allison (exampleN06-V09-02-00)
- Introduced G4UIExecutive.
20th November 2008 P. Gumplinger (exampleN06-V09-01-03)
- add theCerenkovProcess->SetMaxBetaChangePerStep in ExN06PhysicsList
16th July 2008 P. Gumplinger (exampleN06-V09-01-02)
- use dynamic_cast <G4OpticalSurface*> in ExN06DetectorConstruction.cc
12th June 2008 P. Gumplinger (exampleN06-V09-01-01)
- now use G4EmSaturation to implement the Birks Correction
for G4Scintillation
07th May 2008 J.Allison (exampleN06-V09-01-00)
- Protected "/control/execute vis.mac" with G4VIS_USE flag.
30 Sept 2007 Peter Gumplinger (exampleN06-V09-00-00)
- adjust to the G4Cerenkov process now being a G4VDiscreteProcess
October 18th 2006 J.Allison (exampleN06-V08-01-00)
- Migrate to new trajectory modeling commands.
16th June 2006 Gabriele Cosmo (exampleN06-V08-00-02)
- Use coherent allocation scheme for user-classes and
initialisation in main().
15th June 2006 Peter Gumplinger (exampleN06-V08-00-01)
- add new method ExN06PrimaryGeneratorAction::SetOptPhotonPolar()
to set a random linear polarization when the command -
/N06/gun/optPhotonPolar - is given without arguments
15th June 2006 Gabriele Cosmo (exampleN06-V08-00-00)
- Separate instantiation of the user-stepping-verbose class from
initialisation of the G4VSteppingVerbose singleton.
6th December 2005 Gabriele Cosmo
- Trivial changes for support of CLHEP-2.0.X series.
4th December 2005 John Allison (exampleN06-V07-01-00)
- Replaced vis code in EndOfEventAction by suitable vis commands in vis.mac.
16 May 2005 Peter Gumplinger (exampleN06-V07-00-01)
- use SetProcessOrdering for theDecayProces
11 May 2005 Michel Maire (exampleN06-V07-00-00)
- UI command cerenkovMaxPhotons available in Idle state only
3rd May 2005 John Allison (examples-V07-00-03)
- Replaced vis manager with G4VisExecutive.
June 1, 2004 Peter Gunplinger (exampleN06-V06-01-01)
- Updated README file.
April 2, 2004 Michel Maire (exampleN06-V06-01-00)
- PrimaryGenerator: e+ 500 keV
- Removed vis commands from RunAction
March 17, 2004 Peter Gumplinger (exampleN06-V06-00-00)
- DetectorConstruction: change surface model between OpWaterSurface
and OpAirSurface
December 1, 2003 Peter Gumplinger (exampleN06-V05-02-02)
- DetectorConstruction: use G4SurfaceProperty.
November 13, 2003 John Allison
- Removed OPACS from Vis Manager.
October 24, 2003 Michel Maire (exampleN06-V05-02-01)
- PhysicsList: AddProcess(Bremsstrahlung,-1,3,3) ..etc..
October 06, 2003 Michel Maire (exampleN06-V05-02-00)
- Cosmetic cleanup of material definition
April 17, 2003 Peter Gumplinger (exampleN06-V05-00-03)
- Changed OpWaterSurface to dielectric_dielectric in class
ExN06DetectorConstruction
March 26, 2003 Michel Maire (exampleN06-V05-00-02)
- G4PVPlacement in logical mother
Febuary 11, 2003 Michel Maire (exampleN06-V05-00-01)
- Added a blank in steppingVerbose !
January 23, 2003 Michel Maire (exampleN06-V05-00-00)
- Added tools for interactive session : UItcsh, visualisation of tracks.
- Added 2 messenger classes : PhysicsList and PrimaryGenerator
- exampleN06.in changed --> exampleN06.out reduced
November 21, 2002 Peter Gumplinger (exampleN06-V04-01-02)
- exampleN06.out output changed because of small change in G4Scintillation
November 14, 2002 Peter Gumplinger (exampleN06-V04-01-01)
- Reduced the scintillation photon yield to reduce the output size
November 12, 2002 Peter Gumplinger (exampleN06-V04-01-00)
- Added ExN06StackingAction
- Changed user interface to new version of G4Scintillation
May 30, 2002 Gabriele Cosmo (exampleN06-V04-00-02)
- Renamed file ExN06PrimaryGeneratoraction.cc to ExN06PrimaryGeneratorAction.cc
to be consistent with class name.
May 16, 2002 Peter Gumplinger (exampleN06-V04-00-01)
- Added G4Scintillation to the example and update reference output
Oct 19, 2001 Steve O'Neale (examples-V03-02-00)
- Updated reference output
06-02-2001 Update reference output for op-V03-00-05 S.W.O'Neale
June 17, 2000 John Allison (exampleN06-V01-01-00)
- Updated exampleN06.out for geant4-01-01-ref-06.
16th April 1999 Hisaya Kurashige
- Modified ExN06RunAction
- Modified ExN06PhysicsList::SetCuts
21st August 1998 John Allison
- Changed file names from N06* to ExN06*.
9th August 1998 John Allison
- Changed G4UIterminal to G4UIGAG.
April 09, 98 Gabriele Cosmo
- Created.
MIT License
Copyright (c) 2024 srlund2
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
/control/verbose 2
/tracking/verbose 0
#
/gun/particle e+
/gun/energy 500 keV
#
/OpNovice/phys/verbose 0
#
/run/beamOn 1
#
/OpNovice/phys/cerenkovMaxPhotons 15 # default: 20
#
/run/beamOn 1
This diff is collapsed.
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
OpNovice
--------
This example presently illustrates the following basic concepts, and in
particular (indicated with ***), how to use G4 for optical photon
generation and transport. Other extended example of what is possible
in Geant4 with optical photons can be found at
examples/extended/optical/LXe and wls.
main()
------
==> define Random Number Engine and initial seed
G4VUserPhysicsList
------------------
==> define particles; including *** G4OpticalPhoton ***
define processes; including *** G4Cerenkov ***
*** G4Scintillation ***
*** G4OpAbsorption ***
*** G4OpRayleigh ***
*** G4OpBoundaryProcess ***
==> A messenger command allows to define interactivly the
verbose level and the maximum number of Cerenkov photons per step
(see for instance OpNovice.in)
G4VUserDetectorConstruction
---------------------------
==> define material: Air and Water
define simple G4box geometry
*** add G4MaterialPropertiesTable to G4Material ***
*** define G4LogicalSurface(s) ***
*** define G4OpticalSurface ***
*** add G4MaterialPropertiesTable to G4OpticalSurface ***
G4VUserPrimaryGeneratorAction
-----------------------------
==> Use G4ParticleGun to shoot a charge particle into a Cerenkov radiator
==> A messenger command allows to define interactively the polarization of an
primary optical photon (see for instance optPhoton.mac)
G4UserRunAction
---------------
==> define G4Timer (start/stop)
set verbose levels
G4UserStackingAction
--------------------
==> show how to count the number of secondary particles in an event
Visualisation
-------------
The Visualization Manager is set in the main().
The initialisation of the drawing is done via a set of /vis/ commands
in the macro vis.mac. This macro is automatically read from
the main in case of interactive running mode.
The detector has a default view which is a longitudinal view of the tank.
The tracks are drawn at the end of event, and erased at the end of run.
HOW TO START
------------
- compile and link to generate an executable
% cd OpNovice
% gmake
This example handles the program arguments in a new way.
It can be run with the following optional arguments:
% OpNovice [-m macro ] [-u UIsession] [-t nThreads]
The -t option is available only in multi-threading mode
and it allows the user to override the Geant4 default number of
threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS
environment variable which has the top priority.
- execute OpNovice in 'batch' mode from macro files
% OpNovice -m OpNovice.in
- execute OpNovice in 'interactive mode' with visualization
% OpNovice
....
Idle> type your commands. For instance:
Idle> /control/execute optPhoton.mac
....
Idle> exit
### ZDC Light Guide Monte Carlo
This simulation is based on OpNovice and OpNovice2
#### Build requirements
- Geant4 compiled with GDML and additional datasets. Be sure to source geant4make.sh
```
source /path/to/geant4-install/share/Geant4-[version]/geant4make/geant4make.sh
```
- CERN ROOT
#### main()
define Random Number Engine, initial seed, CAD input and GDML output
#### G4VUserPhysicsList
- Define particles; including
- *** G4OpticalPhoton ***
- Define processes; including
- *** G4Cerenkov ***
- *** G4Scintillation ***
- *** G4OpAbsorption ***
- *** G4OpRayleigh ***
- *** G4OpBoundaryProcess ***
#### Materials
defines many materials for potential use
For our purposes the G4OpticalSurface AlSurface and the G4Material Al and Air
will be given optical properties and used for construction.
#### G4VUserDetectorConstruction
A light guide is made either by simple G4trd or by importing a model
via CADMesh.
define G4LogicalBorderSurface between the light guide and world volume
defines a PMT window sensitive detector at the top of the light guide
AlSurface properties can be modified via DetectorMessenger via the following commands
```
/lightGuide/surface/Model
/lightGuide/surface/Type
/lightGuide/surface/Finish
/lightGuide/surface/SigmaAlpha
/lightGuide/surface/Property
```
CAD models can be imported and positioned via
```
/lightGuide/model/CADmodel
/lightGuide/model/rotate
/lightGuide/model/translate
/lightGuide/model/translatePMT
```
The models must be in ASCII STL format in the current implementation.
And the optical properties of a sub volume of G4Air which the light guide sits in can be configured via
```
/lightGuide/gasProperty
```
examples of all of these can be found in run1.mac
#### G4VUserPrimaryGeneratorAction
Use G4GeneralParticleSource to shoot an optical photon into the light guide
Particle type and distribution is set in run1.mac
#### G4UserRunAction
define G4Timer (start/stop)
define G4AnalysisManager (output .root file)
set verbose levels
#### PMTHit
stores G4int trackID,
G4ThreeVector pos; // Origin position of the photon
G4ThreeVector hit; // Location where the photon hit the PMT window
G4double energy; // Energy of the photon
G4ThreeVector momentum; // Momentum of the photon (direction)
G4double time; // Time of arrival of the photon
for each hit on the PMT sensitive detector
#### PMTSD
Records a PMTHit if the photon strikes the PMT window
#### G4UserEventAction
Show how to count the number of secondary particles in an event
#### Visualisation
The Visualization Manager is set in the main().
The initialisation of the drawing is done via a set of /vis/ commands
in the macro vis.mac. This macro is automatically read from
the main in case of interactive running mode.
#### How to start
- compile and link to generate an executable
```
$ mkdir zdclg-build zdclg-install
$ cd zdclg-build
$ cmake -DCMAKE_INSTALL_PREFIX=../zdclg-install /path/to/zdclg
```
This example handles the program arguments in a new way.
It can be run with the following optional arguments:
```
$ ./lightGuide [-m macro ]
[-u UIsession]
[-t nThreads]
[-r seed]
[-o outputFileName]
```
The -t option is available only in multi-threading mode
and it allows the user to override the Geant4 default number of
threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS
environment variable which has the top priority.
- execute lightGuide in 'batch' mode from macro files
```
$ ./lightGuide -m run1.mac
```
- execute lightGuide in 'interactive mode' with visualization
```
$ lightGuide
....
Idle> type your commands. For instance:
Idle> /control/execute run1.mac
....
Idle> exit
```
#----- Set the beam energy profile -----
/gps/particle opticalphoton
/gps/ene/type Gauss
/gps/ene/mono 4.75 eV
/gps/ene/sigma 10 eV
/gps/ene/min 1.9 eV
/gps/ene/max 7.6 eV
/gps/ene/gradient -200 MeV
/gps/polarization 0 0 0
#----- Set the beam geometry -----
# Circular beam source. Simulates a single fiber optic
#/gps/pos/type Beam
#/gps/pos/shape Circle
#/gps/pos/radius 0.75 mm
#/gps/pos/radius 1.5 mm
#/gps/pos/sigma_r 0.002 mm
# Rectangular plane for infinite resolution
/gps/pos/type Plane
/gps/pos/shape Rectangle
/gps/pos/halfx 40 mm
/gps/pos/halfy 68 mm
# the incident surface is in the x-z plane just below the gas
/gps/pos/rot1 1 0 0
/gps/pos/rot2 0 0 1
/gps/pos/centre 0. -0.1 0. mm
# the photons are emitted around the y-axis
/gps/ang/rot1 1 0 0
/gps/ang/rot2 0 0 1
/gps/ang/type beam1d
#----- Set beam angular dispersion from histogram -----
/gps/ang/surfnorm false
/gps/ang/type user
/control/execute hist.mac
#----- Set beam angular dispersion for fiber optic -----
# N.A. is 0.22 so acceptance cone is ~25.4 degrees
#/gps/ang/sigma_r 25.40 deg
/lightGuide/worldVolume 0.25 0.25 0.25 m
/lightGuide/envelope 89.75 113. 165. mm
/lightGuide/model/PMTDiameter 53 mm
/lightGuide/model/nSegmentsX 1
/lightGuide/model/nSegmentsZ 1
#----- Set the light guide to be used and position it -----
#If no model is selected, the program will default to a
#simplified version of the 2018 testbeam light guide
/lightGuide/model/CADmodel ../models/run2.stl
/lightGuide/model/translate 200 -125 0 mm
/lightGuide/model/translatePMT 0 -74.5 0 mm
#/lightGuide/model/CADmodel ../models/EMprototype.stl
#/lightGuide/model/translate 0 0 0 mm
#/lightGuide/model/translatePMT 0 -74.5 0 mm
#/lightGuide/model/CADmodel ../models/EMprototypeSingle.stl
#/lightGuide/model/translate 175.25 -27.75 -8 mm
#/lightGuide/model/translatePMT 0 0 0 mm
#/lightGuide/model/CADmodel ../models/2020WC.stl
#/lightGuide/model/rotate 0 0 90
#/lightGuide/model/translate 0 -319 0 mm
#/lightGuide/model/translatePMT 0 -119 0 mm
#----- Set surface properties of the light guide -----
#/lightGuide/surface/Model unified
#/lightGuide/surface/Type dielectric_metal
#/lightGuide/surface/Finish ground
#/lightGuide/surface/SigmaAlpha .1
#/lightGuide/surface/Property SPECULARLOBECONSTANT 0.000002 .4 0.000008 .4
#/lightGuide/surface/Property SPECULARSPIKECONSTANT 0.000002 .1 0.000008 .1
#/lightGuide/surface/Property BACKSCATTERCONSTANT 0.000002 .05 0.000008 .05
#/lightGuide/surface/Property REFLECTIVITY 0.000002 .89 0.000008 .89
#----- Set the refractive index of the gas the light guide is inside of -----
#/lightGuide/gasProperty RINDEX 0.000002 1.0 0.000008 1.0
#
# This file permits to customize, with commands,
# the menu bar of the G4UIXm, G4UIQt, G4UIWin32 sessions.
# It has no effect with G4UIterminal.
#
# File menu :
/gui/addMenu file File
/gui/addButton file Quit exit
#
# Run menu :
/gui/addMenu run Run
/gui/addButton run "beamOn 1" "/run/beamOn 1"
#/gui/addButton run run1 "/control/execute run1.mac"
#/gui/addButton run run2 "/control/execute run2.mac"
#
# Gun menu :
/gui/addMenu gun Gun
/gui/addButton gun "50 MeV" "/gun/energy 50 MeV"
/gui/addButton gun "1 GeV" "/gun/energy 1 GeV"
/gui/addButton gun "10 GeV" "/gun/energy 10 GeV"
/gui/addButton gun "e-" "/gun/particle e-"
/gui/addButton gun "pi0" "/gun/particle pi0"
/gui/addButton gun "pi+" "/gun/particle pi+"
/gui/addButton gun "neutron" "/gun/particle neutron"
/gui/addButton gun "proton" "/gun/particle proton"
#
# Field menu :
#/gui/addMenu field Field
#/gui/addButton field "off" "/B2/det/setField 0.2 tesla"
#/gui/addButton field "0.2 tesla" "/B2/det/setField 0.2 tesla"
#/gui/addButton field "2.0 tesla" "/B2/det/setField 2.0 tesla"
#
# Viewer menu :
/gui/addMenu viewer Viewer
/gui/addButton viewer "Set style surface" "/vis/viewer/set/style surface"
/gui/addButton viewer "Set style wireframe" "/vis/viewer/set/style wireframe"
/gui/addButton viewer "Refresh viewer" "/vis/viewer/refresh"
/gui/addButton viewer "Update viewer (interaction or end-of-file)" "/vis/viewer/update"
/gui/addButton viewer "Flush viewer (= refresh + update)" "/vis/viewer/flush"
/gui/addButton viewer "Update scene" "/vis/scene/notifyHandlers"
#
/gps/hist/type theta
#/gps/hist/point -0.007400 0.000000
/gps/hist/point 0.000000 0.000059
/gps/hist/point 0.007400 0.000338
/gps/hist/point 0.014800 0.000512
/gps/hist/point 0.022200 0.000687
/gps/hist/point 0.029600 0.000990
/gps/hist/point 0.037000 0.001121
/gps/hist/point 0.044400 0.001404
/gps/hist/point 0.051800 0.001575
/gps/hist/point 0.059200 0.001921
/gps/hist/point 0.066600 0.002071
/gps/hist/point 0.074000 0.002209
/gps/hist/point 0.081400 0.002370
/gps/hist/point 0.088800 0.002663
/gps/hist/point 0.096200 0.002832
/gps/hist/point 0.103600 0.003022
/gps/hist/point 0.111000 0.003347
/gps/hist/point 0.118400 0.003500
/gps/hist/point 0.125800 0.003817
/gps/hist/point 0.133200 0.003972
/gps/hist/point 0.140600 0.004145
/gps/hist/point 0.148000 0.004303
/gps/hist/point 0.155400 0.004621
/gps/hist/point 0.162800 0.004762
/gps/hist/point 0.170200 0.005010
/gps/hist/point 0.177600 0.005308
/gps/hist/point 0.185000 0.005465
/gps/hist/point 0.192400 0.005574
/gps/hist/point 0.199800 0.005896
/gps/hist/point 0.207200 0.006192
/gps/hist/point 0.214600 0.006292
/gps/hist/point 0.222000 0.006516
/gps/hist/point 0.229400 0.006742
/gps/hist/point 0.236800 0.006942
/gps/hist/point 0.244200 0.007175
/gps/hist/point 0.251600 0.007442
/gps/hist/point 0.259000 0.007549
/gps/hist/point 0.266400 0.007859
/gps/hist/point 0.273800 0.007951
/gps/hist/point 0.281200 0.008102
/gps/hist/point 0.288600 0.008663
/gps/hist/point 0.296000 0.008789
/gps/hist/point 0.303400 0.009103
/gps/hist/point 0.310800 0.009285
/gps/hist/point 0.318200 0.009436
/gps/hist/point 0.325600 0.009630
/gps/hist/point 0.333000 0.009931
/gps/hist/point 0.340400 0.010256
/gps/hist/point 0.347800 0.010362
/gps/hist/point 0.355200 0.010797
/gps/hist/point 0.362600 0.010825
/gps/hist/point 0.370000 0.011403
/gps/hist/point 0.377400 0.011606
/gps/hist/point 0.384800 0.011730
/gps/hist/point 0.392200 0.011980
/gps/hist/point 0.399600 0.012238
/gps/hist/point 0.407000 0.012208
/gps/hist/point 0.414400 0.012737
/gps/hist/point 0.421800 0.013022
/gps/hist/point 0.429200 0.013560
/gps/hist/point 0.436600 0.013393
/gps/hist/point 0.444000 0.013733
/gps/hist/point 0.451400 0.014151
/gps/hist/point 0.458800 0.014394
/gps/hist/point 0.466200 0.014743
/gps/hist/point 0.473600 0.015354
/gps/hist/point 0.481000 0.015463
/gps/hist/point 0.488400 0.015805
/gps/hist/point 0.495800 0.016047
/gps/hist/point 0.503200 0.016040
/gps/hist/point 0.510600 0.016432
/gps/hist/point 0.518000 0.016911
/gps/hist/point 0.525400 0.017092
/gps/hist/point 0.532800 0.017341
/gps/hist/point 0.540200 0.017891
/gps/hist/point 0.547600 0.018050
/gps/hist/point 0.555000 0.018850
/gps/hist/point 0.562400 0.019253
/gps/hist/point 0.569800 0.019231
/gps/hist/point 0.577200 0.019886
/gps/hist/point 0.584600 0.020413
/gps/hist/point 0.592000 0.020505
/gps/hist/point 0.599400 0.021237
/gps/hist/point 0.606800 0.021726
/gps/hist/point 0.614200 0.022311
/gps/hist/point 0.621600 0.022637
/gps/hist/point 0.629000 0.023515
/gps/hist/point 0.636400 0.024492
/gps/hist/point 0.643800 0.025049
/gps/hist/point 0.651200 0.025821
/gps/hist/point 0.658600 0.026996
/gps/hist/point 0.666000 0.028316
/gps/hist/point 0.673400 0.007106
/gps/hist/point 0.680800 0.000000
/gps/hist/point 0.688200 0.000000
/gps/hist/point 0.695600 0.000000
/gps/hist/point 0.703000 0.000000
/gps/hist/point 0.710400 0.000000
/gps/hist/point 0.717800 0.000000
/gps/hist/point 0.725200 0.000000
# #OLD HIST.MAC
# /gps/hist/point 0.000000 0.000000
# /gps/hist/point 0.008726 0.001677
# /gps/hist/point 0.026179 0.002438
# /gps/hist/point 0.043632 0.002966
# /gps/hist/point 0.061085 0.003407
# /gps/hist/point 0.078538 0.003771
# /gps/hist/point 0.095990 0.004110
# /gps/hist/point 0.113443 0.004415
# /gps/hist/point 0.130896 0.004724
# /gps/hist/point 0.148349 0.005010
# /gps/hist/point 0.165801 0.005293
# /gps/hist/point 0.183254 0.005592
# /gps/hist/point 0.200707 0.005862
# /gps/hist/point 0.218160 0.006130
# /gps/hist/point 0.235613 0.006412
# /gps/hist/point 0.253065 0.006682
# /gps/hist/point 0.270518 0.006950
# /gps/hist/point 0.287971 0.007234
# /gps/hist/point 0.305424 0.007515
# /gps/hist/point 0.322876 0.007781
# /gps/hist/point 0.340329 0.008063
# /gps/hist/point 0.357782 0.008323
# /gps/hist/point 0.375235 0.008598
# /gps/hist/point 0.392687 0.008907
# /gps/hist/point 0.410140 0.009175
# /gps/hist/point 0.427593 0.009454
# /gps/hist/point 0.445046 0.009775
# /gps/hist/point 0.462499 0.010074
# /gps/hist/point 0.479951 0.010385
# /gps/hist/point 0.497404 0.010707
# /gps/hist/point 0.514857 0.011049
# /gps/hist/point 0.532310 0.011366
# /gps/hist/point 0.549762 0.011748
# /gps/hist/point 0.567215 0.012158
# /gps/hist/point 0.584668 0.012550
# /gps/hist/point 0.602121 0.012953
# /gps/hist/point 0.619574 0.013384
# /gps/hist/point 0.637026 0.013836
# /gps/hist/point 0.654479 0.014333
# /gps/hist/point 0.671932 0.014900
# /gps/hist/point 0.689385 0.015575
# /gps/hist/point 0.706837 0.016303
# /gps/hist/point 0.724290 0.017249
# /gps/hist/point 0.741743 0.018648
# /gps/hist/point 0.759196 0.019849
# /gps/hist/point 0.776649 0.020756
# /gps/hist/point 0.794101 0.021327
# /gps/hist/point 0.811554 0.019696
# /gps/hist/point 0.829007 0.018203
# /gps/hist/point 0.846460 0.017120
# /gps/hist/point 0.863912 0.016291
# /gps/hist/point 0.881365 0.015641
# /gps/hist/point 0.898818 0.015079
# /gps/hist/point 0.916271 0.014629
# /gps/hist/point 0.933724 0.014212
# /gps/hist/point 0.951176 0.013883
# /gps/hist/point 0.968629 0.013545
# /gps/hist/point 0.986082 0.013284
# /gps/hist/point 1.003535 0.013057
# /gps/hist/point 1.020988 0.012847
# /gps/hist/point 1.038440 0.012644
# /gps/hist/point 1.055893 0.012443
# /gps/hist/point 1.073346 0.012321
# /gps/hist/point 1.090799 0.012159
# /gps/hist/point 1.108251 0.012022
# /gps/hist/point 1.125704 0.011891
# /gps/hist/point 1.143157 0.011784
# /gps/hist/point 1.160610 0.011684
# /gps/hist/point 1.178063 0.011600
# /gps/hist/point 1.195515 0.011499
# /gps/hist/point 1.212968 0.011423
# /gps/hist/point 1.230421 0.011358
# /gps/hist/point 1.247874 0.011273
# /gps/hist/point 1.265326 0.011216
# /gps/hist/point 1.282779 0.011145
# /gps/hist/point 1.300232 0.011114
# /gps/hist/point 1.317685 0.011054
# /gps/hist/point 1.335137 0.011028
# /gps/hist/point 1.352590 0.010988
# /gps/hist/point 1.370043 0.010938
# /gps/hist/point 1.387496 0.010915
# /gps/hist/point 1.404949 0.010911
# /gps/hist/point 1.422401 0.010852
# /gps/hist/point 1.439854 0.010845
# /gps/hist/point 1.457307 0.010834
# /gps/hist/point 1.474760 0.010807
# /gps/hist/point 1.492212 0.010819
# /gps/hist/point 1.509665 0.010799
# /gps/hist/point 1.527118 0.010811
# /gps/hist/point 1.544571 0.009312
# /gps/hist/point 1.562024 0.008725
# /gps/hist/point 1.570700 0.000000
......@@ -23,43 +23,46 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/// \file OpNovice/include/OpNovicePhysicsListMessenger.hh
/// \brief Definition of the OpNovicePhysicsListMessenger class
/// \file ASCIIPrimaryGenerator.hh
/// \brief Definition of the ASCIIPrimaryGenerator class
//
//
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef OpNovicePhysicsListMessenger_h
#define OpNovicePhysicsListMessenger_h 1
#ifndef ASCIIPrimaryGenerator_h
#define ASCIIPrimaryGenerator_h 1
#include "G4VPrimaryGenerator.hh"
#include "globals.hh"
#include "G4UImessenger.hh"
#include <fstream>
#include <vector>
class OpNovicePhysicsList;
class G4UIdirectory;
class G4UIcmdWithAnInteger;
class G4Event;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class OpNovicePhysicsListMessenger: public G4UImessenger
class ASCIIPrimaryGenerator : public G4VPrimaryGenerator
{
public:
OpNovicePhysicsListMessenger(OpNovicePhysicsList* );
virtual ~OpNovicePhysicsListMessenger();
virtual void SetNewValue(G4UIcommand*, G4String);
ASCIIPrimaryGenerator();
~ASCIIPrimaryGenerator();
virtual void SetInputFile(G4String _name);
virtual void GetNextEvent( );
inline G4int GetnEvents(){return fnEvents;}
public:
virtual void GeneratePrimaryVertex(G4Event*);
private:
OpNovicePhysicsList* fPhysicsList;
G4UIdirectory* fOpNoviceDir;
G4UIdirectory* fPhysDir;
G4UIcmdWithAnInteger* fVerboseCmd;
G4UIcmdWithAnInteger* fCerenkovCmd;
std::vector< G4ThreeVector >* fPositionVec;
std::vector< G4ThreeVector >* fMomentumVec;
std::vector< G4double >* fEnergyVec;
G4int fEventNo;
G4int fnEvents = 0;
std::ifstream fInputFile;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
......
......@@ -24,11 +24,11 @@
// ********************************************************************
//
//
/// \file OpNoviceActionInitialization.hh
/// \brief Definition of the OpNoviceActionInitialization class
/// \file ActionInitialization.hh
/// \brief Definition of the ActionInitialization class
#ifndef OpNoviceActionInitialization_h
#define OpNoviceActionInitialization_h 1
#ifndef ActionInitialization_h
#define ActionInitialization_h 1
#include "G4VUserActionInitialization.hh"
#include "G4String.hh"
......@@ -38,16 +38,15 @@ class B4DetectorConstruction;
/// Action initialization class.
///
class OpNoviceActionInitialization : public G4VUserActionInitialization
class ActionInitialization : public G4VUserActionInitialization
{
public:
OpNoviceActionInitialization(G4String);
virtual ~OpNoviceActionInitialization();
ActionInitialization(G4String);
virtual ~ActionInitialization();
virtual void BuildForMaster() const;
virtual void Build() const;
virtual G4VSteppingVerbose* InitializeSteppingVerbose() const;
G4String ffileName;
};
......
This diff is collapsed.
......@@ -23,69 +23,102 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/// \file OpNovice/include/OpNovicePhysicsList.hh
/// \brief Definition of the OpNovicePhysicsList class
/// \file /include/DetectorConstruction.hh
/// \brief Definition of the DetectorConstruction class
//
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef OpNovicePhysicsList_h
#define OpNovicePhysicsList_h 1
//
#ifndef DetectorConstruction_h
#define DetectorConstruction_h 1
#include "globals.hh"
#include "G4VUserPhysicsList.hh"
class OpNovicePhysicsListMessenger;
#include "G4Material.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4VUserDetectorConstruction.hh"
#include "G4SubtractionSolid.hh"
// #include "G4GDMLParser.hh"
#include "G4RunManager.hh"
class G4Cerenkov;
class G4Scintillation;
class G4OpAbsorption;
class G4OpRayleigh;
class G4OpMieHG;
class G4OpBoundaryProcess;
#include "Materials.hh"
#include "DetectorMessenger.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class OpNovicePhysicsList : public G4VUserPhysicsList
class DetectorConstruction : public G4VUserDetectorConstruction
{
public:
OpNovicePhysicsList();
virtual ~OpNovicePhysicsList();
DetectorConstruction();
virtual ~DetectorConstruction();
public:
virtual G4VPhysicalVolume* Construct();
void ConstructSDandField();
void BuildWorld ();
void BuildTrapezoidLG ();
void BuildPMT ();
void PlaceGeometry ();
void SetWorldVolume (G4ThreeVector arg);
void SetEnvelope (G4ThreeVector arg);
void SetRotation (G4ThreeVector arg);
void SetTranslation (G4ThreeVector arg);
void SetPMTTranslation (G4ThreeVector arg);
void SetPMTDiameter (G4double arg);
void SetLGthickness (G4double arg);
void UseCADModel (G4String fileName);
void OutputToGDML (G4String name);
void SetNSegmentsX (G4int arg);
void SetNSegmentsZ (G4int arg);
void SetSurfaceModel (const G4OpticalSurfaceModel model);
void SetSurfaceFinish (const G4OpticalSurfaceFinish finish);
void SetSurfaceType (const G4SurfaceType type);
void SetSurfaceSigmaAlpha (G4double v);
void AddSurfaceMPV (const char* c, G4MaterialPropertyVector* mpv);
void AddGasMPV (const char* c, G4MaterialPropertyVector* mpv);
virtual void ConstructParticle();
virtual void ConstructProcess();
virtual void SetCuts();
//these methods Construct physics processes and register them
void ConstructDecay();
void ConstructEM();
void ConstructOp();
//for the Messenger
void SetVerbose(G4int);
void SetNbOfPhotonsCerenkov(G4int);
private:
OpNovicePhysicsListMessenger* fMessenger;
static G4ThreadLocal G4int fVerboseLevel;
static G4ThreadLocal G4int fMaxNumPhotonStep;
static G4ThreadLocal G4Cerenkov* fCerenkovProcess;
static G4ThreadLocal G4Scintillation* fScintillationProcess;
static G4ThreadLocal G4OpAbsorption* fAbsorptionProcess;
static G4ThreadLocal G4OpRayleigh* fRayleighScatteringProcess;
static G4ThreadLocal G4OpMieHG* fMieHGScatteringProcess;
static G4ThreadLocal G4OpBoundaryProcess* fBoundaryProcess;
G4ThreeVector* m_worldDim;
G4ThreeVector* m_LGenvelope;
G4ThreeVector* m_LGpos;
G4ThreeVector* m_pmtPos;
G4RotationMatrix* m_rotation;
G4double m_pmtDia;
G4double m_PMTthickness;
G4double m_thickness;
G4int m_nSegmentsX;
G4int m_nSegmentsZ;
G4bool m_ConstructionHasBeenDone;
G4bool m_UsingCADmodel;
G4Box* m_solidWorld;
G4LogicalVolume* m_logicWorld;
G4VPhysicalVolume* m_physWorld;
G4Box* m_solidHalfWorld;
G4LogicalVolume* m_logicHalfWorld;
G4VPhysicalVolume* m_physHalfWorld;
G4Trd* m_inner;
G4Trd* m_outter;
G4SubtractionSolid* m_LightGuide;
G4LogicalVolume* m_logicLightGuide;
std::vector< G4VPhysicalVolume* > m_physLightGuide;
G4Tubs* m_solidPMT;
G4LogicalVolume* m_logicPMT;
std::vector< G4VPhysicalVolume* > m_physPMT;
std::vector< G4LogicalBorderSurface* > m_Surfvec;
Materials* materials;
G4Material* m_filler;
G4MaterialPropertiesTable* m_GasMPT;
// G4GDMLParser m_Parser;
G4RunManager* m_runMan;
DetectorMessenger* m_DetectorMessenger;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif /* OpNovicePhysicsList_h */
#endif /*DetectorConstruction_h*/
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/// \file optical/OpNovice2/include/DetectorMessenger.hh
/// \brief Definition of the DetectorMessenger class
//
//
//
#ifndef DetectorMessenger_h
#define DetectorMessenger_h 1
#include "globals.hh"
#include "G4UImessenger.hh"
class DetectorConstruction;
class G4UIdirectory;
class G4UIcommand;
class G4UIcmdWithAString;
class G4UIcmdWithAnInteger;
class G4UIcmdWithADouble;
class G4UIcmdWithADoubleAndUnit;
class G4UIcmdWithoutParameter;
class G4UIcmdWith3VectorAndUnit;
class DetectorMessenger: public G4UImessenger{
public:
DetectorMessenger(DetectorConstruction* );
~DetectorMessenger();
virtual void SetNewValue(G4UIcommand*, G4String);
private:
DetectorConstruction* fDetector;
G4UIdirectory* flightGuideDir;
G4UIdirectory* fSurfaceDir;
G4UIdirectory* fModelDir;
// the model
G4UIcmdWithAString* fModelCmd;
G4UIcmdWith3VectorAndUnit* fWorldVolumeCmd;
G4UIcmdWith3VectorAndUnit* fEnvelopeCmd;
G4UIcmdWith3VectorAndUnit* fModelRotationCmd;
G4UIcmdWith3VectorAndUnit* fModelTranslationCmd;
G4UIcmdWith3VectorAndUnit* fPMTTranslationCmd;
G4UIcmdWithADoubleAndUnit* fPMTDiameterCmd;
G4UIcmdWithADoubleAndUnit* fLGThicknessCmd;
G4UIcmdWithAString* fOutputModelCmd;
G4UIcmdWithAnInteger* fNsegmentsXCmd;
G4UIcmdWithAnInteger* fNsegmentsZCmd;
// the surface
G4UIcmdWithAString* fSurfaceModelCmd;
G4UIcmdWithAString* fSurfaceFinishCmd;
G4UIcmdWithAString* fSurfaceTypeCmd;
G4UIcmdWithADouble* fSurfaceSigmaAlphaCmd;
G4UIcmdWithAString* fSurfaceMatPropVectorCmd;
// the gas
G4UIcmdWithAString* fGasPropVectorCmd;
};
#endif