Geant4  10.02.p03
RE06ParallelWorld Class Reference

#include <RE06ParallelWorld.hh>

Inheritance diagram for RE06ParallelWorld:
Collaboration diagram for RE06ParallelWorld:

Public Member Functions

 RE06ParallelWorld (G4String worldName)
 
virtual ~RE06ParallelWorld ()
 
virtual void Construct ()
 
virtual void ConstructSD ()
 
void SetSerialGeometry (G4bool ser)
 
G4bool IsSerial () const
 
- Public Member Functions inherited from G4VUserParallelWorld
 G4VUserParallelWorld (G4String worldName)
 
virtual ~G4VUserParallelWorld ()
 
G4String GetName ()
 

Private Member Functions

void SetupGeometry ()
 
void SetupDetectors ()
 

Private Attributes

G4LogicalVolumefCalorLogical [3]
 
G4LogicalVolumefLayerLogical [3]
 
G4VPhysicalVolumefCalorPhysical [3]
 
G4VPhysicalVolumefLayerPhysical [3]
 
G4String fCalName [3]
 
G4bool fConstructed
 
G4bool fSerial
 
G4double fTotalThickness
 
G4int fNumberOfLayers
 

Static Private Attributes

static G4ThreadLocal G4bool fSDConstructed = false
 

Additional Inherited Members

- Protected Member Functions inherited from G4VUserParallelWorld
G4VPhysicalVolumeGetWorld ()
 
