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