Import Geant4 1.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-08 15:28:20 +02:00
parent aaa409b6ee
commit ca1c8cb059
2995 changed files with 106830 additions and 299600 deletions
+73 -1
View File
@@ -1,4 +1,4 @@
$Id: History,v 1.16 1999/07/06 18:15:39 johna Exp $
$Id: History,v 1.37 1999/12/07 11:33:51 stesting Exp $
-------------------------------------------------------------------
=========================================================
@@ -17,6 +17,78 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
7th December 1999 John Allison (examples-V00-01-19)
- Updated novice .out files to geant4-01-00.
6th December 1999 John Allison (examples-V00-01-18)
- Temporarily backed muon out of exampleN02.
- Included PersistentEx01-V00-01-05, PersistentEx02-V00-01-03.
3rd December 1999 Gabriele Cosmo (examples-V00-01-17)
- Fixed definition of vacuum in exampleN02 and updated reference
output as for Linux-g++ (J.Apostolakis)
- Included PersistentEx01-V00-01-04, PersistentEx02-V00-01-02.
1st December 1999 John Allison (examples-V00-01-16)
- Added 1 Tev muon to exampleN02 (J.Apostolakis).
- Included PersistentEx01-V00-01-03, PersistentEx02-V00-01-01.
29th November 1999 John Allison (examples-V00-01-15)
- Delete VisManager before RunManager in exampleN05.cc
17th November 1999 John Allison (examples-V00-01-14)
- Updated exampleN03.out and exampleN06.out for geant4-00-01-ref-09 and
Sun debug.
10th November 1999 John Allison (examples-V00-01-13)
- Archived (cvs remove) E01, E02 and E03.
- Added extended/electromagnetic and extended/persistency.
10th November 1999 Satoshi Tanaka (examples-V00-01-12)
- novice/N03 is updated
- Vis macros for N03 are updated for the latest updation of vis commands
(Introduction of /vis/viewer/update etc)
09th November 1999 Satoshi Tanaka (examples-V00-01-11)
- novice/N03 is updated
- prerunN03.mac : /vis/viewer/update is appended
- src/ExN03RunAction.cc: /vis/scene/notifyHandlers is in BeginOfRunAction()
/vis/viewer/update is in EndOfRunAction()
29th September 1999 John Allison (examples-V00-01-09)
- Updated .out files for geant4-00-01-ref-05, tags 11.
29th September 1999 John Allison (examples-V00-01-08)
- Updated exampleN04 .out files for geant4-00-01-ref-05.
26th October 1999 John Allison (examples-V00-01-07)
- Tagged Y.Morita's changes to extended/E02 - see extended/E02/History.
20th October 1999 John Allison (examples-V00-01-06)
- Define G4OODDLX_BOOT in E02/GNUmakefile.
- Updated .out files for geant4-00-01-ref-04.
29th September 1999 John Allison (examples-V00-01-05)
- Updated .out files for geant4-00-01-ref-03.
3rd October 1999 Hisaya Kurashige (examples-V00-01-04)
- Updated all PhysicsList for renaming 'Barion' to 'Baryon'
29th September 1999 John Allison (examples-V00-01-03)
- Updated .out files for geant4-00-01-ref-02.
14th September 1999 Satoshi Tanaka (examples-V00-01-02)
- Included new macro files and other changes for visualization.
5th August 1999 John Allison (examples-V00-01-01)
- Updated exampleN02.out for geant4-00-01-ref-01.
5th August 1999 John Allison (examples-V00-01-00)
- Updated exampleN04.EMtest.out and exampleN04.out for geant4-00-01.
4th August 1999 John Allison
- Eliminated references to G4Ray in ExN02VisManager.cc and N03.
6th July 1999 John Allison (examples-01-00-13)
- Relaxed non-optimised compiling for ExN04PhysicsList.cc for Linux.
-35
View File
@@ -1,35 +0,0 @@
# $Id: GNUmakefile,v 1.1 1999/01/07 16:05:17 gunter Exp $
# --------------------------------------------------------------
# GNUmakefile for tests module. Gabriele Cosmo, 27/06/98.
# --------------------------------------------------------------
name := exampleE01
G4TARGET := $(name)
G4EXLIB := true
ifndef G4INSTALL
G4INSTALL = ../../..
endif
.PHONY: all
all: lib bin
include $(G4INSTALL)/config/architecture.gmk
# Override some variables for binmake.gmk.
#
# INCFLAGS :=
# LDLIBS :=
CPPFLAGS += \
-I$(OBJY_DIR)/include \
-I$(HEP_ODBMS_DIR)/include \
-I$(HISTOODIR)/code
LDFLAGS += \
-L$(OBJY_DIR)/lib \
-L$(HEP_ODBMS_DIR)/lib \
-L$(HISTOODIR)/lib
LOADLIBS += -lHistoxx -lHepODBMS -loo -lm
include $(G4INSTALL)/config/binmake.gmk
-46
View File
@@ -1,46 +0,0 @@
$Id: History,v 1.2 1999/04/17 04:06:40 kurasige Exp $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
Novice Example 07 History file
------------------------------
This file should be used by the test developer to briefly
summarize all major modifications introduced in the code and keep
track of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
17 Apr., 1999 H.Kurashige
- Modify SetCuts() and ConstructParticle() in ExE0101PhysicsList
- Modify BeginOfRunAction() and EndOfRunAction() in ExE0101RunAction
- Modify UserSteppingAction() in ExE0101SteppingAction
14th October 1998 John Allison
- Moved from N07.
25th August 1998 Evgueni.Tcherniaev@cern.ch
- CPPFLAGS += ... -I$(HISTOODIR)/code
LDFLAGS += ... -L$(HISTOODIR)/lib
- Changed p.Print(); to p.print();
21st August 1998 John Allison
- Changed file names from N07* to ExN07*.
August 7th,1998 John Allison
- Moved from test03 to exampleN07.
July 10, 1998, Evgueni.Tcherniaev@cern.ch
- in test03.cc added:
runManager->initialize();
- GNUmakefile now points to $(HISTOODIR)/../dev/code
should be changed to $(HISTOODIR) for official release
June 27, 98 G. Cosmo
- Created.
-47
View File
@@ -1,47 +0,0 @@
$Id: README,v 1.1 1999/01/07 16:05:17 gunter Exp $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
ExampleN07
---------
This directory contains a GEANT4 example on how to create, fill,
print and save histograms in a OODBMS.
The main program "exampleN07.cc" is a standard G4 main (no initialization
of OODBMS or histos).
The run actions are overloaded:
- in BeginOfRunAction the federated data base and the data bases sessions
are initialized and a transaction is opened;
1d and 2d histograms are constructed;
The name of the base name is "ExN07DB".
- in EndOfRunAction contents of the histograms are printed and
the transaction is closed;
The stepping action is overloaded:
- in SteppingAction two histograms are accessed and filled.
The followings are the instruction to execute it for the case of HP-AFS.
0) Setting up the environment
http://wwwinfo.cern.ch/asdoc/lhcpp/SetUpUserEnvironment.html
1) Compilation/linking
% gmake
2) Execution
% ../../../bin/HP-AFS/exampleN07 > exampleN07.newout
% diff exampleN07.out exampleN07.newout
Evgueni.Tcherniaev@cern.ch, 25.08.98
-31
View File
@@ -1,31 +0,0 @@
// $Id: exampleE01.cc,v 1.1 1999/01/07 16:05:17 gunter Exp $
#include "ExE01DetectorConstruction.hh"
#include "ExE01RunAction.hh"
#include "ExE01PrimaryGeneratorAction.hh"
#include "ExE01PhysicsList.hh"
#include "ExE01SteppingAction.hh"
#include "G4RunManager.hh"
int main(int ,char** ) {
// Run manager
G4RunManager * runManager = new G4RunManager;
// UserInitialization classes
runManager->SetUserInitialization(new ExE01DetectorConstruction);
runManager->SetUserInitialization(new ExE01PhysicsList);
// UserAction classes.
runManager->SetUserAction(new ExE01RunAction);
runManager->SetUserAction(new ExE01PrimaryGeneratorAction);
runManager->SetUserAction(new ExE01SteppingAction);
// Event loop
G4int n_event = 1000;
runManager->Initialize();
runManager->BeamOn(n_event);
delete runManager;
return 0;
}
-175
View File
@@ -1,175 +0,0 @@
ExE01PhysicsList::setCuts:CutLength : 1 (mm)
TYPE : Histo1D
TITLE : HepJamesRandom1
BIN NUMBER : 100
BIN WIDTH : 0.01
0.00e+00 3.88e+00 Y
X POSITION BIN VALUE|--------------------------------------------------->
0.000e+00 0 6.000e-02|
1.000e-02 1 4.000e-02|
2.000e-02 2 1.800e-01|XX
3.000e-02 3 9.000e-02|X
4.000e-02 4 1.500e-01|X
5.000e-02 5 2.600e-01|XXX
6.000e-02 6 2.500e-01|XXX
7.000e-02 7 3.600e-01|XXXX
8.000e-02 8 3.000e-01|XXX
9.000e-02 9 4.900e-01|XXXXXX
1.000e-01 10 6.000e-01|XXXXXXX
1.100e-01 11 5.600e-01|XXXXXXX
1.200e-01 12 6.400e-01|XXXXXXXX
1.300e-01 13 1.110e+00|XXXXXXXXXXXXXX
1.400e-01 14 1.140e+00|XXXXXXXXXXXXXX
1.500e-01 15 1.500e+00|XXXXXXXXXXXXXXXXXXX
1.600e-01 16 1.520e+00|XXXXXXXXXXXXXXXXXXX
1.700e-01 17 1.750e+00|XXXXXXXXXXXXXXXXXXXXXXX
1.800e-01 18 1.700e+00|XXXXXXXXXXXXXXXXXXXXXX
1.900e-01 19 1.860e+00|XXXXXXXXXXXXXXXXXXXXXXXX
2.000e-01 20 2.360e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2.100e-01 21 2.530e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2.200e-01 22 2.580e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2.300e-01 23 2.670e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2.400e-01 24 2.900e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2.500e-01 25 3.100e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2.600e-01 26 3.250e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2.700e-01 27 3.230e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2.800e-01 28 3.530e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2.900e-01 29 3.540e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.000e-01 30 3.470e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.100e-01 31 3.880e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.200e-01 32 3.340e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.300e-01 33 3.430e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.400e-01 34 3.070e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.500e-01 35 3.490e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.600e-01 36 2.950e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.700e-01 37 2.560e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.800e-01 38 2.740e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.900e-01 39 2.250e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4.000e-01 40 2.110e+00|XXXXXXXXXXXXXXXXXXXXXXXXXXX
4.100e-01 41 1.900e+00|XXXXXXXXXXXXXXXXXXXXXXXX
4.200e-01 42 1.740e+00|XXXXXXXXXXXXXXXXXXXXXX
4.300e-01 43 1.420e+00|XXXXXXXXXXXXXXXXXX
4.400e-01 44 1.160e+00|XXXXXXXXXXXXXXX
4.500e-01 45 1.040e+00|XXXXXXXXXXXXX
4.600e-01 46 9.200e-01|XXXXXXXXXXXX
4.700e-01 47 7.900e-01|XXXXXXXXXX
4.800e-01 48 7.500e-01|XXXXXXXXX
4.900e-01 49 6.200e-01|XXXXXXXX
5.000e-01 50 5.400e-01|XXXXXXX
5.100e-01 51 3.800e-01|XXXX
5.200e-01 52 2.900e-01|XXX
5.300e-01 53 2.000e-01|XX
5.400e-01 54 2.000e-01|XX
5.500e-01 55 1.200e-01|X
5.600e-01 56 6.000e-02|
5.700e-01 57 5.000e-02|
5.800e-01 58 4.000e-02|
5.900e-01 59 8.000e-02|X
6.000e-01 60 2.000e-02|
6.100e-01 61 0.000e+00|
6.200e-01 62 1.000e-02|
6.300e-01 63 1.000e-02|
6.400e-01 64 0.000e+00|
6.500e-01 65 0.000e+00|
6.600e-01 66 0.000e+00|
6.700e-01 67 0.000e+00|
6.800e-01 68 0.000e+00|
6.900e-01 69 0.000e+00|
7.000e-01 70 0.000e+00|
7.100e-01 71 0.000e+00|
7.200e-01 72 0.000e+00|
7.300e-01 73 0.000e+00|
7.400e-01 74 0.000e+00|
7.500e-01 75 0.000e+00|
7.600e-01 76 0.000e+00|
7.700e-01 77 0.000e+00|
7.800e-01 78 0.000e+00|
7.900e-01 79 0.000e+00|
8.000e-01 80 0.000e+00|
8.100e-01 81 0.000e+00|
8.200e-01 82 0.000e+00|
8.300e-01 83 0.000e+00|
8.400e-01 84 0.000e+00|
8.500e-01 85 0.000e+00|
8.600e-01 86 0.000e+00|
8.700e-01 87 0.000e+00|
8.800e-01 88 0.000e+00|
8.900e-01 89 0.000e+00|
9.000e-01 90 0.000e+00|
9.100e-01 91 0.000e+00|
9.200e-01 92 0.000e+00|
9.300e-01 93 0.000e+00|
9.400e-01 94 0.000e+00|
9.500e-01 95 0.000e+00|
9.600e-01 96 0.000e+00|
9.700e-01 97 0.000e+00|
9.800e-01 98 0.000e+00|
9.900e-01 99 0.000e+00|
X |
V
ENTRIES : 9000 TOTAL C. : 8.988e+01 NEQUIVAL : 8.988e+03
MEAN F.T.: 3.003e-01 MEAN B.C.: 3.003e-01 UNDERFLOW: 1.200e-01
RMS F.T. : 1.003e-01 RMS B.C. : 1.003e-01 OVERFLOW : 0.000e+00
TYPE : Histo2D
TITLE : HepJamesVsDRand48
X: BINS : 40 WIDTH : 2.500e-02 MIN : 0.000e+00 MAX : 1.000e+00
Y: BINS : 40 WIDTH : 2.500e-02 MIN : 0.000e+00 MAX : 1.000e+00
0 1 2 3
0123456789012345678901234567890123456789
******************************************
* *
0 * ........................................ *
1 * ........................................ *
2 * ........................................ *
3 * ........................................ *
4 * ........................................ *
5 * ........................................ *
6 * ........................................ *
7 * ........................................ *
8 * ........................................ *
9 * ........................................ *
10 * ........................................ *
11 * ........................................ *
12 * ........................................ *
13 * ........................................ *
14 * ........................................ *
15 * ........................................ *
16 * ........................................ *
17 * ........................................ *
18 * ............++.......................... *
19 * ..........++++.++....................... *
20 * .......+22++22++++...................... *
21 * ...++.2+2+233323+2...................... *
22 * .....+224334444222..+................... *
23 * ..+.+223447786642322.................... *
24 * .....+3466997984633..................... *
25 * ..++22457A9ACAA85332+................... *
26 * ..+++45779DBFA778523+................... *
27 * ....+37688DCBCA96422+................... *
28 * ...+2467AAADE9DA6443++.................. *
29 * ...+2454999ACB985332+................... *
30 * ...++2445AAB9B9863+2+................... *
31 * ...++2245568878553+++................... *
32 * .....2235556765332+2.................... *
33 * .....++23345343422+..................... *
34 * .....++.+23322232++..................... *
35 * .......+.2+2+2+++....................... *
36 * .........++++.+..+...................... *
37 * ...........++++......................... *
38 * ........................................ *
39 * ........................................ *
* *
******************************************
ENTRIES : 9000 Z MIN : 0
TOTAL C. : 89.8 Z STEP : 0.068
NEQUIVAL : 8.98e+03 Z SCALE : .+23456789ABCDE
0 | 0.05 | 0
-----------|------------|-----------
0.12 | 89.7 | 0
-----------|------------|-----------
0 | 0 | 0
@@ -1,34 +0,0 @@
#ifndef ExE01DetectorConstruction_h
#define ExE01DetectorConstruction_h 1
#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"
class ExE01DetectorConstruction : public G4VUserDetectorConstruction
{
public:
ExE01DetectorConstruction();
~ExE01DetectorConstruction();
public:
G4VPhysicalVolume* Construct();
private:
G4double expHall_x;
G4double expHall_y;
G4double expHall_z;
G4double calBox_x;
G4double calBox_y;
G4double calBox_z;
G4double rotAngle;
G4double calPos;
G4double trackerRadius;
G4double trackerHight;
G4double trackerPos;
};
#endif
@@ -1,37 +0,0 @@
// $Id: ExE01PhysicsList.hh,v 1.2 1999/04/17 04:06:41 kurasige Exp $
// ------------------------------------------------------------
#ifndef ExE01PhysicsList_h
#define ExE01PhysicsList_h 1
#include "G4VUserPhysicsList.hh"
#include "globals.hh"
class ExE01PhysicsList: public G4VUserPhysicsList
{
public:
ExE01PhysicsList();
virtual ~ExE01PhysicsList();
protected:
// Construct particle and physics
virtual void ConstructParticle();
virtual void ConstructProcess();
//
virtual void SetCuts();
protected:
// these methods Construct particles
virtual void ConstructBosons();
virtual void ConstructLeptons();
protected:
// these methods Construct physics processes and register them
virtual void ConstructEM();
};
#endif
@@ -1,25 +0,0 @@
#ifndef ExE01PrimaryGeneratorAction_h
#define ExE01PrimaryGeneratorAction_h 1
#include "G4VUserPrimaryGeneratorAction.hh"
class G4ParticleGun;
class G4Event;
class ExE01PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
ExE01PrimaryGeneratorAction();
~ExE01PrimaryGeneratorAction();
public:
void GeneratePrimaries(G4Event* anEvent);
private:
G4ParticleGun* particleGun;
};
#endif
@@ -1,33 +0,0 @@
// $Id: ExE01RunAction.hh,v 1.3 1999/04/22 21:49:17 asaim Exp $
#ifndef ExE01RunAction_h
#define ExE01RunAction_h 1
#include "G4UserRunAction.hh"
#include "globals.hh"
#include "HepODBMS/clustering/HepDbApplication.h"
#include "histograms.h"
class G4Run;
class ExE01RunAction : public G4UserRunAction
{
public:
ExE01RunAction() { }
virtual ~ExE01RunAction() {}
virtual void BeginOfRunAction(const G4Run* aRun);
virtual void EndOfRunAction(const G4Run* aRun);
static HepRef(Histo1D) get_1d() { return myHisto1D; }
static HepRef(Histo2D) Get2d() { return myHisto2D; }
private:
static HepRef(Histo1D) myHisto1D;
static HepRef(Histo2D) myHisto2D;
HepDbApplication dbApp;
};
#endif
@@ -1,24 +0,0 @@
// $Id: ExE01SteppingAction.hh,v 1.2 1999/04/17 04:06:43 kurasige Exp $
#ifndef ExE01SteppingAction_h
#define ExE01SteppingAction_h 1
#include "G4UserSteppingAction.hh"
#include "globals.hh"
#include "Randomize.hh"
#include "histograms.h"
class ExE01SteppingAction : public G4UserSteppingAction {
private:
HepJamesRandom theJamesEngine;
DRand48Engine theDRand48Engine;
public:
ExE01SteppingAction(){};
virtual ~ExE01SteppingAction(){};
virtual void UserSteppingAction(const G4Step*);
};
#endif
@@ -1,102 +0,0 @@
#include "ExE01DetectorConstruction.hh"
#include "G4Material.hh"
#include "G4MaterialTable.hh"
#include "G4Element.hh"
#include "G4ElementTable.hh"
#include "G4Box.hh"
#include "G4Tubs.hh"
#include "G4LogicalVolume.hh"
#include "G4RotationMatrix.hh"
#include "G4ThreeVector.hh"
#include "G4Transform3D.hh"
#include "G4PVPlacement.hh"
ExE01DetectorConstruction::ExE01DetectorConstruction()
{
expHall_x = 600.*cm;
expHall_y = 600.*cm;
expHall_z = 600.*cm;
calBox_x = 50.*cm;
calBox_y = 50.*cm;
calBox_z = 50.*cm;
rotAngle = 30.*deg;
calPos = 200.*cm;
trackerRadius = 50.*cm;
trackerHight = 100.*cm;
trackerPos = -200.*cm;
}
ExE01DetectorConstruction::~ExE01DetectorConstruction()
{;}
G4VPhysicalVolume* ExE01DetectorConstruction::Construct()
{
//------------------------------------------------------ materials
G4double a, iz, z, density;
G4String name, symbol;
G4int nel;
a = 14.01*g/mole;
G4Element* elN = new G4Element(name="Nitrogen", symbol="N", iz=7., a);
a = 16.00*g/mole;
G4Element* elO = new G4Element(name="Oxygen", symbol="O", iz=8., a);
density = 1.29e-03*g/cm3;
G4Material* Air = new G4Material(name="Air", density, nel=2);
Air->AddElement(elN, .7);
Air->AddElement(elO, .3);
a = 207.19*g/mole;
density = 11.35*g/cm3;
G4Material* Lead = new G4Material(name="Lead", z=82., a, density);
a = 39.95*g/mole;
density = 1.782e-03*g/cm3;
G4Material* Ar = new G4Material(name="ArgonGas", z=18., a, density);
//------------------------------------------------------ volumes
//------------------------------ experimental hall
G4Box * experimantalHall_box
= new G4Box("expHall_b",expHall_x,expHall_y,expHall_z);
G4LogicalVolume * experimantalHall_log
= new G4LogicalVolume(experimantalHall_box,Air,"expHall_L",0,0,0);
G4VPhysicalVolume * experimantalHall_phys
= new G4PVPlacement(0,G4ThreeVector(),"expHall_P",
experimantalHall_log,0,false,0);
//------------------------------ calorimeter boxes
G4Box * calorimeter_box
= new G4Box("calorimeter_b",calBox_x,calBox_y,calBox_z);
G4LogicalVolume * calorimeter_log
= new G4LogicalVolume(calorimeter_box,Lead,"calo_L",0,0,0);
for(G4int i=0;i<3;i++)
{
G4RotationMatrix rm;
rm.rotateZ(i*rotAngle);
new G4PVPlacement(G4Transform3D(rm,G4ThreeVector(0.*cm,i*calPos,0.*cm)),
"calo_phys",calorimeter_log,experimantalHall_phys,
false,i);
}
//------------------------------ tracker tube
G4Tubs * tracker_tube
= new G4Tubs("tracker_tube",0.*cm,trackerRadius,trackerHight,
0.*deg,360.*deg);
G4LogicalVolume * tracker_log
= new G4LogicalVolume(tracker_tube,Ar,"tracker_L",0,0,0);
new G4PVPlacement(0,G4ThreeVector(0.*cm,trackerPos,0.*cm),
"tracker_phys",tracker_log,experimantalHall_phys,
false,0);
//------------------------------------------------------------------
return experimantalHall_phys;
}
@@ -1,130 +0,0 @@
// $Id: ExE01PhysicsList.cc,v 1.2 1999/04/17 04:06:46 kurasige Exp $
#include "globals.hh"
#include "ExE01PhysicsList.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleWithCuts.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4Material.hh"
#include "G4MaterialTable.hh"
#include "G4ios.hh"
#include <iomanip.h>
ExE01PhysicsList::ExE01PhysicsList(): G4VUserPhysicsList()
{
SetVerboseLevel(1);
}
ExE01PhysicsList::~ExE01PhysicsList()
{
}
void ExE01PhysicsList::ConstructParticle()
{
// In this method, static member functions should be called
// for all particles which you want to use.
// This ensures that objects of these particle types will be
// created in the program.
ConstructBosons();
ConstructLeptons();
}
void ExE01PhysicsList::ConstructBosons()
{
// pseudo-particles
G4Geantino::GeantinoDefinition();
G4ChargedGeantino::ChargedGeantinoDefinition();
// gamma
G4Gamma::GammaDefinition();
// optical photon
G4OpticalPhoton::OpticalPhotonDefinition();
}
void ExE01PhysicsList::ConstructLeptons()
{
// leptons
G4Electron::ElectronDefinition();
G4Positron::PositronDefinition();
G4NeutrinoE::NeutrinoEDefinition();
G4AntiNeutrinoE::AntiNeutrinoEDefinition();
}
void ExE01PhysicsList::ConstructProcess()
{
AddTransportation();
ConstructEM();
}
#include "G4ComptonScattering.hh"
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4MultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
void ExE01PhysicsList::ConstructEM()
{
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String particleName = particle->GetParticleName();
if (particleName == "gamma") {
// gamma
// Construct processes for gamma
pmanager->AddDiscreteProcess(new G4GammaConversion());
pmanager->AddDiscreteProcess(new G4ComptonScattering());
pmanager->AddDiscreteProcess(new G4PhotoElectricEffect());
} else if (particleName == "e-") {
//electron
// Construct processes for electron
pmanager->AddProcess(new G4MultipleScattering(),-1,1,1);
pmanager->AddProcess(new G4eIonisation(),-1,2,2);
pmanager->AddProcess(new G4eBremsstrahlung(),-1,-1,3);
} else if (particleName == "e+") {
//positron
// Construct processes for positron
pmanager->AddProcess(new G4MultipleScattering(),-1,1,1);
pmanager->AddProcess(new G4eIonisation(),-1,2,2);
pmanager->AddProcess(new G4eBremsstrahlung(),-1,-1,3);
pmanager->AddProcess(new G4eplusAnnihilation(),0,-1,4);
}
}
}
void ExE01PhysicsList::SetCuts()
{
G4double cut = defaultCutValue;
if (verboseLevel >0){
G4cout << "ExE01PhysicsList::SetCuts:";
G4cout << "CutLength : " << cut/mm << " (mm)" << endl;
}
// set cut values for gamma at first and for e- second and next for e+,
// because some processes for e+/e- need cut values for gamma
SetCutValue(cut, "gamma");
SetCutValue(cut, "e-");
SetCutValue(cut, "e+");
SetCutValueForOthers(cut);
if (verboseLevel>1) {
DumpCutValuesTable();
}
}
@@ -1,36 +0,0 @@
#include "ExE01PrimaryGeneratorAction.hh"
#include "G4Event.hh"
#include "G4ParticleGun.hh"
#include "G4ParticleTable.hh"
#include "G4ParticleDefinition.hh"
#include "globals.hh"
ExE01PrimaryGeneratorAction::ExE01PrimaryGeneratorAction()
{
G4int n_particle = 1;
particleGun = new G4ParticleGun(n_particle);
}
ExE01PrimaryGeneratorAction::~ExE01PrimaryGeneratorAction()
{
delete particleGun;
}
void ExE01PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4String particleName;
G4ParticleDefinition* particle
= particleTable->FindParticle(particleName="geantino");
particleGun->SetParticleDefinition(particle);
particleGun->SetParticleMomentumDirection(G4ThreeVector(0.,1.,0.));
particleGun->SetParticleEnergy(100.*GeV);
particleGun->SetParticlePosition(G4ThreeVector(0.*cm,-300.*cm,0.*cm));
particleGun->GeneratePrimaryVertex(anEvent);
}
@@ -1,49 +0,0 @@
// $Id: ExE01RunAction.cc,v 1.3 1999/04/22 21:49:21 asaim Exp $
#include "ExE01RunAction.hh"
#include "G4Run.hh"
#include "G4UImanager.hh"
#include "G4ios.hh"
HepRef(Histo1D) ExE01RunAction::myHisto1D;
HepRef(Histo2D) ExE01RunAction::myHisto2D;
void ExE01RunAction::BeginOfRunAction(const G4Run* aRun)
{
G4UImanager* UI = G4UImanager::GetUIpointer();
UI->ApplyCommand("/event/Verbose 0");
UI->ApplyCommand("/tracking/Verbose 0");
dbApp.Init();
dbApp.startUpdate();
HepDatabaseRef dbH = dbApp.db("ExE01DB");
// Number of histogram bins
int nBins1d = 100;
int nBins2d = 40;
// Limits for values
double low = 0, high = 1;
double xlow = 0, xhigh = 1, ylow = 0, yhigh = 1;
myHisto1D = new(dbH)
Histo1D("HepJamesRandom1", nBins1d, low, high);
myHisto2D = new(dbH)
Histo2D("HepJamesVsDRand48", nBins2d, xlow, xhigh, nBins2d, ylow, yhigh);
}
void ExE01RunAction::EndOfRunAction(const G4Run*)
{
// Print histograms
HistPrintout p(G4cout);
p.print(*myHisto1D);
p.print(*myHisto2D);
// commit changes to Objectivty database
dbApp.commit();
}
@@ -1,22 +0,0 @@
// $Id: ExE01SteppingAction.cc,v 1.2 1999/04/17 04:06:49 kurasige Exp $
#include "ExE01SteppingAction.hh"
#include "ExE01RunAction.hh"
void ExE01SteppingAction::UserSteppingAction(const G4Step*){
HepRef(Histo1D) h1 = ExE01RunAction::get_1d();
HepRef(Histo2D) h2 = ExE01RunAction::Get2d();
HepRandom::setTheEngine(&theJamesEngine);
double james = RandGauss::shoot(0.3,0.1);
h1->fill(james,0.01);
HepRandom::setTheEngine(&theDRand48Engine);
double d48 = RandGauss::shoot(0.7,0.1);
h2->fill(james,d48,0.01);
}
-53
View File
@@ -1,53 +0,0 @@
# $Id: GNUmakefile,v 1.1 1999/01/07 16:05:20 gunter Exp $
# --------------------------------------------------------------
# GNUmakefile for tests module. Gabriele Cosmo, 27/06/98.
# --------------------------------------------------------------
# You must have unique G4EXAMPLE_FDID assigned by your local
# manager of Objectivity/DB lock server.
#
# G4EXAMPLE_BOOT is defined as $HOME/G4EXAMPLE by default.
name := exampleE02
G4ODBMS := true
G4TARGET := $(name)
G4EXLIB := true
ifndef G4INSTALL
G4INSTALL = ../../..
endif
.PHONY: all cleandb
all: lib bin
include $(G4INSTALL)/config/architecture.gmk
include $(G4INSTALL)/config/binmake.gmk
CPPFLAGS += \
-Iinclude \
-I$(G4TMPDIR)
test:
@echo $(CPPFLAGS)
# --------------------------------------------------------------
# override the target all, and warn if G4ODBMS flag is not defined.
ifndef G4ODBMS
all:
@echo Error - Persistency requires G4ODBMS and related database setup.
exit 1
endif
cleandb:
ifndef G4EXAMPLE_FDID
@echo G4EXAMPLE_FDID is not defined. Stop.
exit 1
endif
@rm -f $(G4EXAMPLE_BOOT_DIR)/G4EXAMPLE
@rm -f $(G4EXAMPLE_BOOT_DIR)/G4EXAMPLE.FDDB
@rm -f $(G4EXAMPLE_BOOT_DIR)/*.G4EXAMPLE.DB
@echo Copying schema file to $(G4EXAMPLE_BOOT) for FDID $(G4EXAMPLE_FDID)
@$(HEP_ODBMS_DIR)/etc/getdb $(G4SCHEMA_DIR)/G4SCHEMA \
$(G4EXAMPLE_BOOT) $(G4EXAMPLE_FDID)
-151
View File
@@ -1,151 +0,0 @@
$Id: README,v 1.2 1999/04/29 09:04:55 morita Exp $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
Example E02
-----------
This program demonstrates how user can use object database using
HepODBMS interface. Please contact your local system manager for
the avaiability of HepODBMS and Objectivity/DB.
To use HepODBMS and underlying Objectivity/DB package, user needs
a deep knowledge of the object database and environmental set
procedures. The code is provided here to give just a brief idea
of using the persistency in Geant4.
How to build:
- Setup:
In addition to the standard Geant4 setup, additional setup for
HepODBMS, Objectivity/DB and federated database should be defined.
For CERN AFS users, an example setup script "g4odbms_setup.csh" is
provided in this directory. Put a line such as
source ${G4INSTALL}/examples/extended/E02/g4odbms_setup.csh
in your .cshrc file, where ${G4INSTALL} is the actual location of
the Geant4 package.
- Objectivity/DB boot file and lock server
Boot file is a set of configuration file and baseline federated database
file which contain database schema information of some basic
HepODBMS and Objectivity/DB classes. Each time you compile your
own persistent-capable class, a schema is compiled into your
local copy of federeated database.
When creating a persistency library of Geant4, Geant4-specific persistent
classes will be compiled into your local copy of the boot file.
Default location of the Geant4 boot file is $HOME/G4EXAMPLE.
You may want to change the definition of this temporary boot
file in your .cshrc.
example:
setenv G4EXAMPLE_BOOT_DIR ${HOME}/tmp/G4EXAMPLE
setenv G4EXAMPLE_BOOT ${G4EXAMPLE_BOOT_DIR}/G4EXAMPLE
For each boot file, you must have unique federated database ID (FDID).
This number can be obtained from your local manager of Objectivity
lock server. Define G4EXAMPLE_FDID in your .cshrc.
example:
setenv G4EXAMPLE_FDID 501
To compile the schema and to build the library, you also need an
access to Objectivity/DB lock server. For the CERN AFS users, see
the notes below, for other systems, contact your local system manager
for the lock server configuration.
Then type,
gmake cleandb
to create your local copy of Geant4 boot file.
___________________________________________________________________________
Note: On CERN AFS, contact your group system administrator to obtain access
to your group lock server. If you want to run this example on your
own, you must run your own lock server process on the same machine as
you run the executable program, due to a technical limitation on AFS
and Objectivity.
To start your own lock server process,
oocheckls -notitle `hostname` || \
oolockserver -notitle -noauto `hostname`::${G4EXAMPLE_BOOT}
Then check the process with
ps -ef | grep ools
....
<user> 60156 1 0 06:36:40 pts/15 0:00 ools -OO_NO_AUTOREC
....
When you finish running this example, don't forget to kill
the lock server process by yourself.
ookillls
or
kill -9 <pid_of_ools>
You must have AFS ACL access to HepODBMS and Objectivity/DB
directories.
At CERN, the FDID allocation table is given in this URL:
http://wwwinfo.cern.ch/asd/rd45/white-papers/9804/FDIDAllocation.html
___________________________________________________________________________
- libG4persistency.a
Persistency in Geant4 is provided as a separate sub category.
Geant4 installer must explictly go to ${G4INSTALL}/source/persistency
directory and type
cd ...where Geant4 is installed...
cd source/persistency
gmake cleandb
gmake
gmake global
to create libG4persistency.a. This process will also produce a base
schema file in the directory $(G4INSTALL)/schema/.
- exampleE02 executable
exampleE02 executable can be made by simply typing "gmake" in this directory.
Current example of Geant4 persistency requires the executable to be
run as the same directory as your local federated database.
Use exampleE02run csh-script for simple test.
example:
gmake cleandb # see above
gmake # creates exampleE02 executable
exampleE02run # run exampleE02
- Persistent output
When exampleE02 is run correctly, following database files will be created
in your federated database directory.
Events.G4EXAMPLE.DB G4EXAMPLE.FDDB System.G4EXAMPLE.DB
G4EXAMPLE Geometry.G4EXAMPLE.DB
To browse the contents, use "ootoolmgr".
cd ...your federated database directory...
setenv DISPLAY <your_x_terminal>:0.0
ootoolmgr -notitle G4EXAMPLE &
Make sure to terminate ootoolmgr when you finish browsing.
Otherwise lockserver will remember the browsing by ootoolmgr as
a "transaction", and the further updates to the database will be blocked.
--
-64
View File
@@ -1,64 +0,0 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: exampleE02.cc,v 1.1 1999/01/07 16:05:21 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
//
//
// --------------------------------------------------------------
// GEANT4 - exampleE02
//
// For information related to this code contact:
// CERN, IT Division, ASD Group
// --------------------------------------------------------------
// Comments
//
//
// --------------------------------------------------------------
#include "ExE02DetectorConstruction.hh"
#include "ExE02PhysicsList.hh"
#include "ExE02RunAction.hh"
#include "ExE02PrimaryGeneratorAction.hh"
#include "ExE02EventAction.hh"
#include "ExE02StackingAction.hh"
#include "G4ios.hh"
#include "G4RunManager.hh"
#include "G4PersistencyManager.hh"
int main()
{
// Persistency Manager
G4PersistencyManager * persistencyManager =
G4PersistencyManager::GetPersistencyManager();
// Run manager
G4RunManager * runManager = new G4RunManager;
// Detector geometry
runManager->SetUserInitialization(new ExE02DetectorConstruction);
runManager->SetUserInitialization(new ExE02PhysicsList);
// UserAction classes.
runManager->SetUserAction(new ExE02RunAction);
runManager->SetUserAction(new ExE02PrimaryGeneratorAction);
runManager->SetUserAction(new ExE02EventAction);
runManager->SetUserAction(new ExE02StackingAction);
runManager->Initialize();
// Event loop
G4int n_event = 10;
runManager->BeamOn(n_event);
delete runManager;
return 0;
}
-18
View File
@@ -1,18 +0,0 @@
#
# Macro file of "skeleton.cc"
# for tracking performance test
#
/control/verbose 2
/run/verbose 2
#
# SimpleBox geometry made by Pb
# Geantino 100 GeV to the direction (1.,0.,0.)
# 10 events
#
/mydet/switchDetector SimpleBox
/mydet/selectMaterial Pb
/gun/particle geantino
/gun/energy 100 GeV
/gun/direction 1 0 0
/run/initialize
/run/beamOn 10
-112
View File
@@ -1,112 +0,0 @@
Unit category <Time> is not defined.
Opening Federated Database G4EXAMPLE.
-- Tracker type sensitive detector
****************************************************************
****************************************************************
** **
** G4MuPairProduction : **
** cross section/energy loss is calculated using **
** the accurate cross section formula of R.Kokoulin, **
** ( building the tables takes a lot of time, **
** PLEASE BE PATIENT ! ) **
** sampling of the energy of the pair is generated **
** according to the sampling tables. **
** **
****************************************************************
****************************************************************
****************************************************************
****************************************************************
** **
** G4MuPairProduction : **
** cross section/energy loss is calculated using **
** the accurate cross section formula of R.Kokoulin, **
** ( building the tables takes a lot of time, **
** PLEASE BE PATIENT ! ) **
** sampling of the energy of the pair is generated **
** according to the sampling tables. **
** **
****************************************************************
****************************************************************
ExE02PhysicsList::setCuts:CutLength : 1 (mm)
>>> Event 0
Event : 0
mySD/EvenCollection
Number of hits 10
Edep of the first hit 70.7118
mySD/OddCollection
Number of hits 48
Edep of the first hit 44.5668
>>> Event 1
Event : 1
mySD/EvenCollection
Number of hits 36
Edep of the first hit 22.3181
mySD/OddCollection
Number of hits 25
Edep of the first hit 41.5939
>>> Event 2
Event : 2
mySD/EvenCollection
Number of hits 12
Edep of the first hit 28.0978
mySD/OddCollection
Number of hits 52
Edep of the first hit 3.52978
>>> Event 3
Event : 3
mySD/EvenCollection
Number of hits 14
Edep of the first hit 5.96415
mySD/OddCollection
Number of hits 43
Edep of the first hit 3.18537
>>> Event 4
Event : 4
mySD/EvenCollection
Number of hits 7
Edep of the first hit 19.4871
mySD/OddCollection
Number of hits 57
Edep of the first hit 7.21456
>>> Event 5
Event : 5
mySD/EvenCollection
Number of hits 6
Edep of the first hit 1.65209
mySD/OddCollection
Number of hits 51
Edep of the first hit 19.1148
>>> Event 6
Event : 6
mySD/EvenCollection
Number of hits 10
Edep of the first hit 13.4296
mySD/OddCollection
Number of hits 47
Edep of the first hit 62.0367
>>> Event 7
Event : 7
mySD/EvenCollection
Number of hits 6
Edep of the first hit 36.4453
mySD/OddCollection
Number of hits 50
Edep of the first hit 19.1307
>>> Event 8
Event : 8
mySD/EvenCollection
Number of hits 16
Edep of the first hit 2.38804
mySD/OddCollection
Number of hits 52
Edep of the first hit 48.9265
>>> Event 9
Event : 9
mySD/EvenCollection
Number of hits 12
Edep of the first hit 19.3121
mySD/OddCollection
Number of hits 52
Edep of the first hit 11.5742
-43
View File
@@ -1,43 +0,0 @@
#! /bin/csh -f
# setup some variables (example on CERN AFS SUN-CC)
set CWD = `pwd`
set G4ROOT = ${CWD}/../../..
set G4BIN = ${G4ROOT}/bin/SUN-CC
set G4SCHEMA_DIR = ${G4ROOT}/schema
# check some configurations
if ( ! $?G4EXAMPLE_FDID ) then
echo "G4EXAMPLE_FDID is not defined. Stop."
exit 2
endif
if ( ! $?G4EXAMPLE_BOOT ) then
echo "G4EXAMPLE_BOOT is not defined. Stop."
exit 2
endif
if ( ! -e $G4EXAMPLE_BOOT ) then
echo "G4EXAMPLE_BOOT is not found. Run "gmake cleandb" first."
exit 2
endif
# Since the name of the federated database file G4EXAMPLE is hard
# coded into the executable for now, it is neccessary to run it in
# the same directory as $G4EXAMPLE_BOOT.
echo "cd $G4EXAMPLE_BOOT_DIR" ; cd $G4EXAMPLE_BOOT_DIR
if ( $?BACKGROUND ) then
if ( -e exampleE02.log.old ) rm -f exampleE02.log.old
if ( -e exampleE02.log ) mv -f exampleE02.log exampleE02.log.old
${G4BIN}/exampleE02 ${CWD}/exampleE02.in >& ${CWD}/exampleE02.log &
echo "Job exampleE02 submitted..."
sleep 2
echo "tail -f exampleE02.log"
tail -f ${CWD}/exampleE02.log
else
${G4BIN}/exampleE02 ${CWD}/exampleE02.in
endif
@@ -1,20 +0,0 @@
#ifndef ExE02DetectorConstruction_h
#define ExE02DetectorConstruction_h 1
#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"
class ExE02DetectorConstruction : public G4VUserDetectorConstruction
{
public:
ExE02DetectorConstruction();
~ExE02DetectorConstruction();
public:
G4VPhysicalVolume* Construct();
};
#endif
@@ -1,25 +0,0 @@
#ifndef ExE02PrimaryGeneratorAction_h
#define ExE02PrimaryGeneratorAction_h 1
#include "G4VUserPrimaryGeneratorAction.hh"
class G4ParticleGun;
class G4Event;
class ExE02PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
ExE02PrimaryGeneratorAction();
~ExE02PrimaryGeneratorAction();
public:
void GeneratePrimaries(G4Event* anEvent);
private:
G4ParticleGun* particleGun;
};
#endif
@@ -1,60 +0,0 @@
#ifndef ExE02TrackerHit_h
#define ExE02TrackerHit_h 1
#include "G4VHit.hh"
#include "G4THitsCollection.hh"
#include "G4Allocator.hh"
#include "G4ThreeVector.hh"
class ExE02TrackerHit : public G4VHit
{
public:
ExE02TrackerHit();
~ExE02TrackerHit();
ExE02TrackerHit(const ExE02TrackerHit &right);
const ExE02TrackerHit& operator=(const ExE02TrackerHit &right);
int operator==(const ExE02TrackerHit &right) const;
inline void *operator new(size_t);
inline void operator delete(void *aHit);
void Draw();
void Print();
private:
G4double edep;
G4ThreeVector pos;
public:
inline void SetEdep(G4double de)
{ edep = de; };
inline G4double GetEdep()
{ return edep; };
inline void SetPos(G4ThreeVector xyz)
{ pos = xyz; };
inline G4ThreeVector GetPos()
{ return pos; };
};
typedef G4THitsCollection<ExE02TrackerHit> ExE02TrackerHitsCollection;
extern G4Allocator<ExE02TrackerHit> ExE02TrackerHitAllocator;
inline void* ExE02TrackerHit::operator new(size_t)
{
void *aHit;
aHit = (void *) ExE02TrackerHitAllocator.MallocSingle();
return aHit;
}
inline void ExE02TrackerHit::operator delete(void *aHit)
{
ExE02TrackerHitAllocator.FreeSingle((ExE02TrackerHit*) aHit);
}
#endif
@@ -1,30 +0,0 @@
#ifndef ExE02TrackerSD_h
#define ExE02TrackerSD_h 1
#include "G4VSensitiveDetector.hh"
#include "ExE02TrackerHit.hh"
#include "G4Step.hh"
class ExE02TrackerSD : public G4VSensitiveDetector
{
public:
ExE02TrackerSD(G4String name);
~ExE02TrackerSD();
void Initialize(G4HCofThisEvent*HCE);
G4bool ProcessHits(G4Step*aStep,G4TouchableHistory*ROhist);
void EndOfEvent(G4HCofThisEvent*HCE);
void clear();
void DrawAll();
void PrintAll();
private:
ExE02TrackerHitsCollection *EvenCollection;
ExE02TrackerHitsCollection *OddCollection;
};
#endif
@@ -1,53 +0,0 @@
#include "ExE02EventAction.hh"
#include "ExE02TrackerHit.hh"
#include "G4Event.hh"
#include "G4EventManager.hh"
#include "G4HCofThisEvent.hh"
#include "G4VHitsCollection.hh"
#include "G4SDManager.hh"
#include "G4ios.hh"
ExE02EventAction::ExE02EventAction()
{
colID1 = -1;
colID2 = -1;
}
ExE02EventAction::~ExE02EventAction()
{;}
void ExE02EventAction::BeginOfEventAction(const G4Event* )
{
if(colID1<0||colID2<0)
{
G4SDManager * SDman = G4SDManager::GetSDMpointer();
G4String colNam;
colID1 = SDman->GetCollectionID(colNam="EvenCollection");
colID2 = SDman->GetCollectionID(colNam="OddCollection");
}
}
void ExE02EventAction::EndOfEventAction(const G4Event* evt)
{
G4cout << ">>> Event " << evt->GetEventID() << endl;
G4HCofThisEvent * HCE = evt->GetHCofThisEvent();
ExE02TrackerHitsCollection * pTHC1
= (ExE02TrackerHitsCollection*)(HCE->GetHC(colID1));
ExE02TrackerHitsCollection * pTHC2
= (ExE02TrackerHitsCollection*)(HCE->GetHC(colID2));
G4cout << "Event : " << evt->GetEventID() << endl;
G4cout << pTHC1->GetSDname() << "/" << pTHC1->GetName() << endl;
G4cout << "Number of hits " << pTHC1->entries() << endl;
G4cout << " Edep of the first Hit " << (*pTHC1)[0]->GetEdep() << endl;
G4cout << pTHC2->GetSDname() << "/" << pTHC2->GetName() << endl;
G4cout << "Number of hits " << pTHC2->entries() << endl;
G4cout << " Edep of the first Hit " << (*pTHC2)[0]->GetEdep() << endl;
}
@@ -1,38 +0,0 @@
#include "ExE02TrackerHit.hh"
G4Allocator<ExE02TrackerHit> ExE02TrackerHitAllocator;
ExE02TrackerHit::ExE02TrackerHit()
{;}
ExE02TrackerHit::~ExE02TrackerHit()
{;}
ExE02TrackerHit::ExE02TrackerHit(const ExE02TrackerHit &right)
{
edep = right.edep;
pos = right.pos;
}
const ExE02TrackerHit& ExE02TrackerHit::operator=(const ExE02TrackerHit &right)
{
edep = right.edep;
pos = right.pos;
return *this;
}
int ExE02TrackerHit::operator==(const ExE02TrackerHit &right) const
{
return 0;
}
void ExE02TrackerHit::Draw()
{
}
void ExE02TrackerHit::Print()
{
}
-17
View File
@@ -1,17 +0,0 @@
# $Id: GNUmakefile,v 1.1 1999/01/07 16:05:24 gunter Exp $
# --------------------------------------------------------------
# GNUmakefile for tests module. Gabriele Cosmo, 27/06/98.
# --------------------------------------------------------------
name := exampleE03
G4TARGET := $(name)
G4EXLIB := true
ifndef G4INSTALL
G4INSTALL = ../../..
endif
.PHONY: all
all: lib bin
include $(G4INSTALL)/config/binmake.gmk
-35
View File
@@ -1,35 +0,0 @@
$Id: History,v 1.2 1999/04/17 05:27:10 kurasige Exp $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
Extended Example 03 History file
------------------------------
This file should be used by the test developer to briefly
summarize all major modifications introduced in the code and keep
track of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
17 Apr., 1999 H.Kurashige
- Modify SetCuts() and ConstructParticle() in ExE03PhysicsList
- Modify BeginOfRunAction() and EndOfRunAction() in ExE03RunAction
14th October 1998 John Allison
- Moved from N09.
21st August 1998 John Allison
- Renamed files N09* to ExN09*.
9th August 1998 John Allison
- Changed G4UIterminal to G4UIGAG.
7th August 1998 John Allison
- Moved from test05.
June 27, 98 G. Cosmo
- Created.
-19
View File
@@ -1,19 +0,0 @@
$Id: README,v 1.1 1999/01/07 16:05:25 gunter Exp $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
ExampleN09
----------
Jari Sulkimo
31/10/97
This is an example using particle tracking in STEP CAD-models
from the CMS detector project. The model can be changed
by substituting the model name in the Parameters.txt file's
first line with the other model name in the file.
-52
View File
@@ -1,52 +0,0 @@
// $Id: exampleE03.cc,v 1.1 1999/01/07 16:05:25 gunter Exp $
#include "ExE03DetectorConstruction.hh"
#include "ExE03RunAction.hh"
#include "ExE03PrimaryGeneratorAction.hh"
#include "ExE03PhysicsList.hh"
#include "G4AssemblyCreator.hh"
#include "G4RunManager.hh"
#include "G4UImanager.hh"
#include "G4UIterminal.hh"
int main(int argc,char** argv) {
// Run manager
G4RunManager * runManager = new G4RunManager;
// UserInitialization classes
runManager->SetUserInitialization(new ExE03DetectorConstruction);
runManager->SetUserInitialization(new ExE03PhysicsList);
// UserAction classes
runManager->SetUserAction(new ExE03RunAction);
runManager->SetUserAction(new ExE03PrimaryGeneratorAction);
// User interactions
// Define (G)UI for interactive mode
if(argc==1)
{
// G4UIterminal is a (dumb) terminal.
G4UIsession * session = new G4UIterminal;
session->SessionStart();
delete session;
}
else
// Batch mode
{
G4UImanager * UI = G4UImanager::GetUIpointer();
G4String command = "/control/execute ";
G4String fileName = argv[1];
UI->ApplyCommand(command+fileName);
}
delete runManager;
return 0;
}
-2
View File
@@ -1,2 +0,0 @@
G4Axis2PlacementsCreator default constructor calling G4GeometryTable::RegisterObject(this)
G4Axis2PlacementsCreator default constructor calling G4GeometryTable::RegisterObject(this)
-15
View File
@@ -1,15 +0,0 @@
/control/verbose 0
/tracking/verbose 0
#
# Initialize GEANT4
#
/run/initialize
#
# Run 100 events
#
/run/beamOn 1
#
# Termination
#
exit
File diff suppressed because it is too large Load Diff
@@ -1,42 +0,0 @@
#ifndef ExE03DetectorConstruction_h
#define ExE03DetectorConstruction_h 1
#include "G4PVPlacement.hh"
#include "G4LogicalVolume.hh"
#include "G4Box.hh"
#include "G4Tubs.hh"
#include "G4Timer.hh"
#include "G4Material.hh"
#include "G4Element.hh"
#include "G4VUserDetectorConstruction.hh"
#include "G4Assembly.hh"
#include "G4AssemblyCreator.hh"
#include "globals.hh"
class ExE03DetectorConstruction : public G4VUserDetectorConstruction
{
public:
ExE03DetectorConstruction();
~ExE03DetectorConstruction();
public:
G4VPhysicalVolume* Construct();
private:
G4double expHall_x;
G4double expHall_y;
G4double expHall_z;
G4double calBox_x;
G4double calBox_y;
G4double calBox_z;
G4double rotAngle;
G4double calPos;
G4double trackerRadius;
G4double trackerHight;
G4double trackerPos;
};
#endif
@@ -1,25 +0,0 @@
#ifndef ExE03PrimaryGeneratorAction_h
#define ExE03PrimaryGeneratorAction_h 1
#include "G4VUserPrimaryGeneratorAction.hh"
class G4ParticleGun;
class G4Event;
class ExE03PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
ExE03PrimaryGeneratorAction();
~ExE03PrimaryGeneratorAction();
public:
void GeneratePrimaries(G4Event* anEvent);
private:
G4ParticleGun* particleGun;
};
#endif
@@ -1,33 +0,0 @@
#ifndef ExE03RunAction_h
#define ExE03RunAction_h 1
#include "G4UserRunAction.hh"
#include "G4Timer.hh"
#include "globals.hh"
class G4Run;
class ExE03RunAction : public G4UserRunAction
{
public:
ExE03RunAction();
virtual ~ExE03RunAction();
public:
virtual void BeginOfRunAction(const G4Run* aRun);
virtual void EndOfRunAction(const G4Run* aRun);
private:
G4Timer* timer;
};
#endif
@@ -1,112 +0,0 @@
#include "ExE03DetectorConstruction.hh"
ExE03DetectorConstruction::ExE03DetectorConstruction()
{
expHall_x = 1111600.*cm;
expHall_y = 1111600.*cm;
expHall_z = 1111600.*cm;
calBox_x = 50.*cm;
calBox_y = 50.*cm;
calBox_z = 50.*cm;
rotAngle = 30.*deg;
calPos = 200.*cm;
trackerRadius = 50.*cm;
trackerHight = 100.*cm;
trackerPos = -200.*cm;
}
ExE03DetectorConstruction::~ExE03DetectorConstruction()
{;}
G4VPhysicalVolume* ExE03DetectorConstruction::Construct()
{
//------------------------------------------------------ materials
G4double a, iz, z, density;
G4String name, symbol;
G4int nel;
a = 14.01*g/mole;
G4Element* elN = new G4Element(name="Nitrogen", symbol="N", iz=7., a);
a = 16.00*g/mole;
G4Element* elO = new G4Element(name="Oxygen", symbol="O", iz=8., a);
density = 1.29e-03*g/cm3;
G4Material* Air = new G4Material(name="Air", density, nel=2);
Air->AddElement(elN, .7);
Air->AddElement(elO, .3);
a = 207.19*g/mole;
density = 11.35*g/cm3;
G4Material* Lead = new G4Material(name="Lead", z=82., a, density);
a = 39.95*g/mole;
density = 1.782e-03*g/cm3;
G4Material* Ar = new G4Material(name="ArgonGas", z=18., a, density);
//------------------------------------------------------ volumes
//------------------------------ experimental hall
G4Box * experimentalHall_box
= new G4Box("expHall_b",expHall_x,expHall_y,expHall_z);
G4LogicalVolume * experimentalHall_log
= new G4LogicalVolume(experimentalHall_box,Air,"expHall_L",0,0,0);
G4VPhysicalVolume * experimentalHall_phys
= new G4PVPlacement(0,G4ThreeVector(),"expHall_P",
experimentalHall_log,0,false,0);
// STEP assembly creation
G4AssemblyCreator MyAC("stepfiles/G4rod_place_asm.stp");
// G4AssemblyCreator MyAC("stepfiles/CMSTracker.Step");
//G4AssemblyCreator MyAC("stepfiles/coil1.Step");
MyAC.ReadStepFile();
STEPentity* ent=0;
MyAC.CreateG4Geometry(*ent);
void *tmp = MyAC.GetCreatedObject();
G4Assembly* assembly = new G4Assembly();
assembly->SetPlacedVector(*(G4PlacedVector*)tmp);
G4PlacedSolid* ps=0;
G4int solids = assembly->GetNumberOfSolids();
for(G4int c=0;c<solids;c++)
{
ps = assembly->GetPlacedSolid(c);
G4LogicalVolume* lv = new G4LogicalVolume(ps->GetSolid(),
Lead,
"STEPlog");
HepRotation* hr = ps->GetRotation();
G4ThreeVector* tr = ps->GetTranslation();
new G4PVPlacement(hr,
*tr,
ps->GetSolid()->GetName(),
lv,
experimentalHall_phys,
false,
c);
}
return experimentalHall_phys;
}
@@ -1,40 +0,0 @@
#include "ExE03PrimaryGeneratorAction.hh"
#include "G4Event.hh"
#include "G4ParticleGun.hh"
#include "G4ParticleTable.hh"
#include "G4ParticleDefinition.hh"
#include "globals.hh"
ExE03PrimaryGeneratorAction::ExE03PrimaryGeneratorAction()
{
G4int n_particle = 1;
particleGun = new G4ParticleGun(n_particle);
}
ExE03PrimaryGeneratorAction::~ExE03PrimaryGeneratorAction()
{
delete particleGun;
}
void ExE03PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4String particleName;
G4ParticleDefinition* particle
= particleTable->FindParticle(particleName="e-");
particleGun->SetParticleDefinition(particle);
particleGun->SetParticleMomentumDirection(G4ThreeVector(1.,0.,0.));
particleGun->SetParticleEnergy(20.*MeV);
particleGun->SetParticlePosition(G4ThreeVector(0,0,0));
particleGun->GeneratePrimaryVertex(anEvent);
}
@@ -1,34 +0,0 @@
#include "ExE03RunAction.hh"
#include "G4Run.hh"
#include "G4UImanager.hh"
#include "G4ios.hh"
ExE03RunAction::ExE03RunAction()
{
timer = new G4Timer;
}
ExE03RunAction::~ExE03RunAction()
{
delete timer;
}
void ExE03RunAction::BeginOfRunAction(const G4Run* aRun)
{
G4UImanager* UI = G4UImanager::GetUIpointer();
UI->ApplyCommand("/event/Verbose 1");
UI->ApplyCommand("/tracking/Verbose 1");
G4cout << "### Run " << aRun->GetRunID() << " start." << endl;
timer->Start();
}
void ExE03RunAction::EndOfRunAction(const G4Run* aRun)
{
timer->Stop();
G4cout << "number of event = " << aRun->GetNumberOfEvent()
<< " " << *timer << endl;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,980 +0,0 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION((''),'1');
FILE_NAME('ROD_PLACE_ASM','1998-02-27T10:19:15',('oriunno'),(''),'PRO/ENGINEER BY PARAMETRIC TECHNOLOGY CORPORATION, 9718','PRO/ENGINEER BY PARAMETRIC TECHNOLOGY CORPORATION, 9718','');
FILE_SCHEMA(('CONFIG_CONTROL_DESIGN'));
ENDSEC;
DATA;
#1=DIRECTION('',(1.E0,0.E0,0.E0));
#2=VECTOR('',#1,2.41E3);
#3=CARTESIAN_POINT('',(-1.205E3,-7.E0,-7.8E1));
#4=LINE('',#3,#2);
#5=DIRECTION('',(0.E0,0.E0,-1.E0));
#6=VECTOR('',#5,1.4E1);
#7=CARTESIAN_POINT('',(-1.205E3,-7.E0,-6.4E1));
#8=LINE('',#7,#6);
#9=DIRECTION('',(0.E0,1.E0,0.E0));
#10=VECTOR('',#9,1.6E1);
#11=CARTESIAN_POINT('',(-1.205E3,-7.E0,-7.8E1));
#12=LINE('',#11,#10);
#13=DIRECTION('',(0.E0,0.E0,1.E0));
#14=VECTOR('',#13,1.4E1);
#15=CARTESIAN_POINT('',(-1.205E3,9.E0,-7.8E1));
#16=LINE('',#15,#14);
#17=DIRECTION('',(0.E0,-1.E0,0.E0));
#18=VECTOR('',#17,1.5E0);
#19=CARTESIAN_POINT('',(-1.205E3,9.E0,-6.4E1));
#20=LINE('',#19,#18);
#21=DIRECTION('',(0.E0,0.E0,1.E0));
#22=VECTOR('',#21,1.25E1);
#23=CARTESIAN_POINT('',(-1.205E3,7.5E0,-7.65E1));
#24=LINE('',#23,#22);
#25=DIRECTION('',(0.E0,1.E0,0.E0));
#26=VECTOR('',#25,1.3E1);
#27=CARTESIAN_POINT('',(-1.205E3,-5.5E0,-7.65E1));
#28=LINE('',#27,#26);
#29=DIRECTION('',(0.E0,0.E0,-1.E0));
#30=VECTOR('',#29,1.25E1);
#31=CARTESIAN_POINT('',(-1.205E3,-5.5E0,-6.4E1));
#32=LINE('',#31,#30);
#33=DIRECTION('',(0.E0,-1.E0,0.E0));
#34=VECTOR('',#33,1.5E0);
#35=CARTESIAN_POINT('',(-1.205E3,-5.5E0,-6.4E1));
#36=LINE('',#35,#34);
#37=DIRECTION('',(1.E0,0.E0,0.E0));
#38=VECTOR('',#37,2.41E3);
#39=CARTESIAN_POINT('',(-1.205E3,-7.E0,-6.4E1));
#40=LINE('',#39,#38);
#41=DIRECTION('',(1.E0,0.E0,0.E0));
#42=VECTOR('',#41,2.41E3);
#43=CARTESIAN_POINT('',(-1.205E3,9.E0,-6.4E1));
#44=LINE('',#43,#42);
#45=DIRECTION('',(1.E0,0.E0,0.E0));
#46=VECTOR('',#45,2.41E3);
#47=CARTESIAN_POINT('',(-1.205E3,7.5E0,-6.4E1));
#48=LINE('',#47,#46);
#49=DIRECTION('',(1.E0,0.E0,0.E0));
#50=VECTOR('',#49,2.41E3);
#51=CARTESIAN_POINT('',(-1.205E3,-5.5E0,-6.4E1));
#52=LINE('',#51,#50);
#53=DIRECTION('',(1.E0,0.E0,0.E0));
#54=VECTOR('',#53,2.41E3);
#55=CARTESIAN_POINT('',(-1.205E3,-5.5E0,-7.65E1));
#56=LINE('',#55,#54);
#57=DIRECTION('',(1.E0,0.E0,0.E0));
#58=VECTOR('',#57,2.41E3);
#59=CARTESIAN_POINT('',(-1.205E3,7.5E0,-7.65E1));
#60=LINE('',#59,#58);
#61=DIRECTION('',(0.E0,0.E0,1.E0));
#62=VECTOR('',#61,1.4E1);
#63=CARTESIAN_POINT('',(1.205E3,9.E0,-7.8E1));
#64=LINE('',#63,#62);
#65=DIRECTION('',(0.E0,1.E0,0.E0));
#66=VECTOR('',#65,1.6E1);
#67=CARTESIAN_POINT('',(1.205E3,-7.E0,-7.8E1));
#68=LINE('',#67,#66);
#69=DIRECTION('',(0.E0,0.E0,-1.E0));
#70=VECTOR('',#69,1.4E1);
#71=CARTESIAN_POINT('',(1.205E3,-7.E0,-6.4E1));
#72=LINE('',#71,#70);
#73=DIRECTION('',(0.E0,-1.E0,0.E0));
#74=VECTOR('',#73,1.5E0);
#75=CARTESIAN_POINT('',(1.205E3,-5.5E0,-6.4E1));
#76=LINE('',#75,#74);
#77=DIRECTION('',(0.E0,0.E0,-1.E0));
#78=VECTOR('',#77,1.25E1);
#79=CARTESIAN_POINT('',(1.205E3,-5.5E0,-6.4E1));
#80=LINE('',#79,#78);
#81=DIRECTION('',(0.E0,1.E0,0.E0));
#82=VECTOR('',#81,1.3E1);
#83=CARTESIAN_POINT('',(1.205E3,-5.5E0,-7.65E1));
#84=LINE('',#83,#82);
#85=DIRECTION('',(0.E0,0.E0,1.E0));
#86=VECTOR('',#85,1.25E1);
#87=CARTESIAN_POINT('',(1.205E3,7.5E0,-7.65E1));
#88=LINE('',#87,#86);
#89=DIRECTION('',(0.E0,-1.E0,0.E0));
#90=VECTOR('',#89,1.5E0);
#91=CARTESIAN_POINT('',(1.205E3,9.E0,-6.4E1));
#92=LINE('',#91,#90);
#93=DIRECTION('',(1.E0,0.E0,0.E0));
#94=VECTOR('',#93,2.41E3);
#95=CARTESIAN_POINT('',(-1.205E3,9.E0,-7.8E1));
#96=LINE('',#95,#94);
#97=CARTESIAN_POINT('',(-1.205E3,-7.E0,-7.8E1));
#98=CARTESIAN_POINT('',(-1.205E3,9.E0,-7.8E1));
#99=VERTEX_POINT('','',#97);
#100=VERTEX_POINT('','',#98);
#101=CARTESIAN_POINT('',(-1.205E3,9.E0,-6.4E1));
#102=VERTEX_POINT('','',#101);
#103=CARTESIAN_POINT('',(-1.205E3,-7.E0,-6.4E1));
#104=VERTEX_POINT('','',#103);
#105=CARTESIAN_POINT('',(1.205E3,-7.E0,-7.8E1));
#106=CARTESIAN_POINT('',(1.205E3,9.E0,-7.8E1));
#107=VERTEX_POINT('','',#105);
#108=VERTEX_POINT('','',#106);
#109=CARTESIAN_POINT('',(1.205E3,9.E0,-6.4E1));
#110=VERTEX_POINT('','',#109);
#111=CARTESIAN_POINT('',(1.205E3,-7.E0,-6.4E1));
#112=VERTEX_POINT('','',#111);
#113=CARTESIAN_POINT('',(-1.205E3,-5.5E0,-7.65E1));
#114=CARTESIAN_POINT('',(-1.205E3,7.5E0,-7.65E1));
#115=VERTEX_POINT('','',#113);
#116=VERTEX_POINT('','',#114);
#117=CARTESIAN_POINT('',(-1.205E3,7.5E0,-6.4E1));
#118=VERTEX_POINT('','',#117);
#119=CARTESIAN_POINT('',(-1.205E3,-5.5E0,-6.4E1));
#120=VERTEX_POINT('','',#119);
#121=CARTESIAN_POINT('',(1.205E3,-5.5E0,-7.65E1));
#122=CARTESIAN_POINT('',(1.205E3,7.5E0,-7.65E1));
#123=VERTEX_POINT('','',#121);
#124=VERTEX_POINT('','',#122);
#125=CARTESIAN_POINT('',(1.205E3,7.5E0,-6.4E1));
#126=VERTEX_POINT('','',#125);
#127=CARTESIAN_POINT('',(1.205E3,-5.5E0,-6.4E1));
#128=VERTEX_POINT('','',#127);
#129=CARTESIAN_POINT('',(-1.205E3,-7.E0,-7.8E1));
#130=DIRECTION('',(0.E0,0.E0,-1.E0));
#131=DIRECTION('',(0.E0,1.E0,0.E0));
#132=AXIS2_PLACEMENT_3D('',#129,#130,#131);
#133=PLANE('',#132);
#135=ORIENTED_EDGE('',*,*,#134,.F.);
#137=ORIENTED_EDGE('',*,*,#136,.T.);
#139=ORIENTED_EDGE('',*,*,#138,.T.);
#141=ORIENTED_EDGE('',*,*,#140,.F.);
#142=EDGE_LOOP('','',(#135,#137,#139,#141));
#143=FACE_OUTER_BOUND('',#142,.F.);
#144=ADVANCED_FACE('',(#143),'' ,#133,.T.);
#145=CARTESIAN_POINT('',(-1.205E3,0.E0,0.E0));
#146=DIRECTION('',(1.E0,0.E0,0.E0));
#147=DIRECTION('',(0.E0,0.E0,1.E0));
#148=AXIS2_PLACEMENT_3D('',#145,#146,#147);
#149=PLANE('',#148);
#151=ORIENTED_EDGE('',*,*,#150,.T.);
#152=ORIENTED_EDGE('',*,*,#134,.T.);
#154=ORIENTED_EDGE('',*,*,#153,.T.);
#156=ORIENTED_EDGE('',*,*,#155,.T.);
#158=ORIENTED_EDGE('',*,*,#157,.F.);
#160=ORIENTED_EDGE('',*,*,#159,.F.);
#162=ORIENTED_EDGE('',*,*,#161,.F.);
#164=ORIENTED_EDGE('',*,*,#163,.T.);
#165=EDGE_LOOP('','',(#151,#152,#154,#156,#158,#160,#162,#164));
#166=FACE_OUTER_BOUND('',#165,.F.);
#167=ADVANCED_FACE('',(#166),'' ,#149,.F.);
#168=CARTESIAN_POINT('',(-1.205E3,-7.E0,-6.4E1));
#169=DIRECTION('',(0.E0,-1.E0,0.E0));
#170=DIRECTION('',(0.E0,0.E0,-1.E0));
#171=AXIS2_PLACEMENT_3D('',#168,#169,#170);
#172=PLANE('',#171);
#173=ORIENTED_EDGE('',*,*,#150,.F.);
#175=ORIENTED_EDGE('',*,*,#174,.T.);
#177=ORIENTED_EDGE('',*,*,#176,.T.);
#178=ORIENTED_EDGE('',*,*,#136,.F.);
#179=EDGE_LOOP('','',(#173,#175,#177,#178));
#180=FACE_OUTER_BOUND('',#179,.F.);
#181=ADVANCED_FACE('',(#180),'' ,#172,.T.);
#182=CARTESIAN_POINT('',(-1.205E3,9.E0,-6.4E1));
#183=DIRECTION('',(0.E0,0.E0,1.E0));
#184=DIRECTION('',(0.E0,-1.E0,0.E0));
#185=AXIS2_PLACEMENT_3D('',#182,#183,#184);
#186=PLANE('',#185);
#188=ORIENTED_EDGE('',*,*,#187,.T.);
#190=ORIENTED_EDGE('',*,*,#189,.T.);
#191=ORIENTED_EDGE('',*,*,#174,.F.);
#192=ORIENTED_EDGE('',*,*,#163,.F.);
#193=EDGE_LOOP('','',(#188,#190,#191,#192));
#194=FACE_OUTER_BOUND('',#193,.F.);
#195=ADVANCED_FACE('',(#194),'' ,#186,.T.);
#196=CARTESIAN_POINT('',(-1.205E3,9.E0,-6.4E1));
#197=DIRECTION('',(0.E0,0.E0,1.E0));
#198=DIRECTION('',(0.E0,-1.E0,0.E0));
#199=AXIS2_PLACEMENT_3D('',#196,#197,#198);
#200=PLANE('',#199);
#202=ORIENTED_EDGE('',*,*,#201,.T.);
#204=ORIENTED_EDGE('',*,*,#203,.T.);
#206=ORIENTED_EDGE('',*,*,#205,.F.);
#207=ORIENTED_EDGE('',*,*,#155,.F.);
#208=EDGE_LOOP('','',(#202,#204,#206,#207));
#209=FACE_OUTER_BOUND('',#208,.F.);
#210=ADVANCED_FACE('',(#209),'' ,#200,.T.);
#211=CARTESIAN_POINT('',(-1.205E3,-5.5E0,-6.4E1));
#212=DIRECTION('',(0.E0,-1.E0,0.E0));
#213=DIRECTION('',(0.E0,0.E0,-1.E0));
#214=AXIS2_PLACEMENT_3D('',#211,#212,#213);
#215=PLANE('',#214);
#216=ORIENTED_EDGE('',*,*,#161,.T.);
#218=ORIENTED_EDGE('',*,*,#217,.T.);
#220=ORIENTED_EDGE('',*,*,#219,.F.);
#221=ORIENTED_EDGE('',*,*,#187,.F.);
#222=EDGE_LOOP('','',(#216,#218,#220,#221));
#223=FACE_OUTER_BOUND('',#222,.F.);
#224=ADVANCED_FACE('',(#223),'' ,#215,.F.);
#225=CARTESIAN_POINT('',(-1.205E3,-7.E0,-7.65E1));
#226=DIRECTION('',(0.E0,0.E0,-1.E0));
#227=DIRECTION('',(0.E0,1.E0,0.E0));
#228=AXIS2_PLACEMENT_3D('',#225,#226,#227);
#229=PLANE('',#228);
#230=ORIENTED_EDGE('',*,*,#159,.T.);
#232=ORIENTED_EDGE('',*,*,#231,.T.);
#234=ORIENTED_EDGE('',*,*,#233,.F.);
#235=ORIENTED_EDGE('',*,*,#217,.F.);
#236=EDGE_LOOP('','',(#230,#232,#234,#235));
#237=FACE_OUTER_BOUND('',#236,.F.);
#238=ADVANCED_FACE('',(#237),'' ,#229,.F.);
#239=CARTESIAN_POINT('',(-1.205E3,7.5E0,-7.8E1));
#240=DIRECTION('',(0.E0,1.E0,0.E0));
#241=DIRECTION('',(0.E0,0.E0,1.E0));
#242=AXIS2_PLACEMENT_3D('',#239,#240,#241);
#243=PLANE('',#242);
#244=ORIENTED_EDGE('',*,*,#157,.T.);
#245=ORIENTED_EDGE('',*,*,#205,.T.);
#247=ORIENTED_EDGE('',*,*,#246,.F.);
#248=ORIENTED_EDGE('',*,*,#231,.F.);
#249=EDGE_LOOP('','',(#244,#245,#247,#248));
#250=FACE_OUTER_BOUND('',#249,.F.);
#251=ADVANCED_FACE('',(#250),'' ,#243,.F.);
#252=CARTESIAN_POINT('',(1.205E3,0.E0,0.E0));
#253=DIRECTION('',(1.E0,0.E0,0.E0));
#254=DIRECTION('',(0.E0,0.E0,1.E0));
#255=AXIS2_PLACEMENT_3D('',#252,#253,#254);
#256=PLANE('',#255);
#258=ORIENTED_EDGE('',*,*,#257,.F.);
#259=ORIENTED_EDGE('',*,*,#138,.F.);
#260=ORIENTED_EDGE('',*,*,#176,.F.);
#261=ORIENTED_EDGE('',*,*,#189,.F.);
#262=ORIENTED_EDGE('',*,*,#219,.T.);
#263=ORIENTED_EDGE('',*,*,#233,.T.);
#264=ORIENTED_EDGE('',*,*,#246,.T.);
#265=ORIENTED_EDGE('',*,*,#203,.F.);
#266=EDGE_LOOP('','',(#258,#259,#260,#261,#262,#263,#264,#265));
#267=FACE_OUTER_BOUND('',#266,.F.);
#268=ADVANCED_FACE('',(#267),'' ,#256,.T.);
#269=CARTESIAN_POINT('',(-1.205E3,9.E0,-7.8E1));
#270=DIRECTION('',(0.E0,1.E0,0.E0));
#271=DIRECTION('',(0.E0,0.E0,1.E0));
#272=AXIS2_PLACEMENT_3D('',#269,#270,#271);
#273=PLANE('',#272);
#274=ORIENTED_EDGE('',*,*,#153,.F.);
#275=ORIENTED_EDGE('',*,*,#140,.T.);
#276=ORIENTED_EDGE('',*,*,#257,.T.);
#277=ORIENTED_EDGE('',*,*,#201,.F.);
#278=EDGE_LOOP('','',(#274,#275,#276,#277));
#279=FACE_OUTER_BOUND('',#278,.F.);
#280=ADVANCED_FACE('',(#279),'' ,#273,.T.);
#281=CLOSED_SHELL('',(#144,#167,#181,#195,#210,#224,#238,#251,#268,#280));
#282=MANIFOLD_SOLID_BREP('',#281);
#283=DIRECTION('',(1.E0,0.E0,0.E0));
#284=VECTOR('',#283,2.41E3);
#285=CARTESIAN_POINT('',(-1.205E3,9.E0,6.4E1));
#286=LINE('',#285,#284);
#287=DIRECTION('',(0.E0,0.E0,1.E0));
#288=VECTOR('',#287,1.4E1);
#289=CARTESIAN_POINT('',(-1.205E3,9.E0,6.4E1));
#290=LINE('',#289,#288);
#291=DIRECTION('',(0.E0,-1.E0,0.E0));
#292=VECTOR('',#291,1.6E1);
#293=CARTESIAN_POINT('',(-1.205E3,9.E0,7.8E1));
#294=LINE('',#293,#292);
#295=DIRECTION('',(0.E0,0.E0,-1.E0));
#296=VECTOR('',#295,1.4E1);
#297=CARTESIAN_POINT('',(-1.205E3,-7.E0,7.8E1));
#298=LINE('',#297,#296);
#299=DIRECTION('',(0.E0,1.E0,0.E0));
#300=VECTOR('',#299,1.5E0);
#301=CARTESIAN_POINT('',(-1.205E3,-7.E0,6.4E1));
#302=LINE('',#301,#300);
#303=DIRECTION('',(0.E0,0.E0,-1.E0));
#304=VECTOR('',#303,1.25E1);
#305=CARTESIAN_POINT('',(-1.205E3,-5.5E0,7.65E1));
#306=LINE('',#305,#304);
#307=DIRECTION('',(0.E0,-1.E0,0.E0));
#308=VECTOR('',#307,1.3E1);
#309=CARTESIAN_POINT('',(-1.205E3,7.5E0,7.65E1));
#310=LINE('',#309,#308);
#311=DIRECTION('',(0.E0,0.E0,1.E0));
#312=VECTOR('',#311,1.25E1);
#313=CARTESIAN_POINT('',(-1.205E3,7.5E0,6.4E1));
#314=LINE('',#313,#312);
#315=DIRECTION('',(0.E0,1.E0,0.E0));
#316=VECTOR('',#315,1.5E0);
#317=CARTESIAN_POINT('',(-1.205E3,7.5E0,6.4E1));
#318=LINE('',#317,#316);
#319=DIRECTION('',(1.E0,0.E0,0.E0));
#320=VECTOR('',#319,2.41E3);
#321=CARTESIAN_POINT('',(-1.205E3,9.E0,7.8E1));
#322=LINE('',#321,#320);
#323=DIRECTION('',(0.E0,0.E0,-1.E0));
#324=VECTOR('',#323,1.4E1);
#325=CARTESIAN_POINT('',(1.205E3,-7.E0,7.8E1));
#326=LINE('',#325,#324);
#327=DIRECTION('',(0.E0,-1.E0,0.E0));
#328=VECTOR('',#327,1.6E1);
#329=CARTESIAN_POINT('',(1.205E3,9.E0,7.8E1));
#330=LINE('',#329,#328);
#331=DIRECTION('',(0.E0,0.E0,1.E0));
#332=VECTOR('',#331,1.4E1);
#333=CARTESIAN_POINT('',(1.205E3,9.E0,6.4E1));
#334=LINE('',#333,#332);
#335=DIRECTION('',(0.E0,1.E0,0.E0));
#336=VECTOR('',#335,1.5E0);
#337=CARTESIAN_POINT('',(1.205E3,7.5E0,6.4E1));
#338=LINE('',#337,#336);
#339=DIRECTION('',(0.E0,0.E0,1.E0));
#340=VECTOR('',#339,1.25E1);
#341=CARTESIAN_POINT('',(1.205E3,7.5E0,6.4E1));
#342=LINE('',#341,#340);
#343=DIRECTION('',(0.E0,-1.E0,0.E0));
#344=VECTOR('',#343,1.3E1);
#345=CARTESIAN_POINT('',(1.205E3,7.5E0,7.65E1));
#346=LINE('',#345,#344);
#347=DIRECTION('',(0.E0,0.E0,-1.E0));
#348=VECTOR('',#347,1.25E1);
#349=CARTESIAN_POINT('',(1.205E3,-5.5E0,7.65E1));
#350=LINE('',#349,#348);
#351=DIRECTION('',(0.E0,1.E0,0.E0));
#352=VECTOR('',#351,1.5E0);
#353=CARTESIAN_POINT('',(1.205E3,-7.E0,6.4E1));
#354=LINE('',#353,#352);
#355=DIRECTION('',(1.E0,0.E0,0.E0));
#356=VECTOR('',#355,2.41E3);
#357=CARTESIAN_POINT('',(-1.205E3,-7.E0,7.8E1));
#358=LINE('',#357,#356);
#359=DIRECTION('',(1.E0,0.E0,0.E0));
#360=VECTOR('',#359,2.41E3);
#361=CARTESIAN_POINT('',(-1.205E3,-7.E0,6.4E1));
#362=LINE('',#361,#360);
#363=DIRECTION('',(1.E0,0.E0,0.E0));
#364=VECTOR('',#363,2.41E3);
#365=CARTESIAN_POINT('',(-1.205E3,-5.5E0,6.4E1));
#366=LINE('',#365,#364);
#367=DIRECTION('',(1.E0,0.E0,0.E0));
#368=VECTOR('',#367,2.41E3);
#369=CARTESIAN_POINT('',(-1.205E3,7.5E0,6.4E1));
#370=LINE('',#369,#368);
#371=DIRECTION('',(1.E0,0.E0,0.E0));
#372=VECTOR('',#371,2.41E3);
#373=CARTESIAN_POINT('',(-1.205E3,7.5E0,7.65E1));
#374=LINE('',#373,#372);
#375=DIRECTION('',(1.E0,0.E0,0.E0));
#376=VECTOR('',#375,2.41E3);
#377=CARTESIAN_POINT('',(-1.205E3,-5.5E0,7.65E1));
#378=LINE('',#377,#376);
#379=CARTESIAN_POINT('',(-1.205E3,9.E0,6.4E1));
#380=CARTESIAN_POINT('',(-1.205E3,9.E0,7.8E1));
#381=VERTEX_POINT('','',#379);
#382=VERTEX_POINT('','',#380);
#383=CARTESIAN_POINT('',(-1.205E3,-7.E0,7.8E1));
#384=VERTEX_POINT('','',#383);
#385=CARTESIAN_POINT('',(-1.205E3,-7.E0,6.4E1));
#386=VERTEX_POINT('','',#385);
#387=CARTESIAN_POINT('',(1.205E3,9.E0,6.4E1));
#388=CARTESIAN_POINT('',(1.205E3,9.E0,7.8E1));
#389=VERTEX_POINT('','',#387);
#390=VERTEX_POINT('','',#388);
#391=CARTESIAN_POINT('',(1.205E3,-7.E0,7.8E1));
#392=VERTEX_POINT('','',#391);
#393=CARTESIAN_POINT('',(1.205E3,-7.E0,6.4E1));
#394=VERTEX_POINT('','',#393);
#395=CARTESIAN_POINT('',(-1.205E3,7.5E0,6.4E1));
#396=CARTESIAN_POINT('',(-1.205E3,7.5E0,7.65E1));
#397=VERTEX_POINT('','',#395);
#398=VERTEX_POINT('','',#396);
#399=CARTESIAN_POINT('',(-1.205E3,-5.5E0,7.65E1));
#400=VERTEX_POINT('','',#399);
#401=CARTESIAN_POINT('',(-1.205E3,-5.5E0,6.4E1));
#402=VERTEX_POINT('','',#401);
#403=CARTESIAN_POINT('',(1.205E3,7.5E0,6.4E1));
#404=CARTESIAN_POINT('',(1.205E3,7.5E0,7.65E1));
#405=VERTEX_POINT('','',#403);
#406=VERTEX_POINT('','',#404);
#407=CARTESIAN_POINT('',(1.205E3,-5.5E0,7.65E1));
#408=VERTEX_POINT('','',#407);
#409=CARTESIAN_POINT('',(1.205E3,-5.5E0,6.4E1));
#410=VERTEX_POINT('','',#409);
#411=CARTESIAN_POINT('',(-1.205E3,9.E0,6.4E1));
#412=DIRECTION('',(0.E0,1.E0,0.E0));
#413=DIRECTION('',(0.E0,0.E0,1.E0));
#414=AXIS2_PLACEMENT_3D('',#411,#412,#413);
#415=PLANE('',#414);
#417=ORIENTED_EDGE('',*,*,#416,.F.);
#419=ORIENTED_EDGE('',*,*,#418,.T.);
#421=ORIENTED_EDGE('',*,*,#420,.T.);
#423=ORIENTED_EDGE('',*,*,#422,.F.);
#424=EDGE_LOOP('','',(#417,#419,#421,#423));
#425=FACE_OUTER_BOUND('',#424,.F.);
#426=ADVANCED_FACE('',(#425),'' ,#415,.T.);
#427=CARTESIAN_POINT('',(-1.205E3,0.E0,0.E0));
#428=DIRECTION('',(1.E0,0.E0,0.E0));
#429=DIRECTION('',(0.E0,0.E0,1.E0));
#430=AXIS2_PLACEMENT_3D('',#427,#428,#429);
#431=PLANE('',#430);
#432=ORIENTED_EDGE('',*,*,#416,.T.);
#434=ORIENTED_EDGE('',*,*,#433,.T.);
#436=ORIENTED_EDGE('',*,*,#435,.T.);
#438=ORIENTED_EDGE('',*,*,#437,.T.);
#440=ORIENTED_EDGE('',*,*,#439,.F.);
#442=ORIENTED_EDGE('',*,*,#441,.F.);
#444=ORIENTED_EDGE('',*,*,#443,.F.);
#446=ORIENTED_EDGE('',*,*,#445,.T.);
#447=EDGE_LOOP('','',(#432,#434,#436,#438,#440,#442,#444,#446));
#448=FACE_OUTER_BOUND('',#447,.F.);
#449=ADVANCED_FACE('',(#448),'' ,#431,.F.);
#450=CARTESIAN_POINT('',(-1.205E3,9.E0,7.8E1));
#451=DIRECTION('',(0.E0,0.E0,1.E0));
#452=DIRECTION('',(0.E0,-1.E0,0.E0));
#453=AXIS2_PLACEMENT_3D('',#450,#451,#452);
#454=PLANE('',#453);
#455=ORIENTED_EDGE('',*,*,#433,.F.);
#456=ORIENTED_EDGE('',*,*,#422,.T.);
#458=ORIENTED_EDGE('',*,*,#457,.T.);
#460=ORIENTED_EDGE('',*,*,#459,.F.);
#461=EDGE_LOOP('','',(#455,#456,#458,#460));
#462=FACE_OUTER_BOUND('',#461,.F.);
#463=ADVANCED_FACE('',(#462),'' ,#454,.T.);
#464=CARTESIAN_POINT('',(1.205E3,0.E0,0.E0));
#465=DIRECTION('',(1.E0,0.E0,0.E0));
#466=DIRECTION('',(0.E0,0.E0,1.E0));
#467=AXIS2_PLACEMENT_3D('',#464,#465,#466);
#468=PLANE('',#467);
#470=ORIENTED_EDGE('',*,*,#469,.F.);
#471=ORIENTED_EDGE('',*,*,#457,.F.);
#472=ORIENTED_EDGE('',*,*,#420,.F.);
#474=ORIENTED_EDGE('',*,*,#473,.F.);
#476=ORIENTED_EDGE('',*,*,#475,.T.);
#478=ORIENTED_EDGE('',*,*,#477,.T.);
#480=ORIENTED_EDGE('',*,*,#479,.T.);
#482=ORIENTED_EDGE('',*,*,#481,.F.);
#483=EDGE_LOOP('','',(#470,#471,#472,#474,#476,#478,#480,#482));
#484=FACE_OUTER_BOUND('',#483,.F.);
#485=ADVANCED_FACE('',(#484),'' ,#468,.T.);
#486=CARTESIAN_POINT('',(-1.205E3,-7.E0,7.8E1));
#487=DIRECTION('',(0.E0,-1.E0,0.E0));
#488=DIRECTION('',(0.E0,0.E0,-1.E0));
#489=AXIS2_PLACEMENT_3D('',#486,#487,#488);
#490=PLANE('',#489);
#491=ORIENTED_EDGE('',*,*,#435,.F.);
#492=ORIENTED_EDGE('',*,*,#459,.T.);
#493=ORIENTED_EDGE('',*,*,#469,.T.);
#495=ORIENTED_EDGE('',*,*,#494,.F.);
#496=EDGE_LOOP('','',(#491,#492,#493,#495));
#497=FACE_OUTER_BOUND('',#496,.F.);
#498=ADVANCED_FACE('',(#497),'' ,#490,.T.);
#499=CARTESIAN_POINT('',(-1.205E3,-7.E0,6.4E1));
#500=DIRECTION('',(0.E0,0.E0,-1.E0));
#501=DIRECTION('',(0.E0,1.E0,0.E0));
#502=AXIS2_PLACEMENT_3D('',#499,#500,#501);
#503=PLANE('',#502);
#505=ORIENTED_EDGE('',*,*,#504,.T.);
#506=ORIENTED_EDGE('',*,*,#473,.T.);
#507=ORIENTED_EDGE('',*,*,#418,.F.);
#508=ORIENTED_EDGE('',*,*,#445,.F.);
#509=EDGE_LOOP('','',(#505,#506,#507,#508));
#510=FACE_OUTER_BOUND('',#509,.F.);
#511=ADVANCED_FACE('',(#510),'' ,#503,.T.);
#512=CARTESIAN_POINT('',(-1.205E3,-7.E0,6.4E1));
#513=DIRECTION('',(0.E0,0.E0,-1.E0));
#514=DIRECTION('',(0.E0,1.E0,0.E0));
#515=AXIS2_PLACEMENT_3D('',#512,#513,#514);
#516=PLANE('',#515);
#517=ORIENTED_EDGE('',*,*,#494,.T.);
#518=ORIENTED_EDGE('',*,*,#481,.T.);
#520=ORIENTED_EDGE('',*,*,#519,.F.);
#521=ORIENTED_EDGE('',*,*,#437,.F.);
#522=EDGE_LOOP('','',(#517,#518,#520,#521));
#523=FACE_OUTER_BOUND('',#522,.F.);
#524=ADVANCED_FACE('',(#523),'' ,#516,.T.);
#525=CARTESIAN_POINT('',(-1.205E3,7.5E0,6.4E1));
#526=DIRECTION('',(0.E0,1.E0,0.E0));
#527=DIRECTION('',(0.E0,0.E0,1.E0));
#528=AXIS2_PLACEMENT_3D('',#525,#526,#527);
#529=PLANE('',#528);
#530=ORIENTED_EDGE('',*,*,#443,.T.);
#532=ORIENTED_EDGE('',*,*,#531,.T.);
#533=ORIENTED_EDGE('',*,*,#475,.F.);
#534=ORIENTED_EDGE('',*,*,#504,.F.);
#535=EDGE_LOOP('','',(#530,#532,#533,#534));
#536=FACE_OUTER_BOUND('',#535,.F.);
#537=ADVANCED_FACE('',(#536),'' ,#529,.F.);
#538=CARTESIAN_POINT('',(-1.205E3,9.E0,7.65E1));
#539=DIRECTION('',(0.E0,0.E0,1.E0));
#540=DIRECTION('',(0.E0,-1.E0,0.E0));
#541=AXIS2_PLACEMENT_3D('',#538,#539,#540);
#542=PLANE('',#541);
#543=ORIENTED_EDGE('',*,*,#441,.T.);
#545=ORIENTED_EDGE('',*,*,#544,.T.);
#546=ORIENTED_EDGE('',*,*,#477,.F.);
#547=ORIENTED_EDGE('',*,*,#531,.F.);
#548=EDGE_LOOP('','',(#543,#545,#546,#547));
#549=FACE_OUTER_BOUND('',#548,.F.);
#550=ADVANCED_FACE('',(#549),'' ,#542,.F.);
#551=CARTESIAN_POINT('',(-1.205E3,-5.5E0,7.8E1));
#552=DIRECTION('',(0.E0,-1.E0,0.E0));
#553=DIRECTION('',(0.E0,0.E0,-1.E0));
#554=AXIS2_PLACEMENT_3D('',#551,#552,#553);
#555=PLANE('',#554);
#556=ORIENTED_EDGE('',*,*,#439,.T.);
#557=ORIENTED_EDGE('',*,*,#519,.T.);
#558=ORIENTED_EDGE('',*,*,#479,.F.);
#559=ORIENTED_EDGE('',*,*,#544,.F.);
#560=EDGE_LOOP('','',(#556,#557,#558,#559));
#561=FACE_OUTER_BOUND('',#560,.F.);
#562=ADVANCED_FACE('',(#561),'' ,#555,.F.);
#563=CLOSED_SHELL('',(#426,#449,#463,#485,#498,#511,#524,#537,#550,#562));
#564=MANIFOLD_SOLID_BREP('',#563);
#565=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
#566=DIMENSIONAL_EXPONENTS(0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,0.E0);
#567=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
#568=PLANE_ANGLE_MEASURE_WITH_UNIT(PLANE_ANGLE_MEASURE(1.745329251994E-2),#567);
#569=(CONVERSION_BASED_UNIT('DEGREE',#568)NAMED_UNIT(#566)PLANE_ANGLE_UNIT());
#570=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
#571=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.415000081568E-1),#565,'closure','Maximum model space distance between geometric entities at asserted connectivities');
#572=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#571))GLOBAL_UNIT_ASSIGNED_CONTEXT((#565,#569,#570))REPRESENTATION_CONTEXT('ID1','3'));
#573=CARTESIAN_POINT('',(0.E0,0.E0,0.E0));
#574=DIRECTION('',(0.E0,0.E0,1.E0));
#575=DIRECTION('',(1.E0,0.E0,0.E0));
#576=AXIS2_PLACEMENT_3D('',#573,#574,#575);
#578=APPLICATION_CONTEXT('CONFIGURATION CONTROLLED 3D DESIGNS OF MECHANICAL PARTS AND ASSEMBLIES');
#579=APPLICATION_PROTOCOL_DEFINITION('international standard','config_control_design',1994,#578);
#580=DESIGN_CONTEXT('',#578,'design');
#581=MECHANICAL_CONTEXT('',#578,'mechanical');
#582=PRODUCT('ROD','ROD','NOT SPECIFIED',(#581));
#583=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('6','LAST_VERSION',#582,
.MADE.);
#592=CARTESIAN_POINT('',(0.E0,0.E0,0.E0));
#593=DIRECTION('',(0.E0,0.E0,1.E0));
#594=DIRECTION('',(1.E0,0.E0,0.E0));
#595=AXIS2_PLACEMENT_3D('',#592,#593,#594);
#596=ITEM_DEFINED_TRANSFORMATION('','',#595,#576);
#597=(REPRESENTATION_RELATIONSHIP('','',#589,#577)REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#596)SHAPE_REPRESENTATION_RELATIONSHIP());
#598=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#597,#591);
#599=DIRECTION('',(1.E0,0.E0,0.E0));
#600=VECTOR('',#599,3.4E2);
#601=CARTESIAN_POINT('',(-2.E2,-2.25E0,5.25E1));
#602=LINE('',#601,#600);
#603=DIRECTION('',(0.E0,0.E0,-1.E0));
#604=VECTOR('',#603,1.05E2);
#605=CARTESIAN_POINT('',(1.4E2,-2.25E0,5.25E1));
#606=LINE('',#605,#604);
#607=DIRECTION('',(-1.E0,0.E0,0.E0));
#608=VECTOR('',#607,3.4E2);
#609=CARTESIAN_POINT('',(1.4E2,-2.25E0,-5.25E1));
#610=LINE('',#609,#608);
#611=DIRECTION('',(0.E0,0.E0,1.E0));
#612=VECTOR('',#611,1.05E2);
#613=CARTESIAN_POINT('',(-2.E2,-2.25E0,-5.25E1));
#614=LINE('',#613,#612);
#615=DIRECTION('',(0.E0,1.E0,0.E0));
#616=VECTOR('',#615,4.5E0);
#617=CARTESIAN_POINT('',(-2.E2,-2.25E0,5.25E1));
#618=LINE('',#617,#616);
#619=DIRECTION('',(0.E0,1.E0,0.E0));
#620=VECTOR('',#619,4.5E0);
#621=CARTESIAN_POINT('',(-2.E2,-2.25E0,-5.25E1));
#622=LINE('',#621,#620);
#623=DIRECTION('',(0.E0,1.E0,0.E0));
#624=VECTOR('',#623,4.5E0);
#625=CARTESIAN_POINT('',(1.4E2,-2.25E0,-5.25E1));
#626=LINE('',#625,#624);
#627=DIRECTION('',(0.E0,1.E0,0.E0));
#628=VECTOR('',#627,4.5E0);
#629=CARTESIAN_POINT('',(1.4E2,-2.25E0,5.25E1));
#630=LINE('',#629,#628);
#631=DIRECTION('',(1.E0,0.E0,0.E0));
#632=VECTOR('',#631,3.4E2);
#633=CARTESIAN_POINT('',(-2.E2,2.25E0,5.25E1));
#634=LINE('',#633,#632);
#635=DIRECTION('',(0.E0,0.E0,1.E0));
#636=VECTOR('',#635,1.05E2);
#637=CARTESIAN_POINT('',(-2.E2,2.25E0,-5.25E1));
#638=LINE('',#637,#636);
#639=DIRECTION('',(-1.E0,0.E0,0.E0));
#640=VECTOR('',#639,3.4E2);
#641=CARTESIAN_POINT('',(1.4E2,2.25E0,-5.25E1));
#642=LINE('',#641,#640);
#643=DIRECTION('',(0.E0,0.E0,-1.E0));
#644=VECTOR('',#643,1.05E2);
#645=CARTESIAN_POINT('',(1.4E2,2.25E0,5.25E1));
#646=LINE('',#645,#644);
#647=CARTESIAN_POINT('',(-2.E2,-2.25E0,5.25E1));
#648=CARTESIAN_POINT('',(1.4E2,-2.25E0,5.25E1));
#649=VERTEX_POINT('','',#647);
#650=VERTEX_POINT('','',#648);
#651=CARTESIAN_POINT('',(1.4E2,-2.25E0,-5.25E1));
#652=VERTEX_POINT('','',#651);
#653=CARTESIAN_POINT('',(-2.E2,-2.25E0,-5.25E1));
#654=VERTEX_POINT('','',#653);
#655=CARTESIAN_POINT('',(-2.E2,2.25E0,5.25E1));
#656=CARTESIAN_POINT('',(1.4E2,2.25E0,5.25E1));
#657=VERTEX_POINT('','',#655);
#658=VERTEX_POINT('','',#656);
#659=CARTESIAN_POINT('',(1.4E2,2.25E0,-5.25E1));
#660=VERTEX_POINT('','',#659);
#661=CARTESIAN_POINT('',(-2.E2,2.25E0,-5.25E1));
#662=VERTEX_POINT('','',#661);
#663=CARTESIAN_POINT('',(0.E0,-2.25E0,0.E0));
#664=DIRECTION('',(0.E0,1.E0,0.E0));
#665=DIRECTION('',(0.E0,0.E0,-1.E0));
#666=AXIS2_PLACEMENT_3D('',#663,#664,#665);
#667=PLANE('',#666);
#669=ORIENTED_EDGE('',*,*,#668,.T.);
#671=ORIENTED_EDGE('',*,*,#670,.T.);
#673=ORIENTED_EDGE('',*,*,#672,.T.);
#675=ORIENTED_EDGE('',*,*,#674,.T.);
#676=EDGE_LOOP('','',(#669,#671,#673,#675));
#677=FACE_OUTER_BOUND('',#676,.F.);
#678=ADVANCED_FACE('',(#677),'' ,#667,.F.);
#679=CARTESIAN_POINT('',(-2.E2,-2.25E0,5.25E1));
#680=DIRECTION('',(0.E0,0.E0,1.E0));
#681=DIRECTION('',(1.E0,0.E0,0.E0));
#682=AXIS2_PLACEMENT_3D('',#679,#680,#681);
#683=PLANE('',#682);
#684=ORIENTED_EDGE('',*,*,#668,.F.);
#686=ORIENTED_EDGE('',*,*,#685,.T.);
#688=ORIENTED_EDGE('',*,*,#687,.T.);
#690=ORIENTED_EDGE('',*,*,#689,.F.);
#691=EDGE_LOOP('','',(#684,#686,#688,#690));
#692=FACE_OUTER_BOUND('',#691,.F.);
#693=ADVANCED_FACE('',(#692),'' ,#683,.T.);
#694=CARTESIAN_POINT('',(-2.E2,-2.25E0,-5.25E1));
#695=DIRECTION('',(-1.E0,0.E0,0.E0));
#696=DIRECTION('',(0.E0,0.E0,1.E0));
#697=AXIS2_PLACEMENT_3D('',#694,#695,#696);
#698=PLANE('',#697);
#699=ORIENTED_EDGE('',*,*,#674,.F.);
#701=ORIENTED_EDGE('',*,*,#700,.T.);
#703=ORIENTED_EDGE('',*,*,#702,.T.);
#704=ORIENTED_EDGE('',*,*,#685,.F.);
#705=EDGE_LOOP('','',(#699,#701,#703,#704));
#706=FACE_OUTER_BOUND('',#705,.F.);
#707=ADVANCED_FACE('',(#706),'' ,#698,.T.);
#708=CARTESIAN_POINT('',(1.4E2,-2.25E0,-5.25E1));
#709=DIRECTION('',(0.E0,0.E0,-1.E0));
#710=DIRECTION('',(-1.E0,0.E0,0.E0));
#711=AXIS2_PLACEMENT_3D('',#708,#709,#710);
#712=PLANE('',#711);
#713=ORIENTED_EDGE('',*,*,#672,.F.);
#715=ORIENTED_EDGE('',*,*,#714,.T.);
#717=ORIENTED_EDGE('',*,*,#716,.T.);
#718=ORIENTED_EDGE('',*,*,#700,.F.);
#719=EDGE_LOOP('','',(#713,#715,#717,#718));
#720=FACE_OUTER_BOUND('',#719,.F.);
#721=ADVANCED_FACE('',(#720),'' ,#712,.T.);
#722=CARTESIAN_POINT('',(1.4E2,-2.25E0,5.25E1));
#723=DIRECTION('',(1.E0,0.E0,0.E0));
#724=DIRECTION('',(0.E0,0.E0,-1.E0));
#725=AXIS2_PLACEMENT_3D('',#722,#723,#724);
#726=PLANE('',#725);
#727=ORIENTED_EDGE('',*,*,#670,.F.);
#728=ORIENTED_EDGE('',*,*,#689,.T.);
#730=ORIENTED_EDGE('',*,*,#729,.T.);
#731=ORIENTED_EDGE('',*,*,#714,.F.);
#732=EDGE_LOOP('','',(#727,#728,#730,#731));
#733=FACE_OUTER_BOUND('',#732,.F.);
#734=ADVANCED_FACE('',(#733),'' ,#726,.T.);
#735=CARTESIAN_POINT('',(0.E0,2.25E0,0.E0));
#736=DIRECTION('',(0.E0,1.E0,0.E0));
#737=DIRECTION('',(0.E0,0.E0,-1.E0));
#738=AXIS2_PLACEMENT_3D('',#735,#736,#737);
#739=PLANE('',#738);
#740=ORIENTED_EDGE('',*,*,#687,.F.);
#741=ORIENTED_EDGE('',*,*,#702,.F.);
#742=ORIENTED_EDGE('',*,*,#716,.F.);
#743=ORIENTED_EDGE('',*,*,#729,.F.);
#744=EDGE_LOOP('','',(#740,#741,#742,#743));
#745=FACE_OUTER_BOUND('',#744,.F.);
#746=ADVANCED_FACE('',(#745),'' ,#739,.T.);
#747=CLOSED_SHELL('',(#678,#693,#707,#721,#734,#746));
#748=MANIFOLD_SOLID_BREP('',#747);
#749=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
#750=DIMENSIONAL_EXPONENTS(0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,0.E0);
#751=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
#752=PLANE_ANGLE_MEASURE_WITH_UNIT(PLANE_ANGLE_MEASURE(1.745329251994E-2),#751);
#753=(CONVERSION_BASED_UNIT('DEGREE',#752)NAMED_UNIT(#750)PLANE_ANGLE_UNIT());
#754=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
#755=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.415000081568E-1),#749,'closure','Maximum model space distance between geometric entities at asserted connectivities');
#756=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#755))GLOBAL_UNIT_ASSIGNED_CONTEXT((#749,#753,#754))REPRESENTATION_CONTEXT('ID2','3'));
#757=CARTESIAN_POINT('',(0.E0,0.E0,0.E0));
#758=DIRECTION('',(0.E0,0.E0,1.E0));
#759=DIRECTION('',(1.E0,0.E0,0.E0));
#760=AXIS2_PLACEMENT_3D('',#757,#758,#759);
#762=APPLICATION_CONTEXT('CONFIGURATION CONTROLLED 3D DESIGNS OF MECHANICAL PARTS AND ASSEMBLIES');
#763=APPLICATION_PROTOCOL_DEFINITION('international standard','config_control_design',1994,#762);
#764=DESIGN_CONTEXT('',#762,'design');
#765=MECHANICAL_CONTEXT('',#762,'mechanical');
#766=PRODUCT('MODULE','MODULE','NOT SPECIFIED',(#765));
#767=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('5','LAST_VERSION',#766,.MADE.);
#773=CARTESIAN_POINT('',(1.E3,0.E0,0.E0));
#774=DIRECTION('',(0.E0,0.E0,1.E0));
#775=DIRECTION('',(1.E0,0.E0,0.E0));
#776=AXIS2_PLACEMENT_3D('',#773,#774,#775);
#777=ITEM_DEFINED_TRANSFORMATION('','',#776,#760);
#778=(REPRESENTATION_RELATIONSHIP('','',#589,#761)REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#777)SHAPE_REPRESENTATION_RELATIONSHIP());
#779=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#778,#772);
#782=CARTESIAN_POINT('',(6.E2,0.E0,0.E0));
#783=DIRECTION('',(0.E0,0.E0,1.E0));
#784=DIRECTION('',(1.E0,0.E0,0.E0));
#785=AXIS2_PLACEMENT_3D('',#782,#783,#784);
#786=ITEM_DEFINED_TRANSFORMATION('','',#785,#760);
#787=(REPRESENTATION_RELATIONSHIP('','',#589,#761)REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#786)SHAPE_REPRESENTATION_RELATIONSHIP());
#788=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#787,#781);
#791=CARTESIAN_POINT('',(2.E2,0.E0,0.E0));
#792=DIRECTION('',(0.E0,0.E0,1.E0));
#793=DIRECTION('',(1.E0,0.E0,0.E0));
#794=AXIS2_PLACEMENT_3D('',#791,#792,#793);
#795=ITEM_DEFINED_TRANSFORMATION('','',#794,#760);
#796=(REPRESENTATION_RELATIONSHIP('','',#589,#761)REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#795)SHAPE_REPRESENTATION_RELATIONSHIP());
#797=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#796,#790);
#800=CARTESIAN_POINT('',(-2.E2,0.E0,0.E0));
#801=DIRECTION('',(0.E0,0.E0,1.E0));
#802=DIRECTION('',(1.E0,0.E0,0.E0));
#803=AXIS2_PLACEMENT_3D('',#800,#801,#802);
#804=ITEM_DEFINED_TRANSFORMATION('','',#803,#760);
#805=(REPRESENTATION_RELATIONSHIP('','',#589,#761)REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#804)SHAPE_REPRESENTATION_RELATIONSHIP());
#806=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#805,#799);
#809=CARTESIAN_POINT('',(-6.E2,0.E0,0.E0));
#810=DIRECTION('',(0.E0,0.E0,1.E0));
#811=DIRECTION('',(1.E0,0.E0,0.E0));
#812=AXIS2_PLACEMENT_3D('',#809,#810,#811);
#813=ITEM_DEFINED_TRANSFORMATION('','',#812,#760);
#814=(REPRESENTATION_RELATIONSHIP('','',#589,#761)REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#813)SHAPE_REPRESENTATION_RELATIONSHIP());
#815=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#814,#808);
#818=CARTESIAN_POINT('',(-1.E3,0.E0,0.E0));
#819=DIRECTION('',(0.E0,0.E0,1.E0));
#820=DIRECTION('',(1.E0,0.E0,0.E0));
#821=AXIS2_PLACEMENT_3D('',#818,#819,#820);
#822=ITEM_DEFINED_TRANSFORMATION('','',#821,#760);
#823=(REPRESENTATION_RELATIONSHIP('','',#589,#761)REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#822)SHAPE_REPRESENTATION_RELATIONSHIP());
#824=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#823,#817);
#825=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
#826=DIMENSIONAL_EXPONENTS(0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,0.E0);
#827=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
#828=PLANE_ANGLE_MEASURE_WITH_UNIT(PLANE_ANGLE_MEASURE(1.745329251994E-2),#827);
#829=(CONVERSION_BASED_UNIT('DEGREE',#828)NAMED_UNIT(#826)PLANE_ANGLE_UNIT());
#830=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
#831=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.415000081568E-1),#825,'closure','Maximum model space distance between geometric entities at asserted connectivities');
#832=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT(
(#831))GLOBAL_UNIT_ASSIGNED_CONTEXT((#825,#829,#830))REPRESENTATION_CONTEXT
('ID3','3'));
#833=APPLICATION_CONTEXT
('CONFIGURATION CONTROLLED 3D DESIGNS OF MECHANICAL PARTS AND ASSEMBLIES');
#834=APPLICATION_PROTOCOL_DEFINITION('international standard',
'config_control_design',1994,#833);
#835=DESIGN_CONTEXT('',#833,'design');
#836=MECHANICAL_CONTEXT('',#833,'mechanical');
#837=PRODUCT('ROD_PLACE_ASM','ROD_PLACE_ASM','NOT SPECIFIED',(#836));
#838=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('1','LAST_VERSION',#837,.MADE.);
#840=PRODUCT_CATEGORY('part','');
#841=PRODUCT_RELATED_PRODUCT_CATEGORY('assembly','',(#837));
#842=PRODUCT_CATEGORY_RELATIONSHIP('','',#840,#841);
#843=PRODUCT_CATEGORY('part','');
#844=PRODUCT_RELATED_PRODUCT_CATEGORY('detail','',(#582,#766));
#845=PRODUCT_CATEGORY_RELATIONSHIP('','',#843,#844);
#846=SECURITY_CLASSIFICATION_LEVEL('unclassified');
#847=SECURITY_CLASSIFICATION('','',#846);
#848=CC_DESIGN_SECURITY_CLASSIFICATION(#847,(#583,#767,#838,#590,#771,#780,#789,#798,#807,#816));
#849=APPROVAL_STATUS('approved');
#850=APPROVAL(#849,'');
#851=CC_DESIGN_APPROVAL(#850,(#847,#583,#767,#838,#584,#768,#839));
#852=CALENDAR_DATE(98,27,2);
#853=COORDINATED_UNIVERSAL_TIME_OFFSET(1,0,.AHEAD.);
#854=LOCAL_TIME(10,19,1.5E1,#853);
#855=DATE_AND_TIME(#852,#854);
#856=APPROVAL_DATE_TIME(#855,#850);
#857=DATE_TIME_ROLE('creation_date');
#858=CC_DESIGN_DATE_AND_TIME_ASSIGNMENT(#855,#857,(#584,#768,#839));
#859=DATE_TIME_ROLE('classification_date');
#860=CC_DESIGN_DATE_AND_TIME_ASSIGNMENT(#855,#859,(#847));
#861=PERSON('UNSPECIFIED','UNSPECIFIED',$,$,$,$);
#862=ORGANIZATION('UNSPECIFIED','UNSPECIFIED','UNSPECIFIED');
#863=PERSON_AND_ORGANIZATION(#861,#862);
#864=APPROVAL_ROLE('approver');
#865=APPROVAL_PERSON_ORGANIZATION(#863,#850,#864);
#866=PERSON_AND_ORGANIZATION_ROLE('creator');
#867=CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT(#863,#866,(#583,#767,#838,#584,#768,#839));
#868=PERSON_AND_ORGANIZATION_ROLE('design_supplier');
#869=CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT(#863,#868,(#583,#767,#838));
#870=PERSON_AND_ORGANIZATION_ROLE('classification_officer');
#871=CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT(#863,#870,(#847));
#872=PERSON_AND_ORGANIZATION_ROLE('design_owner');
#873=CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT(#863,#872,(#837,#582,#766));
#134=EDGE_CURVE('', #99,#100,'',#12,.T.);
#136=EDGE_CURVE('', #99,#107,'',#4,.T.);
#138=EDGE_CURVE('', #107,#108,'',#68,.T.);
#140=EDGE_CURVE('', #100,#108,'',#96,.T.);
#150=EDGE_CURVE('', #104,#99,'',#8,.T.);
#153=EDGE_CURVE('', #100,#102,'',#16,.T.);
#155=EDGE_CURVE('', #102,#118,'',#20,.T.);
#157=EDGE_CURVE('', #116,#118,'',#24,.T.);
#159=EDGE_CURVE('', #115,#116,'',#28,.T.);
#161=EDGE_CURVE('', #120,#115,'',#32,.T.);
#163=EDGE_CURVE('', #120,#104,'',#36,.T.);
#174=EDGE_CURVE('', #104,#112,'',#40,.T.);
#176=EDGE_CURVE('', #112,#107,'',#72,.T.);
#187=EDGE_CURVE('', #120,#128,'',#52,.T.);
#189=EDGE_CURVE('', #128,#112,'',#76,.T.);
#201=EDGE_CURVE('', #102,#110,'',#44,.T.);
#203=EDGE_CURVE('', #110,#126,'',#92,.T.);
#205=EDGE_CURVE('', #118,#126,'',#48,.T.);
#217=EDGE_CURVE('', #115,#123,'',#56,.T.);
#219=EDGE_CURVE('', #128,#123,'',#80,.T.);
#231=EDGE_CURVE('', #116,#124,'',#60,.T.);
#233=EDGE_CURVE('', #123,#124,'',#84,.T.);
#246=EDGE_CURVE('', #124,#126,'',#88,.T.);
#257=EDGE_CURVE('', #108,#110,'',#64,.T.);
#416=EDGE_CURVE('', #381,#382,'',#290,.T.);
#418=EDGE_CURVE('', #381,#389,'',#286,.T.);
#420=EDGE_CURVE('', #389,#390,'',#334,.T.);
#422=EDGE_CURVE('', #382,#390,'',#322,.T.);
#433=EDGE_CURVE('', #382,#384,'',#294,.T.);
#435=EDGE_CURVE('', #384,#386,'',#298,.T.);
#437=EDGE_CURVE('', #386,#402,'',#302,.T.);
#439=EDGE_CURVE('', #400,#402,'',#306,.T.);
#441=EDGE_CURVE('', #398,#400,'',#310,.T.);
#443=EDGE_CURVE('', #397,#398,'',#314,.T.);
#445=EDGE_CURVE('', #397,#381,'',#318,.T.);
#457=EDGE_CURVE('', #390,#392,'',#330,.T.);
#459=EDGE_CURVE('', #384,#392,'',#358,.T.);
#469=EDGE_CURVE('', #392,#394,'',#326,.T.);
#473=EDGE_CURVE('', #405,#389,'',#338,.T.);
#475=EDGE_CURVE('', #405,#406,'',#342,.T.);
#477=EDGE_CURVE('', #406,#408,'',#346,.T.);
#479=EDGE_CURVE('', #408,#410,'',#350,.T.);
#481=EDGE_CURVE('', #394,#410,'',#354,.T.);
#494=EDGE_CURVE('', #386,#394,'',#362,.T.);
#504=EDGE_CURVE('', #397,#405,'',#370,.T.);
#519=EDGE_CURVE('', #402,#410,'',#366,.T.);
#531=EDGE_CURVE('', #398,#406,'',#374,.T.);
#544=EDGE_CURVE('', #400,#408,'',#378,.T.);
#577=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#576,#282,#564),#572);
#584=PRODUCT_DEFINITION('design','',#583,#580);
#585=PRODUCT_DEFINITION_SHAPE('','SHAPE FOR ROD.',#584);
#586=SHAPE_DEFINITION_REPRESENTATION(#585,#577);
#587=SHAPE_DEFINITION_REPRESENTATION(#588,#589);
#588=PRODUCT_DEFINITION_SHAPE('','SHAPE FOR ROD_PLACE_ASM.',#839);
#589=SHAPE_REPRESENTATION('',(#595,#776,#785,#794,#803,#812,#821),#832);
#590=NEXT_ASSEMBLY_USAGE_OCCURRENCE('0','Next assembly relationship','',#839,#584,$);
#591=PRODUCT_DEFINITION_SHAPE('Placement #0','Placement of ROD with respect to ROD_PLACE_ASM',#590);
#668=EDGE_CURVE('', #649,#650,'',#602,.T.);
#670=EDGE_CURVE('', #650,#652,'',#606,.T.);
#672=EDGE_CURVE('', #652,#654,'',#610,.T.);
#674=EDGE_CURVE('', #654,#649,'',#614,.T.);
#685=EDGE_CURVE('', #649,#657,'',#618,.T.);
#687=EDGE_CURVE('', #657,#658,'',#634,.T.);
#689=EDGE_CURVE('', #650,#658,'',#630,.T.);
#700=EDGE_CURVE('', #654,#662,'',#622,.T.);
#702=EDGE_CURVE('', #662,#657,'',#638,.T.);
#714=EDGE_CURVE('', #652,#660,'',#626,.T.);
#716=EDGE_CURVE('', #660,#662,'',#642,.T.);
#729=EDGE_CURVE('', #658,#660,'',#646,.T.);
#761=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#760,#748),#756);
#768=PRODUCT_DEFINITION('design','',#767,#764);
#769=PRODUCT_DEFINITION_SHAPE('','SHAPE FOR MODULE.',#768);
#770=SHAPE_DEFINITION_REPRESENTATION(#769,#761);
#771=NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','Next assembly relationship','',#839,#768,$);
#772=PRODUCT_DEFINITION_SHAPE('Placement #1','Placement of MODULE with respect to ROD_PLACE_ASM',#771);
#780=NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','Next assembly relationship','',#839,#768,$);
#781=PRODUCT_DEFINITION_SHAPE('Placement #2','Placement of MODULE with respect to ROD_PLACE_ASM',#780);
#789=NEXT_ASSEMBLY_USAGE_OCCURRENCE('3','Next assembly relationship','',#839,#768,$);
#790=PRODUCT_DEFINITION_SHAPE('Placement #3','Placement of MODULE with respect to ROD_PLACE_ASM',#789);
#798=NEXT_ASSEMBLY_USAGE_OCCURRENCE('4','Next assembly relationship','',#839,#768,$);
#799=PRODUCT_DEFINITION_SHAPE('Placement #4','Placement of MODULE with respect to ROD_PLACE_ASM',#798);
#807=NEXT_ASSEMBLY_USAGE_OCCURRENCE('5','Next assembly relationship','',#839,#768,$);
#808=PRODUCT_DEFINITION_SHAPE('Placement #5','Placement of MODULE with respect to ROD_PLACE_ASM',#807);
#816=NEXT_ASSEMBLY_USAGE_OCCURRENCE('6','Next assembly relationship','',#839,#768,$);
#817=PRODUCT_DEFINITION_SHAPE('Placement #6','Placement of MODULE with respect to ROD_PLACE_ASM',#816);
#839=PRODUCT_DEFINITION('design','',#838,#835);
ENDSEC;
END-ISO-10303-21;
File diff suppressed because it is too large Load Diff
@@ -1,41 +0,0 @@
#!/usr/bin/perl
$filename = $ARGV[0];
open(INFILE, $filename) || die "\nSTEP file ".$filename." not found.";
print "Opening file ".$filename;
@filebuf = <INFILE>;
close(INFILE);
$g4 = "G4";
$outputfile = $g4 . $filename;
open(OUTFILE, ">$outputfile");
print "\nModifying STEP file for NIST toolkit...";
foreach (@filebuf)
{
if(/.*VERTEX\_POINT.*/)
{
s/VERTEX\_POINT\(\'\'\,/VERTEX\_POINT\(\'\'\,\'\'\,/g ;
}
elsif(/.*EDGE\_LOOP.*/)
{
s/EDGE\_LOOP\(\'\'\,/EDGE\_LOOP\(\'\'\,\'\'\,/g;
}
elsif(/.*ADVANCED\_FACE.*/)
{
($a,$b,$c) = split('\)',$&);
s//$a\)\,\'\' $b\)$c\n/;
}
elsif(/.*EDGE\_CURVE.*/)
{
($a,$b,$c,$d,$e) = split(",",$&);
s//$a\, $b\,$c\,\'\'\,$d\,$e\n/;
}
print OUTFILE;
}
close(OUTFILE);
print "\nOutput written to ".$outputfile."\n";
@@ -0,0 +1,22 @@
# $Id: GNUmakefile,v 1.1 1999/10/11 13:07:23 maire Exp $
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------
name := TestEm1
G4TARGET := $(name)
G4EXLIB := true
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
.PHONY: all
all: lib bin
include $(G4INSTALL)/config/architecture.gmk
LDFLAGS += -L/cern/pro/lib
LOADLIBS += -lpacklib $(FCLIBS)
include $(G4INSTALL)/config/binmake.gmk
@@ -0,0 +1,43 @@
$Id: History,v 1.2 1999/10/11 13:14:31 maire Exp $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
TestEm1 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 *
----------------------------------------------------------
11-10-99 moved from: source/processes/electromagnetic/test
to: examples/extended/electromagnetic
09-08-99 Commands for save/read Rndm status
17-06-99 added histogramming facility
10-05-99 user's actions adapted to geant4-00-ref-04
03-12-98 subdirectory geant3 which contains the geant3 equivalent
example.
24.11.98 due to new computation of SetCut for electron, the cut in range
for e-/+ has been modified in init.mac and run10.mac (beta03-00)
27.10.98 interactive command for setting StepFunction: deemax + stmin.
modifs in setxxCut functions (Hisaya).
Count occurence of processes.
Now TestEm1 is equivalent to g3-testem1
Both can be run in batch with reference files:
run1.mac (g4), run1.dat (g3).
19.10.98 Moved in subdirectory electromagnetic/test/TestEm1.
Interactive commands in PhysicsList for setting cuts.
14.09.98 Created, Michel Maire
@@ -0,0 +1,102 @@
$Id: README,v 1.1 1999/10/11 13:07:24 maire Exp $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
TestEm1
-------
This example has been setup to test individualy the electromagnetic
processes.
1- GEOMETRY DEFINITION
It is a simple box which represente an 'infinite' homogeneous medium.
Two parameters define the geometry :
- the material of the box,
- the (full) size of the box.
In addition a transverse uniform magnetic field can be applied.
The default geometry is constructed in DetectorConstruction class,
but all of the above parameters can be changed interactively via
the commands defined in the DetectorMessenger class.
2- PHYSICS LIST
The particle list is the one of novice/exampleN03.
The physics list contains the 'standard' electromagnetic processes,
and decay.
Few commands have been added to PhysicsList, in order to set the
production threshold for secondaries either in range for gamma,
e-/e+, proton or directly in energy for all charged.
3- AN EVENT : THE PRIMARY GENERATOR
The primary kinematic consists of a single particle starting at the
middle of the box. The type of the particle and its energy are set
in the PrimaryGeneratorAction class, and can be changed via the G4
build-in commands of ParticleGun class (see the macros provided with
this example).
A RUN is a set of events.
4- VISUALIZATION
The Visualization Manager is set in the main().
The initialisation of the drawing is done via the command
/vis~/create_view in the macro init.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
box.
The tracks are drawn at the end of event, and erased at the end of run.
Optionaly one can choose to draw all particles, only the charged one,
or none. This command is defined in EventActionMessenger class.
5- PHYSICS SURVEY
The particle's type and the physic processes which will be available
in this example are set in PhysicsList class.
A set of macros defining various run conditions are provided.
The processes are actived/inactived together with differents
cuts, in order to survey the processes one by one.
The number of produced secondaries are counted, the number of steps,
and the number of process calls responsible of the step.
6- HOW TO START ?
- compile and link to generate an executable
% cd geant4/examples/extended/electromagnetic/TestEm1
% gmake
- execute TestEm1 in 'batch' mode from macro files
% TestEm1 run10.mac
- execute TestEm1 in 'interactive mode' with visualization
% TestEm1
....
Idle> type your commands
....
Idle> exit
7- HISTOGRAMS
Testem1 produces several histo which are saved as testem1.histo
Content of these histo:
1 : track length of a charged particle
2 : number of steps per track (charged particle)
3 : step length (charged particle)
@@ -0,0 +1,107 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: TestEm1.cc,v 1.1.4.1 1999/12/07 20:46:52 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// --------------------------------------------------------------
// GEANT 4 - example Em1
//
// For information related to this code contact:
// CERN, IT Division, ASD Group
// --------------------------------------------------------------
// Comments
//
//
// --------------------------------------------------------------
#define Em1NoOptimize 1
#include "G4RunManager.hh"
#include "G4UImanager.hh"
#include "G4UIterminal.hh"
#include "Randomize.hh"
#include "Em1DetectorConstruction.hh"
#include "Em1PhysicsList.hh"
#include "Em1PrimaryGeneratorAction.hh"
#ifdef Em1NoOptimize
#include "Em1RunAction.hh"
#include "Em1EventAction.hh"
#include "Em1TrackingAction.hh"
#include "Em1SteppingAction.hh"
#ifdef G4VIS_USE
#include "Em1VisManager.hh"
#endif
#endif
int main(int argc,char** argv) {
//choose the Random engine
HepRandom::setTheEngine(new RanecuEngine);
// Construct the default run manager
G4RunManager * runManager = new G4RunManager;
// set mandatory initialization classes
Em1DetectorConstruction* det;
runManager->SetUserInitialization(det = new Em1DetectorConstruction);
runManager->SetUserInitialization(new Em1PhysicsList(det));
runManager->SetUserAction(new Em1PrimaryGeneratorAction);
#ifdef Em1NoOptimize
#ifdef G4VIS_USE
// visualization manager
G4VisManager* visManager = new Em1VisManager;
visManager->Initialize();
#endif
// set user action classes
Em1RunAction* RunAct;
Em1EventAction* EvtAct;
runManager->SetUserAction(RunAct = new Em1RunAction);
runManager->SetUserAction(EvtAct = new Em1EventAction(RunAct));
runManager->SetUserAction(new Em1TrackingAction(RunAct));
runManager->SetUserAction(new Em1SteppingAction(RunAct,EvtAct));
#endif
//Initialize G4 kernel
runManager->Initialize();
// get the pointer to the User Interface manager
G4UImanager* UI = G4UImanager::GetUIpointer();
if (argc==1) // Define UI terminal for interactive mode
{
G4UIsession * session = new G4UIterminal;
UI->ApplyCommand("/control/execute init.mac");
session->SessionStart();
delete session;
}
else // Batch mode
{
G4String command = "/control/execute ";
G4String fileName = argv[1];
UI->ApplyCommand(command+fileName);
}
// job termination
#ifdef Em1NoOptimize
#ifdef G4VIS_USE
delete visManager;
#endif
#endif
delete runManager;
return 0;
}
@@ -0,0 +1,26 @@
testem1.cra is the geant3 equivalent of TestEm1
% cd geant3
% gmakeB to make an executable (Batch version)
% gmakeT to make an executable (inTeractive version)
To execute:
% cd geant3
% $G4SYSTEM/testem1.xb (for batch) or testem1.xt (for interactive)
The program will ask:
G3 > gives the filename of the data cards to be read:
run01.dat (runNN.dat is the equivalent of the G4 runNN.mac)
testem1 produces several histo saved as testem1.histo if ISWIT(2)=1
Content of these histo:
1 : track length of a charged particle
2 : number of steps per track (charged particle)
3 : step length (charged particle)
+43
View File
@@ -0,0 +1,43 @@
#
# @(#) Script to build a Batch geant executable
#
set name=testem1
set extnam=" "
if ($G4SYSTEM == AIX-AFS) set extnam=-qextname
#
mkdir $G4SYSTEM
cd $G4SYSTEM
#
# Run patchy
#
cat > temp.cra << eocra
+USE,batch.
eocra
cat ../$name.cra >> temp.cra
#
ypatchy - $name temp $name - $name :go
rm temp.cra
#
# fortran compilation
#
fsplit $name.f
rm $name.f
hepf77 $extnam -c -g *.f
#
# Link
#
echo 'linking geant3+cernlib libraries ...'
#
hepf77 $extnam -g -o $name.xb *.o \
`cernlib geant321 pawlib graflib packlib mathlib kernlib`
#
#
chmod +x $name.xb
#
# cleanup
#
rm *.lis *.lst *.f *.o
echo 'done'
exit
+37
View File
@@ -0,0 +1,37 @@
#
# @(#) Script to build an inTeractive geant executable
#
set name=testem1
set extnam=" "
if ($G4SYSTEM == AIX-AFS) set extnam=-qextname
#
mkdir $G4SYSTEM
cd $G4SYSTEM
#
# Run patchy
#
ypatchy - $name ../$name $name - $name :go
#
# fortran compilation
#
fsplit $name.f
rm $name.f
hepf77 $extnam -c -g *.f
#
# Link
#
echo 'linking geant3+cernlib libraries...'
#
hepf77 $extnam -g -o $name.xt *.o \
`cernlib geant321 pawlib graflib packlib mathlib kernlib`
#
#
chmod +x $name.xt
#
# cleanup
#
rm *.lis *.lst *.f *.o
echo 'done'
exit
@@ -0,0 +1,14 @@
LIST
C
C geantino; 10000 evts
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 10000
KINE 48 (Itype) 1.0 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e-6 (bcute/m) 2*10.e-6 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
LOSS 1
TIME 2=1.
@@ -0,0 +1,18 @@
LIST
C
C Eloss only; no fluctuation; e- 1 Gev
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 100
KINE 3 (Itype) 1.000 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e+3 (bcute/m) 2*10.e+3 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
PHOT 0
COMP 0
PAIR 0
MULS 0
LOSS 4
TIME 2=1.
@@ -0,0 +1,18 @@
LIST
C
C Eloss only; glandz fluctuations; e- 1 Gev
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 100
KINE 3 (Itype) 1.000 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e+3 (bcute/m) 2*10.e+3 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
PHOT 0
COMP 0
PAIR 0
MULS 0
LOSS 1
TIME 2=1.
@@ -0,0 +1,18 @@
LIST
C
C Eloss+muls only; no fluctuation; e- 10 Mev
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 100
KINE 3 (Itype) 0.010 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e+3 (bcute/m) 2*10.e+3 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
PHOT 0
COMP 0
PAIR 0
MULS 1
LOSS 4
TIME 2=1.
@@ -0,0 +1,18 @@
LIST
C
C full Ionisation only; e- 100 Mev
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 100
KINE 3 (Itype) 0.100 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e+3 (bcute/m) 2*10.e-6 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
PHOT 0
COMP 0
PAIR 0
MULS 0
LOSS 1
TIME 2=1.
@@ -0,0 +1,18 @@
LIST
C
C full Brems only; e- 1 Gev
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 100
KINE 3 (Itype) 1.000 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e-6 (bcute/m) 2*10.e+3 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
PHOT 0
COMP 0
PAIR 0
MULS 0
LOSS 1
TIME 2=1.
@@ -0,0 +1,18 @@
LIST
C
C Compton + Photo electric; gamma 10 MeV
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 1000
KINE 1 (Itype) 0.010 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e+3 (bcute/m) 2*10.e+3 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
PHOT 2
COMP 2
PAIR 0
MULS 0
LOSS 1
TIME 2=1.
@@ -0,0 +1,19 @@
LIST
C
C Gamma conversion and e+ annihilation; gamma 100 MeV
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 1000
KINE 1 (Itype) 0.100 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e+3 (bcute/m) 2*15.e-3 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
PHOT 0
COMP 0
PAIR 1
ANNI 2
MULS 0
LOSS 1
TIME 2=1.
@@ -0,0 +1,14 @@
LIST
C
C e- 100 Mev; all processes
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 100
KINE 3 (Itype) 0.100 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e-6 (bcute/m) 2*10.e-6 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
LOSS 1
TIME 2=1.
@@ -0,0 +1,14 @@
LIST
C
C e- 1 Gev; all processes
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 100
KINE 3 (Itype) 1.000 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e-6 (bcute/m) 2*10.e-6 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
LOSS 1
TIME 2=1.
@@ -0,0 +1,14 @@
LIST
C
C Eloss only + muls; e- 1 Gev
C
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 1000
KINE 3 (Itype) 1.000 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 1 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e+3 (bcute/m) 2*100.e-3 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
LOSS 1
TIME 2=1.
@@ -0,0 +1,423 @@
+OPTION,MAPASM.
+ASM,23.
+USE,GCDES,TestEm1,T=EXE.
*
+EXE,CRA*.
*
+PAM,11,T=CARD,T=ATTACH. /cern/pro/src/car/geant321.car
+PATCH,TestEm1.
+DECK,BLANKDEK.
*
* TestEm1 1.00 /01 980918 13.00 GEANT EXAMPLES
*
* TEST PROGRAM FOR GEANT TEST
*
* Author M.Maire *********
*
*
* History
* -------
*
*
+KEEP,CALOR.
COMMON/CALOR/Imat,BoxSize,Field
*
* Imat = GEANT material number. (data card CALOR)
* BoxSize = total size of the box (cm) (data card CALOR)
* Field = magnetic field (tesla) (data card CALOR)
*
+KEEP,CELOSS.
COMMON/CELOSS/ ETOT,NTRAK0,NTRAK1,NSTEP0,NSTEP1,NBCALL(12),
+ NSTRK0,NSTRK1
+DECK,main,if=batch.
PROGRAM main
*
*
PARAMETER (NGBANK=100000, NHBOOK=10000)
COMMON/GCBANK/Q(NGBANK)
COMMON/PAWC /H(NHBOOK)
*
CALL GZEBRA( NGBANK)
CALL HLIMIT(-NHBOOK)
*
* *** initialize HIGZ
CALL HPLINT(0)
*
* *** GEANT initialisation
CALL UGINIT
*
* *** Start events processing
CALL GRUN
*
* *** End of RUN
CALL UGLAST
*
STOP
END
+DECK,main,IF=-batch.
PROGRAM main
*
* GEANT main program. To link with the MOTIF user interface
* the routine GPAWPP(NWGEAN,NWPAW) should be called, whereas
* the routine GPAW(NWGEAN,NWPAW) gives access to the basic
* graphics version.
*
PARAMETER (NWGEAN=3000000, NWPAW=1000000)
COMMON/GCBANK/GEANT(NWGEAN)
COMMON/PAWC /PAW (NWPAW)
*
*
CALL GPAW (NWGEAN,NWPAW)
*
END
*
SUBROUTINE qnext
END
*
SUBROUTINE czopen
END
*
SUBROUTINE cztcp
END
*
SUBROUTINE czclos
END
*
SUBROUTINE czputa
END
+DECK,UGINIT
SUBROUTINE UGINIT
*
* To initialise GEANT/USER program and read data cards
*
+SEQ,CALOR,CELOSS.
*
CHARACTER*20 filnam
*
* *** Define the GEANT parameters
CALL GINIT
* *** read data cards
PRINT *, 'G3 > gives the filename of the data cards to be read:'
READ (*,'(A)') filnam
IF (filnam.EQ.' ') filnam = 'testem1.dat'
OPEN (unit=5,file=filnam,status='unknown',form='formatted')
*
* *** Calor definition
CALL FFKEY('CALOR',Imat,3,'MIXED')
*
* *** read data cards
CALL GFFGO
*
CALL GZINIT
CALL GPART
*
CALL GDINIT
*
* *** Geometry and materials description
CALL UGEOM
*
* *** Energy loss and cross-sections initialisations
CALL GPHYSI
*
CALL GPRINT('MATE',0)
CALL GPRINT('TMED',0)
CALL GPRINT('VOLU',0)
*
* *** Define user histograms
CALL UHINIT
*
* *** some initialisation
NTRAK0 = 0
NTRAK1 = 0
NSTEP0 = 0
NSTEP1 = 0
CALL VZERO (NBCALL,12)
*
END
+DECK,UGEOM.
SUBROUTINE UGEOM
*
* *** Define user geometry set up
*
*
+SEQ,CALOR.
*
DIMENSION PAR(3)
DIMENSION Aair(2),Zair(2),Wair(2)
DIMENSION AH2O(2),ZH2O(2),WH2O(2)
*
* *** Air compound parameters
DATA Aair/14.01, 16.00/
DATA Zair/ 7. , 8. /
DATA Wair/ 0.7 , 0.3 /
*
* *** Air compound parameters
DATA AH2O/ 1.01, 16.00/
DATA ZH2O/ 1. , 8. /
DATA WH2O/ 2. , 1. /
*
* *** Defines USER perticular materials
CALL GSMIXT( 1,'Air' , Aair ,Zair, 1.29E-3, 2 , Wair)
CALL GSMATE( 2,'H2 Liquid', 1.01, 1., 0.0708 , 865., 790., 0,0)
CALL GSMIXT( 3,'Water' , AH2O ,ZH2O, 1.0 ,-2 , WH2O)
CALL GSMATE( 4,'Liquid Ar', 39.95, 18., 1.39 , 14.0, 84.0, 0,0)
CALL GSMATE( 5,'Aluminium', 26.98, 13., 2.7 , 8.9, 37.2, 0,0)
CALL GSMATE( 6,'Iron ', 55.85, 26., 7.87 , 1.76, 17.1, 0,0)
CALL GSMATE( 7,'Lead ',207.19, 82., 11.35 , 0.56, 18.5, 0,0)
CALL GSMATE( 8,'Uranium ',238.03, 92., 18.95 , 0.32, 12. , 0,0)
*
*
* *** Defines USER tracking media parameters
IFIELD = 0
IF (Field.GT.0.) IFIELD = 3
FIELDM = 10*Field
TMAXFD = 10.0
STEMAX = 1000.
DEEMAX = 0.20
EPSIL = 0.001
STMIN = 0.010
*
CALL GSTMED( 1,'Container',Imat, 0 ,IFIELD,FIELDM,TMAXFD,
* STEMAX,DEEMAX,EPSIL,STMIN, 0 , 0 )
*
*
* *** Geometry
PAR(1) = BoxSize/2.
PAR(2) = BoxSize/2.
PAR(3) = BoxSize/2.
CALL GSVOLU('aBox','BOX ',1,PAR,3,IVOL)
*
* *** Close geometry banks. (obligatory system routine)
CALL GGCLOS
*
*
* *** dessin
CALL GSATT ('*','SEEN',1)
*
DO IX = 1,3
CALL GDOPEN (IX)
SCALE = 18./BoxSize
PAXIS = 0.
SAXIS = 1.
CALL GDRAWC ('aBox',IX,0.,10.,9.3,SCALE,SCALE)
CALL GDAXIS (PAXIS,PAXIS,PAXIS,SAXIS)
CALL GDSCAL (10. , 0.3)
CALL GDCLOS
END DO
*
END
+DECK,UHINIT.
SUBROUTINE UHINIT
*
* To book the user's histograms
*
CALL HBOOK1(1,'track length (mm) of a charged particle',
+ 100,0.,500.,0.)
CALL HBOOK1(2,'Nb of steps per track (charged particle)',
+ 100,0.,100.,0.)
CALL HBOOK1(3,'step length (mm) charged particle',
+ 100,0.,10. ,0.)
*
END
+DECK,GUKINE
SUBROUTINE GUKINE
*
* Generates Kinematics for primary track
*
* Data card Kine : Itype Ekine
*
+SEQ,GCBANK,GCFLAG,GCKINE.
*
DIMENSION VERTEX(3),PLAB(3)
*
DATA VERTEX/3*0./
DATA PLAB /3*0./
*
*
CALL GSVERT(VERTEX,0,0,0,0,NVERT)
*
*
JPA = LQ(JPART-IKINE)
XMASS = Q(JPA+7)
PLAB(1) = SQRT(PKINE(1)*(PKINE(1)+2*XMASS))
*
CALL GSKINE(PLAB,IKINE,NVERT,0,0,NT)
*
* *** Kinematics debug
IF (IEVENT.EQ.1.OR.IDEBUG.NE.0) CALL GPRINT('KINE',0)
*
END
+DECK,GUTREV
SUBROUTINE GUTREV
*
* User routine to control tracking of one event
* Called by GRUN
*
+SEQ,CELOSS
*
ETOT = 0.
*
CALL GTREVE
*
END
+DECK,GUTRAK
SUBROUTINE GUTRAK
*
* User routine to control tracking of one track
* Called by GTREVE
*
+SEQ,GCKINE.
+SEQ,GCTRAK.
+SEQ,CELOSS.
*
*
* *** initialisation track per track
NSTRK0 = 0
NSTRK1 = 0
*
CALL GTRACK
*
* *** count nb of tracks
IF (CHARGE.NE.0.) THEN
NTRAK1 = NTRAK1 + 1
CALL HFILL (1,SLENG*10,0.,1.)
CALL HFILL (2,REAL(NSTRK1),0.,1.)
ELSE
NTRAK0 = NTRAK0 + 1
ENDIF
*
END
+DECK,GUSTEP
SUBROUTINE GUSTEP
*
* User routine called at the end of each tracking step
*
+SEQ,GCFLAG.
+SEQ,GCKINE,GCKING,GCTRAK.
+SEQ,CELOSS.
*
*
* *** Debug event and store tracks for drawing
IF (IDEBUG.NE.0) CALL GPCXYZ
IF ((ISWIT(1).EQ.1).AND.(CHARGE.NE.0.)) CALL GSXYZ
IF (ISWIT(1).EQ.2) CALL GSXYZ
*
* *** Something generated ?
IF(NGKINE.GT.0) CALL GSKING(0)
*
* *** Energy deposited
ETOT = ETOT + DESTEP
*
* *** count number of steps
IF (CHARGE.NE.0.) THEN
NSTEP1 = NSTEP1 + 1
NSTRK1 = NSTRK1 + 1
CALL HFILL (3,STEP*10,0.,1.)
ELSE
NSTEP0 = NSTEP0 + 1
NSTRK0 = NSTRK0 + 1
ENDIF
*
* *** count nb of invoked processes
IF (NMEC.GT.0) THEN
DO IM = 1,NMEC
IPROC = LMEC(IM)
IF (IPROC.EQ.21) IPROC = 12
IF (IPROC.LE.12) NBCALL(IPROC) = NBCALL(IPROC)+1
ENDDO
ENDIF
END
+DECK,GUOUT
SUBROUTINE GUOUT
*
* User routine called at the end of each event
*
+SEQ,GCFLAG.
+SEQ,CELOSS.
*
CHARACTER*4 unit
*
* *** drawing
*
+self,if=-batch.
IF (ISWIT(1).NE.0) THEN
CALL GDHEAD (110110,'TestEm1',0.)
CALL GDSHOW (3)
CALL GDXYZ (0)
END IF
+self.
*
* energy deposited
*
CALL GEVKEV (ETOT,ETunit,unit)
IF (ISWIT(1).NE.0) PRINT 750,ETunit,unit
*
750 FORMAT(1X,'Energy deposit: ',F8.3,A4)
*
END
+DECK,UGLAST
SUBROUTINE UGLAST
*
* Termination routine to print histograms and statistics
*
+SEQ,GCFLAG.
+SEQ,GCTRAK.
+SEQ,CELOSS.
*
* *** nb of steps and tracks per event
TOTEVT = IEVENT
FNTRK0 = NTRAK0/TOTEVT
FNTRK1 = NTRAK1/TOTEVT
FNSTP0 = NSTEP0/TOTEVT
FNSTP1 = NSTEP1/TOTEVT
PRINT 750, FNTRK0,FNTRK1,FNSTP0,FNSTP1
*
* *** frequency of processes call
CALL UCTOH('MUNU',NAMEC(12),4,4)
PRINT 760,(NAMEC(I),I=1,12)
PRINT 761,(NBCALL(I)/TOTEVT,I=1,12)
*
* *** geant termination
CALL GLAST
*
* *** print selected histo
*
* *** close HIGZ file
CALL HPLEND
*
* *** Save selected histograms
IF (ISWIT(2).EQ.1) THEN
CALL HRPUT(0,'testem1.histo','N')
ENDIF
*
* *** formats
750 FORMAT(//,1X,'nb tracks/event neutral: ',F9.2,' charged: ',F9.2,
+ /,1X,'nb steps/event neutral: ',F9.2,' charged: ',F9.2)
760 FORMAT(//,1X,'nb of process calls per event: ',
+ /,3X,12A9)
761 FORMAT( 3X,12F9.2,//)
*
END
+DECK,ffread,T=data.
LIST
CALOR 5 (Imat) 2000. (size) 0. (field)
TRIG 100
KINE 3 (Itype) 0.100 (Ekine)
DEBUG 10 5 1000
SWIT 0 (draw) 0 (save)
CUTS 10.e-6 (cutgam) 10.e-6 (cutele) 3*10.e-3 (cutneu/had/muo)
2*10.e-6 (bcute/m) 2*10.e-6 (dcute/m) 10.e-3 (ppcutm)
ABAN 0
LOSS 1
TIME 2=1.
+QUIT.
@@ -0,0 +1,77 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1DetectorConstruction.hh,v 1.1.4.1 1999/12/07 20:46:53 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1DetectorConstruction_h
#define Em1DetectorConstruction_h 1
#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"
class G4LogicalVolume;
class G4Material;
class G4UniformMagField;
class Em1DetectorMessenger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1DetectorConstruction : public G4VUserDetectorConstruction
{
public:
Em1DetectorConstruction();
~Em1DetectorConstruction();
public:
G4VPhysicalVolume* Construct();
void SetSize (G4double);
void SetMaterial (G4String);
void SetMagField (G4double);
void UpdateGeometry();
public:
const
G4VPhysicalVolume* GetWorld() {return pBox;};
G4double GeSize() {return BoxSize;};
G4Material* GetMaterial() {return aMaterial;};
void PrintParameters();
private:
G4VPhysicalVolume* pBox;
G4LogicalVolume* lBox;
G4double BoxSize;
G4Material* aMaterial;
G4UniformMagField* magField;
Em1DetectorMessenger* detectorMessenger;
private:
void DefineMaterials();
G4VPhysicalVolume* ConstructVolumes();
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -0,0 +1,51 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1DetectorMessenger.hh,v 1.1.4.1 1999/12/07 20:46:53 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1DetectorMessenger_h
#define Em1DetectorMessenger_h 1
#include "globals.hh"
#include "G4UImessenger.hh"
class Em1DetectorConstruction;
class G4UIdirectory;
class G4UIcmdWithAString;
class G4UIcmdWithADoubleAndUnit;
class G4UIcmdWithoutParameter;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1DetectorMessenger: public G4UImessenger
{
public:
Em1DetectorMessenger(Em1DetectorConstruction* );
~Em1DetectorMessenger();
void SetNewValue(G4UIcommand*, G4String);
private:
Em1DetectorConstruction* Em1Detector;
G4UIdirectory* Em1detDir;
G4UIcmdWithAString* MaterCmd;
G4UIcmdWithADoubleAndUnit* SizeCmd;
G4UIcmdWithADoubleAndUnit* MagFieldCmd;
G4UIcmdWithoutParameter* UpdateCmd;
};
#endif
@@ -0,0 +1,53 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1EventAction.hh,v 1.1.4.1 1999/12/07 20:46:53 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1EventAction_h
#define Em1EventAction_h 1
#include "G4UserEventAction.hh"
#include "globals.hh"
class Em1RunAction;
class Em1EventActionMessenger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1EventAction : public G4UserEventAction
{
public:
Em1EventAction(Em1RunAction*);
~Em1EventAction();
public:
void BeginOfEventAction(const G4Event*);
void EndOfEventAction(const G4Event*);
void addEdep(G4double Edep) {TotalEnergyDeposit += Edep;};
G4double GetEnergyDeposit() {return TotalEnergyDeposit;};
void SetDrawFlag(G4String val) {drawFlag = val;};
void SetPrintModulo(G4int val) {printModulo = val;};
private:
Em1RunAction* Em1Run;
G4double TotalEnergyDeposit;
G4String drawFlag;
G4int printModulo;
Em1EventActionMessenger* eventMessenger;
};
#endif
@@ -0,0 +1,42 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1EventActionMessenger.hh,v 1.1.4.1 1999/12/07 20:46:53 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1EventActionMessenger_h
#define Em1EventActionMessenger_h 1
#include "globals.hh"
#include "G4UImessenger.hh"
class Em1EventAction;
class G4UIcmdWithAString;
class G4UIcmdWithAnInteger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1EventActionMessenger: public G4UImessenger
{
public:
Em1EventActionMessenger(Em1EventAction*);
~Em1EventActionMessenger();
void SetNewValue(G4UIcommand*, G4String);
private:
Em1EventAction* eventAction;
G4UIcmdWithAString* DrawCmd;
G4UIcmdWithAnInteger* PrintCmd;
};
#endif
@@ -0,0 +1,66 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1PhysicsList.hh,v 1.1.4.1 1999/12/07 20:46:53 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1PhysicsList_h
#define Em1PhysicsList_h 1
#include "G4VUserPhysicsList.hh"
#include "globals.hh"
class Em1DetectorConstruction;
class Em1PhysicsListMessenger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1PhysicsList: public G4VUserPhysicsList
{
public:
Em1PhysicsList(Em1DetectorConstruction*);
~Em1PhysicsList();
protected:
// Construct particles
void ConstructParticle();
void ConstructBosons();
void ConstructLeptons();
void ConstructMesons();
void ConstructBarions();
public:
void SetCuts();
void SetGammaCut(G4double);
void SetElectronCut(G4double);
void SetProtonCut(G4double);
void SetCutsByEnergy(G4double);
void GetRange(G4double);
protected:
// Construct processes and register them
void ConstructProcess();
void ConstructGeneral();
void ConstructEM();
private:
Em1DetectorConstruction* pDet;
Em1PhysicsListMessenger* pMes;
G4double cutForGamma;
G4double cutForElectron;
G4double cutForProton;
};
#endif
@@ -0,0 +1,44 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1PhysicsListMessenger.hh,v 1.1.4.1 1999/12/07 20:46:54 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1PhysicsListMessenger_h
#define Em1PhysicsListMessenger_h 1
#include "globals.hh"
#include "G4UImessenger.hh"
class Em1PhysicsList;
class G4UIcmdWithADoubleAndUnit;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1PhysicsListMessenger: public G4UImessenger
{
public:
Em1PhysicsListMessenger(Em1PhysicsList*);
~Em1PhysicsListMessenger();
void SetNewValue(G4UIcommand*, G4String);
private:
Em1PhysicsList* physList;
G4UIcmdWithADoubleAndUnit* cutGCmd;
G4UIcmdWithADoubleAndUnit* cutECmd;
G4UIcmdWithADoubleAndUnit* cutPCmd;
G4UIcmdWithADoubleAndUnit* rCmd;
G4UIcmdWithADoubleAndUnit* eCmd;
};
#endif
@@ -0,0 +1,43 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1PrimaryGeneratorAction.hh,v 1.1.4.1 1999/12/07 20:46:54 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1PrimaryGeneratorAction_h
#define Em1PrimaryGeneratorAction_h 1
#include "G4VUserPrimaryGeneratorAction.hh"
#include "globals.hh"
class G4ParticleGun;
class G4Event;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
Em1PrimaryGeneratorAction();
~Em1PrimaryGeneratorAction();
public:
void GeneratePrimaries(G4Event*);
private:
G4ParticleGun* particleGun; //pointer a to G4 service class
};
#endif
@@ -0,0 +1,69 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1RunAction.hh,v 1.1.4.1 1999/12/07 20:46:54 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1RunAction_h
#define Em1RunAction_h 1
#include "G4UserRunAction.hh"
#include "ProcessesCount.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class G4Run;
class Em1RunActionMessenger;
class HepTupleManager;
class HepHistogram;
class Em1RunAction : public G4UserRunAction
{
public:
Em1RunAction();
~Em1RunAction();
public:
void BeginOfRunAction(const G4Run*);
void EndOfRunAction(const G4Run*);
void CountTraks0(G4int nt) { NbOfTraks0 += nt;}
void CountTraks1(G4int nt) { NbOfTraks1 += nt;}
void CountSteps0(G4int ns) { NbOfSteps0 += ns;}
void CountSteps1(G4int ns) { NbOfSteps1 += ns;}
void CountProcesses(G4String);
public:
HepHistogram* GetHisto(G4int id) {return histo[id];}
void SetRndmFreq(G4int val) {saveRndm = val;}
G4int GetRndmFreq() {return saveRndm;}
private:
void bookHisto();
void cleanHisto();
private:
G4int NbOfTraks0, NbOfTraks1;
G4int NbOfSteps0, NbOfSteps1;
ProcessesCount* ProcCounter;
HepTupleManager* hbookManager;
HepHistogram* histo[3];
Em1RunActionMessenger* runMessenger;
G4int saveRndm;
};
#endif
@@ -0,0 +1,45 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1RunActionMessenger.hh,v 1.1.4.1 1999/12/07 20:46:54 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1RunActionMessenger_h
#define Em1RunActionMessenger_h 1
#include "globals.hh"
#include "G4UImessenger.hh"
class Em1RunAction;
class G4UIdirectory;
class G4UIcmdWithAString;
class G4UIcmdWithAnInteger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1RunActionMessenger: public G4UImessenger
{
public:
Em1RunActionMessenger(Em1RunAction*);
~Em1RunActionMessenger();
void SetNewValue(G4UIcommand*, G4String);
private:
Em1RunAction* Em1Run;
G4UIdirectory* RndmDir;
G4UIcmdWithAnInteger* RndmSaveCmd;
G4UIcmdWithAString* RndmReadCmd;
};
#endif
@@ -0,0 +1,39 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1SteppingAction.hh,v 1.1.4.1 1999/12/07 20:46:54 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1SteppingAction_h
#define Em1SteppingAction_h 1
#include "G4UserSteppingAction.hh"
class Em1RunAction;
class Em1EventAction;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1SteppingAction : public G4UserSteppingAction
{
public:
Em1SteppingAction(Em1RunAction*,Em1EventAction*);
~Em1SteppingAction();
void UserSteppingAction(const G4Step*);
private:
Em1RunAction* runAction;
Em1EventAction* eventAction;
};
#endif
@@ -0,0 +1,34 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1TrackingAction.hh,v 1.1.4.1 1999/12/07 20:46:54 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
#ifndef Em1TrackingAction_h
#define Em1TrackingAction_h 1
#include "G4UserTrackingAction.hh"
class Em1RunAction;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1TrackingAction : public G4UserTrackingAction {
public:
Em1TrackingAction(Em1RunAction*);
~Em1TrackingAction() {};
void PostUserTrackingAction(const G4Track*);
private:
Em1RunAction* runAction;
};
#endif
@@ -0,0 +1,50 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1VisManager.hh,v 1.1.4.1 1999/12/07 20:46:54 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
// Example Visualization Manager implementing virtual function
// RegisterGraphicsSystems. Exploits C-pre-processor variables
// G4VIS_USE_DAWN, etc., which are set by the GNUmakefiles if
// environment variables of the same name are set.
// So all you have to do is set environment variables and compile and
// instantiate this in your main().
// Alternatively, you can implement an empty function here and just
// register the systems you want in your main(), e.g.:
// G4VisManager* myVisManager = new MyVisManager;
// myVisManager -> RegisterGraphicsSystem (new MyGraphicsSystem);
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef Em1VisManager_h
#define Em1VisManager_h 1
#include "G4VisManager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class Em1VisManager: public G4VisManager {
public:
Em1VisManager ();
private:
void RegisterGraphicsSystems ();
};
#endif
@@ -0,0 +1,61 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: ProcessesCount.hh,v 1.1.2.1.2.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// -----------------------------------------------------------------
// GEANT 4 class header file
//
// For information related to this code contact:
// CERN, CN Division, ASD group
//
// ------------------- class ProcessesCount -----------------
//
// 26-10-98: first version, M.Maire
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef ProcessesCount_HH
#define ProcessesCount_HH
#include "globals.hh"
#include "g4rw/tpordvec.h"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class OneProcessCount
{
public:
OneProcessCount(G4String name) {Name=name; Counter=0;};
~OneProcessCount() {};
G4int operator==(const OneProcessCount& right) const {return (this==&right);};
G4int operator!=(const OneProcessCount& right) const {return (this!=&right);};
private:
OneProcessCount(OneProcessCount& right) {*this= right;};
const OneProcessCount& operator=(const OneProcessCount& right) {return right;};
public:
G4String GetName() {return Name;};
G4int GetCounter() {return Counter;};
void Count() {Counter++;};
private:
G4String Name; // process name
G4int Counter; // process counter
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
typedef G4RWTPtrOrderedVector<OneProcessCount> ProcessesCount;
#endif
@@ -0,0 +1,41 @@
#
# Macro file for the initialization phase of "TestEm1.cc"
#
# Sets some default verbose
# and initializes the graphic.
#
/control/verbose 2
#
####/run/initialize
#
####/process/eLoss/StepFunction 0.183 170 micrometer
####/calor/cutG 2.2 mm
####/calor/cutE 1.4 micrometer #before beta03-00 (17.11.98)
####/calor/cutE 6.05 micrometer #from beta03-00 (17.11.98)
####/run/initialize
####/run/particle/dumpCutValues
#
# Create empty scene ("world" is default)
/vis/scene/create
#
# Add volume to scene
/vis/scene/add/volume
#
# Create a scene handler for a specific graphics system
# Edit the next line(s) to choose another graphic system
#
#/vis/sceneHandler/create DAWNFILE
/vis/sceneHandler/create OGLIX
#
# Create a viewer
/vis/viewer/create
#
# Draw scene
/vis/scene/notifyHandlers
#
# for drawing the tracks
# if too many tracks cause core dump => storeTrajectory 0
/tracking/storeTrajectory 1
/event/drawTracks all
#
/run/verbose 2
@@ -0,0 +1,17 @@
# $Id: run00.mac,v 1.1 1999/10/11 13:07:25 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# geantino 1 GeV; 10000 evts
#
/control/verbose 2
#
/run/initialize
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle geantino
/gun/energy 1 GeV
/run/beamOn 10000
@@ -0,0 +1,29 @@
# $Id: run01.mac,v 1.1 1999/10/11 13:07:26 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# Eloss only; no fluctuation; e- 1 GeV
#
/control/verbose 2
#
/run/initialize
#
/process/eLoss/StepFunction 0.183 170 micrometer
/calor/cutG 95 cm
/calor/cutE 95 cm
/run/initialize
/run/particle/dumpCutValues
#
/process/inactivate phot
/process/inactivate compt
/process/inactivate conv
/process/inactivate msc
/process/eLoss/fluct 0
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle e-
/gun/energy 1 GeV
/run/beamOn 100
@@ -0,0 +1,29 @@
# $Id: run02.mac,v 1.1 1999/10/11 13:07:26 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# Eloss only; glandz fluctuations; e- 1 GeV
#
/control/verbose 2
#
/run/initialize
#
/process/eLoss/StepFunction 0.183 170 micrometer
/calor/cutG 95 cm
/calor/cutE 95 cm
/run/initialize
/run/particle/dumpCutValues
#
/process/inactivate phot
/process/inactivate compt
/process/inactivate conv
/process/inactivate msc
/process/eLoss/fluct 1
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle e-
/gun/energy 1 GeV
/run/beamOn 100
@@ -0,0 +1,28 @@
# $Id: run03.mac,v 1.1 1999/10/11 13:07:26 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# Eloss+Muls only; no fluctuation; e- 10 MeV
#
/control/verbose 2
#
/run/initialize
#
/process/eLoss/StepFunction 0.183 170 micrometer
/calor/cutG 95 cm
/calor/cutE 95 cm
/run/initialize
/run/particle/dumpCutValues
#
/process/inactivate phot
/process/inactivate compt
/process/inactivate conv
/process/eLoss/fluct 0
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle e-
/gun/energy 10 MeV
/run/beamOn 100
@@ -0,0 +1,28 @@
# $Id: run04.mac,v 1.1 1999/10/11 13:07:27 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# full Ionisation only; e- 100 MeV
#
/control/verbose 2
#
/run/initialize
#
/process/eLoss/StepFunction 0.183 170 micrometer
/calor/cutG 95 cm
/calor/cutE 6.05 micrometer
/run/initialize
/run/particle/dumpCutValues
#
/process/inactivate phot
/process/inactivate compt
/process/inactivate conv
/process/inactivate msc
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle e-
/gun/energy 100 MeV
/run/beamOn 100
@@ -0,0 +1,28 @@
# $Id: run05.mac,v 1.1 1999/10/11 13:07:27 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# full Brems only; e- 1 GeV
#
/control/verbose 2
#
/run/initialize
#
/process/eLoss/StepFunction 0.183 170 micrometer
/calor/cutG 2.2 mm
/calor/cutE 95 cm
/run/initialize
/run/particle/dumpCutValues
#
/process/inactivate phot
/process/inactivate compt
/process/inactivate conv
/process/inactivate msc
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle e-
/gun/energy 1 GeV
/run/beamOn 100
@@ -0,0 +1,26 @@
# $Id: run06.mac,v 1.1 1999/10/11 13:07:27 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# Compton + PhotoElectricEffect; Gamma 10 Mev
#
/control/verbose 2
#
/run/initialize
#
/process/eLoss/StepFunction 0.183 170 micrometer
/calor/cutG 95 cm
/calor/cutE 95 cm
/run/initialize
/run/particle/dumpCutValues
#
/process/inactivate conv
/process/inactivate msc
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle gamma
/gun/energy 10 MeV
/run/beamOn 1000
@@ -0,0 +1,27 @@
# $Id: run07.mac,v 1.1 1999/10/11 13:07:27 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# Gamma conversion and e+ annihilation; gamma 100 MeV
#
/control/verbose 2
#
/run/initialize
#
/process/eLoss/StepFunction 0.183 170 micrometer
/calor/cutG 95 cm
/calor/cutE 30 mm
/run/initialize
/run/particle/dumpCutValues
#
/process/inactivate phot
/process/inactivate compt
/process/inactivate msc
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle gamma
/gun/energy 100 MeV
/run/beamOn 1000
@@ -0,0 +1,24 @@
# $Id: run08.mac,v 1.1 1999/10/11 13:07:28 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# electron 100 MeV; all processes
#
/control/verbose 2
#
/run/initialize
#
/process/eLoss/StepFunction 0.183 170 micrometer
/calor/cutG 2.2 mm
####/calor/cutE 1.4 micrometer #before beta03-00 (17.11.98)
/calor/cutE 6.05 micrometer #from beta03-00 (17.11.98)
/run/initialize
/run/particle/dumpCutValues
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle e-
/gun/energy 100 MeV
/run/beamOn 100
@@ -0,0 +1,25 @@
# $Id: run09.mac,v 1.1 1999/10/11 13:07:28 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# electron 1 GeV; all processes
#
/control/verbose 2
#
/run/initialize
#
/process/eLoss/StepFunction 0.183 170 micrometer
/calor/cutG 2.2 mm
####/calor/cutE 1.4 micrometer #before beta03-00 (17.11.98)
/calor/cutE 6.05 micrometer #from beta03-00 (17.11.98)
/run/initialize
/run/particle/dumpCutValues
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle e-
/gun/energy 1 GeV
/event/printModulo 10
/run/beamOn 100
@@ -0,0 +1,19 @@
# $Id: run11.mac,v 1.1 1999/10/11 13:07:29 maire Exp $
#
# Macro file for "TestEm1.cc"
# (can be run in batch, without graphic)
#
# Eloss only + muls; e- 1 GeV
#
/control/verbose 2
#
/calor/cutG 95 cm
/calor/cutE 17 cm
/run/initialize
#
/run/verbose 2
/event/drawTracks none
#
/gun/particle e-
/gun/energy 1 GeV
/run/beamOn 1000
@@ -0,0 +1,224 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1DetectorConstruction.cc,v 1.1.4.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1DetectorConstruction.hh"
#include "Em1DetectorMessenger.hh"
#include "G4Material.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4UniformMagField.hh"
#include "G4FieldManager.hh"
#include "G4TransportationManager.hh"
#include "G4RunManager.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "G4UnitsTable.hh"
#include "G4ios.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1DetectorConstruction::Em1DetectorConstruction()
:pBox (NULL), lBox (NULL),
aMaterial(NULL),
magField (NULL)
{
// create commands for interactive definition of the detector
detectorMessenger = new Em1DetectorMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1DetectorConstruction::~Em1DetectorConstruction()
{ delete detectorMessenger;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4VPhysicalVolume* Em1DetectorConstruction::Construct()
{
DefineMaterials();
BoxSize = 20*m;
return ConstructVolumes();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1DetectorConstruction::DefineMaterials()
{
//This function illustrates the possible ways to define materials
G4String name, symbol; //a=mass of a mole;
G4double a, z, density; //z=mean number of protons;
G4int ncomponents, natoms;
G4double fractionmass;
//
// define Elements
//
a = 1.01*g/mole;
G4Element* H = new G4Element(name="Hydrogen",symbol="H" , z= 1., a);
a = 14.01*g/mole;
G4Element* N = new G4Element(name="Nitrogen",symbol="N" , z= 7., a);
a = 16.00*g/mole;
G4Element* O = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a);
//
// define materials
//
density = 1.290*mg/cm3;
G4Material* Air = new G4Material(name="Air" , density, ncomponents=2);
Air->AddElement(N, fractionmass=70.*perCent);
Air->AddElement(O, fractionmass=30.*perCent);
density = 70.8*mg/cm3;
G4Material* H2l = new G4Material(name="H2liquid", density, ncomponents=1);
H2l->AddElement(H, fractionmass=1.);
density = 1.000*g/cm3;
G4Material* H2O = new G4Material(name="Water", density, ncomponents=2);
H2O->AddElement(H, natoms=2);
H2O->AddElement(O, natoms=1);
density = 1.390*g/cm3;
a = 39.95*g/mole;
G4Material* lAr = new G4Material(name="liquidArgon", z=18., a, density);
density = 2.700*g/cm3;
a = 26.98*g/mole;
G4Material* Al = new G4Material(name="Aluminium" , z=13., a, density);
density = 7.870*g/cm3;
a = 55.85*g/mole;
G4Material* Fe = new G4Material(name="Iron" , z=26., a, density);
density = 11.35*g/cm3;
a = 207.19*g/mole;
G4Material* Pb = new G4Material(name="Lead" , z=82., a, density);
density = 18.95*g/cm3;
a = 238.03*g/mole;
G4Material* U = new G4Material(name="Uranium" , z=82., a, density);
G4cout << *(G4Material::GetMaterialTable()) << endl;
//default materials of the calorimeter
aMaterial = Al;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4VPhysicalVolume* Em1DetectorConstruction::ConstructVolumes()
{
G4Box*
sBox = new G4Box("Container", //its name
BoxSize/2,BoxSize/2,BoxSize/2); //its dimensions
lBox = new G4LogicalVolume(sBox, //its shape
aMaterial, //its material
"Container"); //its name
pBox = new G4PVPlacement(0, //no rotation
G4ThreeVector(), //at (0,0,0)
"Container", //its name
lBox, //its logical volume
NULL, //its mother volume
false, //no boolean operation
0); //copy number
//
// Visualization attributes
//
G4VisAttributes* visAtt= new G4VisAttributes(G4Colour(1.0,1.0,1.0));
visAtt->SetVisibility(true);
lBox->SetVisAttributes(visAtt);
//
//always return the root volume
//
PrintParameters();
return pBox;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1DetectorConstruction::PrintParameters()
{
G4cout << "\n The Box is " << G4BestUnit(BoxSize,"Length")
<< " of " << aMaterial->GetName() << endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1DetectorConstruction::SetMaterial(G4String materialChoice)
{
// search the material by its name
G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);
if (pttoMaterial)
{aMaterial = pttoMaterial;
lBox->SetMaterial(aMaterial);
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1DetectorConstruction::SetSize(G4double value)
{
BoxSize = value;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1DetectorConstruction::SetMagField(G4double fieldValue)
{
//apply a global uniform magnetic field along Z axis
G4FieldManager* fieldMgr
= G4TransportationManager::GetTransportationManager()->GetFieldManager();
if (magField) delete magField; //delete the existing magn field
if (fieldValue!=0.) // create a new one if non nul
{
magField = new G4UniformMagField(G4ThreeVector(0.,0.,fieldValue));
fieldMgr->SetDetectorField(magField);
fieldMgr->CreateChordFinder(magField);
}
else
{
magField = NULL;
fieldMgr->SetDetectorField(magField);
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1DetectorConstruction::UpdateGeometry()
{
G4RunManager::GetRunManager()->DefineWorldVolume(ConstructVolumes());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,86 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1DetectorMessenger.cc,v 1.1.4.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1DetectorMessenger.hh"
#include "Em1DetectorConstruction.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithADoubleAndUnit.hh"
#include "G4UIcmdWithoutParameter.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1DetectorMessenger::Em1DetectorMessenger(Em1DetectorConstruction * Em1Det)
:Em1Detector(Em1Det)
{
Em1detDir = new G4UIdirectory("/calor/");
Em1detDir->SetGuidance("Em1 detector control.");
MaterCmd = new G4UIcmdWithAString("/calor/setMat",this);
MaterCmd->SetGuidance("Select material of the box.");
MaterCmd->SetParameterName("choice",false);
MaterCmd->AvailableForStates(Idle);
SizeCmd = new G4UIcmdWithADoubleAndUnit("/calor/setSize",this);
SizeCmd->SetGuidance("Set size of the box");
SizeCmd->SetParameterName("Size",false);
SizeCmd->SetRange("Size>0.");
SizeCmd->SetUnitCategory("Length");
SizeCmd->AvailableForStates(Idle);
MagFieldCmd = new G4UIcmdWithADoubleAndUnit("/calor/setField",this);
MagFieldCmd->SetGuidance("Define magnetic field.");
MagFieldCmd->SetGuidance("Magnetic field will be in Z direction.");
MagFieldCmd->SetParameterName("Bz",false);
MagFieldCmd->SetUnitCategory("Magnetic flux density");
MagFieldCmd->AvailableForStates(Idle);
UpdateCmd = new G4UIcmdWithoutParameter("/calor/update",this);
UpdateCmd->SetGuidance("Update calorimeter geometry.");
UpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
UpdateCmd->SetGuidance("if you changed geometrical value(s).");
UpdateCmd->AvailableForStates(Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1DetectorMessenger::~Em1DetectorMessenger()
{
delete MaterCmd;
delete SizeCmd;
delete MagFieldCmd;
delete UpdateCmd;
delete Em1detDir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
{
if( command == MaterCmd )
{ Em1Detector->SetMaterial(newValue);}
if( command == SizeCmd )
{ Em1Detector->SetSize(SizeCmd->GetNewDoubleValue(newValue));}
if( command == MagFieldCmd )
{ Em1Detector->SetMagField(MagFieldCmd->GetNewDoubleValue(newValue));}
if( command == UpdateCmd )
{ Em1Detector->UpdateGeometry(); }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,92 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1EventAction.cc,v 1.1.4.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1EventAction.hh"
#include "Em1RunAction.hh"
#include "Em1EventActionMessenger.hh"
#include "G4Event.hh"
#include "G4EventManager.hh"
#include "G4TrajectoryContainer.hh"
#include "G4Trajectory.hh"
#include "G4VVisManager.hh"
#include "G4ios.hh"
#include "G4UnitsTable.hh"
#include "Randomize.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1EventAction::Em1EventAction(Em1RunAction* run)
:Em1Run(run),drawFlag("all"),printModulo(10000),eventMessenger(NULL)
{
eventMessenger = new Em1EventActionMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1EventAction::~Em1EventAction()
{
delete eventMessenger;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1EventAction::BeginOfEventAction(const G4Event* evt)
{
G4int evtNb = evt->GetEventID();
if (evtNb%printModulo == 0)
G4cout << "\n---> Begin of Event: " << evtNb << endl;
TotalEnergyDeposit = 0.;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1EventAction::EndOfEventAction(const G4Event* evt)
{
if (drawFlag != "none") G4cout << " Energy deposit: "
<< G4BestUnit(TotalEnergyDeposit,"Energy")
<< endl;
if (G4VVisManager::GetConcreteInstance())
{
const G4Event* evt = fpEventManager->GetConstCurrentEvent();
G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer();
G4int n_trajectories = 0;
if (trajectoryContainer) n_trajectories = trajectoryContainer->entries();
for(G4int i=0; i<n_trajectories; i++)
{ G4Trajectory* trj = (G4Trajectory*)((*(evt->GetTrajectoryContainer()))[i]);
if (drawFlag == "all") trj->DrawTrajectory(50);
else if ((drawFlag == "charged")&&(trj->GetCharge() != 0.))
trj->DrawTrajectory(50);
}
}
//save rndm status
if (Em1Run->GetRndmFreq() == 2)
{
HepRandom::saveEngineStatus("endOfEvent.rndm");
G4int evtNb = evt->GetEventID();
if (evtNb%printModulo == 0)
{
G4cout << "\n---> End of Event: " << evtNb << endl;
HepRandom::showEngineStatus();
}
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,63 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1EventActionMessenger.cc,v 1.1.4.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1EventActionMessenger.hh"
#include "Em1EventAction.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithAnInteger.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1EventActionMessenger::Em1EventActionMessenger(Em1EventAction* EvAct)
:eventAction(EvAct)
{
DrawCmd = new G4UIcmdWithAString("/event/drawTracks",this);
DrawCmd->SetGuidance("Draw the tracks in the event");
DrawCmd->SetGuidance(" Choice : none,charged, all");
DrawCmd->SetParameterName("choice",true);
DrawCmd->SetDefaultValue("all");
DrawCmd->SetCandidates("none charged all");
DrawCmd->AvailableForStates(Idle);
PrintCmd = new G4UIcmdWithAnInteger("/event/printModulo",this);
PrintCmd->SetGuidance("Print events modulo n");
PrintCmd->SetParameterName("EventNb",false);
PrintCmd->SetRange("EventNb>0");
PrintCmd->AvailableForStates(Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1EventActionMessenger::~Em1EventActionMessenger()
{
delete DrawCmd;
delete PrintCmd;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1EventActionMessenger::SetNewValue(G4UIcommand * command,G4String newValue)
{
if(command == DrawCmd)
{eventAction->SetDrawFlag(newValue);}
if(command == PrintCmd)
{eventAction->SetPrintModulo(PrintCmd->GetNewIntValue(newValue));}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,325 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1PhysicsList.cc,v 1.1.4.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1PhysicsList.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleWithCuts.hh"
#include "G4ProcessManager.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4ios.hh"
#include "G4ParticleTable.hh"
#include "G4EnergyLossTables.hh"
#include "G4Material.hh"
#include "G4RunManager.hh"
#include "Em1DetectorConstruction.hh"
#include "Em1PhysicsListMessenger.hh"
#include "G4UImanager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1PhysicsList::Em1PhysicsList(Em1DetectorConstruction* p)
: G4VUserPhysicsList()
{
pDet = p;
defaultCutValue = 1.*mm;
cutForGamma = defaultCutValue;
cutForElectron = defaultCutValue;
cutForProton = defaultCutValue;
SetVerboseLevel(1);
pMes = new Em1PhysicsListMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1PhysicsList::~Em1PhysicsList()
{ delete pMes; }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::ConstructParticle()
{
// In this method, static member functions should be called
// for all particles which you want to use.
// This ensures that objects of these particle types will be
// created in the program.
ConstructBosons();
ConstructLeptons();
ConstructMesons();
ConstructBarions();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::ConstructBosons()
{
// pseudo-particles
G4Geantino::GeantinoDefinition();
G4ChargedGeantino::ChargedGeantinoDefinition();
// gamma
G4Gamma::GammaDefinition();
// optical photon
G4OpticalPhoton::OpticalPhotonDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::ConstructLeptons()
{
// leptons
G4Electron::ElectronDefinition();
G4Positron::PositronDefinition();
G4MuonPlus::MuonPlusDefinition();
G4MuonMinus::MuonMinusDefinition();
G4NeutrinoE::NeutrinoEDefinition();
G4AntiNeutrinoE::AntiNeutrinoEDefinition();
G4NeutrinoMu::NeutrinoMuDefinition();
G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::ConstructMesons()
{
// mesons
G4PionPlus::PionPlusDefinition();
G4PionMinus::PionMinusDefinition();
G4PionZero::PionZeroDefinition();
G4Eta::EtaDefinition();
G4EtaPrime::EtaPrimeDefinition();
G4RhoZero::RhoZeroDefinition();
G4KaonPlus::KaonPlusDefinition();
G4KaonMinus::KaonMinusDefinition();
G4KaonZero::KaonZeroDefinition();
G4AntiKaonZero::AntiKaonZeroDefinition();
G4KaonZeroLong::KaonZeroLongDefinition();
G4KaonZeroShort::KaonZeroShortDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::ConstructBarions()
{
// barions
G4Proton::ProtonDefinition();
G4AntiProton::AntiProtonDefinition();
G4Neutron::NeutronDefinition();
G4AntiNeutron::AntiNeutronDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::ConstructProcess()
{
AddTransportation();
ConstructEM();
ConstructGeneral();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4ComptonScattering.hh"
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4MultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
#include "G4MuIonisation.hh"
#include "G4MuBremsstrahlung.hh"
#include "G4MuPairProduction.hh"
#include "G4hIonisation.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::ConstructEM()
{
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String particleName = particle->GetParticleName();
if (particleName == "gamma") {
// gamma
pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
pmanager->AddDiscreteProcess(new G4ComptonScattering);
pmanager->AddDiscreteProcess(new G4GammaConversion);
} else if (particleName == "e-") {
//electron
pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
pmanager->AddProcess(new G4eIonisation, -1, 2,2);
pmanager->AddProcess(new G4eBremsstrahlung, -1,-1,3);
} else if (particleName == "e+") {
//positron
pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
pmanager->AddProcess(new G4eIonisation, -1, 2,2);
pmanager->AddProcess(new G4eBremsstrahlung, -1,-1,3);
pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4);
} else if( particleName == "mu+" ||
particleName == "mu-" ) {
//muon
pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
pmanager->AddProcess(new G4MuIonisation, -1, 2,2);
pmanager->AddProcess(new G4MuBremsstrahlung, -1,-1,3);
pmanager->AddProcess(new G4MuPairProduction, -1,-1,4);
} else if ((!particle->IsShortLived()) &&
(particle->GetPDGCharge() != 0.0) &&
(particle->GetParticleName() != "chargedgeantino")) {
//all others charged particles except geantino
pmanager->AddProcess(new G4MultipleScattering,-1,1,1);
pmanager->AddProcess(new G4hIonisation, -1,2,2);
}
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4Decay.hh"
void Em1PhysicsList::ConstructGeneral()
{
// Add Decay Process
G4Decay* theDecayProcess = new G4Decay();
theParticleIterator->reset();
while ((*theParticleIterator)()){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
if (theDecayProcess->IsApplicable(*particle)) {
pmanager ->AddProcess(theDecayProcess);
// set ordering for PostStepDoIt and AtRestDoIt
pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
}
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::SetCuts()
{
if (verboseLevel >0){
G4cout << "Em1PhysicsList::SetCuts:";
G4cout << "CutLength : " << defaultCutValue/mm << " (mm)" << endl;
}
// set cut values for gamma at first and for e- second and next for e+,
// because some processes for e+/e- need cut values for gamma
SetCutValue(cutForGamma, "gamma");
SetCutValue(cutForElectron, "e-");
SetCutValue(cutForElectron, "e+");
// set cut values for proton and anti_proton before all other hadrons
// because some processes for hadrons need cut values for proton/anti_proton
SetCutValue(cutForProton, "proton");
SetCutValue(cutForProton, "anti_proton");
SetCutValueForOthers(defaultCutValue);
if (verboseLevel>0) DumpCutValuesTable();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::SetGammaCut(G4double val)
{
ResetCuts();
cutForGamma = val;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::SetElectronCut(G4double val)
{
ResetCuts();
cutForElectron = val;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::SetProtonCut(G4double val)
{
ResetCuts();
cutForProton = val;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::SetCutsByEnergy(G4double val)
{
G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable();
G4Material* currMat = pDet->GetMaterial();
// set cut values for gamma at first and for e- second and next for e+,
// because some processes for e+/e- need cut values for gamma
G4ParticleDefinition* part;
G4double cut;
part = theParticleTable->FindParticle("e-");
cut = G4EnergyLossTables::GetRange(part,val,currMat);
SetCutValue(cut, "e-");
part = theParticleTable->FindParticle("e+");
cut = G4EnergyLossTables::GetRange(part,val,currMat);
SetCutValue(cut, "e+");
// set cut values for proton and anti_proton before all other hadrons
// because some processes for hadrons need cut values for proton/anti_proton
part = theParticleTable->FindParticle("proton");
cut = G4EnergyLossTables::GetRange(part,val,currMat);
SetCutValue(cut, "proton");
part = theParticleTable->FindParticle("anti_proton");
cut = G4EnergyLossTables::GetRange(part,val,currMat);
SetCutValue(cut, "anti_proton");
SetCutValueForOthers(cut);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsList::GetRange(G4double val)
{
G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable();
G4Material* currMat = pDet->GetMaterial();
G4ParticleDefinition* part;
G4double cut;
part = theParticleTable->FindParticle("e-");
cut = G4EnergyLossTables::GetRange(part,val,currMat);
G4cout << "material : " << currMat->GetName() << endl;
G4cout << "particle : " << part->GetParticleName() << endl;
G4cout << "energy : " << val / keV << " (keV)" << endl;
G4cout << "range : " << cut / mm << " (mm)" << endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,91 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1PhysicsListMessenger.cc,v 1.1.4.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1PhysicsListMessenger.hh"
#include "Em1PhysicsList.hh"
#include "G4UIcmdWithADoubleAndUnit.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1PhysicsListMessenger::Em1PhysicsListMessenger(Em1PhysicsList* EvAct)
:physList(EvAct)
{
cutGCmd = new G4UIcmdWithADoubleAndUnit("/calor/cutG",this);
cutGCmd->SetGuidance("Set cut values by RANGE for Gamma.");
cutGCmd->SetParameterName("range",false);
cutGCmd->SetRange("range>0.");
cutGCmd->SetUnitCategory("Length");
cutGCmd->AvailableForStates(Idle);
cutECmd = new G4UIcmdWithADoubleAndUnit("/calor/cutE",this);
cutECmd->SetGuidance("Set cut values by RANGE for e- e+.");
cutECmd->SetParameterName("range",false);
cutECmd->SetRange("range>0.");
cutECmd->SetUnitCategory("Length");
cutECmd->AvailableForStates(Idle);
cutPCmd = new G4UIcmdWithADoubleAndUnit("/calor/cutP",this);
cutPCmd->SetGuidance("Set cut values by RANGE for proton and others.");
cutPCmd->SetParameterName("range",false);
cutPCmd->SetRange("range>0.");
cutPCmd->SetUnitCategory("Length");
cutPCmd->AvailableForStates(Idle);
eCmd = new G4UIcmdWithADoubleAndUnit("/calor/cutEnergy",this);
eCmd->SetGuidance("Set cut values by ENERGY for charged particles.");
eCmd->SetParameterName("energy",false);
eCmd->SetRange("energy>0.");
eCmd->SetUnitCategory("Energy");
eCmd->AvailableForStates(Idle);
rCmd = new G4UIcmdWithADoubleAndUnit("/calor/range",this);
rCmd->SetGuidance("Display the RANGE of Electron for the current material.");
rCmd->SetParameterName("energy",false);
rCmd->SetRange("energy>0.");
rCmd->SetUnitCategory("Energy");
rCmd->AvailableForStates(Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1PhysicsListMessenger::~Em1PhysicsListMessenger()
{
delete cutGCmd;
delete cutECmd;
delete cutPCmd;
delete rCmd;
delete eCmd;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PhysicsListMessenger::SetNewValue(G4UIcommand * command,G4String newValue)
{
if(command == cutGCmd)
{physList->SetGammaCut(cutGCmd->GetNewDoubleValue(newValue));}
if(command == cutECmd)
{physList->SetElectronCut(eCmd->GetNewDoubleValue(newValue));}
if(command == cutPCmd)
{physList->SetProtonCut(eCmd->GetNewDoubleValue(newValue));}
if(command == eCmd)
{physList->SetCutsByEnergy(cutECmd->GetNewDoubleValue(newValue));}
if(command == rCmd)
{physList->GetRange(rCmd->GetNewDoubleValue(newValue));}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,55 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1PrimaryGeneratorAction.cc,v 1.1.4.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1PrimaryGeneratorAction.hh"
#include "G4Event.hh"
#include "G4ParticleGun.hh"
#include "G4ParticleTable.hh"
#include "G4ParticleDefinition.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1PrimaryGeneratorAction::Em1PrimaryGeneratorAction()
{
G4int n_particle = 1;
particleGun = new G4ParticleGun(n_particle);
// default particle kinematic
G4ParticleDefinition* particle
= G4ParticleTable::GetParticleTable()->FindParticle("e-");
particleGun->SetParticleDefinition(particle);
particleGun->SetParticleMomentumDirection(G4ThreeVector(1.,0.,0.));
particleGun->SetParticleEnergy(100*MeV);
particleGun->SetParticlePosition(G4ThreeVector(0.*cm,0.*cm,0.*cm));
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1PrimaryGeneratorAction::~Em1PrimaryGeneratorAction()
{
delete particleGun;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
particleGun->GeneratePrimaryVertex(anEvent);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,153 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1RunAction.cc,v 1.1.4.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1RunAction.hh"
#include "Em1RunActionMessenger.hh"
#include "G4Run.hh"
#include "G4UImanager.hh"
#include "G4VVisManager.hh"
#include "G4ios.hh"
#include <iomanip.h>
#include "Randomize.hh"
#include "CLHEP/Hist/HBookFile.h"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1RunAction::Em1RunAction()
:hbookManager(NULL)
{runMessenger = new Em1RunActionMessenger(this);
saveRndm = 1;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1RunAction::~Em1RunAction()
{cleanHisto();
delete runMessenger;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1RunAction::bookHisto()
{
hbookManager = new HBookFile("testem1.histo", 68);
// booking histograms
histo[0] = hbookManager->histogram("track length (mm) of a charged particle",100,0.,50*cm);
histo[1] = hbookManager->histogram("Nb of steps per track (charged particle)",100,0.,100.);
histo[2] = hbookManager->histogram("step length (mm) charged particle",100,0.,10*mm);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1RunAction::cleanHisto()
{
delete [] histo;
delete hbookManager;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1RunAction::BeginOfRunAction(const G4Run* aRun)
{
G4cout << "### Run " << aRun->GetRunID() << " start." << endl;
// save Rndm status
if (saveRndm > 0)
{ HepRandom::showEngineStatus();
HepRandom::saveEngineStatus("beginOfRun.rndm");
}
NbOfTraks0 = 0; NbOfTraks1 = 0; NbOfSteps0 = 0; NbOfSteps1 = 0;
ProcCounter = new ProcessesCount;
//histograms
//
if (aRun->GetRunID() == 0) bookHisto();
if (G4VVisManager::GetConcreteInstance())
{
G4UImanager* UI = G4UImanager::GetUIpointer();
UI->ApplyCommand("/vis/clear/view");
UI->ApplyCommand("/vis/draw/current");
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1RunAction::CountProcesses(G4String procName)
{
//does the process already encounted ?
size_t nbProc = ProcCounter->entries();
size_t i = 0;
while ((i<nbProc)&&((*ProcCounter)[i]->GetName()!=procName)) i++;
if (i == nbProc) ProcCounter->insert( new OneProcessCount(procName));
(*ProcCounter)[i]->Count();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1RunAction::EndOfRunAction(const G4Run* aRun)
{
G4int NbOfEvents = aRun->GetNumberOfEvent();
if (NbOfEvents)
{ //nb of tracks and steps per event
G4double dNbOfEvents = double(NbOfEvents);
G4long oldform = G4cout.setf(ios::fixed,ios::floatfield);
G4int oldprec = G4cout.precision(2);
G4cout << "\n nb tracks/event"
<< " neutral: " << setw(7) << NbOfTraks0/dNbOfEvents
<< " charged: " << setw(7) << NbOfTraks1/dNbOfEvents
<< "\n nb steps/event"
<< " neutral: " << setw(7) << NbOfSteps0/dNbOfEvents
<< " charged: " << setw(7) << NbOfSteps1/dNbOfEvents
<< endl;
//frequency of processes call
G4cout << "\n nb of process calls per event: \n ";
for (G4int i=0; i< ProcCounter->entries();i++)
G4cout << setw(9) << (*ProcCounter)[i]->GetName();
G4cout << "\n ";
for (G4int j=0; j< ProcCounter->entries();j++)
G4cout << setw(9) << ((*ProcCounter)[j]->GetCounter())/dNbOfEvents;
G4cout << endl;
G4cout.setf(oldform,ios::floatfield);
G4cout.precision(oldprec);
}
delete ProcCounter;
//draw the events
if (G4VVisManager::GetConcreteInstance())
G4UImanager::GetUIpointer()->ApplyCommand("/vis/show/view");
// writing histogram file
hbookManager->write();
// save Rndm status
if (saveRndm == 1)
{ HepRandom::showEngineStatus();
HepRandom::saveEngineStatus("endOfRun.rndm");
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,72 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1RunActionMessenger.cc,v 1.1.4.1 1999/12/07 20:46:55 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1RunActionMessenger.hh"
#include "Em1RunAction.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithAnInteger.hh"
#include "G4ios.hh"
#include "globals.hh"
#include "Randomize.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1RunActionMessenger::Em1RunActionMessenger(Em1RunAction* run)
:Em1Run(run)
{
RndmDir = new G4UIdirectory("/rndm/");
RndmDir->SetGuidance("Rndm status control.");
RndmSaveCmd = new G4UIcmdWithAnInteger("/rndm/save",this);
RndmSaveCmd->SetGuidance("set frequency to save rndm status on external files.");
RndmSaveCmd->SetGuidance("freq = 0 not saved");
RndmSaveCmd->SetGuidance("freq > 0 saved on: beginOfRun.rndm");
RndmSaveCmd->SetGuidance("freq = 1 saved on: endOfRun.rndm");
RndmSaveCmd->SetGuidance("freq = 2 saved on: endOfEvent.rndm");
RndmSaveCmd->SetParameterName("frequency",false);
RndmSaveCmd->SetRange("frequency>=0 && frequency<=2");
RndmSaveCmd->AvailableForStates(PreInit,Idle);
RndmReadCmd = new G4UIcmdWithAString("/rndm/read",this);
RndmReadCmd->SetGuidance("get rndm status from an external file.");
RndmReadCmd->SetParameterName("fileName",true);
RndmReadCmd->SetDefaultValue ("beginOfRun.rndm");
RndmReadCmd->AvailableForStates(PreInit,Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1RunActionMessenger::~Em1RunActionMessenger()
{
delete RndmSaveCmd; delete RndmReadCmd; delete RndmDir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1RunActionMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
{
if (command == RndmSaveCmd)
Em1Run->SetRndmFreq(RndmSaveCmd->GetNewIntValue(newValue));
if (command == RndmReadCmd)
{ G4cout << "\n---> rndm status restored from file: " << newValue << endl;
HepRandom::restoreEngineStatus(newValue);
HepRandom::showEngineStatus();
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,52 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em1SteppingAction.cc,v 1.1.4.1 1999/12/07 20:46:56 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em1SteppingAction.hh"
#include "Em1RunAction.hh"
#include "Em1EventAction.hh"
#include "G4SteppingManager.hh"
#include "G4VProcess.hh"
#include "CLHEP/Hist/HBookFile.h"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1SteppingAction::Em1SteppingAction(Em1RunAction* RuAct, Em1EventAction* EvAct)
:runAction(RuAct),eventAction(EvAct)
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em1SteppingAction::~Em1SteppingAction()
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em1SteppingAction::UserSteppingAction(const G4Step* aStep)
{
G4double EdepStep = aStep->GetTotalEnergyDeposit();
if (EdepStep > 0.) eventAction->addEdep(EdepStep);
const G4VProcess* process = aStep->GetPostStepPoint()->GetProcessDefinedStep();
if (process) runAction->CountProcesses(process->GetProcessName());
G4double charge = aStep->GetTrack()->GetDefinition()->GetPDGCharge();
G4double steplen = aStep->GetStepLength();
if (charge != 0.) runAction->GetHisto(2)->accumulate(steplen);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....

Some files were not shown because too many files have changed in this diff Show More