Geant4  10.02.p03
XrayTelDetectorConstruction Class Reference

#include <XrayTelDetectorConstruction.hh>

Inheritance diagram for XrayTelDetectorConstruction:
Collaboration diagram for XrayTelDetectorConstruction:

Public Member Functions

 XrayTelDetectorConstruction ()
 
 ~XrayTelDetectorConstruction ()
 
G4VPhysicalVolumeConstruct ()
 
- Public Member Functions inherited from G4VUserDetectorConstruction
 G4VUserDetectorConstruction ()
 
virtual ~G4VUserDetectorConstruction ()
 
virtual void ConstructSDandField ()
 
virtual void CloneSD ()
 
virtual void CloneF ()
 
void RegisterParallelWorld (G4VUserParallelWorld *)
 
G4int ConstructParallelGeometries ()
 
void ConstructParallelSD ()
 
G4int GetNumberOfParallelWorld () const
 
G4VUserParallelWorldGetParallelWorld (G4int i) const
 

Private Member Functions

void ConstructTelescope ()
 
void ConstructFocalPlane ()
 

Private Attributes

G4double world_x
 
G4double world_y
 
G4double world_z
 
G4VPhysicalVolumephysicalWorld
 

Additional Inherited Members

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

Detailed Description

Definition at line 59 of file XrayTelDetectorConstruction.hh.

Constructor & Destructor Documentation

◆ XrayTelDetectorConstruction()

XrayTelDetectorConstruction::XrayTelDetectorConstruction ( )

Definition at line 74 of file XrayTelDetectorConstruction.cc.

75 {
76  world_x = 2500.*cm;
77  world_y = 2500.*cm;
78  world_z = 2500.*cm;
79 }
static const double cm
Definition: G4SIunits.hh:118

◆ ~XrayTelDetectorConstruction()

XrayTelDetectorConstruction::~XrayTelDetectorConstruction ( )

Definition at line 81 of file XrayTelDetectorConstruction.cc.

82 {;}

Member Function Documentation

◆ Construct()

G4VPhysicalVolume * XrayTelDetectorConstruction::Construct ( void  )
virtual

Implements G4VUserDetectorConstruction.

Definition at line 84 of file XrayTelDetectorConstruction.cc.

85 {
86 
87  // Material: Vacuum
88  G4Material* Vacuum = new G4Material("Vacuum",
89  1.0 , 1.01*g/mole, 1.0E-25*g/cm3,
90  kStateGas, 2.73*kelvin, 3.0E-18*pascal );
91 
92  // Visualization attributes
93  G4VisAttributes* VisAttWorld= new G4VisAttributes( G4Colour(204/255.,255/255.,255/255.));
94 
95  // World
96  G4Box * solidWorld = new G4Box( "world_S", world_x, world_y, world_z );
97  G4LogicalVolume * logicalWorld = new G4LogicalVolume( solidWorld, // solid
98  Vacuum, // material
99  "world_L", // name
100  0,0,0);
101 
102  logicalWorld -> SetVisAttributes(VisAttWorld);
103 
104  // Physical volume
106  G4ThreeVector(),
107  "world_P", // name (2nd constructor)
108  logicalWorld, // logical volume
109  NULL, // mother volume
110  false, // no boolean operation
111  0); // copy number
112 
113  // Make Invisible
114  logicalWorld -> SetVisAttributes(G4VisAttributes::Invisible);
115 
116  // Construct geometry
119 
120  return physicalWorld;
121 }
CLHEP::Hep3Vector G4ThreeVector
Definition: G4Box.hh:64
function g(Y1, Y2, PT2)
Definition: hijing1.383.f:5206
#define pascal
static const double cm3
Definition: G4SIunits.hh:120
static const double kelvin
Definition: G4SIunits.hh:278
static const G4VisAttributes Invisible
static const double mole
Definition: G4SIunits.hh:283
Here is the call graph for this function:

◆ ConstructFocalPlane()

void XrayTelDetectorConstruction::ConstructFocalPlane ( )
private

Definition at line 341 of file XrayTelDetectorConstruction.cc.