void SetSensitiveDetector (const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
 
void SetSensitiveDetector (G4LogicalVolume *logVol, G4VSensitiveDetector *aSD)
 
- Protected Attributes inherited from G4VUserParallelWorld
G4String fWorldName
 

Detailed Description

Definition at line 41 of file RE06ParallelWorld.hh.

Constructor & Destructor Documentation

◆ RE06ParallelWorld()

RE06ParallelWorld::RE06ParallelWorld ( G4String  worldName)

Definition at line 56 of file RE06ParallelWorld.cc.

57 :G4VUserParallelWorld(worldName),
58  fConstructed(false),
59  fSerial(false),
60  fTotalThickness(2.0*m),
61  fNumberOfLayers(20)
62 {
63  for(size_t i=0;i<3;i++)
64  {
65  fCalorLogical[i] = 0;
66  fLayerLogical[i] = 0;
67  fCalorPhysical[i] = 0;
68  fLayerPhysical[i] = 0;
69  }
70  fCalName[0] = "Calor-AP";
71  fCalName[1] = "Calor-BP";
72  fCalName[2] = "Calor-CP";
73 }
G4VUserParallelWorld(G4String worldName)
G4LogicalVolume * fLayerLogical[3]
G4LogicalVolume * fCalorLogical[3]
static const double m
Definition: G4SIunits.hh:128
G4VPhysicalVolume * fLayerPhysical[3]
G4VPhysicalVolume * fCalorPhysical[3]

◆ ~RE06ParallelWorld()

RE06ParallelWorld::~RE06ParallelWorld ( )
virtual

Definition at line 77 of file RE06ParallelWorld.cc.

78 {;}

Member Function Documentation

◆ Construct()

void RE06ParallelWorld::Construct ( void  )
virtual

Implements G4VUserParallelWorld.

Definition at line 82 of file RE06ParallelWorld.cc.

83 {
84  if(!fConstructed)
85  {
86  fConstructed = true;
87  SetupGeometry();
88  }
89 }
Here is the call graph for this function:

◆ ConstructSD()

void RE06ParallelWorld::ConstructSD ( )
virtual

Reimplemented from G4VUserParallelWorld.

Definition at line 93 of file RE06ParallelWorld.cc.

94 {
95  if(!fSDConstructed)
96  {
97  fSDConstructed = true;
99  }
100 }
static G4ThreadLocal G4bool fSDConstructed
Here is the call graph for this function:

◆ IsSerial()

G4bool RE06ParallelWorld::IsSerial ( ) const
inline

Definition at line 51 of file RE06ParallelWorld.hh.

51 { return fSerial; }
Here is the call graph for this function:

◆ SetSerialGeometry()

void RE06ParallelWorld::SetSerialGeometry ( G4bool  ser)

Definition at line 201 of file RE06ParallelWorld.cc.

202 {
203  if(fSerial==serial) return;
204  fSerial=serial;
205  if(!fConstructed) return;
206  for(G4int i=0;i<3;i++)
207  {
208  if(fSerial)
209  {
210  fCalorPhysical[i]
211  ->SetTranslation(G4ThreeVector(0.,0.,G4double(i-1)*2.*m));
212  }
213  else
214  {
215  fCalorPhysical[i]
216  ->SetTranslation(G4ThreeVector(0.,G4double(i-1)*m,0.));
217  }
218  }
219 }
CLHEP::Hep3Vector G4ThreeVector
int G4int
Definition: G4Types.hh:78
void SetTranslation(const G4ThreeVector &v)
static const double m
Definition: G4SIunits.hh:128
double G4double
Definition: G4Types.hh:76
G4VPhysicalVolume * fCalorPhysical[3]
Here is the call graph for this function:

◆ SetupDetectors()

void RE06ParallelWorld::SetupDetectors ( )
private

Definition at line 152 of file RE06ParallelWorld.cc.

153 {
155  G4String filterName, particleName;
156 
157  G4SDParticleFilter* gammaFilter
158  = new G4SDParticleFilter(filterName="gammaFilter",particleName="gamma");
159  G4SDParticleFilter* electronFilter
160  = new G4SDParticleFilter(filterName="electronFilter",particleName="e-");
161  G4SDParticleFilter* positronFilter
162  = new G4SDParticleFilter(filterName="positronFilter",particleName="e+");
163  G4SDParticleFilter* epFilter
164  = new G4SDParticleFilter(filterName="epFilter");
165  epFilter->add(particleName="e-");
166  epFilter->add(particleName="e+");
167 
168  for(G4int i=0;i<3;i++)
169  {
170  G4String detName = fCalName[i]+"_para";
172 
173  G4VPrimitiveScorer* primitive;
174  primitive = new G4PSEnergyDeposit("eDep");
175  det->RegisterPrimitive(primitive);
176  primitive = new G4PSNofSecondary("nGamma");
177  primitive->SetFilter(gammaFilter);
178  det->RegisterPrimitive(primitive);
179  primitive = new G4PSNofSecondary("nElectron");
180  primitive->SetFilter(electronFilter);
181  det->RegisterPrimitive(primitive);
182  primitive = new G4PSNofSecondary("nPositron");
183  primitive->SetFilter(positronFilter);
184  det->RegisterPrimitive(primitive);
185  primitive = new G4PSTrackLength("trackLength");
186  primitive->SetFilter(epFilter);
187  det->RegisterPrimitive(primitive);
188  primitive = new G4PSNofStep("nStep");
189  primitive->SetFilter(epFilter);
190  det->RegisterPrimitive(primitive);
191 
194  }
196 
197 }
G4bool RegisterPrimitive(G4VPrimitiveScorer *)
void SetVerboseLevel(G4int vl)
Definition: G4SDManager.hh:90
void SetFilter(G4VSDFilter *f)
int G4int
Definition: G4Types.hh:78
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
G4LogicalVolume * fLayerLogical[3]
void AddNewDetector(G4VSensitiveDetector *aSD)
Definition: G4SDManager.cc:71
void add(const G4String &particleName)
static G4SDManager * GetSDMpointer()
Definition: G4SDManager.cc:40
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetupGeometry()

void RE06ParallelWorld::SetupGeometry ( )
private

Definition at line 103 of file RE06ParallelWorld.cc.

104 {
105  //
106  // World
107  //
108  G4VPhysicalVolume* ghostWorld = GetWorld();
109  G4LogicalVolume* worldLogical = ghostWorld->GetLogicalVolume();
110 
111  //
112  // Calorimeter
113  //
114  G4VSolid* calorSolid
115  = new G4Tubs("Calor",0.0,0.5*m,fTotalThickness/2.,0.0,360.*deg);
116  G4int i;
117  for(i=0;i<3;i++)
118  {
119  fCalorLogical[i] = new G4LogicalVolume(calorSolid,0,fCalName[i]);
120  if(fSerial)
121  {
122  fCalorPhysical[i] = new G4PVPlacement(0,
124  fCalorLogical[i],fCalName[i],worldLogical,false,i);
125  }
126  else
127  {
128  fCalorPhysical[i] = new G4PVPlacement(0,
129  G4ThreeVector(0.,G4double(i-1)*m,0.),
130  fCalorLogical[i],fCalName[i],worldLogical,false,i);
131  }
132  }
133 
134  //
135  // Layers --- as absorbers
136  //
137  G4VSolid* layerSolid
138  = new G4Tubs("Layer",0.0,0.5*m,fTotalThickness/2.,0.0,360.*deg);
139  for(i=0;i<3;i++)
140  {
141  fLayerLogical[i]
142  = new G4LogicalVolume(layerSolid,0,fCalName[i]+"_LayerLog");
143  fLayerPhysical[i]
144  = new G4PVReplica(fCalName[i]+"_Layer",fLayerLogical[i],fCalorLogical[i],
146  }
147 
148 }
CLHEP::Hep3Vector G4ThreeVector
G4VPhysicalVolume * GetWorld()
Definition: G4Tubs.hh:85
int G4int
Definition: G4Types.hh:78
static const double deg
Definition: G4SIunits.hh:151
G4LogicalVolume * fLayerLogical[3]
G4LogicalVolume * fCalorLogical[3]
static const double m
Definition: G4SIunits.hh:128
double G4double
Definition: G4Types.hh:76
Definition: geomdefs.hh:54
G4LogicalVolume * GetLogicalVolume() const
G4VPhysicalVolume * fLayerPhysical[3]
G4VPhysicalVolume * fCalorPhysical[3]
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ fCalName

G4String RE06ParallelWorld::fCalName[3]
private

Definition at line 61 of file RE06ParallelWorld.hh.

◆ fCalorLogical

G4LogicalVolume* RE06ParallelWorld::fCalorLogical[3]
private

Definition at line 57 of file RE06ParallelWorld.hh.

◆ fCalorPhysical

G4VPhysicalVolume* RE06ParallelWorld::fCalorPhysical[3]
private

Definition at line 59 of file RE06ParallelWorld.hh.

◆ fConstructed

G4bool RE06ParallelWorld::fConstructed
private

Definition at line 62 of file RE06ParallelWorld.hh.

◆ fLayerLogical

G4LogicalVolume* RE06ParallelWorld::fLayerLogical[3]
private

Definition at line 58 of file RE06ParallelWorld.hh.

◆ fLayerPhysical

G4VPhysicalVolume* RE06ParallelWorld::fLayerPhysical[3]
private

Definition at line 60 of file RE06ParallelWorld.hh.

◆ fNumberOfLayers

G4int RE06ParallelWorld::fNumberOfLayers
private

Definition at line 66 of file RE06ParallelWorld.hh.

◆ fSDConstructed

G4ThreadLocal G4bool RE06ParallelWorld::fSDConstructed = false
staticprivate

Definition at line 63 of file RE06ParallelWorld.hh.

◆ fSerial

G4bool RE06ParallelWorld::fSerial
private

Definition at line 64 of file RE06ParallelWorld.hh.

◆ fTotalThickness

G4double RE06ParallelWorld::fTotalThickness
private

Definition at line 65 of file RE06ParallelWorld.hh.


The documentation for this class was generated from the following files: