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::Invisible); 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::Invisible); 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::Invisible); 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::Invisible); 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::Invisible); 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::Invisible); 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::Invisible); 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::Invisible); 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::Invisible); 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::Invisible); 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 const G4int NUM = 2; 573 std::vector<G4double> vessel_REFL = { 0.2, 0 << 573 G4double vessel_PP[NUM] = { 6.5*eV, 7.50*eV }; >> 574 G4double vessel_REFL[NUM] = { 0.2, 0.2 }; 574 G4MaterialPropertiesTable* vessel_mt = new G 575 G4MaterialPropertiesTable* vessel_mt = new G4MaterialPropertiesTable(); 575 vessel_mt->AddProperty("REFLECTIVITY", vesse << 576 vessel_mt->AddProperty("REFLECTIVITY", vessel_PP, vessel_REFL, NUM); 576 OpVesselSurface->SetMaterialPropertiesTable( 577 OpVesselSurface->SetMaterialPropertiesTable(vessel_mt); 577 578 578 // G4LogicalBorderSurface* VesselTopSurface 579 // G4LogicalBorderSurface* VesselTopSurface = 579 new G4LogicalBorderSurface 580 new G4LogicalBorderSurface 580 ("VesselTop", GXe_phys, vesseltop_phys1, O 581 ("VesselTop", GXe_phys, vesseltop_phys1, OpVesselSurface); 581 582 582 //G4LogicalBorderSurface* VesselBottomSurfac 583 //G4LogicalBorderSurface* VesselBottomSurface = 583 new G4LogicalBorderSurface 584 new G4LogicalBorderSurface 584 ("VesselBottom", LXe_phys, vesselbottom_ph 585 ("VesselBottom", LXe_phys, vesselbottom_phys2, OpVesselSurface); 585 586 586 //G4LogicalBorderSurface* GasVesselSurface = 587 //G4LogicalBorderSurface* GasVesselSurface = 587 new G4LogicalBorderSurface 588 new G4LogicalBorderSurface 588 ("GasVessel", GXe_phys, gaslag_phys, OpVes 589 ("GasVessel", GXe_phys, gaslag_phys, OpVesselSurface); 589 590 590 //G4LogicalBorderSurface* LiquidVesselSurfac 591 //G4LogicalBorderSurface* LiquidVesselSurface = 591 new G4LogicalBorderSurface 592 new G4LogicalBorderSurface 592 ("LiquidVessel", LXe_phys, liqLag_phys, Op 593 ("LiquidVessel", LXe_phys, liqLag_phys, OpVesselSurface); 593 594 594 595 595 596 596 // Cu Shield ******************************* 597 // Cu Shield ********************************************************** 597 598 598 G4double CuShieldHeight = 17.7*cm; 599 G4double CuShieldHeight = 17.7*cm; 599 G4double CuShieldThickness = 2.4*mm; 600 G4double CuShieldThickness = 2.4*mm; 600 G4double CuShieldOuterRadius = 3.0*cm; 601 G4double CuShieldOuterRadius = 3.0*cm; 601 G4double CuShieldInnerRadius = CuShieldOuter 602 G4double CuShieldInnerRadius = CuShieldOuterRadius-CuShieldThickness; 602 G4double CuShieldVPosition = -0.5*LXeTubeH 603 G4double CuShieldVPosition = -0.5*LXeTubeHeight - PMTDetectorHeight 603 + 0.5*CuShield 604 + 0.5*CuShieldHeight; 604 605 605 // Zero co-ordinate of the union is the zero 606 // Zero co-ordinate of the union is the zero of the first volume, 606 // i.e. the offset is still present 607 // i.e. the offset is still present 607 608 608 G4Tubs* CuShield_tube = new G4Tubs("CuShield 609 G4Tubs* CuShield_tube = new G4Tubs("CuShield_tube", CuShieldInnerRadius, 609 CuShieldOuterRadius, 0.5*CuShieldHeight, 610 CuShieldOuterRadius, 0.5*CuShieldHeight, 0.*deg, 360.*deg); 610 CuShield_log = new G4LogicalVolume(CuShield 611 CuShield_log = new G4LogicalVolume(CuShield_tube, CuShield_mat, 611 "CuShield_log"); 612 "CuShield_log"); 612 CuShield_phys = new G4PVPlacement(0, 613 CuShield_phys = new G4PVPlacement(0, 613 G4ThreeVector(0.*cm, 0.*cm, CuShieldVPosi 614 G4ThreeVector(0.*cm, 0.*cm, CuShieldVPosition), 614 "CuShield_phys", CuShield_log, LXe_phys, 615 "CuShield_phys", CuShield_log, LXe_phys, false, 0); 615 616 616 // G4VisAttributes* CuShield_vat= new G4Vis 617 // G4VisAttributes* CuShield_vat= new G4VisAttributes(magenta); 617 G4VisAttributes* CuShield_vat = new G4VisAtt 618 G4VisAttributes* CuShield_vat = new G4VisAttributes(brown); 618 // CuShield_vat->SetForceSolid(true); 619 // CuShield_vat->SetForceSolid(true); 619 CuShield_vat->SetVisibility(true); 620 CuShield_vat->SetVisibility(true); 620 CuShield_log->SetVisAttributes(CuShield_vat) 621 CuShield_log->SetVisAttributes(CuShield_vat); 621 622 622 // Cu shield surface 623 // Cu shield surface 623 G4double sigalpha; 624 G4double sigalpha; 624 G4OpticalSurface* OpCuShieldSurface = new G4 625 G4OpticalSurface* OpCuShieldSurface = new G4OpticalSurface 625 ("ShieldSurface", unified, ground, dielect 626 ("ShieldSurface", unified, ground, dielectric_metal, sigalpha=30.0*deg); 626 //G4LogicalBorderSurface* ShieldSurface = 627 //G4LogicalBorderSurface* ShieldSurface = 627 new G4LogicalBorderSurface 628 new G4LogicalBorderSurface 628 ("Shield", LXe_phys, CuShield_phys, OpCuSh 629 ("Shield", LXe_phys, CuShield_phys, OpCuShieldSurface); 629 630 630 std::vector<G4double> CuShield_PP = { 7.0* << 631 G4double CuShield_PP[NUM] = { 7.0*eV, 7.50*eV }; 631 std::vector<G4double> CuShield_REFL = { 0.3, << 632 G4double CuShield_REFL[NUM] = { 0.3, 0.2 }; 632 G4MaterialPropertiesTable *CuShield_mt = new 633 G4MaterialPropertiesTable *CuShield_mt = new G4MaterialPropertiesTable(); 633 CuShield_mt->AddProperty("REFLECTIVITY", CuS << 634 CuShield_mt->AddProperty("REFLECTIVITY", CuShield_PP, CuShield_REFL, NUM); 634 OpCuShieldSurface->SetMaterialPropertiesTabl 635 OpCuShieldSurface->SetMaterialPropertiesTable(CuShield_mt); 635 636 >> 637 636 // rings *********************************** 638 // rings *************************************************************** 637 639 638 G4double ringHeight = 4.*mm; 640 G4double ringHeight = 4.*mm; 639 G4double ringOuterRadius = 4.0*cm; 641 G4double ringOuterRadius = 4.0*cm; 640 G4double ringInnerRadius = CuShieldOuterRad 642 G4double ringInnerRadius = CuShieldOuterRadius; 641 G4double ringVOffset = 0.5*ringHeight; 643 G4double ringVOffset = 0.5*ringHeight; 642 G4double ringVPosition = -0.5*GXeHeight + 644 G4double ringVPosition = -0.5*GXeHeight + gasGap +ringVOffset; 643 645 644 G4Tubs* ring_tube=new G4Tubs("ring_tube", ri 646 G4Tubs* ring_tube=new G4Tubs("ring_tube", ringInnerRadius, 645 ringOuterRadius, 0.5*ringHeight, 0.*deg, 647 ringOuterRadius, 0.5*ringHeight, 0.*deg, 360.*deg); 646 ring_log = new G4LogicalVolume(ring_tube, ri 648 ring_log = new G4LogicalVolume(ring_tube, ring_mat, "ring_log"); 647 649 648 // optical surface: ring materials table 650 // optical surface: ring materials table 649 std::vector<G4double> ring_PP = { 6.00*eV, << 651 G4double ring_PP[NUM] = { 6.00*eV, 7.50*eV }; 650 std::vector<G4double> ring_REFL = { 0.7, 0.6 << 652 G4double ring_REFL[NUM] = { 0.7, 0.65 }; 651 G4MaterialPropertiesTable *ring_mt = new G4M 653 G4MaterialPropertiesTable *ring_mt = new G4MaterialPropertiesTable(); 652 ring_mt->AddProperty("REFLECTIVITY", ring_PP << 654 ring_mt->AddProperty("REFLECTIVITY", ring_PP, ring_REFL, NUM); 653 655 654 G4OpticalSurface* OpRingSurface = new G4Opti 656 G4OpticalSurface* OpRingSurface = new G4OpticalSurface 655 ("RingSurface", unified, ground, dielectri 657 ("RingSurface", unified, ground, dielectric_metal, sigalpha=10.*deg); 656 // last argument is surface roughness if it' 658 // last argument is surface roughness if it's non-polished - i.e. ground 657 OpRingSurface->SetMaterialPropertiesTable(ri 659 OpRingSurface->SetMaterialPropertiesTable(ring_mt); 658 660 659 // rings inside gas phase 661 // rings inside gas phase 660 ring_phys_gas[0] = new G4PVPlacement(0, G4Th 662 ring_phys_gas[0] = new G4PVPlacement(0, G4ThreeVector 661 (0.*cm, 0.*cm, ringVPosition),"ring_phys0" 663 (0.*cm, 0.*cm, ringVPosition),"ring_phys0",ring_log,GXe_phys,false, 0); 662 //G4LogicalBorderSurface* RingSurface_gas0 = 664 //G4LogicalBorderSurface* RingSurface_gas0 = 663 new G4LogicalBorderSurface 665 new G4LogicalBorderSurface 664 ("Ring", GXe_phys, ring_phys_gas[0], OpRin 666 ("Ring", GXe_phys, ring_phys_gas[0], OpRingSurface); 665 667 666 ring_phys_gas[1] = new G4PVPlacement(0, 668 ring_phys_gas[1] = new G4PVPlacement(0, 667 G4ThreeVector(0.*cm, 0.*cm, ringVPosition 669 G4ThreeVector(0.*cm, 0.*cm, ringVPosition-=ringHeight+1.0*mm), 668 "ring_phys1",ring_log, GXe_phys, false, 0 670 "ring_phys1",ring_log, GXe_phys, false, 0); 669 //G4LogicalBorderSurface* RingSurface_gas1 = 671 //G4LogicalBorderSurface* RingSurface_gas1 = 670 new G4LogicalBorderSurface 672 new G4LogicalBorderSurface 671 ("Ring", GXe_phys, ring_phys_gas[1], OpRi 673 ("Ring", GXe_phys, ring_phys_gas[1], OpRingSurface); 672 674 673 675 674 // rings inside liquid phase: 676 // rings inside liquid phase: 675 ringVPosition = 0.5*LXeTubeHeight; 677 ringVPosition = 0.5*LXeTubeHeight; 676 678 677 ring_phys_liq[0] = new G4PVPlacement(0, 679 ring_phys_liq[0] = new G4PVPlacement(0, 678 G4ThreeVector(0.*cm, 0.*cm, ringVPosition 680 G4ThreeVector(0.*cm, 0.*cm, ringVPosition-=0.5*ringHeight), 679 "ring_phys2",ring_log,LXe_phys, false, 0) 681 "ring_phys2",ring_log,LXe_phys, false, 0); 680 //G4LogicalBorderSurface* RingSurface_liq0 = 682 //G4LogicalBorderSurface* RingSurface_liq0 = 681 new G4LogicalBorderSurface 683 new G4LogicalBorderSurface 682 ("Ring", LXe_phys, ring_phys_liq[0], OpRin 684 ("Ring", LXe_phys, ring_phys_liq[0], OpRingSurface); 683 685 684 ring_phys_liq[1] = new G4PVPlacement(0, 686 ring_phys_liq[1] = new G4PVPlacement(0, 685 G4ThreeVector(0.*cm, 0.*cm, ringVPosition 687 G4ThreeVector(0.*cm, 0.*cm, ringVPosition-=ringHeight+1.75*mm), 686 "ring_phys3",ring_log, LXe_phys, false, 0 688 "ring_phys3",ring_log, LXe_phys, false, 0); 687 //G4LogicalBorderSurface* RingSurface_liq1 = 689 //G4LogicalBorderSurface* RingSurface_liq1 = 688 new G4LogicalBorderSurface 690 new G4LogicalBorderSurface 689 ("Ring", LXe_phys, ring_phys_liq[1], OpRin 691 ("Ring", LXe_phys, ring_phys_liq[1], OpRingSurface); 690 692 691 ring_phys_liq[2]=new G4PVPlacement(0, 693 ring_phys_liq[2]=new G4PVPlacement(0, 692 G4ThreeVector(0.*cm, 0.*cm, ringVPosition 694 G4ThreeVector(0.*cm, 0.*cm, ringVPosition-=ringHeight), 693 "ring_phys4",ring_log, LXe_phys, false, 0 695 "ring_phys4",ring_log, LXe_phys, false, 0); 694 //G4LogicalBorderSurface* RingSurface_liq2 = 696 //G4LogicalBorderSurface* RingSurface_liq2 = 695 new G4LogicalBorderSurface 697 new G4LogicalBorderSurface 696 ("Ring", LXe_phys, ring_phys_liq[2], OpRin 698 ("Ring", LXe_phys, ring_phys_liq[2], OpRingSurface); 697 699 698 ring_phys_liq[3]=new G4PVPlacement(0, 700 ring_phys_liq[3]=new G4PVPlacement(0, 699 G4ThreeVector(0.*cm, 0.*cm, ringVPosition 701 G4ThreeVector(0.*cm, 0.*cm, ringVPosition-=ringHeight), 700 "ring_phys5",ring_log, LXe_phys, false, 0 702 "ring_phys5",ring_log, LXe_phys, false, 0); 701 //G4LogicalBorderSurface* RingSurface_liq3 = 703 //G4LogicalBorderSurface* RingSurface_liq3 = 702 new G4LogicalBorderSurface 704 new G4LogicalBorderSurface 703 ("Ring", LXe_phys, ring_phys_liq[3], OpRin 705 ("Ring", LXe_phys, ring_phys_liq[3], OpRingSurface); 704 706 705 ring_phys_liq[4]=new G4PVPlacement(0, 707 ring_phys_liq[4]=new G4PVPlacement(0, 706 G4ThreeVector(0.*cm, 0.*cm, ringVPosition 708 G4ThreeVector(0.*cm, 0.*cm, ringVPosition-=ringHeight+1.75*mm), 707 "ring_phys6",ring_log, LXe_phys,false, 0) 709 "ring_phys6",ring_log, LXe_phys,false, 0); 708 //G4LogicalBorderSurface* RingSurface_liq4 = 710 //G4LogicalBorderSurface* RingSurface_liq4 = 709 new G4LogicalBorderSurface 711 new G4LogicalBorderSurface 710 ("Ring", LXe_phys, ring_phys_liq[4], OpRin 712 ("Ring", LXe_phys, ring_phys_liq[4], OpRingSurface); 711 713 712 ring_phys_liq[5]=new G4PVPlacement(0, 714 ring_phys_liq[5]=new G4PVPlacement(0, 713 G4ThreeVector(0.*cm, 0.*cm, ringVPosition 715 G4ThreeVector(0.*cm, 0.*cm, ringVPosition-=ringHeight+1.75*mm), 714 "ring_phys7",ring_log, LXe_phys,false, 0) 716 "ring_phys7",ring_log, LXe_phys,false, 0); 715 //G4LogicalBorderSurface* RingSurface_liq5 = 717 //G4LogicalBorderSurface* RingSurface_liq5 = 716 new G4LogicalBorderSurface 718 new G4LogicalBorderSurface 717 ("Ring", LXe_phys, ring_phys_liq[5], OpRin 719 ("Ring", LXe_phys, ring_phys_liq[5], OpRingSurface); 718 720 719 721 720 G4VisAttributes* ring_vat= new G4VisAttribut 722 G4VisAttributes* ring_vat= new G4VisAttributes(lgrey); 721 ring_vat->SetVisibility(true); 723 ring_vat->SetVisibility(true); 722 ring_log->SetVisAttributes(ring_vat); 724 ring_log->SetVisAttributes(ring_vat); 723 725 724 726 725 // Mirror ********************************** 727 // Mirror ************************************************************* 726 728 727 G4double mirrorHeight = 2.0*mm; 729 G4double mirrorHeight = 2.0*mm; 728 G4double mirrorRadius = ringInnerRadius; 730 G4double mirrorRadius = ringInnerRadius; 729 G4double mirrorVOffset = 0.5*ringHeight; 731 G4double mirrorVOffset = 0.5*ringHeight; 730 G4double mirrorVPosition = -0.5*GXeHeight + 732 G4double mirrorVPosition = -0.5*GXeHeight + gasGap +mirrorVOffset; 731 733 732 G4Tubs* mirror_tube = new G4Tubs("mirror_tub 734 G4Tubs* mirror_tube = new G4Tubs("mirror_tube", 0.*cm, mirrorRadius, 733 0.5*mirrorHeight, 0.*deg, 360.*deg); 735 0.5*mirrorHeight, 0.*deg, 360.*deg); 734 mirror_log = new G4LogicalVolume(mirror_tub 736 mirror_log = new G4LogicalVolume(mirror_tube, mirror_mat, "mirror_log"); 735 mirror_phys = new G4PVPlacement(0, 737 mirror_phys = new G4PVPlacement(0, 736 G4ThreeVector(0.*cm, 0.*cm, mirrorVPositi 738 G4ThreeVector(0.*cm, 0.*cm, mirrorVPosition), 737 "mirror_phys", mirror_log, GXe_phys, fals 739 "mirror_phys", mirror_log, GXe_phys, false, 0); 738 740 739 G4VisAttributes* mirror_vat = new G4VisAttri 741 G4VisAttributes* mirror_vat = new G4VisAttributes(cyan); 740 mirror_vat->SetVisibility(true); 742 mirror_vat->SetVisibility(true); 741 // mirror_vat->SetForceSolid(true); 743 // mirror_vat->SetForceSolid(true); 742 mirror_log->SetVisAttributes(mirror_vat); 744 mirror_log->SetVisAttributes(mirror_vat); 743 745 744 746 745 // mirror surface 747 // mirror surface 746 G4OpticalSurface * OpMirrorSurface = new G4O 748 G4OpticalSurface * OpMirrorSurface = new G4OpticalSurface 747 ("MirrorSurface", unified, ground, dielect 749 ("MirrorSurface", unified, ground, dielectric_metal, sigalpha=5.0*deg); 748 //G4LogicalBorderSurface* MirrorSurface = 750 //G4LogicalBorderSurface* MirrorSurface = 749 new G4LogicalBorderSurface 751 new G4LogicalBorderSurface 750 ("Mirror", GXe_phys, mirror_phys, OpMirror 752 ("Mirror", GXe_phys, mirror_phys, OpMirrorSurface); 751 753 752 std::vector<G4double> mirror_PP = { 6.00*e << 754 G4double mirror_PP[NUM] = { 6.00*eV, 7.50*eV }; 753 std::vector<G4double> mirror_REFL = { 0.83, << 755 G4double mirror_REFL[NUM] = { 0.83, 0.78 }; 754 G4MaterialPropertiesTable *mirror_mt = new G 756 G4MaterialPropertiesTable *mirror_mt = new G4MaterialPropertiesTable(); 755 mirror_mt->AddProperty("REFLECTIVITY", mirro << 757 mirror_mt->AddProperty("REFLECTIVITY", mirror_PP, mirror_REFL, NUM); 756 OpMirrorSurface->SetMaterialPropertiesTable( 758 OpMirrorSurface->SetMaterialPropertiesTable(mirror_mt); 757 759 >> 760 758 // Grids ********************************** 761 // Grids ************************************************************* 759 762 760 G4double gridHeight = 0.100*mm; 763 G4double gridHeight = 0.100*mm; 761 G4double gridRadius = ringInnerRadius; 764 G4double gridRadius = ringInnerRadius; 762 G4double grid1VOffset = 3.5*ringHeight+1.7 765 G4double grid1VOffset = 3.5*ringHeight+1.75*mm; 763 G4double grid1VPosition = 0.5*LXeTubeHeight 766 G4double grid1VPosition = 0.5*LXeTubeHeight - grid1VOffset; 764 G4double grid2VOffset = 4.5*ringHeight+3.5 767 G4double grid2VOffset = 4.5*ringHeight+3.50*mm; 765 G4double grid2VPosition = 0.5*LXeTubeHeight 768 G4double grid2VPosition = 0.5*LXeTubeHeight - grid2VOffset; 766 769 767 G4Tubs* grid_tube = new G4Tubs("grid_tube", 770 G4Tubs* grid_tube = new G4Tubs("grid_tube", 0.*cm, gridRadius, 768 0.5*gridHeight, 0.*deg, 360.*deg); 771 0.5*gridHeight, 0.*deg, 360.*deg); 769 772 770 grid1_log = new G4LogicalVolume(grid_tube, 773 grid1_log = new G4LogicalVolume(grid_tube, grid_mat, "grid1_log"); 771 grid1_phys = new G4PVPlacement(0,G4ThreeVect 774 grid1_phys = new G4PVPlacement(0,G4ThreeVector(0.*cm, 0.*cm, grid1VPosition), 772 "grid1_phys", grid1_log, LXe_phys, false, 775 "grid1_phys", grid1_log, LXe_phys, false, 0); 773 grid2_log = new G4LogicalVolume(grid_tube, 776 grid2_log = new G4LogicalVolume(grid_tube, grid_mat, "grid2_log"); 774 grid2_phys = new G4PVPlacement(0,G4ThreeVect 777 grid2_phys = new G4PVPlacement(0,G4ThreeVector(0.*cm, 0.*cm, grid2VPosition), 775 "grid2_phys", grid2_log, LXe_phys, false, 778 "grid2_phys", grid2_log, LXe_phys, false, 0); 776 779 777 G4VisAttributes* grid_vat = new G4VisAttribu 780 G4VisAttributes* grid_vat = new G4VisAttributes(red); 778 grid_vat->SetVisibility(true); 781 grid_vat->SetVisibility(true); 779 grid1_log->SetVisAttributes(grid_vat); 782 grid1_log->SetVisAttributes(grid_vat); 780 grid2_log->SetVisAttributes(grid_vat); 783 grid2_log->SetVisAttributes(grid_vat); 781 784 782 785 783 // alpha source holder ********************* 786 // alpha source holder ************************************************ 784 787 785 G4double alphaHeight = 0.7*mm; // total 788 G4double alphaHeight = 0.7*mm; // total lead thickness = 1.23 mm 786 G4double recessHeight = 0.3*mm; // total 789 G4double recessHeight = 0.3*mm; // totals lead thickness = 1.23 mm 787 G4double alphaRadius = 1.2*mm; // was 0. 790 G4double alphaRadius = 1.2*mm; // was 0.8 788 G4double recessRadius = 0.35*mm; // was 0 791 G4double recessRadius = 0.35*mm; // was 0.5 was 0.2 789 G4double recessVPosition = 0.5*(alphaHeight 792 G4double recessVPosition = 0.5*(alphaHeight - recessHeight); 790 793 791 G4double alphaVOffset = grid1VOffset-0.5* 794 G4double alphaVOffset = grid1VOffset-0.5*alphaHeight - gridHeight; 792 G4double americiumHeight = 3000.*nanometer; 795 G4double americiumHeight = 3000.*nanometer; // assumes ~1% Am 793 G4double extra_offset = (recessHeight +0. 796 G4double extra_offset = (recessHeight +0.3*mm + 0.5*americiumHeight); 794 G4double alphaVPosition = 0.5*LXeTubeHeight 797 G4double alphaVPosition = 0.5*LXeTubeHeight - alphaVOffset + extra_offset; 795 798 796 G4Tubs* alpha_tube = new G4Tubs("alpha_tube 799 G4Tubs* alpha_tube = new G4Tubs("alpha_tube", 0.*cm, alphaRadius, 797 0.5*alphaHeight, 0.*deg, 360.*deg); 800 0.5*alphaHeight, 0.*deg, 360.*deg); 798 G4Tubs* recess_tube = new G4Tubs("recess_tub 801 G4Tubs* recess_tube = new G4Tubs("recess_tube", 0.*cm, recessRadius, 799 0.5*recessHeight, 0.*deg, 360.*deg); 802 0.5*recessHeight, 0.*deg, 360.*deg); 800 803 801 G4SubtractionSolid* alpha_sol = new G4Subtra 804 G4SubtractionSolid* alpha_sol = new G4SubtractionSolid 802 ("alpha_sol", alpha_tube, recess_tube, G4T 805 ("alpha_sol", alpha_tube, recess_tube, G4Transform3D 803 (G4RotationMatrix(), G4ThreeVector(0. ,0. 806 (G4RotationMatrix(), G4ThreeVector(0. ,0. , recessVPosition))); 804 alpha_log = new G4LogicalVolume(alpha_sol, 807 alpha_log = new G4LogicalVolume(alpha_sol, alpha_mat, "alpha_log"); 805 808 806 alpha_phys = new G4PVPlacement(0, G4ThreeVec 809 alpha_phys = new G4PVPlacement(0, G4ThreeVector(0., 0., alphaVPosition), 807 "alpha_phys", alpha_l 810 "alpha_phys", alpha_log, LXe_phys, false, 0); 808 811 809 G4VisAttributes* alpha_vat = new G4VisAttrib 812 G4VisAttributes* alpha_vat = new G4VisAttributes(white); 810 alpha_vat->SetVisibility(true); 813 alpha_vat->SetVisibility(true); 811 alpha_log ->SetVisAttributes(alpha_vat); 814 alpha_log ->SetVisAttributes(alpha_vat); 812 815 813 // alpha source HOLDER surface 816 // alpha source HOLDER surface 814 G4OpticalSurface* OpAlphaSurface = new G4Opt 817 G4OpticalSurface* OpAlphaSurface = new G4OpticalSurface("AlphaSurface", 815 unified, ground, dielectric_metal, sigalpha= 818 unified, ground, dielectric_metal, sigalpha=20.0*deg); 816 //G4LogicalBorderSurface* AlphaSurface = 819 //G4LogicalBorderSurface* AlphaSurface = 817 new G4LogicalBorderSurface 820 new G4LogicalBorderSurface 818 ("Alpha", LXe_phys, alpha_phys, OpAlphaSur 821 ("Alpha", LXe_phys, alpha_phys, OpAlphaSurface); 819 822 820 std::vector<G4double> alpha_PP = { 6.00*eV << 823 G4double alpha_PP[NUM] = { 6.00*eV, 7.50*eV }; 821 std::vector<G4double> alpha_REFL = { 0.05, 0 << 824 G4double alpha_REFL[NUM] = { 0.05, 0.05 }; 822 G4MaterialPropertiesTable *alpha_mt = new G4 825 G4MaterialPropertiesTable *alpha_mt = new G4MaterialPropertiesTable(); 823 alpha_mt->AddProperty("REFLECTIVITY", alpha_ << 826 alpha_mt->AddProperty("REFLECTIVITY", alpha_PP, alpha_REFL, NUM); 824 OpAlphaSurface->SetMaterialPropertiesTable(a 827 OpAlphaSurface->SetMaterialPropertiesTable(alpha_mt); 825 828 826 // americium ******************************* 829 // americium *********************************************************** 827 830 828 // moved above for the "extra_offset": 831 // moved above for the "extra_offset": 829 // G4double americiumHeight = 600.*nanome 832 // G4double americiumHeight = 600.*nanometer; // assumes ~1% Am 830 G4double americiumRadius = recessRadius - 833 G4double americiumRadius = recessRadius - 50.0*micrometer; 831 G4double americiumVOffset = 0.5*(alphaHeig 834 G4double americiumVOffset = 0.5*(alphaHeight-americiumHeight)-recessHeight; 832 G4double americiumVPosition = americiumVOffs 835 G4double americiumVPosition = americiumVOffset; 833 836 834 sourceZ = vesselVPos + LXeVPos + alphaVPosit 837 sourceZ = vesselVPos + LXeVPos + alphaVPosition + americiumVPosition + PosZ; 835 G4cout << G4endl << "Calibration source cent 838 G4cout << G4endl << "Calibration source centre (X,Y,Z): 0, 0, " 836 << sourceZ/mm << " mm" << G4endl; 839 << sourceZ/mm << " mm" << G4endl; 837 840 838 G4Tubs* americium_tube = new G4Tubs("americi 841 G4Tubs* americium_tube = new G4Tubs("americium_tube", 0.*cm, 839 americiumRadius, 0.5*americiumHeight, 0.* 842 americiumRadius, 0.5*americiumHeight, 0.*deg, 360.*deg); 840 americium_log = new G4LogicalVolume(americi 843 americium_log = new G4LogicalVolume(americium_tube, americium_mat, 841 "americium_log"); 844 "americium_log"); 842 americium_phys = new G4PVPlacement(0, G4Thre 845 americium_phys = new G4PVPlacement(0, G4ThreeVector(0., 0., 843 americiumVPosition),"americium_phys", ame 846 americiumVPosition),"americium_phys", americium_log, alpha_phys,false,0); 844 847 845 // americium optical properties: 848 // americium optical properties: 846 G4OpticalSurface* OpAmericiumSurface = new G 849 G4OpticalSurface* OpAmericiumSurface = new G4OpticalSurface 847 ("AmericiumSurface", unified, ground, diel 850 ("AmericiumSurface", unified, ground, dielectric_metal, sigalpha=5.0*deg); 848 //G4LogicalBorderSurface* AmericiumSurface = 851 //G4LogicalBorderSurface* AmericiumSurface = 849 new G4LogicalBorderSurface 852 new G4LogicalBorderSurface 850 ("Americium", LXe_phys, americium_phys, Op 853 ("Americium", LXe_phys, americium_phys, OpAmericiumSurface); 851 854 852 std::vector<G4double> americium_PP = { 6.0 << 855 G4double americium_PP[NUM] = { 6.00*eV, 7.50*eV }; 853 std::vector<G4double> americium_REFL = { 0.7 << 856 G4double americium_REFL[NUM] = { 0.7, 0.65 }; 854 G4MaterialPropertiesTable *americium_mt = ne 857 G4MaterialPropertiesTable *americium_mt = new G4MaterialPropertiesTable(); 855 americium_mt->AddProperty("REFLECTIVITY", am << 858 americium_mt->AddProperty("REFLECTIVITY", americium_PP, americium_REFL, NUM); 856 OpAlphaSurface->SetMaterialPropertiesTable(a 859 OpAlphaSurface->SetMaterialPropertiesTable(americium_mt); 857 860 858 G4VisAttributes* americium_vat= new G4VisAtt 861 G4VisAttributes* americium_vat= new G4VisAttributes(cyan); 859 americium_vat->SetVisibility(true); 862 americium_vat->SetVisibility(true); 860 americium_vat->SetForceSolid(true); 863 americium_vat->SetForceSolid(true); 861 americium_log->SetVisAttributes(americium_va 864 americium_log->SetVisAttributes(americium_vat); 862 865 863 866 864 // Photomultiplier: ETL 9829 QA ************ 867 // Photomultiplier: ETL 9829 QA **************************************** 865 868 866 G4double pmtHeight = 12.0*cm; 869 G4double pmtHeight = 12.0*cm; 867 G4double pmtRadius = 2.6*cm; 870 G4double pmtRadius = 2.6*cm; 868 G4double pmtVOffset = 1.0*cm; 871 G4double pmtVOffset = 1.0*cm; 869 G4double pmtVPosition = -0.5*(LXeTubeHeight+ 872 G4double pmtVPosition = -0.5*(LXeTubeHeight+pmtHeight)+pmtVOffset; 870 873 871 G4Sphere* pmt_window = new G4Sphere("pmt_sph 874 G4Sphere* pmt_window = new G4Sphere("pmt_sphere", 0.*cm, 2.*pmtRadius, 872 0.*deg, 360.*deg, 0.*deg, 30.0*deg); 875 0.*deg, 360.*deg, 0.*deg, 30.0*deg); 873 G4Tubs* pmt_tube = new G4Tubs("pmt_tube", 0. 876 G4Tubs* pmt_tube = new G4Tubs("pmt_tube", 0.*cm, pmtRadius, 0.5*pmtHeight, 874 0.*deg, 360.*deg); 877 0.*deg, 360.*deg); 875 878 876 G4UnionSolid* pmt_sol = new G4UnionSolid("pm 879 G4UnionSolid* pmt_sol = new G4UnionSolid("pmt_sol", pmt_tube, pmt_window, 877 G4Transform3D(G4RotationMatrix(), G4ThreeV 880 G4Transform3D(G4RotationMatrix(), G4ThreeVector(0,0,0.5*pmtHeight 878 -2.*pmtRadius*std::cos(30.0*deg)))); 881 -2.*pmtRadius*std::cos(30.0*deg)))); 879 882 880 pmt_log = new G4LogicalVolume(pmt_sol, pmt_ 883 pmt_log = new G4LogicalVolume(pmt_sol, pmt_mat, "pmt_log"); 881 pmt_phys = new G4PVPlacement(0,G4ThreeVector 884 pmt_phys = new G4PVPlacement(0,G4ThreeVector(0.*cm, 0.*cm, pmtVPosition), 882 "pmt_phys", pmt_log, LXe_phys, false, 0); 885 "pmt_phys", pmt_log, LXe_phys, false, 0); 883 886 884 G4OpticalSurface* pmt_opsurf = new G4Optical 887 G4OpticalSurface* pmt_opsurf = new G4OpticalSurface 885 ("pmt_opsurf",unified, polished, dielectri 888 ("pmt_opsurf",unified, polished, dielectric_dielectric); 886 //G4LogicalBorderSurface* pmt_surf = 889 //G4LogicalBorderSurface* pmt_surf = 887 new G4LogicalBorderSurface 890 new G4LogicalBorderSurface 888 ("pmt_surf", LXe_phys, pmt_phys, pmt_opsur 891 ("pmt_surf", LXe_phys, pmt_phys, pmt_opsurf); 889 892 890 G4VisAttributes* pmt_vat= new G4VisAttribute 893 G4VisAttributes* pmt_vat= new G4VisAttributes(blue); 891 pmt_vat->SetForceSolid(true); 894 pmt_vat->SetForceSolid(true); 892 pmt_vat->SetVisibility(true); 895 pmt_vat->SetVisibility(true); 893 pmt_log->SetVisAttributes(pmt_vat); 896 pmt_log->SetVisAttributes(pmt_vat); 894 897 895 898 896 // photocathode **************************** 899 // photocathode ******************************************************* 897 900 898 G4double phcathVOffset = 0.5*pmtHeight-2 901 G4double phcathVOffset = 0.5*pmtHeight-2.*pmtRadius*std::cos(30.0*deg); 899 G4double phcathVPosition = phcathVOffset; 902 G4double phcathVPosition = phcathVOffset; 900 903 901 G4Sphere* phcath_sol = new G4Sphere("phcath_ 904 G4Sphere* phcath_sol = new G4Sphere("phcath_sphere", 902 2.*pmtRadius-1.6*mm, 2.*pmtRadius-1.59*mm 905 2.*pmtRadius-1.6*mm, 2.*pmtRadius-1.59*mm, 0.*deg, 360.*deg, 0.*deg, 903 27.0*deg); 906 27.0*deg); 904 907 905 phcath_log = new G4LogicalVolume(phcath_sol 908 phcath_log = new G4LogicalVolume(phcath_sol, phcath_mat, "phcath_log"); 906 phcath_phys = new G4PVPlacement(0, G4ThreeVe 909 phcath_phys = new G4PVPlacement(0, G4ThreeVector(0., 0., phcathVPosition), 907 "phcath_phys", phcath_log, pmt_phys, fals 910 "phcath_phys", phcath_log, pmt_phys, false, 0); 908 911 909 G4OpticalSurface* phcath_opsurf = new G4Opt 912 G4OpticalSurface* phcath_opsurf = new G4OpticalSurface("phcath_opsurf", 910 unified, polished, dielectric_dielectric) 913 unified, polished, dielectric_dielectric); 911 //G4LogicalBorderSurface* phcath_surf = 914 //G4LogicalBorderSurface* phcath_surf = 912 new G4LogicalBorderSurface 915 new G4LogicalBorderSurface 913 ("phcath_surf", pmt_phys, phcath_phys, phc 916 ("phcath_surf", pmt_phys, phcath_phys, phcath_opsurf); 914 917 915 std::vector<G4double> phcath_PP = { 6.00*e << 918 G4double phcath_PP[NUM] = { 6.00*eV, 7.50*eV }; 916 // std::vector<G4double> phcath_REFL = { 0.0 << 919 // G4double phcath_REFL[NUM] = { 0.0, 0.0}; 917 // G4MaterialPropertiesTable* phcath_mt = ne 920 // G4MaterialPropertiesTable* phcath_mt = new G4MaterialPropertiesTable(); 918 // phcath_mt->AddProperty("REFLECTIVITY", ph << 921 // phcath_mt->AddProperty("REFLECTIVITY", phcath_PP, phcath_REFL, NUM); 919 // phcath_opsurf->SetMaterialPropertiesTable 922 // phcath_opsurf->SetMaterialPropertiesTable(phcath_mt); 920 923 921 924 922 //**Photocathode surface properties 925 //**Photocathode surface properties 923 std::vector<G4double> photocath_EFF={1.,1.}; << 926 G4double photocath_EFF[NUM]={1.,1.}; //Enables 'detection' of photons 924 std::vector<G4double> photocath_ReR={1.92,1. << 927 G4double photocath_ReR[NUM]={1.92,1.92}; 925 std::vector<G4double> photocath_ImR={1.69,1. << 928 G4double photocath_ImR[NUM]={1.69,1.69}; 926 G4MaterialPropertiesTable* photocath_mt = ne 929 G4MaterialPropertiesTable* photocath_mt = new G4MaterialPropertiesTable(); 927 photocath_mt->AddProperty("EFFICIENCY",phcat << 930 photocath_mt->AddProperty("EFFICIENCY",phcath_PP,photocath_EFF,NUM); 928 photocath_mt->AddProperty("REALRINDEX",phcat << 931 photocath_mt->AddProperty("REALRINDEX",phcath_PP,photocath_ReR,NUM); 929 photocath_mt->AddProperty("IMAGINARYRINDEX", << 932 photocath_mt->AddProperty("IMAGINARYRINDEX",phcath_PP,photocath_ImR,NUM); 930 G4OpticalSurface* photocath_opsurf= 933 G4OpticalSurface* photocath_opsurf= 931 new G4OpticalSurface("photocath_opsurf",gl 934 new G4OpticalSurface("photocath_opsurf",glisur,polished, 932 dielectric_metal); 935 dielectric_metal); 933 photocath_opsurf->SetMaterialPropertiesTable 936 photocath_opsurf->SetMaterialPropertiesTable(photocath_mt); 934 937 >> 938 935 G4VisAttributes* phcath_vat= new G4VisAttrib 939 G4VisAttributes* phcath_vat= new G4VisAttributes(lblue); 936 phcath_vat->SetForceSolid(true); 940 phcath_vat->SetForceSolid(true); 937 phcath_vat->SetVisibility(true); 941 phcath_vat->SetVisibility(true); 938 phcath_log->SetVisAttributes(phcath_vat); 942 phcath_log->SetVisAttributes(phcath_vat); 939 943 940 new G4LogicalSkinSurface("photocath_surf",ph 944 new G4LogicalSkinSurface("photocath_surf",phcath_log,photocath_opsurf); 941 945 942 // ......................................... 946 // ...................................................................... 943 // attach user limits ...................... 947 // attach user limits ................................................... 944 948 945 949 946 G4cout << G4endl << "User Limits: " << G4end 950 G4cout << G4endl << "User Limits: " << G4endl 947 << "\t theMaxTimeCuts: " << G4BestUnit( 951 << "\t theMaxTimeCuts: " << G4BestUnit(theMaxTimeCuts,"Time") 948 << G4endl 952 << G4endl 949 << "\t theRoomTimeCut: " << G4BestUnit( 953 << "\t theRoomTimeCut: " << G4BestUnit(theRoomTimeCut,"Time") 950 << G4endl 954 << G4endl 951 << "\t theMaxStepSize: " << G4BestUnit( 955 << "\t theMaxStepSize: " << G4BestUnit(theMaxStepSize,"Length") 952 << G4endl 956 << G4endl 953 << "\t theMinEKine: " << G4BestUnit( 957 << "\t theMinEKine: " << G4BestUnit(theMinEkine,"Energy") 954 << G4endl 958 << G4endl 955 << "\t minRoomMinEKine: " << G4BestUnit( 959 << "\t minRoomMinEKine: " << G4BestUnit(theRoomMinEkine,"Energy") 956 << G4endl << G4endl; 960 << G4endl << G4endl; 957 961 958 if (theUserLimitsForRoom != 0) delete theUse 962 if (theUserLimitsForRoom != 0) delete theUserLimitsForRoom; 959 if (theUserLimitsForDetector != 0) delete th 963 if (theUserLimitsForDetector != 0) delete theUserLimitsForDetector; 960 964 961 theUserLimitsForRoom = new G4UserLimits(theM 965 theUserLimitsForRoom = new G4UserLimits(theMaxStepSize, // step length max 962 DBL_MAX, // track length 966 DBL_MAX, // track length max 963 theRoomTimeCut, // Time cut 967 theRoomTimeCut, // Time cut 964 theRoomMinEkine); // min energy 968 theRoomMinEkine); // min energy 965 969 966 #include "DMXDetectorRoomLimits.icc" 970 #include "DMXDetectorRoomLimits.icc" 967 971 968 theUserLimitsForDetector = new G4UserLimits( 972 theUserLimitsForDetector = new G4UserLimits(theDetectorStepSize, 969 DBL_MAX, // Track Max 973 DBL_MAX, // Track Max 970 theMaxTimeCuts, 974 theMaxTimeCuts, 971 theMinEkine); 975 theMinEkine); 972 976 973 world_log->SetUserLimits(theUserLimitsFo 977 world_log->SetUserLimits(theUserLimitsForRoom); 974 lab_log->SetUserLimits(theUserLimitsFo 978 lab_log->SetUserLimits(theUserLimitsForRoom); 975 jacket_log->SetUserLimits(theUserLimitsFo 979 jacket_log->SetUserLimits(theUserLimitsForRoom); 976 vacuum_log->SetUserLimits(theUserLimitsFo 980 vacuum_log->SetUserLimits(theUserLimitsForRoom); 977 vessel_log->SetUserLimits(theUserLimitsFo 981 vessel_log->SetUserLimits(theUserLimitsForRoom); 978 GXe_log->SetUserLimits(theUserLimitsFo 982 GXe_log->SetUserLimits(theUserLimitsForDetector); 979 // LXe_log->SetUserLimits(theUserLimi 983 // LXe_log->SetUserLimits(theUserLimitsForXenon); 980 LXe_log->SetUserLimits(theUserLimitsFo 984 LXe_log->SetUserLimits(theUserLimitsForDetector); 981 CuShield_log->SetUserLimits(theUserLimitsFo 985 CuShield_log->SetUserLimits(theUserLimitsForDetector); 982 ring_log->SetUserLimits(theUserLimitsFo 986 ring_log->SetUserLimits(theUserLimitsForDetector); 983 mirror_log->SetUserLimits(theUserLimitsFo 987 mirror_log->SetUserLimits(theUserLimitsForDetector); 984 grid1_log->SetUserLimits(theUserLimitsFo 988 grid1_log->SetUserLimits(theUserLimitsForDetector); 985 grid2_log->SetUserLimits(theUserLimitsFo 989 grid2_log->SetUserLimits(theUserLimitsForDetector); 986 alpha_log->SetUserLimits(theUserLimitsFo 990 alpha_log->SetUserLimits(theUserLimitsForDetector); 987 americium_log->SetUserLimits(theUserLimitsFo 991 americium_log->SetUserLimits(theUserLimitsForDetector); 988 pmt_log->SetUserLimits(theUserLimitsFo 992 pmt_log->SetUserLimits(theUserLimitsForDetector); 989 phcath_log->SetUserLimits(theUserLimitsFo 993 phcath_log->SetUserLimits(theUserLimitsForDetector); 990 994 991 return world_phys; 995 return world_phys; 992 996 993 } 997 } 994 998 995 //....oooOO0OOooo........oooOO0OOooo........oo 999 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 996 1000 997 void DMXDetectorConstruction::ConstructSDandFi 1001 void DMXDetectorConstruction::ConstructSDandField() 998 { 1002 { 999 // ......................................... 1003 // ...................................................................... 1000 // sensitive detectors .................... 1004 // sensitive detectors .................................................. 1001 // ........................................ 1005 // ...................................................................... 1002 1006 1003 if (LXeSD.Get() == 0) 1007 if (LXeSD.Get() == 0) 1004 { 1008 { 1005 G4String name="/DMXDet/LXeSD"; 1009 G4String name="/DMXDet/LXeSD"; 1006 DMXScintSD* aSD = new DMXScintSD(name); 1010 DMXScintSD* aSD = new DMXScintSD(name); 1007 LXeSD.Put(aSD); 1011 LXeSD.Put(aSD); 1008 } << 1012 } 1009 G4SDManager::GetSDMpointer()->AddNewDetecto << 1010 if (LXe_log) 1013 if (LXe_log) 1011 SetSensitiveDetector(LXe_log,LXeSD.Get()) 1014 SetSensitiveDetector(LXe_log,LXeSD.Get()); 1012 1015 1013 if (pmtSD.Get() == 0) 1016 if (pmtSD.Get() == 0) 1014 { 1017 { 1015 G4String name="/DMXDet/pmtSD"; 1018 G4String name="/DMXDet/pmtSD"; 1016 DMXPmtSD* aSD = new DMXPmtSD(name); 1019 DMXPmtSD* aSD = new DMXPmtSD(name); 1017 pmtSD.Put(aSD); 1020 pmtSD.Put(aSD); 1018 } 1021 } 1019 G4SDManager::GetSDMpointer()->AddNewDetecto << 1022 1020 if (phcath_log) 1023 if (phcath_log) 1021 SetSensitiveDetector(phcath_log,pmtSD.Get 1024 SetSensitiveDetector(phcath_log,pmtSD.Get()); 1022 1025 1023 return; 1026 return; 1024 } 1027 } 1025 1028 1026 1029 1027 //....oooOO0OOooo........oooOO0OOooo........o 1030 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1028 1031 1029 // specific method to G4UserLimits:= SetUserM 1032 // specific method to G4UserLimits:= SetUserMinEkine 1030 void DMXDetectorConstruction::SetRoomEnergyCu 1033 void DMXDetectorConstruction::SetRoomEnergyCut(G4double val) 1031 { 1034 { 1032 // set minimum charged particle energy cut 1035 // set minimum charged particle energy cut - NB: for ROOM 1033 theRoomMinEkine = val; 1036 theRoomMinEkine = val; 1034 if (theUserLimitsForRoom != 0) 1037 if (theUserLimitsForRoom != 0) 1035 { 1038 { 1036 theUserLimitsForRoom->SetUserMinEkine(v 1039 theUserLimitsForRoom->SetUserMinEkine(val); 1037 G4cout << " Changing Room energy cut to 1040 G4cout << " Changing Room energy cut to: " << G4BestUnit(val,"Energy") 1038 << G4endl; 1041 << G4endl; 1039 } 1042 } 1040 } 1043 } 1041 1044 1042 //....oooOO0OOooo........oooOO0OOooo........o 1045 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1043 1046 1044 // specific method to G4UserLimits:= SetUserM 1047 // specific method to G4UserLimits:= SetUserMinEkine 1045 void DMXDetectorConstruction::SetEnergyCut(G4 1048 void DMXDetectorConstruction::SetEnergyCut(G4double val) 1046 { 1049 { 1047 // set minimum charged particle energy cut 1050 // set minimum charged particle energy cut - NB: for Xenon Detector 1048 theMinEkine = val; 1051 theMinEkine = val; 1049 if (theUserLimitsForDetector != 0) 1052 if (theUserLimitsForDetector != 0) 1050 { 1053 { 1051 theUserLimitsForDetector->SetUserMinEki 1054 theUserLimitsForDetector->SetUserMinEkine(val); 1052 G4cout << "Changing Detector energy cut 1055 G4cout << "Changing Detector energy cut to: " << G4BestUnit(val,"Energy") 1053 << G4endl; 1056 << G4endl; 1054 } 1057 } 1055 } 1058 } 1056 1059 1057 //....oooOO0OOooo........oooOO0OOooo........o 1060 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1058 1061 1059 // specific method to G4UserLimits:= SetUserM 1062 // specific method to G4UserLimits:= SetUserMaxTime 1060 void DMXDetectorConstruction::SetRoomTimeCut( 1063 void DMXDetectorConstruction::SetRoomTimeCut(G4double val) 1061 { 1064 { 1062 // set room time cut: 1065 // set room time cut: 1063 theRoomTimeCut = val; 1066 theRoomTimeCut = val; 1064 if (theUserLimitsForRoom != 0) 1067 if (theUserLimitsForRoom != 0) 1065 { 1068 { 1066 theUserLimitsForRoom->SetUserMaxTime(va 1069 theUserLimitsForRoom->SetUserMaxTime(val); 1067 G4cout << " Changing Room Time cut to: 1070 G4cout << " Changing Room Time cut to: " << G4BestUnit(val,"Time") 1068 << G4endl; 1071 << G4endl; 1069 } 1072 } 1070 } 1073 } 1071 1074 1072 //....oooOO0OOooo........oooOO0OOooo........o 1075 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1073 1076 1074 // specific method to G4UserLimits:= SetUserM 1077 // specific method to G4UserLimits:= SetUserMaxTime 1075 void DMXDetectorConstruction::SetTimeCut(G4do 1078 void DMXDetectorConstruction::SetTimeCut(G4double val) 1076 { 1079 { 1077 // set detector time cut: 1080 // set detector time cut: 1078 theMaxTimeCuts = val; 1081 theMaxTimeCuts = val; 1079 if (theUserLimitsForDetector != 0) 1082 if (theUserLimitsForDetector != 0) 1080 { 1083 { 1081 theUserLimitsForDetector->SetUserMaxTim 1084 theUserLimitsForDetector->SetUserMaxTime(val); 1082 G4cout << " Changing Detector Time cut 1085 G4cout << " Changing Detector Time cut to: " << G4BestUnit(val,"Time") 1083 << G4endl; 1086 << G4endl; 1084 } 1087 } 1085 } 1088 } 1086 1089 1087 //....oooOO0OOooo........oooOO0OOooo........o 1090 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1088 1091 1089 1092 1090 1093 1091 1094