342 {
343 
344  // Elements
345  G4Material* Ti = new G4Material("Titanium", 22., 47.867*g/mole, 4.54*g/cm3);
346  G4Material* Si = new G4Material("Silicon", 14., 28.090*g/mole, 2.33*g/cm3);
347 
348  // Visualization attributes
349  G4VisAttributes* VisDetectorBaffle = new G4VisAttributes(
350  G4Colour(190/255., 255/255., 0/255.) );
351  G4VisAttributes* VisDetector = new G4VisAttributes(
352  G4Colour(255/255., 0/255., 0/255.) );
353 
354  // Rotation Matrix
355  G4RotationMatrix *rotateMatrix = new G4RotationMatrix();
356  rotateMatrix -> rotateY(90.*deg);
357 
358  // Construct Detector Baffle
359  G4double DetectorBaffleLength = 57.2*cm;
360  G4double DetectorBaffleOuterRadiusIn = 7.1*cm;
361  G4double DetectorBaffleOuterRadiusOut = 7.35*cm;
362  G4double DetectorBaffleInnerRadiusIn = 4.55*cm;
363  G4double DetectorBaffleInnerRadiusOut = 5.75*cm;
364 
365  G4Cons* DetectorBaffleSolid;
366 
367  G4LogicalVolume* DetectorBaffleLogicalVolume;
368 
369  DetectorBaffleSolid = new G4Cons( "DetectorBaffle_S",
370  DetectorBaffleOuterRadiusIn,
371  DetectorBaffleOuterRadiusOut,
372  DetectorBaffleInnerRadiusIn,
373  DetectorBaffleInnerRadiusOut,
374  DetectorBaffleLength/2, 0*deg, 360.*deg);
375  DetectorBaffleLogicalVolume = new G4LogicalVolume(
376  DetectorBaffleSolid, Ti, "DetectorBaffle_L", 0, 0, 0 );
377  DetectorBaffleLogicalVolume -> SetVisAttributes( VisDetectorBaffle );
378 
379  // Physical volume
380 
381  /* G4VPhysicalVolume* DetectorBafflePhysicalVolume = */
382  new G4PVPlacement(
383  rotateMatrix,
384  G4ThreeVector( DetectorBaffleLength/2, 0.0*cm, 0.0*cm),
385  "DetectorBaffle_P",
386  DetectorBaffleLogicalVolume,
387  physicalWorld, false, 0 );
388 
389  //--- Make Invisible
390 
391  // DetectorBaffleLogicalVolume -> SetVisAttributes( G4VisAttributes::Invisible );
392 
393  // Construct Detector
394 
395  G4double DetectorRadius = 32.5*mm;
396  G4double DetectorThickness = 50e-6*m;
397 
398  G4Tubs* DetectorSolid;
399 
400  G4LogicalVolume* DetectorLogicalVolume;
401 
402  DetectorSolid = new G4Tubs( "Detector_S",
403  0, DetectorRadius,
404  DetectorThickness/2, 0*deg, 360.*deg);
405  DetectorLogicalVolume = new G4LogicalVolume(
406  DetectorSolid, Si, "Detector_L", 0, 0, 0 );
407  DetectorLogicalVolume -> SetVisAttributes( VisDetector );
408 
409  // Physical volume
410  /*G4VPhysicalVolume* DetectorPhysicalVolume = */
411  new G4PVPlacement(
412  rotateMatrix,
413  G4ThreeVector( DetectorThickness/2, 0.0*cm, 0.0*cm),
414  "Detector_P",
415  DetectorLogicalVolume,
416  physicalWorld, false, 0 );
417 
418  //--- Make Invisible
419  // DetectorLogicalVolume -> SetVisAttributes( G4VisAttributes::Invisible );
420 
421  return;
422 }
static const double cm
Definition: G4SIunits.hh:118
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepRotation G4RotationMatrix
Definition: G4Tubs.hh:85
function g(Y1, Y2, PT2)
Definition: hijing1.383.f:5206
static const double deg
Definition: G4SIunits.hh:151
Definition: G4Cons.hh:83
G4Material * Si
Definition: TRTMaterials.hh:78
static const double cm3
Definition: G4SIunits.hh:120
static const double mole
Definition: G4SIunits.hh:283
static const double m
Definition: G4SIunits.hh:128
double G4double
Definition: G4Types.hh:76
static const double mm
Definition: G4SIunits.hh:114
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ConstructTelescope()

