Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/underground_physics/src/DMXDetectorConstruction.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/underground_physics/src/DMXDetectorConstruction.cc (Version 11.3.0) and /examples/advanced/underground_physics/src/DMXDetectorConstruction.cc (Version 3.1)


  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 //   GEANT 4 - Underground Dark Matter Detecto    
 29 //                                                
 30 //      For information related to this code c    
 31 //      e-mail: alexander.howard@cern.ch          
 32 // -------------------------------------------    
 33 // Comments                                       
 34 //                                                
 35 //                  Underground Advanced          
 36 //               by A. Howard and H. Araujo       
 37 //                    (27th November 2001)        
 38 //                                                
 39 // DetectorConstruction program                   
 40 // -------------------------------------------    
 41                                                   
 42 #include "DMXDetectorConstruction.hh"             
 43 #include "DMXDetectorMessenger.hh"                
 44                                                   
 45 #include "DMXScintSD.hh"                          
 46 #include "DMXPmtSD.hh"                            
 47                                                   
 48                                                   
 49 #include "G4Material.hh"                          
 50 #include "G4MaterialTable.hh"                     
 51 #include "G4Element.hh"                           
 52 #include "G4Isotope.hh"                           
 53 #include "G4UnitsTable.hh"                        
 54 #include "G4Box.hh"                               
 55 #include "G4Tubs.hh"                              
 56 #include "G4Sphere.hh"                            
 57 #include "G4UnionSolid.hh"                        
 58 #include "G4SubtractionSolid.hh"                  
 59                                                   
 60 #include "G4LogicalVolume.hh"                     
 61 #include "G4PVPlacement.hh"                       
 62 #include "G4ThreeVector.hh"                       
 63 #include "G4RotationMatrix.hh"                    
 64 #include "G4Transform3D.hh"                       
 65 #include "G4LogicalBorderSurface.hh"              
 66 #include "G4LogicalSkinSurface.hh"                
 67 #include "G4OpBoundaryProcess.hh"                 
 68                                                   
 69 #include "G4FieldManager.hh"                      
 70 #include "G4UniformElectricField.hh"              
 71 #include "G4TransportationManager.hh"             
 72 #include "G4MagIntegratorStepper.hh"              
 73 #include "G4EqMagElectricField.hh"                
 74 #include "G4ClassicalRK4.hh"                      
 75 #include "G4ChordFinder.hh"                       
 76                                                   
 77 #include "G4SDManager.hh"                         
 78                                                   
 79 #include "G4VisAttributes.hh"                     
 80 #include "G4Colour.hh"                            
 81                                                   
 82 #include "G4UserLimits.hh"                        
 83                                                   
 84 #include "G4RunManager.hh"                        
 85 #include "G4SystemOfUnits.hh"                     
 86                                                   
 87 //....oooOO0OOooo........oooOO0OOooo........oo    
 88 DMXDetectorConstruction::DMXDetectorConstructi    
 89 {                                                 
 90   // create commands for interactive definitio    
 91   detectorMessenger = new DMXDetectorMessenger    
 92                                                   
 93   theUserLimitsForRoom     = 0;                   
 94   theUserLimitsForDetector = 0;                   
 95   // default time cut = infinite                  
 96   //  - note also number of steps cut in stepp    
 97   theMaxTimeCuts      = DBL_MAX;                  
 98   theMaxStepSize      = DBL_MAX;                  
 99   theDetectorStepSize = DBL_MAX;                  
100   theRoomTimeCut      = 1000. * nanosecond;       
101   theMinEkine         = 250.0*eV; // minimum k    
102   theRoomMinEkine     = 250.0*eV; // minimum k    
103                                                   
104   //Zero the G4Cache objects to contain logica    
105   LXeSD.Put(0);                                   
106   pmtSD.Put(0);                                   
107 }                                                 
108                                                   
109                                                   
110 //....oooOO0OOooo........oooOO0OOooo........oo    
111 DMXDetectorConstruction::~DMXDetectorConstruct    
112 {                                                 
113   delete theUserLimitsForRoom;                    
114   delete theUserLimitsForDetector;                
115   delete detectorMessenger;                       
116 }                                                 
117                                                   
118                                                   
119                                                   
120 //....oooOO0OOooo........oooOO0OOooo........oo    
121 void DMXDetectorConstruction::DefineMaterials(    
122 {                                                 
123                                                   
124 #include "DMXDetectorMaterial.icc"                
125                                                   
126 }                                                 
127                                                   
128 //....oooOO0OOooo........oooOO0OOooo........oo    
129 G4VPhysicalVolume* DMXDetectorConstruction::Co    
130                                                   
131   DefineMaterials();                              
132                                                   
133   // DefineField();                               
134                                                   
135   // make colours                                 
136   G4Colour  white   (1.0, 1.0, 1.0) ;             
137   G4Colour  grey    (0.5, 0.5, 0.5) ;             
138   G4Colour  lgrey   (.85, .85, .85) ;             
139   G4Colour  red     (1.0, 0.0, 0.0) ;             
140   G4Colour  blue    (0.0, 0.0, 1.0) ;             
141   G4Colour  cyan    (0.0, 1.0, 1.0) ;             
142   G4Colour  magenta (1.0, 0.0, 1.0) ;             
143   G4Colour  yellow  (1.0, 1.0, 0.0) ;             
144   G4Colour  orange  (.75, .55, 0.0) ;             
145   G4Colour  lblue   (0.0, 0.0, .75) ;             
146   G4Colour  lgreen  (0.0, .75, 0.0) ;             
147   G4Colour  green   (0.0, 1.0, 0.0) ;             
148   G4Colour  brown   (0.7, 0.4, 0.1) ;             
149                                                   
150                                                   
151   //  un-used colours:                            
152   //  G4Colour  black   (0.0, 0.0, 0.0) ;         
153                                                   
154                                                   
155                                                   
156   // Universe - room wall - CONCRETE *********    
157                                                   
158   //NB: measured INSIDE of lab, therefore have    
159   G4double wallThick   = 24.*cm;                  
160   G4double worldWidth  = 470.0*cm + 2.*wallThi    
161   G4double worldLength = 690.0*cm + 2.*wallThi    
162   G4double worldHeight = 280.0*cm + 2.*wallThi    
163                                                   
164   G4Box* world_box = new G4Box                    
165      ("world_box", 0.5*worldWidth, 0.5*worldLe    
166   world_log  = new G4LogicalVolume(world_box,     
167   world_phys = new G4PVPlacement(0, G4ThreeVec    
168      "world_phys", world_log, NULL, false,0);     
169                                                   
170   //  G4VisAttributes* world_vat= new G4VisAtt    
171   world_log->SetVisAttributes(G4VisAttributes:    
172   //world_vat->SetVisibility(true);               
173   //world_vat->SetVisibility(false);              
174   //world_log->SetVisAttributes(world_vat);       
175                                                   
176                                                   
177   // Lab Space - AIR *************************    
178                                                   
179   G4double labWidth  = worldWidth  - 2.*wallTh    
180   G4double labLength = worldLength - 2.*wallTh    
181   G4double labHeight = worldHeight - 2.*wallTh    
182                                                   
183   G4Box* lab_box = new G4Box                      
184      ("lab_box", 0.5*labWidth, 0.5*labLength,     
185   lab_log  = new G4LogicalVolume(lab_box, lab_    
186   lab_phys = new G4PVPlacement(0, G4ThreeVecto    
187      lab_log, world_phys, false,0);               
188                                                   
189   G4VisAttributes* lab_vat= new G4VisAttribute    
190   //  lab_log->SetVisAttributes(G4VisAttribute    
191   //  lab_vat->SetVisibility(true);               
192   lab_vat->SetVisibility(false);                  
193   lab_log->SetVisAttributes(lab_vat);             
194                                                   
195 // include room furniture: *******************    
196                                                   
197 #include "DMXDetectorRoom.icc"                    
198                                                   
199   // Now start with detector assembly:            
200                                                   
201   // first LN2 cooling container: ************    
202                                                   
203   G4double PosZ = -25.3*cm; // extra z-pos to     
204                                                   
205   G4double LN2jacketRadius    = 107.5*mm;         
206   G4double LN2jacketHeight    = 590.0*mm;         
207   G4double jacketHeight       = 680.0*mm;         
208   G4double jacketflangeHeight = 53.0*mm;          
209   G4double LN2PosZ            = 0.5*jacketHeig    
210                                 + jacketflange    
211                                                   
212   G4Tubs* LN2jacket_tube = new G4Tubs("LN2jack    
213      0.*cm, LN2jacketRadius, 0.5*LN2jacketHeig    
214   LN2jacket_log  = new G4LogicalVolume            
215     (LN2jacket_tube, LN2jacket_mat, "LN2jacket    
216   LN2jacket_phys = new G4PVPlacement(0, G4Thre    
217      "LN2jacket_phys", LN2jacket_log, lab_phys    
218                                                   
219   G4VisAttributes* LN2jacket_vat = new G4VisAt    
220   // LN2jacket_log->SetVisAttributes(G4VisAttr    
221   // LN2jacket_vat->SetVisibility(true);          
222   LN2jacket_log->SetVisAttributes(LN2jacket_va    
223                                                   
224   // LN2jacket vacuum: **********************     
225                                                   
226   G4double LN2jacketMetalThick = 2.0*mm;          
227   G4double LN2vacuumRadius     = LN2jacketRadi    
228   G4double LN2vacuumHeight     = LN2jacketHeig    
229                                                   
230   G4Tubs* LN2vacuum_tube = new G4Tubs("LN2vacu    
231      0.*cm, LN2vacuumRadius, 0.5*LN2vacuumHeig    
232   LN2vacuum_log  = new G4LogicalVolume            
233     (LN2vacuum_tube, vacuum_mat, "LN2vacuum_lo    
234   LN2vacuum_phys = new G4PVPlacement(0, G4Thre    
235      "LN2vacuum_phys", LN2vacuum_log, LN2jacke    
236                                                   
237   LN2vacuum_log->SetVisAttributes(G4VisAttribu    
238                                                   
239   // LN2 vessel: *****************************    
240                                                   
241   G4double LN2Radius       = 76.0*mm;             
242   G4double LN2Height       = 590.0*mm - 2.*LN2    
243   G4double LN2vesselRadius = LN2Radius + LN2ja    
244   G4double LN2vesselHeight = LN2Height;           
245   G4double LN2vesselPosZ   = 0.5*LN2vacuumHeig    
246                                                   
247   G4Tubs* LN2vessel_tube = new G4Tubs("LN2vess    
248      0.*cm, LN2vesselRadius, 0.5*LN2vesselHeig    
249   LN2vessel_log  = new G4LogicalVolume            
250     (LN2vessel_tube, LN2jacket_mat, "LN2vessel    
251   LN2vessel_phys = new G4PVPlacement(0, G4Thre    
252      "LN2vessel_phys", LN2vessel_log, LN2vacuu    
253                                                   
254   G4VisAttributes* LN2vessel_vat = new G4VisAt    
255   // LN2vessel_log->SetVisAttributes(G4VisAttr    
256   // LN2vessel_vat->SetVisibility(true);          
257   LN2vessel_log->SetVisAttributes(LN2vessel_va    
258                                                   
259                                                   
260   // and finally LN2: ************************    
261                                                   
262   G4Tubs* LN2_tube = new G4Tubs("LN2_tube",       
263      0.*cm, LN2Radius, 0.5*LN2Height, 0.*deg,     
264   LN2_log  = new G4LogicalVolume(LN2_tube, LN2    
265   LN2_phys = new G4PVPlacement(0, G4ThreeVecto    
266      "LN2_phys", LN2_log, LN2vessel_phys, fals    
267                                                   
268   G4VisAttributes* LN2_vat = new G4VisAttribut    
269   LN2_vat->SetVisibility(true);                   
270   LN2_log->SetVisAttributes(LN2_vat);             
271                                                   
272                                                   
273   // outer vacuum jacket volume: stainless ste    
274                                                   
275   G4double jacketRadius     = 127.5*mm;           
276   //  G4double jacketHeight     = 680.0*mm; //    
277   G4double jacketMetalThick = LN2jacketMetalTh    
278                                                   
279   G4Tubs* jacket_tube = new G4Tubs("jacket_tub    
280      0.*cm, jacketRadius, 0.5*jacketHeight, 0.    
281   jacket_log  = new G4LogicalVolume(jacket_tub    
282   jacket_phys = new G4PVPlacement(0, G4ThreeVe    
283      "jacket_phys", jacket_log, lab_phys, fals    
284                                                   
285   G4VisAttributes* jacket_vat = new G4VisAttri    
286   // jacket_log->SetVisAttributes(G4VisAttribu    
287   jacket_log->SetVisAttributes(jacket_vat);       
288                                                   
289                                                   
290   // outer vacuum jacket flanges: stainless st    
291                                                   
292   G4double jacketflangeRadius  = 127.5*mm;        
293   // G4double jacketflangeHeight = 53.0*mm; //    
294   G4double topjacketflangePosZ = 0.5*(jacketHe    
295                                                   
296   G4Tubs* jacketflange_tube = new G4Tubs("jack    
297      0.*cm, jacketflangeRadius, 0.5*jacketflan    
298   jacketflange_log     = new G4LogicalVolume      
299     (jacketflange_tube, jacketflange_mat, "jac    
300   topjacketflange_phys = new G4PVPlacement        
301     (0, G4ThreeVector(0.,0.,topjacketflangePos    
302      "topjacketflange_phys", jacketflange_log,    
303   bottomjacketflange_phys = new G4PVPlacement     
304     (0, G4ThreeVector(0.,0.,-topjacketflangePo    
305      "bottomjacketflange_phys", jacketflange_l    
306                                                   
307   // jacketflange_log->SetVisAttributes(G4VisA    
308   jacketflange_log->SetVisAttributes(jacket_va    
309                                                   
310   // vacuum **********************************    
311                                                   
312   G4double vacuumRadius = jacketRadius - jacke    
313   G4double vacuumHeight = jacketHeight - jacke    
314                                                   
315   G4Tubs* vacuum_tube = new G4Tubs("vacuum_tub    
316      0.*cm, vacuumRadius, 0.5*vacuumHeight, 0.    
317   vacuum_log  = new G4LogicalVolume(vacuum_tub    
318   vacuum_phys = new G4PVPlacement(0, G4ThreeVe    
319      "vacuum_phys", vacuum_log, jacket_phys, f    
320                                                   
321   // G4VisAttributes* vacuum_vat= new G4VisAtt    
322   vacuum_log->SetVisAttributes(G4VisAttributes    
323                                                   
324                                                   
325   // copper cooling jacket volume: ***********    
326                                                   
327   G4double copperMetalThick = 3.0*mm;             
328   G4double copperRadius     = 103.5*mm + coppe    
329   G4double copperHeight     = 420.0*mm;           
330   G4double copperInner      = copperRadius - c    
331   G4double vesselHeight     = 320.0*mm;           
332   G4double copperVPos       = 0.5*(vesselHeigh    
333   G4double coppertopThick   = 1.0*cm;             
334   G4double coppertopVPos    = copperVPos + 0.5    
335                                                   
336   G4Tubs* copper_tube = new G4Tubs("copper_tub    
337      copperInner, copperRadius, 0.5*copperHeig    
338   copper_log  = new G4LogicalVolume(copper_tub    
339   copper_phys = new G4PVPlacement(0, G4ThreeVe    
340      "copper_phys", copper_log, vacuum_phys, f    
341                                                   
342   G4Tubs* coppertop_tube = new G4Tubs("coppert    
343      0.*cm, copperRadius, 0.5*coppertopThick,     
344   coppertop_log  = new G4LogicalVolume            
345     (coppertop_tube, copper_mat, "coppertop_lo    
346   coppertop_phys = new G4PVPlacement(0,G4Three    
347      "coppertop_phys", coppertop_log, vacuum_p    
348                                                   
349   G4VisAttributes* copper_vat = new G4VisAttri    
350   //  copper_log->SetVisAttributes(G4VisAttrib    
351   copper_log->SetVisAttributes(copper_vat);       
352   coppertop_log->SetVisAttributes(copper_vat);    
353                                                   
354   // inner vessel jacket volume: stainless ste    
355                                                   
356   //  G4double vesselHeight = 320.0*mm; // - m    
357   G4double vesselMetalThick      = jacketMetal    
358   G4double vesselRadius          = 75.0*mm + v    
359   G4double vesselflangeRadius    = 101.5*mm;      
360   G4double vesselflangeThick     = 40.0*mm;       
361   G4double PMTvesselRadius       = 31.0*mm + v    
362   G4double PMTvesselHeight       = 152.0*mm;      
363   G4double pmtvesselflangeRadius = 52.0*mm;       
364   G4double pmtvesselflangeThick  = 32.0*mm;       
365   G4double vesselVPos            = 7.0*cm;        
366   G4double TotalvesselHeight     = PMTvesselHe    
367                                                   
368   G4Tubs* vessel_tube    = new G4Tubs("vessel_    
369      0.*cm, vesselRadius, 0.5*vesselHeight, 0.    
370   G4Tubs* PMTvessel_tube = new G4Tubs("PMTvess    
371      0.*cm, PMTvesselRadius, 0.5*PMTvesselHeig    
372                                                   
373   G4UnionSolid* vessel_sol = new G4UnionSolid     
374     ("vessel_sol", vessel_tube, PMTvessel_tube    
375      G4Transform3D(G4RotationMatrix(),            
376        G4ThreeVector(0,0,-0.5*(vesselHeight+PM    
377                                                   
378   vessel_log  = new G4LogicalVolume(vessel_sol    
379   vessel_phys = new G4PVPlacement(0, G4ThreeVe    
380      "vessel_phys", vessel_log, vacuum_phys, f    
381                                                   
382                                                   
383   // flanges: 1=upper half (diff. inner diam.)    
384   G4Tubs* vesseltop_flange1 = new G4Tubs("vess    
385      0.*cm, vesselflangeRadius, 0.25*vesselfla    
386   vesseltop_log1  = new G4LogicalVolume           
387     (vesseltop_flange1, vessel_mat, "vesseltop    
388   vesseltop_phys1 = new G4PVPlacement             
389     (0,                                           
390      G4ThreeVector(0.,0.,0.5*(vesselHeight+0.5    
391      "vesseltop_phys1", vesseltop_log1, vacuum    
392                                                   
393   G4Tubs* vesseltop_flange2 = new G4Tubs("vess    
394     vesselflangeRadius, 0.25*vesselflangeThick    
395   vesseltop_log2  = new G4LogicalVolume           
396     (vesseltop_flange2, vessel_mat, "vesseltop    
397   vesseltop_phys2 = new G4PVPlacement             
398     (0,                                           
399      G4ThreeVector(0.,0.,0.5*(vesselHeight-0.5    
400      "vesseltop_phys2", vesseltop_log2, vacuum    
401                                                   
402                                                   
403   G4Tubs* vesselbottom_flange1 = new G4Tubs       
404     ("vesselbottom_flange1",vesselRadius, vess    
405      0.25*vesselflangeThick, 0.*deg, 360.*deg)    
406   vesselbottom_log1  = new G4LogicalVolume        
407     (vesselbottom_flange1, vessel_mat, "vessel    
408   vesselbottom_phys1 = new G4PVPlacement(0,       
409      G4ThreeVector(0.,0.,-0.5*(vesselHeight-0.    
410      "vesselbottom_phys1", vesselbottom_log1,     
411                                                   
412   G4Tubs* vesselbottom_flange2 = new G4Tubs       
413     ("vesselbottom_flange2",PMTvesselRadius, v    
414      0.25*vesselflangeThick, 0.*deg, 360.*deg)    
415   vesselbottom_log2  = new G4LogicalVolume        
416     (vesselbottom_flange2, vessel_mat, "vessel    
417   vesselbottom_phys2 = new G4PVPlacement(0,       
418      G4ThreeVector(0.,0.,-0.5*(vesselHeight+0.    
419      "vesselbottom_phys2", vesselbottom_log2,     
420                                                   
421                                                   
422   G4Tubs* pmtvesselbottom_flange1 = new G4Tubs    
423     ("pmtvesselbottom_flange1", PMTvesselRadiu    
424      0.25*pmtvesselflangeThick, 0.*deg, 360.*d    
425   pmtvesselbottom_log1  = new G4LogicalVolume     
426     (pmtvesselbottom_flange1, vessel_mat, "pmt    
427   pmtvesselbottom_phys1 = new G4PVPlacement(0,    
428     (-0.5*vesselHeight-PMTvesselHeight+vesselV    
429      "pmtvesselbottom_phys1", pmtvesselbottom_    
430                                                   
431   G4Tubs* pmtvesselbottom_flange2 = new G4Tubs    
432     ("pmtvesselbottom_flange2", 0.*cm, pmtvess    
433      0.25*pmtvesselflangeThick, 0.*deg, 360.*d    
434   pmtvesselbottom_log2  = new G4LogicalVolume     
435     (pmtvesselbottom_flange2, vessel_mat, "pmt    
436   pmtvesselbottom_phys2 = new G4PVPlacement(0,    
437      -0.5*vesselHeight-PMTvesselHeight+vesselV    
438      "pmtvesselbottom_phys2", pmtvesselbottom_    
439                                                   
440                                                   
441   G4VisAttributes* vessel_vat     = new G4VisA    
442   G4VisAttributes* pmtvessel_vat  = new G4VisA    
443   G4VisAttributes* pmtvessel_vat2 = new G4VisA    
444   //  vessel_log->SetVisAttributes(G4VisAttrib    
445   //  vessel_vat->SetForceSolid(true);            
446   //  pmtvessel_vat->SetForceSolid(true);         
447   //  pmtvessel_vat2->SetForceSolid(true);        
448   vessel_log->SetVisAttributes(vessel_vat);       
449   vesseltop_log1->SetVisAttributes(vessel_vat)    
450   vesselbottom_log1->SetVisAttributes(vessel_v    
451   vesseltop_log2->SetVisAttributes(pmtvessel_v    
452   vesselbottom_log2->SetVisAttributes(pmtvesse    
453   //  pmtvesselbottom_log->SetVisAttributes(ve    
454   pmtvesselbottom_log1->SetVisAttributes(vesse    
455   pmtvesselbottom_log2->SetVisAttributes(pmtve    
456                                                   
457                                                   
458                                                   
459   // *****************************************    
460   // grid#1 to mirror surface: 21.75 mm           
461   // LXe height = 15.75 mm, gXe height = 6.00     
462   // NB: Increased liquid height by 1mm - to t    
463   // over-lapping volumes/ring pronounced from    
464   // *****************************************    
465                                                   
466   // detector volume: gas phase **************    
467                                                   
468   G4double mirrorVPos     = 21.3*cm;              
469   G4double gasGap         = 6.0*mm;               
470   G4double DetectorRadius = vesselRadius - ves    
471   G4double GXeHeight      = TotalvesselHeight     
472   G4double GXeVPos        = 0.5*vesselHeight -    
473                                                   
474   G4Tubs* GXe_tube = new G4Tubs("GXe_tube",       
475      0.*cm, DetectorRadius, 0.5*GXeHeight, 0.*    
476   GXe_log  = new G4LogicalVolume(GXe_tube, GXe    
477   GXe_phys = new G4PVPlacement(0, G4ThreeVecto    
478      "GXe_phys", GXe_log, vessel_phys, false,0    
479                                                   
480   G4VisAttributes* GXe_vat = new G4VisAttribut    
481   // GXe_vat->SetForceSolid(true);                
482   GXe_vat->SetVisibility(true);                   
483   GXe_log->SetVisAttributes(GXe_vat);             
484                                                   
485                                                   
486   // liquid phase ****************************    
487                                                   
488   G4double LXeHeight         = mirrorVPos - ga    
489   G4double PMTDetectorRadius = PMTvesselRadius    
490   G4double PMTDetectorHeight = PMTvesselHeight    
491   G4double LXeTubeHeight     = LXeHeight - PMT    
492   G4double LXe_solVPos       = -0.5*(LXeTubeHe    
493   G4double LXeVPos           = -0.5*Totalvesse    
494                                                   
495   G4Tubs* LXe_tube = new G4Tubs("GXe_tube",       
496      0.*cm, DetectorRadius, 0.5*LXeTubeHeight,    
497   G4Tubs* PMTdetector_tube = new G4Tubs("PMTde    
498    0.*cm, PMTDetectorRadius, 0.5*PMTDetectorHe    
499                                                   
500   G4UnionSolid* LXe_sol = new G4UnionSolid        
501     ("LXe_sol", LXe_tube, PMTdetector_tube,       
502     G4Transform3D(G4RotationMatrix(), G4ThreeV    
503                                                   
504   LXe_log  = new G4LogicalVolume(LXe_sol, LXe_    
505   LXe_phys = new G4PVPlacement(0, G4ThreeVecto    
506     "LXe_phys", LXe_log, vessel_phys, false, 0    
507                                                   
508   // attributes                                   
509   G4VisAttributes* LXe_vat = new G4VisAttribut    
510   // LXe_vat->SetForceSolid(true);                
511   LXe_vat->SetVisibility(true);                   
512   LXe_log->SetVisAttributes(LXe_vat);             
513                                                   
514                                                   
515   // Gas phase vessel lagging - for optical pr    
516                                                   
517   G4double laggingThickness = 10.*micrometer;     
518   G4double laggingRadius    = DetectorRadius -    
519                                                   
520   G4Tubs* gaslag_tube = new G4Tubs("gaslag_tub    
521      DetectorRadius, 0.5*GXeHeight, 0.*deg, 36    
522   gaslag_log  = new G4LogicalVolume(gaslag_tub    
523   gaslag_phys = new G4PVPlacement(0, G4ThreeVe    
524     "gaslag_phys", gaslag_log, GXe_phys, false    
525                                                   
526   // attributes                                   
527   G4VisAttributes* gaslag_vat = new G4VisAttri    
528   // gaslag_vat->SetForceSolid(true);             
529   gaslag_vat->SetVisibility(true);                
530   gaslag_log->SetVisAttributes(gaslag_vat);       
531                                                   
532                                                   
533   // liquid phase vessel lagging - for optical    
534                                                   
535   G4double lagTubeRadius = DetectorRadius - la    
536   G4double lagTubeHeight = LXeHeight - PMTDete    
537   G4double lagPMTRadius  = PMTDetectorRadius -    
538   G4double lagPMTHeight  = PMTDetectorHeight;     
539                                                   
540   G4Tubs* liqLag_tube = new G4Tubs("liqlag_tub    
541      DetectorRadius, 0.5*lagTubeHeight, 0.*deg    
542   G4Tubs* lagPMT_tube = new G4Tubs("lagPMT_tub    
543      PMTDetectorRadius, 0.5*lagPMTHeight, 0.*d    
544                                                   
545   G4UnionSolid* liqLag_sol = new G4UnionSolid     
546     ("liqLag_sol", liqLag_tube, lagPMT_tube,      
547     G4Transform3D(G4RotationMatrix(),G4ThreeVe    
548                                                   
549   liqLag_log  = new G4LogicalVolume(liqLag_sol    
550   liqLag_phys = new G4PVPlacement(0, G4ThreeVe    
551     "liqLag_phys", liqLag_log, LXe_phys, false    
552                                                   
553   // attributes                                   
554   G4VisAttributes* liqLag_vat = new G4VisAttri    
555   // liqLag_vat->SetForceSolid(true);             
556   liqLag_vat->SetVisibility(true);                
557   liqLag_log->SetVisAttributes(liqLag_vat);       
558                                                   
559                                                   
560   // Vessel Wall Optical Surface definition:      
561   G4OpticalSurface* OpVesselSurface = new G4Op    
562     ("VesselSurface", unified, polished, diele    
563                                                   
564   // created optical lagging onto vessel - to     
565   // liquid and gas phase - so removed below:     
566   /*                                              
567   G4LogicalBorderSurface* VesselSurface;          
568   VesselSurface = new G4LogicalBorderSurface      
569     ("Vessel", liqPhase_phys, vessel_phys, OpV    
570   */                                              
571                                                   
572   std::vector<G4double> vessel_PP   = { 6.5*eV    
573   std::vector<G4double> vessel_REFL = { 0.2, 0    
574   G4MaterialPropertiesTable* vessel_mt = new G    
575   vessel_mt->AddProperty("REFLECTIVITY", vesse    
576   OpVesselSurface->SetMaterialPropertiesTable(    
577                                                   
578   // G4LogicalBorderSurface* VesselTopSurface     
579   new G4LogicalBorderSurface                      
580     ("VesselTop", GXe_phys, vesseltop_phys1, O    
581                                                   
582   //G4LogicalBorderSurface* VesselBottomSurfac    
583   new G4LogicalBorderSurface                      
584     ("VesselBottom", LXe_phys, vesselbottom_ph    
585                                                   
586   //G4LogicalBorderSurface* GasVesselSurface =    
587   new G4LogicalBorderSurface                      
588     ("GasVessel", GXe_phys, gaslag_phys, OpVes    
589                                                   
590   //G4LogicalBorderSurface* LiquidVesselSurfac    
591   new G4LogicalBorderSurface                      
592     ("LiquidVessel", LXe_phys, liqLag_phys, Op    
593                                                   
594                                                   
595                                                   
596   // Cu Shield *******************************    
597                                                   
598   G4double CuShieldHeight      = 17.7*cm;         
599   G4double CuShieldThickness   = 2.4*mm;          
600   G4double CuShieldOuterRadius = 3.0*cm;          
601   G4double CuShieldInnerRadius = CuShieldOuter    
602   G4double CuShieldVPosition   = -0.5*LXeTubeH    
603                                 + 0.5*CuShield    
604                                                   
605   // Zero co-ordinate of the union is the zero    
606   // i.e. the offset is still present             
607                                                   
608   G4Tubs* CuShield_tube = new G4Tubs("CuShield    
609      CuShieldOuterRadius, 0.5*CuShieldHeight,     
610   CuShield_log  = new G4LogicalVolume(CuShield    
611              "CuShield_log");                     
612   CuShield_phys = new G4PVPlacement(0,            
613      G4ThreeVector(0.*cm, 0.*cm, CuShieldVPosi    
614      "CuShield_phys", CuShield_log, LXe_phys,     
615                                                   
616   //  G4VisAttributes* CuShield_vat= new G4Vis    
617   G4VisAttributes* CuShield_vat = new G4VisAtt    
618   //  CuShield_vat->SetForceSolid(true);          
619   CuShield_vat->SetVisibility(true);              
620   CuShield_log->SetVisAttributes(CuShield_vat)    
621                                                   
622   // Cu shield surface                            
623   G4double sigalpha;                              
624   G4OpticalSurface* OpCuShieldSurface = new G4    
625     ("ShieldSurface", unified, ground, dielect    
626   //G4LogicalBorderSurface* ShieldSurface =       
627   new G4LogicalBorderSurface                      
628     ("Shield", LXe_phys, CuShield_phys, OpCuSh    
629                                                   
630   std::vector<G4double> CuShield_PP   = { 7.0*    
631   std::vector<G4double> CuShield_REFL = { 0.3,    
632   G4MaterialPropertiesTable *CuShield_mt = new    
633   CuShield_mt->AddProperty("REFLECTIVITY", CuS    
634   OpCuShieldSurface->SetMaterialPropertiesTabl    
635                                                   
636   // rings ***********************************    
637                                                   
638   G4double ringHeight      =  4.*mm;              
639   G4double ringOuterRadius =  4.0*cm;             
640   G4double ringInnerRadius =  CuShieldOuterRad    
641   G4double ringVOffset     =  0.5*ringHeight;     
642   G4double ringVPosition   =  -0.5*GXeHeight +    
643                                                   
644   G4Tubs* ring_tube=new G4Tubs("ring_tube", ri    
645      ringOuterRadius, 0.5*ringHeight, 0.*deg,     
646   ring_log = new G4LogicalVolume(ring_tube, ri    
647                                                   
648   // optical surface: ring materials table        
649   std::vector<G4double> ring_PP   = { 6.00*eV,    
650   std::vector<G4double> ring_REFL = { 0.7, 0.6    
651   G4MaterialPropertiesTable *ring_mt = new G4M    
652   ring_mt->AddProperty("REFLECTIVITY", ring_PP    
653                                                   
654   G4OpticalSurface* OpRingSurface = new G4Opti    
655     ("RingSurface", unified, ground, dielectri    
656   // last argument is surface roughness if it'    
657   OpRingSurface->SetMaterialPropertiesTable(ri    
658                                                   
659   // rings inside gas phase                       
660   ring_phys_gas[0] = new G4PVPlacement(0, G4Th    
661     (0.*cm, 0.*cm, ringVPosition),"ring_phys0"    
662   //G4LogicalBorderSurface* RingSurface_gas0 =    
663   new G4LogicalBorderSurface                      
664     ("Ring", GXe_phys, ring_phys_gas[0], OpRin    
665                                                   
666   ring_phys_gas[1] = new G4PVPlacement(0,         
667      G4ThreeVector(0.*cm, 0.*cm, ringVPosition    
668      "ring_phys1",ring_log, GXe_phys, false, 0    
669   //G4LogicalBorderSurface* RingSurface_gas1 =    
670   new G4LogicalBorderSurface                      
671      ("Ring", GXe_phys, ring_phys_gas[1], OpRi    
672                                                   
673                                                   
674   // rings inside liquid phase:                   
675   ringVPosition = 0.5*LXeTubeHeight;              
676                                                   
677   ring_phys_liq[0] = new G4PVPlacement(0,         
678      G4ThreeVector(0.*cm, 0.*cm, ringVPosition    
679      "ring_phys2",ring_log,LXe_phys, false, 0)    
680   //G4LogicalBorderSurface* RingSurface_liq0 =    
681   new G4LogicalBorderSurface                      
682     ("Ring", LXe_phys, ring_phys_liq[0], OpRin    
683                                                   
684   ring_phys_liq[1] = new G4PVPlacement(0,         
685      G4ThreeVector(0.*cm, 0.*cm, ringVPosition    
686      "ring_phys3",ring_log, LXe_phys, false, 0    
687   //G4LogicalBorderSurface* RingSurface_liq1 =    
688   new G4LogicalBorderSurface                      
689     ("Ring", LXe_phys, ring_phys_liq[1], OpRin    
690                                                   
691   ring_phys_liq[2]=new G4PVPlacement(0,           
692      G4ThreeVector(0.*cm, 0.*cm, ringVPosition    
693      "ring_phys4",ring_log, LXe_phys, false, 0    
694   //G4LogicalBorderSurface* RingSurface_liq2 =    
695   new G4LogicalBorderSurface                      
696     ("Ring", LXe_phys, ring_phys_liq[2], OpRin    
697                                                   
698   ring_phys_liq[3]=new G4PVPlacement(0,           
699      G4ThreeVector(0.*cm, 0.*cm, ringVPosition    
700      "ring_phys5",ring_log, LXe_phys, false, 0    
701   //G4LogicalBorderSurface* RingSurface_liq3 =    
702   new G4LogicalBorderSurface                      
703     ("Ring", LXe_phys, ring_phys_liq[3], OpRin    
704                                                   
705   ring_phys_liq[4]=new G4PVPlacement(0,           
706      G4ThreeVector(0.*cm, 0.*cm, ringVPosition    
707      "ring_phys6",ring_log, LXe_phys,false, 0)    
708   //G4LogicalBorderSurface* RingSurface_liq4 =    
709   new G4LogicalBorderSurface                      
710     ("Ring", LXe_phys, ring_phys_liq[4], OpRin    
711                                                   
712   ring_phys_liq[5]=new G4PVPlacement(0,           
713      G4ThreeVector(0.*cm, 0.*cm, ringVPosition    
714      "ring_phys7",ring_log, LXe_phys,false, 0)    
715   //G4LogicalBorderSurface* RingSurface_liq5 =    
716   new G4LogicalBorderSurface                      
717     ("Ring", LXe_phys, ring_phys_liq[5], OpRin    
718                                                   
719                                                   
720   G4VisAttributes* ring_vat= new G4VisAttribut    
721   ring_vat->SetVisibility(true);                  
722   ring_log->SetVisAttributes(ring_vat);           
723                                                   
724                                                   
725   // Mirror **********************************    
726                                                   
727   G4double mirrorHeight    = 2.0*mm;              
728   G4double mirrorRadius    = ringInnerRadius;     
729   G4double mirrorVOffset   = 0.5*ringHeight;      
730   G4double mirrorVPosition = -0.5*GXeHeight +     
731                                                   
732   G4Tubs* mirror_tube = new G4Tubs("mirror_tub    
733      0.5*mirrorHeight, 0.*deg, 360.*deg);         
734   mirror_log  = new G4LogicalVolume(mirror_tub    
735   mirror_phys = new G4PVPlacement(0,              
736      G4ThreeVector(0.*cm, 0.*cm, mirrorVPositi    
737      "mirror_phys", mirror_log, GXe_phys, fals    
738                                                   
739   G4VisAttributes* mirror_vat = new G4VisAttri    
740   mirror_vat->SetVisibility(true);                
741   //  mirror_vat->SetForceSolid(true);            
742   mirror_log->SetVisAttributes(mirror_vat);       
743                                                   
744                                                   
745   // mirror surface                               
746   G4OpticalSurface * OpMirrorSurface = new G4O    
747     ("MirrorSurface", unified, ground, dielect    
748   //G4LogicalBorderSurface* MirrorSurface =       
749   new G4LogicalBorderSurface                      
750     ("Mirror", GXe_phys, mirror_phys, OpMirror    
751                                                   
752   std::vector<G4double> mirror_PP   = { 6.00*e    
753   std::vector<G4double> mirror_REFL = { 0.83,     
754   G4MaterialPropertiesTable *mirror_mt = new G    
755   mirror_mt->AddProperty("REFLECTIVITY", mirro    
756   OpMirrorSurface->SetMaterialPropertiesTable(    
757                                                   
758   // Grids  **********************************    
759                                                   
760   G4double gridHeight     = 0.100*mm;             
761   G4double gridRadius     = ringInnerRadius;      
762   G4double grid1VOffset   = 3.5*ringHeight+1.7    
763   G4double grid1VPosition = 0.5*LXeTubeHeight     
764   G4double grid2VOffset   = 4.5*ringHeight+3.5    
765   G4double grid2VPosition = 0.5*LXeTubeHeight     
766                                                   
767   G4Tubs* grid_tube = new G4Tubs("grid_tube",     
768      0.5*gridHeight, 0.*deg, 360.*deg);           
769                                                   
770   grid1_log  = new G4LogicalVolume(grid_tube,     
771   grid1_phys = new G4PVPlacement(0,G4ThreeVect    
772      "grid1_phys", grid1_log, LXe_phys, false,    
773   grid2_log  = new G4LogicalVolume(grid_tube,     
774   grid2_phys = new G4PVPlacement(0,G4ThreeVect    
775      "grid2_phys", grid2_log, LXe_phys, false,    
776                                                   
777   G4VisAttributes* grid_vat = new G4VisAttribu    
778   grid_vat->SetVisibility(true);                  
779   grid1_log->SetVisAttributes(grid_vat);          
780   grid2_log->SetVisAttributes(grid_vat);          
781                                                   
782                                                   
783   // alpha source holder *********************    
784                                                   
785   G4double alphaHeight     = 0.7*mm; // total     
786   G4double recessHeight    = 0.3*mm;  // total    
787   G4double alphaRadius     = 1.2*mm; // was 0.    
788   G4double recessRadius    = 0.35*mm; // was 0    
789   G4double recessVPosition = 0.5*(alphaHeight     
790                                                   
791   G4double alphaVOffset    = grid1VOffset-0.5*    
792   G4double americiumHeight = 3000.*nanometer;     
793   G4double extra_offset    = (recessHeight +0.    
794   G4double alphaVPosition  = 0.5*LXeTubeHeight    
795                                                   
796   G4Tubs* alpha_tube  = new G4Tubs("alpha_tube    
797      0.5*alphaHeight,  0.*deg, 360.*deg);         
798   G4Tubs* recess_tube = new G4Tubs("recess_tub    
799      0.5*recessHeight, 0.*deg, 360.*deg);         
800                                                   
801   G4SubtractionSolid* alpha_sol = new G4Subtra    
802     ("alpha_sol", alpha_tube, recess_tube, G4T    
803      (G4RotationMatrix(), G4ThreeVector(0. ,0.    
804   alpha_log  = new G4LogicalVolume(alpha_sol,     
805                                                   
806   alpha_phys = new G4PVPlacement(0, G4ThreeVec    
807                          "alpha_phys", alpha_l    
808                                                   
809   G4VisAttributes* alpha_vat = new G4VisAttrib    
810   alpha_vat->SetVisibility(true);                 
811   alpha_log ->SetVisAttributes(alpha_vat);        
812                                                   
813   // alpha source HOLDER surface                  
814   G4OpticalSurface* OpAlphaSurface = new G4Opt    
815   unified, ground, dielectric_metal, sigalpha=    
816   //G4LogicalBorderSurface* AlphaSurface =        
817   new G4LogicalBorderSurface                      
818     ("Alpha", LXe_phys, alpha_phys, OpAlphaSur    
819                                                   
820   std::vector<G4double> alpha_PP   = { 6.00*eV    
821   std::vector<G4double> alpha_REFL = { 0.05, 0    
822   G4MaterialPropertiesTable *alpha_mt = new G4    
823   alpha_mt->AddProperty("REFLECTIVITY", alpha_    
824   OpAlphaSurface->SetMaterialPropertiesTable(a    
825                                                   
826   // americium *******************************    
827                                                   
828   // moved above for the "extra_offset":          
829   // G4double americiumHeight    = 600.*nanome    
830   G4double americiumRadius    = recessRadius -    
831   G4double americiumVOffset   = 0.5*(alphaHeig    
832   G4double americiumVPosition = americiumVOffs    
833                                                   
834   sourceZ = vesselVPos + LXeVPos + alphaVPosit    
835   G4cout << G4endl << "Calibration source cent    
836    << sourceZ/mm << " mm" << G4endl;              
837                                                   
838   G4Tubs* americium_tube = new G4Tubs("americi    
839      americiumRadius, 0.5*americiumHeight, 0.*    
840   americium_log  = new G4LogicalVolume(americi    
841      "americium_log");                            
842   americium_phys = new G4PVPlacement(0, G4Thre    
843      americiumVPosition),"americium_phys", ame    
844                                                   
845   // americium optical properties:                
846   G4OpticalSurface* OpAmericiumSurface = new G    
847     ("AmericiumSurface", unified, ground, diel    
848   //G4LogicalBorderSurface* AmericiumSurface =    
849   new G4LogicalBorderSurface                      
850     ("Americium", LXe_phys, americium_phys, Op    
851                                                   
852   std::vector<G4double> americium_PP   = { 6.0    
853   std::vector<G4double> americium_REFL = { 0.7    
854   G4MaterialPropertiesTable *americium_mt = ne    
855   americium_mt->AddProperty("REFLECTIVITY", am    
856   OpAlphaSurface->SetMaterialPropertiesTable(a    
857                                                   
858   G4VisAttributes* americium_vat= new G4VisAtt    
859   americium_vat->SetVisibility(true);             
860   americium_vat->SetForceSolid(true);             
861   americium_log->SetVisAttributes(americium_va    
862                                                   
863                                                   
864   // Photomultiplier: ETL 9829 QA ************    
865                                                   
866   G4double pmtHeight    = 12.0*cm;                
867   G4double pmtRadius    = 2.6*cm;                 
868   G4double pmtVOffset   = 1.0*cm;                 
869   G4double pmtVPosition = -0.5*(LXeTubeHeight+    
870                                                   
871   G4Sphere* pmt_window = new G4Sphere("pmt_sph    
872      0.*deg, 360.*deg, 0.*deg, 30.0*deg);         
873   G4Tubs* pmt_tube = new G4Tubs("pmt_tube", 0.    
874      0.*deg, 360.*deg);                           
875                                                   
876   G4UnionSolid* pmt_sol = new G4UnionSolid("pm    
877     G4Transform3D(G4RotationMatrix(), G4ThreeV    
878     -2.*pmtRadius*std::cos(30.0*deg))));          
879                                                   
880   pmt_log  = new G4LogicalVolume(pmt_sol, pmt_    
881   pmt_phys = new G4PVPlacement(0,G4ThreeVector    
882      "pmt_phys", pmt_log, LXe_phys, false, 0);    
883                                                   
884   G4OpticalSurface* pmt_opsurf = new G4Optical    
885     ("pmt_opsurf",unified, polished, dielectri    
886   //G4LogicalBorderSurface* pmt_surf =            
887   new G4LogicalBorderSurface                      
888     ("pmt_surf", LXe_phys, pmt_phys, pmt_opsur    
889                                                   
890   G4VisAttributes* pmt_vat= new G4VisAttribute    
891   pmt_vat->SetForceSolid(true);                   
892   pmt_vat->SetVisibility(true);                   
893   pmt_log->SetVisAttributes(pmt_vat);             
894                                                   
895                                                   
896   // photocathode ****************************    
897                                                   
898   G4double phcathVOffset     = 0.5*pmtHeight-2    
899   G4double phcathVPosition   = phcathVOffset;     
900                                                   
901   G4Sphere* phcath_sol = new G4Sphere("phcath_    
902      2.*pmtRadius-1.6*mm, 2.*pmtRadius-1.59*mm    
903      27.0*deg);                                   
904                                                   
905   phcath_log  = new G4LogicalVolume(phcath_sol    
906   phcath_phys = new G4PVPlacement(0, G4ThreeVe    
907      "phcath_phys", phcath_log, pmt_phys, fals    
908                                                   
909   G4OpticalSurface*  phcath_opsurf = new G4Opt    
910      unified, polished, dielectric_dielectric)    
911   //G4LogicalBorderSurface* phcath_surf =         
912   new G4LogicalBorderSurface                      
913     ("phcath_surf", pmt_phys, phcath_phys, phc    
914                                                   
915   std::vector<G4double> phcath_PP   = { 6.00*e    
916   // std::vector<G4double> phcath_REFL = { 0.0    
917   // G4MaterialPropertiesTable* phcath_mt = ne    
918   // phcath_mt->AddProperty("REFLECTIVITY", ph    
919   // phcath_opsurf->SetMaterialPropertiesTable    
920                                                   
921                                                   
922   //**Photocathode surface properties             
923   std::vector<G4double> photocath_EFF={1.,1.};    
924   std::vector<G4double> photocath_ReR={1.92,1.    
925   std::vector<G4double> photocath_ImR={1.69,1.    
926   G4MaterialPropertiesTable* photocath_mt = ne    
927   photocath_mt->AddProperty("EFFICIENCY",phcat    
928   photocath_mt->AddProperty("REALRINDEX",phcat    
929   photocath_mt->AddProperty("IMAGINARYRINDEX",    
930   G4OpticalSurface* photocath_opsurf=             
931     new G4OpticalSurface("photocath_opsurf",gl    
932                          dielectric_metal);       
933   photocath_opsurf->SetMaterialPropertiesTable    
934                                                   
935   G4VisAttributes* phcath_vat= new G4VisAttrib    
936   phcath_vat->SetForceSolid(true);                
937   phcath_vat->SetVisibility(true);                
938   phcath_log->SetVisAttributes(phcath_vat);       
939                                                   
940   new G4LogicalSkinSurface("photocath_surf",ph    
941                                                   
942   // .........................................    
943   // attach user limits ......................    
944                                                   
945                                                   
946   G4cout << G4endl << "User Limits: " << G4end    
947    << "\t theMaxTimeCuts:     " << G4BestUnit(    
948    << G4endl                                      
949    << "\t theRoomTimeCut:     " << G4BestUnit(    
950    << G4endl                                      
951    << "\t theMaxStepSize:     " << G4BestUnit(    
952    << G4endl                                      
953    << "\t theMinEKine:        " << G4BestUnit(    
954    << G4endl                                      
955    << "\t minRoomMinEKine:    " << G4BestUnit(    
956    << G4endl << G4endl;                           
957                                                   
958   if (theUserLimitsForRoom != 0) delete theUse    
959   if (theUserLimitsForDetector != 0) delete th    
960                                                   
961   theUserLimitsForRoom = new G4UserLimits(theM    
962             DBL_MAX,          // track length     
963             theRoomTimeCut,   // Time cut         
964             theRoomMinEkine); // min energy       
965                                                   
966 #include "DMXDetectorRoomLimits.icc"              
967                                                   
968   theUserLimitsForDetector = new G4UserLimits(    
969                 DBL_MAX, // Track Max             
970                 theMaxTimeCuts,                   
971                 theMinEkine);                     
972                                                   
973       world_log->SetUserLimits(theUserLimitsFo    
974         lab_log->SetUserLimits(theUserLimitsFo    
975      jacket_log->SetUserLimits(theUserLimitsFo    
976      vacuum_log->SetUserLimits(theUserLimitsFo    
977      vessel_log->SetUserLimits(theUserLimitsFo    
978         GXe_log->SetUserLimits(theUserLimitsFo    
979   //        LXe_log->SetUserLimits(theUserLimi    
980         LXe_log->SetUserLimits(theUserLimitsFo    
981    CuShield_log->SetUserLimits(theUserLimitsFo    
982        ring_log->SetUserLimits(theUserLimitsFo    
983      mirror_log->SetUserLimits(theUserLimitsFo    
984       grid1_log->SetUserLimits(theUserLimitsFo    
985       grid2_log->SetUserLimits(theUserLimitsFo    
986       alpha_log->SetUserLimits(theUserLimitsFo    
987   americium_log->SetUserLimits(theUserLimitsFo    
988         pmt_log->SetUserLimits(theUserLimitsFo    
989      phcath_log->SetUserLimits(theUserLimitsFo    
990                                                   
991  return world_phys;                               
992                                                   
993 }                                                 
994                                                   
995 //....oooOO0OOooo........oooOO0OOooo........oo    
996                                                   
997 void DMXDetectorConstruction::ConstructSDandFi    
998 {                                                 
999   // .........................................    
1000   // sensitive detectors ....................    
1001   // ........................................    
1002                                                  
1003   if (LXeSD.Get() == 0)                          
1004     {                                            
1005       G4String name="/DMXDet/LXeSD";             
1006       DMXScintSD* aSD = new DMXScintSD(name);    
1007       LXeSD.Put(aSD);                            
1008     }                                            
1009   G4SDManager::GetSDMpointer()->AddNewDetecto    
1010   if (LXe_log)                                   
1011     SetSensitiveDetector(LXe_log,LXeSD.Get())    
1012                                                  
1013   if (pmtSD.Get() == 0)                          
1014     {                                            
1015       G4String name="/DMXDet/pmtSD";             
1016       DMXPmtSD* aSD = new DMXPmtSD(name);        
1017       pmtSD.Put(aSD);                            
1018     }                                            
1019   G4SDManager::GetSDMpointer()->AddNewDetecto    
1020   if (phcath_log)                                
1021     SetSensitiveDetector(phcath_log,pmtSD.Get    
1022                                                  
1023   return;                                        
1024 }                                                
1025                                                  
1026                                                  
1027 //....oooOO0OOooo........oooOO0OOooo........o    
1028                                                  
1029 // specific method to G4UserLimits:= SetUserM    
1030 void DMXDetectorConstruction::SetRoomEnergyCu    
1031 {                                                
1032   // set minimum charged particle energy cut     
1033   theRoomMinEkine = val;                         
1034   if (theUserLimitsForRoom != 0)                 
1035     {                                            
1036       theUserLimitsForRoom->SetUserMinEkine(v    
1037       G4cout << " Changing Room energy cut to    
1038        << G4endl;                                
1039     }                                            
1040 }                                                
1041                                                  
1042 //....oooOO0OOooo........oooOO0OOooo........o    
1043                                                  
1044 // specific method to G4UserLimits:= SetUserM    
1045 void DMXDetectorConstruction::SetEnergyCut(G4    
1046 {                                                
1047   // set minimum charged particle energy cut     
1048   theMinEkine = val;                             
1049   if (theUserLimitsForDetector != 0)             
1050     {                                            
1051       theUserLimitsForDetector->SetUserMinEki    
1052       G4cout << "Changing Detector energy cut    
1053        << G4endl;                                
1054     }                                            
1055 }                                                
1056                                                  
1057 //....oooOO0OOooo........oooOO0OOooo........o    
1058                                                  
1059 // specific method to G4UserLimits:= SetUserM    
1060 void DMXDetectorConstruction::SetRoomTimeCut(    
1061 {                                                
1062   // set room time cut:                          
1063   theRoomTimeCut = val;                          
1064   if (theUserLimitsForRoom != 0)                 
1065     {                                            
1066       theUserLimitsForRoom->SetUserMaxTime(va    
1067       G4cout << " Changing Room Time cut to:     
1068        << G4endl;                                
1069     }                                            
1070 }                                                
1071                                                  
1072 //....oooOO0OOooo........oooOO0OOooo........o    
1073                                                  
1074 // specific method to G4UserLimits:= SetUserM    
1075 void DMXDetectorConstruction::SetTimeCut(G4do    
1076 {                                                
1077   // set detector time cut:                      
1078   theMaxTimeCuts = val;                          
1079   if (theUserLimitsForDetector != 0)             
1080     {                                            
1081       theUserLimitsForDetector->SetUserMaxTim    
1082       G4cout << " Changing Detector Time cut     
1083        << G4endl;                                
1084     }                                            
1085 }                                                
1086                                                  
1087 //....oooOO0OOooo........oooOO0OOooo........o    
1088                                                  
1089                                                  
1090                                                  
1091