Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // << 27 /// \file optical/LXe/src/LXeWLSSlab.cc << 28 /// \brief Implementation of the LXeWLSSlab cl << 29 // << 30 // << 31 #include "LXeWLSSlab.hh" 23 #include "LXeWLSSlab.hh" 32 << 33 #include "LXeWLSFiber.hh" 24 #include "LXeWLSFiber.hh" 34 25 35 #include "G4Box.hh" << 36 #include "G4LogicalVolume.hh" << 37 #include "G4Material.hh" << 38 #include "G4SystemOfUnits.hh" << 39 #include "globals.hh" 26 #include "globals.hh" >> 27 #include "G4LogicalSkinSurface.hh" >> 28 #include "G4LogicalBorderSurface.hh" 40 29 41 G4LogicalVolume* LXeWLSSlab::fScintSlab_log = << 30 G4LogicalVolume* LXeWLSSlab::ScintSlab_log=NULL; 42 31 43 //....oooOO0OOooo........oooOO0OOooo........oo << 32 LXeWLSSlab::LXeWLSSlab(G4RotationMatrix *pRot, 44 << 33 const G4ThreeVector &tlate, 45 LXeWLSSlab::LXeWLSSlab(G4RotationMatrix* pRot, << 34 G4LogicalVolume *pMotherLogical, 46 G4LogicalVolume* pMothe << 35 G4bool pMany, 47 LXeDetectorConstruction << 36 G4int pCopyNo, 48 : G4PVPlacement( << 37 LXeDetectorConstruction* c) 49 pRot, tlate, << 38 :G4PVPlacement(pRot,tlate, 50 new G4LogicalVolume(new G4Box("temp", 1. << 39 new G4LogicalVolume(new G4Box("temp",1,1,1), 51 "Slab", pMotherLogical, pMany, pCopyNo), << 40 G4Material::GetMaterial("Vacuum"), 52 fConstructor(c) << 41 "temp",0,0,0), >> 42 "Slab",pMotherLogical,pMany,pCopyNo),constructor(c) 53 { 43 { 54 CopyValues(); 44 CopyValues(); >> 45 >> 46 if(!ScintSlab_log || updated){ 55 47 56 G4double slab_x = fScint_x / 2.; << 48 G4double slab_x = scint_x/2.; 57 G4double slab_y = fScint_y / 2.; << 49 G4double slab_y = scint_y/2.; 58 << 50 59 auto ScintSlab_box = new G4Box("Slab", slab_ << 51 G4Box* ScintSlab_box = new G4Box("Slab",slab_x,slab_y,slab_z); 60 << 52 61 fScintSlab_log = << 53 ScintSlab_log 62 new G4LogicalVolume(ScintSlab_box, G4Mater << 54 = new G4LogicalVolume(ScintSlab_box, 63 << 55 G4Material::GetMaterial("Polystyrene"), 64 G4double spacing = 2. * slab_y / fNfibers; << 56 "Slab",0,0,0); 65 << 57 66 auto rm = new G4RotationMatrix(); << 58 G4double spacing = 2*slab_y/nfibers; 67 rm->rotateY(90. * deg); << 59 68 << 60 G4RotationMatrix* rm = new G4RotationMatrix(); 69 // Place fibers << 61 rm->rotateY(90*deg); 70 for (G4int i = 0; i < fNfibers; ++i) { << 62 71 G4double Y = -(spacing) * (fNfibers - 1) * << 63 //Place fibers 72 new LXeWLSFiber(rm, G4ThreeVector(0., Y, 0 << 64 for(G4int i=0;i<nfibers;i++){ >> 65 G4double Y=-(spacing)*(nfibers-1)*0.5 + i*spacing; >> 66 new LXeWLSFiber(rm,G4ThreeVector(0.,Y,0.),ScintSlab_log,false,0, >> 67 constructor); >> 68 } >> 69 73 } 70 } >> 71 >> 72 SetLogicalVolume(ScintSlab_log); >> 73 } 74 74 75 SetLogicalVolume(fScintSlab_log); << 75 void LXeWLSSlab::CopyValues(){ >> 76 updated=constructor->GetUpdated(); >> 77 >> 78 scint_x=constructor->GetScintX(); >> 79 scint_y=constructor->GetScintY(); >> 80 scint_z=constructor->GetScintZ(); >> 81 nfibers=constructor->GetNFibers(); >> 82 slab_z=constructor->GetSlabZ(); 76 } 83 } 77 84 78 //....oooOO0OOooo........oooOO0OOooo........oo << 79 85 80 void LXeWLSSlab::CopyValues() << 86 81 { << 82 fScint_x = fConstructor->GetScintX(); << 83 fScint_y = fConstructor->GetScintY(); << 84 fScint_z = fConstructor->GetScintZ(); << 85 fNfibers = fConstructor->GetNFibers(); << 86 fSlab_z = fConstructor->GetSlabZ(); << 87 } << 88 87