void XrayTelDetectorConstruction::ConstructTelescope ( )
private

Definition at line 127 of file XrayTelDetectorConstruction.cc.

128 {
129  // Construct Mirror
130  // Single shell mirror made of Nickel with thin Gold coating
131  // Mirror made up of two cones approximating the parabolic section and
132  // two cones approximating the hyperbolic section
133  // The centre of the mirror is filled wiith a solid aluminium rod shaped as the
134  // mirrors, so as to leave a constant BaffleGap distance from the mirror surface
135 
136  // Build materials
137  G4Material* Ni = new G4Material("Nickel", 28., 58.6934*g/mole, 8.902*g/cm3);
138  G4Material* Au = new G4Material("Gold", 79., 196.96654*g/mole, 19.300*g/cm3);
139  G4Material* Al = new G4Material("Aluminium", 13., 26.98*g/mole, 2.700*g/cm3);
140 
141  // Visualization attributes
142  G4VisAttributes* VisAttMirror = new G4VisAttributes(
143  G4Colour(0/255., 0/255.,255/255.));
144  G4VisAttributes* VisAttAuCoating = new G4VisAttributes(
145  G4Colour(255/255., 255/255., 0/255.));
146  G4VisAttributes* VisAttBaffle = new G4VisAttributes(
147  G4Colour(128/255., 128/255., 128/255.));
148 
149  // Rotation Matrix
150  G4RotationMatrix *rotateMatrix = new G4RotationMatrix();
151  rotateMatrix -> rotateY(90.*deg);
152 
153  // Construct cones to make Mirror sections
154  G4int i;
155  G4double MirrorEnd[5] = { 34.9995975*cm, 34.8277209*cm, 34.6549918*cm,
156  34.1347834*cm, 33.6137753*cm };
157  G4double MirrorPosition[4] = { 772.5*cm, 757.5*cm, 742.5*cm, 727.5*cm };
158  G4double MirrorSectionLength = 15.0*cm;
159  G4double MirrorNiThickness = 1.07*mm;
160  G4double MirrorAuCoating = 50.0e-6*mm;
161  G4double BaffleGap = 4.0*mm;
162 
163  G4Cons* MirrorSolid[4];
164  G4Cons* MirrorAuCoatingSolid[4];
165  G4Cons* BaffleSolid[4];
166 
167  G4LogicalVolume* MirrorLogicalVolume[4];
168  G4LogicalVolume* MirrorAuCoatingLogicalVolume[4];
169  G4LogicalVolume* BaffleLogicalVolume[4];
170 
171  for ( i=0; i<4; i++ ) {
172 
173  // Mirror Nickel base
174  MirrorSolid[i] = new G4Cons( "Mirror_S",
175  MirrorEnd[i], MirrorEnd[i] + MirrorNiThickness,
176  MirrorEnd[i+1], MirrorEnd[i+1] + MirrorNiThickness,
177  MirrorSectionLength/2, 0*deg, 360.*deg);
178  MirrorLogicalVolume[i] = new G4LogicalVolume(
179  MirrorSolid[i], Ni, "Mirror_L", 0, 0, 0 );
180  MirrorLogicalVolume[i]->SetVisAttributes(VisAttMirror);
181 
182  // Gold coating on mirror
183  MirrorAuCoatingSolid[i] = new G4Cons(
184  "MirrorAuCoating_S",
185  MirrorEnd[i] - MirrorAuCoating, MirrorEnd[i],
186  MirrorEnd[i+1] - MirrorAuCoating, MirrorEnd[i+1],
187  MirrorSectionLength/2, 0*deg, 360.*deg);
188  MirrorAuCoatingLogicalVolume[i] = new G4LogicalVolume(
189  MirrorAuCoatingSolid[i],
190  Au,
191  "MirrorAuCoating_L",
192  0, 0, 0 );
193  MirrorAuCoatingLogicalVolume[i]->SetVisAttributes(VisAttAuCoating);
194 
195  // Aluminium baffle inside mirror
196  BaffleSolid[i] = new G4Cons( "Baffle_S",
197  0, MirrorEnd[i] - BaffleGap,
198  0, MirrorEnd[i+1] - BaffleGap,
199  MirrorSectionLength/2, 0*deg, 360.*deg);
200  BaffleLogicalVolume[i] = new G4LogicalVolume(
201  BaffleSolid[i], Al, "Baffle_L", 0, 0, 0 );
202  BaffleLogicalVolume[i]-> SetVisAttributes(VisAttBaffle);
203  }
204 
205  // Physical volume
206 
207  for ( i=0; i<4; i++ ) {
208  new G4PVPlacement(
209  rotateMatrix,
210  G4ThreeVector( MirrorPosition[i], 0.0*cm, 0.0*cm ),
211  "Mirror_P",
212  MirrorLogicalVolume[i],
213  physicalWorld, false, 0 );
214  new G4PVPlacement(
215  rotateMatrix,
216  G4ThreeVector( MirrorPosition[i], 0.0*cm, 0.0*cm ),
217  "MirrorAuCoating_P",
218  MirrorAuCoatingLogicalVolume[i],
219  physicalWorld, false, 0 );
220  new G4PVPlacement(
221  rotateMatrix,
222  G4ThreeVector( MirrorPosition[i], 0.0*cm, 0.0*cm ),
223  "Baffle_P",
224  BaffleLogicalVolume[i],
225  physicalWorld, false, 0 );
226  }
227 
228  // Make Mirror Invisible
229 
230  for ( i=0; i<4; i++ ) {
231  // MirrorLogicalVolume[i] -> SetVisAttributes(G4VisAttributes::Invisible);
232  // MirrorAuCoatingLogicalVolume[i] -> SetVisAttributes(G4VisAttributes::Invisible);
233  BaffleLogicalVolume[i] -> SetVisAttributes(G4VisAttributes::Invisible);
234  }
235 
236 
237  // Construct Optical Bench
238  // Main Telescope carbon fibre tube and two aluminium end caps
239 
240  G4int nel;
242 
243  // Elements
244  G4Element* C = new G4Element("Carbon", symbol="C", 6., 12.011*g/mole);
245  G4Element* H = new G4Element("Hydrogen",symbol="H", 1., 1.00794*g/mole);
246 
247  // Materials from Combination
248  G4Material* Cf = new G4Material("Carbon Fibre", 2.0*g/cm3, nel=2);
249  Cf->AddElement(C,1);
250  Cf->AddElement(H,2);
251 
252  // Visualization attributes
253  G4VisAttributes* VisAttBench = new G4VisAttributes(
254  G4Colour(0/255., 200/255., 0/255.));
255 
256  // Construct Optical bench
257  G4double BenchThickness = 1.0*cm;
258  G4double BenchFrontEndMinRadiusOut = MirrorEnd[4] +
259  ( MirrorEnd[3] - MirrorEnd[4] )*7.5/15
260  + MirrorNiThickness;
261  G4double BenchFrontEndMinRadiusIn = MirrorEnd[4] +
262  ( MirrorEnd[3] - MirrorEnd[4] )*7.4/15
263  + MirrorNiThickness;
264  G4double BenchFrontEndMaxRadius = MirrorEnd[4] + MirrorNiThickness + 25.*cm;
265  G4double BenchBackEndMinRadius = 0.0*cm;
266  G4double BenchBackEndMaxRadius = MirrorEnd[4] + MirrorNiThickness + 5.*cm;
267  G4double BenchMainLength;
268 
269  BenchMainLength = MirrorPosition[3] - BenchThickness;
270 
271  G4Cons* BenchFrontEndSolid;
272  G4Tubs* BenchBackEndSolid;
273  G4Cons* BenchMainSolid;
274 
275  G4LogicalVolume* BenchFrontEndLogicalVolume;
276  G4LogicalVolume* BenchBackEndLogicalVolume;
277  G4LogicalVolume* BenchMainLogicalVolume;
278 
279  BenchFrontEndSolid = new G4Cons( "BenchFrontEnd_S",
280  BenchFrontEndMinRadiusOut, BenchFrontEndMaxRadius,
281  BenchFrontEndMinRadiusIn, BenchFrontEndMaxRadius,
282  BenchThickness/2, 0*deg, 360.*deg );
283  BenchFrontEndLogicalVolume = new G4LogicalVolume(
284  BenchFrontEndSolid, Al, "BenchFrontEnd_L", 0, 0, 0 );
285  BenchFrontEndLogicalVolume->SetVisAttributes(VisAttBench);
286 
287  BenchBackEndSolid = new G4Tubs( "BenchBackEnd_S",
288  BenchBackEndMinRadius, BenchBackEndMaxRadius,
289  BenchThickness/2, 0*deg, 360.*deg );
290  BenchBackEndLogicalVolume = new G4LogicalVolume(
291  BenchBackEndSolid, Al, "BenchBackEnd_L", 0, 0, 0 );
292  BenchBackEndLogicalVolume->SetVisAttributes(VisAttBench);
293 
294  BenchMainSolid = new G4Cons( "BenchMain_S",
295  BenchFrontEndMaxRadius - BenchThickness,
296  BenchFrontEndMaxRadius,
297  BenchBackEndMaxRadius - BenchThickness,
298  BenchBackEndMaxRadius,
299  BenchMainLength/2, 0*deg, 360.*deg);
300  BenchMainLogicalVolume = new G4LogicalVolume(
301  BenchMainSolid, Cf, "BenchMain_L", 0, 0, 0 );
302  BenchMainLogicalVolume -> SetVisAttributes(VisAttBench);
303 
304  // Physical volume
305 
306  new G4PVPlacement(
307  rotateMatrix,
308  G4ThreeVector( MirrorPosition[3] - BenchThickness/2,
309  0.0*cm, 0.0*cm ),
310  "BenchFrontEnd_P",
311  BenchFrontEndLogicalVolume,
312  physicalWorld, false, 0 );
313 
314  new G4PVPlacement(
315  rotateMatrix,
316  G4ThreeVector(0.0*cm - BenchThickness/2, 0.0*cm, 0.0*cm ),
317  "BenchBackEnd_P",
318  BenchBackEndLogicalVolume,
319  physicalWorld, false, 0 );
320 
321  new G4PVPlacement(
322  rotateMatrix,
323  G4ThreeVector( BenchMainLength/2, 0.0*cm, 0.0*cm ),
324  "BenchMain_P",
325  BenchMainLogicalVolume,
326  physicalWorld, false, 0 );
327 
328  //--- Make Bench Invisible
329 
330  // BenchFrontEndLogicalVolume -> SetVisAttributes(G4VisAttributes::Invisible)
331 
332  // BenchBackEndLogicalVolume -> SetVisAttributes(G4VisAttributes::Invisible);
333  BenchMainLogicalVolume -> SetVisAttributes(G4VisAttributes::Invisible);
334 
335  return;
336 }
static const double cm
Definition: G4SIunits.hh:118
G4String symbol
Definition: TRTMaterials.hh:40
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepRotation G4RotationMatrix
Definition: G4Tubs.hh:85
double C(double temp)
int G4int
Definition: G4Types.hh:78
function g(Y1, Y2, PT2)
Definition: hijing1.383.f:5206
static const double deg
Definition: G4SIunits.hh:151
Definition: G4Cons.hh:83
static const double cm3
Definition: G4SIunits.hh:120
static const G4VisAttributes Invisible
static const double mole
Definition: G4SIunits.hh:283
void AddElement(G4Element *element, G4int nAtoms)
Definition: G4Material.cc:364
double G4double
Definition: G4Types.hh:76
static const double mm
Definition: G4SIunits.hh:114
void SetVisAttributes(const G4VisAttributes *pVA)
G4int nel
Definition: TRTMaterials.hh:41
G4Material * Al
Definition: TRTMaterials.hh:74
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ physicalWorld

G4VPhysicalVolume* XrayTelDetectorConstruction::physicalWorld
private

Definition at line 74 of file XrayTelDetectorConstruction.hh.

◆ world_x

G4double XrayTelDetectorConstruction::world_x
private

Definition at line 69 of file XrayTelDetectorConstruction.hh.

◆ world_y

G4double XrayTelDetectorConstruction::world_y
private

Definition at line 70 of file XrayTelDetectorConstruction.hh.

◆ world_z

G4double XrayTelDetectorConstruction::world_z
private

Definition at line 71 of file XrayTelDetectorConstruction.hh.


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