Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 /// \file scavenger/src/DetectorConstruction.c 27 /// \brief Implementation of the scavenger::De 28 29 #include "DetectorConstruction.hh" 30 31 #include "PrimaryKiller.hh" 32 #include "ScoreSpecies.hh" 33 34 #include "G4Box.hh" 35 #include "G4LogicalVolume.hh" 36 #include "G4MultiFunctionalDetector.hh" 37 #include "G4NistManager.hh" 38 #include "G4PVPlacement.hh" 39 #include "G4SDManager.hh" 40 #include "G4SystemOfUnits.hh" 41 #include "G4VPrimitiveScorer.hh" 42 #include "G4VisAttributes.hh" 43 44 namespace scavenger 45 { 46 47 //....oooOO0OOooo........oooOO0OOooo........oo 48 49 DetectorConstruction::DetectorConstruction() : 50 51 //....oooOO0OOooo........oooOO0OOooo........oo 52 53 G4VPhysicalVolume* DetectorConstruction::Const 54 { 55 // Water is defined from NIST material datab 56 auto* man = G4NistManager::Instance(); 57 auto* water = man->FindOrBuildMaterial("G4_W 58 59 // World 60 G4double world_sizeXYZ = 1. * km; 61 auto solidWorld = 62 new G4Box("World", 0.5 * world_sizeXYZ, 0. 63 64 auto logicWorld = new G4LogicalVolume(solidW 65 66 G4VPhysicalVolume* physWorld = new G4PVPlace 67 68 69 70 71 72 73 74 75 // Visualization attributes 76 auto worldVisAtt = new G4VisAttributes(G4Col 77 worldVisAtt->SetVisibility(true); 78 logicWorld->SetVisAttributes(worldVisAtt); 79 return physWorld; 80 } 81 82 //....oooOO0OOooo........oooOO0OOooo........oo 83 84 void DetectorConstruction::ConstructSDandField 85 { 86 G4SDManager::GetSDMpointer()->SetVerboseLeve 87 /** 88 * declare World as a MultiFunctionalDetecto 89 */ 90 auto mfDetector = new G4MultiFunctionalDetec 91 92 // Kill primary track after a chosen energy 93 // kinetic energy 94 auto primaryKiller = new PrimaryKiller("Prim 95 primaryKiller->SetMinLossEnergyLimit(500. * 96 primaryKiller->SetMaxLossEnergyLimit(1. * ke 97 mfDetector->RegisterPrimitive(primaryKiller) 98 99 // Record Species scorer: 100 // - score number of species over time 101 // - score the total energy deposition 102 // - compute the radiochemical yields (G va 103 G4VPrimitiveScorer* gValues = new ScoreSpeci 104 mfDetector->RegisterPrimitive(gValues); 105 G4SDManager::GetSDMpointer()->AddNewDetector 106 SetSensitiveDetector("World", mfDetector); 107 } 108 109 //....oooOO0OOooo........oooOO0OOooo........oo 110 111 } // namespace scavenger