Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/xray_telescope/src/XrayTelDetectorConstruction.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/xray_telescope/src/XrayTelDetectorConstruction.cc (Version 11.3.0) and /examples/advanced/xray_telescope/src/XrayTelDetectorConstruction.cc (Version 4.0.p1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 //                                                
 27 // *******************************************    
 28 // *                                              
 29 // *                    GEANT 4 xray_telescope    
 30 // *                                              
 31 // * MODULE:            XrayTelDetectorConstru    
 32 // * -------                                      
 33 // *                                              
 34 // * Version:           0.4                       
 35 // * Date:              06/11/00                  
 36 // * Author:            R Nartallo                
 37 // * Organisation:      ESA/ESTEC, Noordwijk,     
 38 // *                                              
 39 // *******************************************    
 40 //                                                
 41 // CHANGE HISTORY                                 
 42 // --------------                                 
 43 //                                                
 44 // 06.11.2000 R.Nartallo                          
 45 // - First implementation of xray_telescope ge    
 46 // - Based on Chandra and XMM models by R Nart    
 47 //   and P Arce                                   
 48 //                                                
 49 //                                                
 50 // *******************************************    
 51                                                   
 52 #include "XrayTelDetectorConstruction.hh"         
 53                                                   
 54 #include "globals.hh"                             
 55 #include "G4PhysicalConstants.hh"                 
 56 #include "G4SystemOfUnits.hh"                     
 57 #include "G4UnitsTable.hh"                        
 58 #include "G4VUserDetectorConstruction.hh"         
 59 #include "G4Material.hh"                          
 60 #include "G4MaterialTable.hh"                     
 61 #include "G4Element.hh"                           
 62 #include "G4ElementTable.hh"                      
 63 #include "G4Box.hh"                               
 64 #include "G4Cons.hh"                              
 65 #include "G4Tubs.hh"                              
 66 #include "G4LogicalVolume.hh"                     
 67 #include "G4ThreeVector.hh"                       
 68 #include "G4PVPlacement.hh"                       
 69 #include "G4PVReplica.hh"                         
 70 #include "G4SDManager.hh"                         
 71 #include "G4VisAttributes.hh"                     
 72 #include "G4Colour.hh"                            
 73                                                   
 74 XrayTelDetectorConstruction::XrayTelDetectorCo    
 75 {                                                 
 76   world_x = 2500.*cm;                             
 77   world_y = 2500.*cm;                             
 78   world_z = 2500.*cm;                             
 79 }                                                 
 80                                                   
 81 XrayTelDetectorConstruction::~XrayTelDetectorC    
 82 {;}                                               
 83                                                   
 84 G4VPhysicalVolume* XrayTelDetectorConstruction    
 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*    
 91                                                   
 92   // Visualization attributes                     
 93   G4VisAttributes* VisAttWorld= new G4VisAttri    
 94                                                   
 95   // World                                        
 96   G4Box * solidWorld = new G4Box( "world_S", w    
 97   G4LogicalVolume * logicalWorld = new G4Logic    
 98               Vacuum,                             
 99               "world_L",                          
100               0,0,0);                             
101                                                   
102   logicalWorld -> SetVisAttributes(VisAttWorld    
103                                                   
104   // Physical volume                              
105   physicalWorld= new G4PVPlacement( 0,            
106             G4ThreeVector(),                      
107             "world_P",        // name (2nd con    
108             logicalWorld,     // logical volum    
109             NULL,             // mother volume    
110             false,            // no boolean op    
111             0);               // copy number      
112                                                   
113   // Make Invisible                               
114   logicalWorld -> SetVisAttributes(G4VisAttrib    
115                                                   
116   // Construct geometry                           
117   ConstructTelescope();                           
118   ConstructFocalPlane();                          
119                                                   
120   return physicalWorld;                           
121 }                                                 
122                                                   
123 //....oooOO0OOooo........oooOO0OOooo........oo    
124                                                   
125 // Construct Telescope                            
126                                                   
127 void XrayTelDetectorConstruction::ConstructTel    
128 {                                                 
129   // Construct Mirror                             
130   // Single shell mirror made of Nickel with t    
131   // Mirror made up of two cones approximating    
132   // two cones approximating the hyperbolic se    
133   // The centre of the mirror is filled wiith     
134   // mirrors, so as to leave a constant Baffle    
135                                                   
136   // Build materials                              
137   G4Material* Ni = new G4Material("Nickel", 28    
138   G4Material* Au = new G4Material("Gold", 79.,    
139   G4Material* Al = new G4Material("Aluminium",    
140                                                   
141   // Visualization attributes                     
142   G4VisAttributes* VisAttMirror = new G4VisAtt    
143                   G4Colour(0/255., 0/255.,255/    
144   G4VisAttributes* VisAttAuCoating = new G4Vis    
145                G4Colour(255/255., 255/255., 0/    
146   G4VisAttributes* VisAttBaffle = new G4VisAtt    
147                   G4Colour(128/255., 128/255.,    
148                                                   
149   // Rotation Matrix                              
150   G4RotationMatrix *rotateMatrix = new G4Rotat    
151   rotateMatrix -> rotateY(90.*deg);               
152                                                   
153   // Construct cones to make  Mirror sections     
154   G4int i;                                        
155   G4double MirrorEnd[5] = { 34.9995975*cm, 34.    
156           34.1347834*cm, 33.6137753*cm };         
157   G4double MirrorPosition[4] = { 772.5*cm, 757    
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* MirrorAuCoatingLogicalVolum    
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] + MirrorNi    
176          MirrorEnd[i+1], MirrorEnd[i+1] + Mirr    
177          MirrorSectionLength/2, 0*deg, 360.*de    
178     MirrorLogicalVolume[i] = new G4LogicalVolu    
179              MirrorSolid[i], Ni, "Mirror_L", 0    
180     MirrorLogicalVolume[i]->SetVisAttributes(V    
181                                                   
182     // Gold coating on mirror                     
183     MirrorAuCoatingSolid[i] = new G4Cons(         
184            "MirrorAuCoating_S",                   
185            MirrorEnd[i] - MirrorAuCoating, Mir    
186            MirrorEnd[i+1] - MirrorAuCoating, M    
187            MirrorSectionLength/2, 0*deg, 360.*    
188     MirrorAuCoatingLogicalVolume[i] = new G4Lo    
189                 MirrorAuCoatingSolid[i],          
190                 Au,                               
191                 "MirrorAuCoating_L",              
192                 0, 0, 0 );                        
193     MirrorAuCoatingLogicalVolume[i]->SetVisAtt    
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.*de    
200     BaffleLogicalVolume[i] = new G4LogicalVolu    
201              BaffleSolid[i], Al, "Baffle_L", 0    
202     BaffleLogicalVolume[i]-> SetVisAttributes(    
203   }                                               
204                                                   
205   // Physical volume                              
206                                                   
207   for ( i=0; i<4; i++ ) {                         
208      new G4PVPlacement(                           
209            rotateMatrix,                          
210            G4ThreeVector( MirrorPosition[i], 0    
211            "Mirror_P",                            
212            MirrorLogicalVolume[i],                
213            physicalWorld, false, 0 );             
214      new G4PVPlacement(                           
215            rotateMatrix,                          
216            G4ThreeVector( MirrorPosition[i], 0    
217            "MirrorAuCoating_P",                   
218            MirrorAuCoatingLogicalVolume[i],       
219            physicalWorld, false, 0 );             
220     new G4PVPlacement(                            
221           rotateMatrix,                           
222           G4ThreeVector( MirrorPosition[i], 0.    
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] -> SetVisAttri    
232     //   MirrorAuCoatingLogicalVolume[i] -> Se    
233     BaffleLogicalVolume[i] -> SetVisAttributes    
234   }                                               
235                                                   
236                                                   
237   // Construct Optical Bench                      
238   // Main Telescope carbon fibre tube and two     
239                                                   
240   G4int nel;                                      
241   G4String symbol;                                
242                                                   
243   // Elements                                     
244   G4Element* C = new G4Element("Carbon", symbo    
245   G4Element* H = new G4Element("Hydrogen",symb    
246                                                   
247   // Materials from Combination                   
248   G4Material* Cf = new G4Material("Carbon Fibr    
249   Cf->AddElement(C,1);                            
250   Cf->AddElement(H,2);                            
251                                                   
252   // Visualization attributes                     
253   G4VisAttributes* VisAttBench = new G4VisAttr    
254                  G4Colour(0/255., 200/255., 0/    
255                                                   
256   // Construct Optical bench                      
257   G4double BenchThickness = 1.0*cm;               
258   G4double BenchFrontEndMinRadiusOut = MirrorE    
259     ( MirrorEnd[3] - MirrorEnd[4] )*7.5/15        
260     + MirrorNiThickness;                          
261   G4double BenchFrontEndMinRadiusIn  = MirrorE    
262     ( MirrorEnd[3] - MirrorEnd[4] )*7.4/15        
263     + MirrorNiThickness;                          
264   G4double BenchFrontEndMaxRadius = MirrorEnd[    
265   G4double BenchBackEndMinRadius = 0.0*cm;        
266   G4double BenchBackEndMaxRadius =  MirrorEnd[    
267   G4double BenchMainLength;                       
268                                                   
269   BenchMainLength = MirrorPosition[3] - BenchT    
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( "BenchFront    
280            BenchFrontEndMinRadiusOut, BenchFro    
281            BenchFrontEndMinRadiusIn, BenchFron    
282            BenchThickness/2, 0*deg, 360.*deg )    
283   BenchFrontEndLogicalVolume = new G4LogicalVo    
284                BenchFrontEndSolid, Al, "BenchF    
285   BenchFrontEndLogicalVolume->SetVisAttributes    
286                                                   
287   BenchBackEndSolid  = new G4Tubs( "BenchBackE    
288            BenchBackEndMinRadius, BenchBackEnd    
289            BenchThickness/2, 0*deg, 360.*deg )    
290   BenchBackEndLogicalVolume = new G4LogicalVol    
291               BenchBackEndSolid, Al, "BenchBac    
292   BenchBackEndLogicalVolume->SetVisAttributes(    
293                                                   
294   BenchMainSolid     = new G4Cons( "BenchMain_    
295            BenchFrontEndMaxRadius - BenchThick    
296            BenchFrontEndMaxRadius,                
297            BenchBackEndMaxRadius - BenchThickn    
298            BenchBackEndMaxRadius,                 
299            BenchMainLength/2, 0*deg, 360.*deg)    
300   BenchMainLogicalVolume = new G4LogicalVolume    
301                  BenchMainSolid, Cf, "BenchMai    
302   BenchMainLogicalVolume -> SetVisAttributes(V    
303                                                   
304   // Physical volume                              
305                                                   
306   new G4PVPlacement(                              
307         rotateMatrix,                             
308         G4ThreeVector( MirrorPosition[3] - Ben    
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/    
317         "BenchBackEnd_P",                         
318         BenchBackEndLogicalVolume,                
319         physicalWorld, false, 0 );                
320                                                   
321   new G4PVPlacement(                              
322         rotateMatrix,                             
323         G4ThreeVector( BenchMainLength/2, 0.0*    
324         "BenchMain_P",                            
325         BenchMainLogicalVolume,                   
326         physicalWorld, false, 0 );                
327                                                   
328   //--- Make Bench Invisible                      
329                                                   
330   // BenchFrontEndLogicalVolume -> SetVisAttri    
331                                                   
332   // BenchBackEndLogicalVolume -> SetVisAttrib    
333   BenchMainLogicalVolume -> SetVisAttributes(G    
334                                                   
335   return;                                         
336 }                                                 
337                                                   
338 // Construct Focal Plane                          
339 // Conical Titanium baffle and silicon detecto    
340                                                   
341 void XrayTelDetectorConstruction::ConstructFoc    
342 {                                                 
343                                                   
344   // Elements                                     
345   G4Material* Ti = new G4Material("Titanium",     
346   G4Material* Si = new G4Material("Silicon", 1    
347                                                   
348   // Visualization attributes                     
349   G4VisAttributes* VisDetectorBaffle = new G4V    
350                  G4Colour(190/255., 255/255.,     
351   G4VisAttributes* VisDetector = new G4VisAttr    
352                  G4Colour(255/255., 0/255., 0/    
353                                                   
354   // Rotation Matrix                              
355   G4RotationMatrix *rotateMatrix = new G4Rotat    
356   rotateMatrix -> rotateY(90.*deg);               
357                                                   
358   // Construct Detector Baffle                    
359   G4double DetectorBaffleLength = 57.2*cm;        
360   G4double DetectorBaffleOuterRadiusIn = 7.1*c    
361   G4double DetectorBaffleOuterRadiusOut = 7.35    
362   G4double DetectorBaffleInnerRadiusIn = 4.55*    
363   G4double DetectorBaffleInnerRadiusOut = 5.75    
364                                                   
365   G4Cons* DetectorBaffleSolid;                    
366                                                   
367   G4LogicalVolume* DetectorBaffleLogicalVolume    
368                                                   
369   DetectorBaffleSolid = new G4Cons( "DetectorB    
370             DetectorBaffleOuterRadiusIn,          
371             DetectorBaffleOuterRadiusOut,         
372             DetectorBaffleInnerRadiusIn,          
373             DetectorBaffleInnerRadiusOut,         
374             DetectorBaffleLength/2, 0*deg, 360    
375   DetectorBaffleLogicalVolume = new G4LogicalV    
376                 DetectorBaffleSolid, Ti, "Dete    
377   DetectorBaffleLogicalVolume -> SetVisAttribu    
378                                                   
379   // Physical volume                              
380                                                   
381   /* G4VPhysicalVolume* DetectorBafflePhysical    
382   new G4PVPlacement(                              
383         rotateMatrix,                             
384         G4ThreeVector( DetectorBaffleLength/2,    
385         "DetectorBaffle_P",                       
386         DetectorBaffleLogicalVolume,              
387         physicalWorld, false, 0 );                
388                                                   
389   //--- Make Invisible                            
390                                                   
391   // DetectorBaffleLogicalVolume -> SetVisAttr    
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.*d    
405   DetectorLogicalVolume = new G4LogicalVolume(    
406                 DetectorSolid, Si, "Detector_L    
407   DetectorLogicalVolume -> SetVisAttributes( V    
408                                                   
409   // Physical volume                              
410   /*G4VPhysicalVolume* DetectorPhysicalVolume     
411   new G4PVPlacement(                              
412         rotateMatrix,                             
413         G4ThreeVector( DetectorThickness/2, 0.    
414         "Detector_P",                             
415         DetectorLogicalVolume,                    
416         physicalWorld, false, 0 );                
417                                                   
418   //--- Make Invisible                            
419   // DetectorLogicalVolume -> SetVisAttributes    
420                                                   
421   return;                                         
422 }                                                 
423