Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /// \file scavenger/src/DetectorConstruction.cc 27 /// \brief Implementation of the scavenger::DetectorConstruction class 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........oooOO0OOooo........oooOO0OOooo..... 48 49 DetectorConstruction::DetectorConstruction() : G4VUserDetectorConstruction() {} 50 51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 52 53 G4VPhysicalVolume* DetectorConstruction::Construct() 54 { 55 // Water is defined from NIST material database 56 auto* man = G4NistManager::Instance(); 57 auto* water = man->FindOrBuildMaterial("G4_WATER"); 58 59 // World 60 G4double world_sizeXYZ = 1. * km; 61 auto solidWorld = 62 new G4Box("World", 0.5 * world_sizeXYZ, 0.5 * world_sizeXYZ, 0.5 * world_sizeXYZ); 63 64 auto logicWorld = new G4LogicalVolume(solidWorld, water, "World"); 65 66 G4VPhysicalVolume* physWorld = new G4PVPlacement(nullptr, // no rotation 67 G4ThreeVector(), // its position at (0,0,0) 68 logicWorld, // its logical volume 69 "World", // its name 70 nullptr, // its mother volume 71 false, // no boolean operation 72 0, // copy number 73 true); // checking overlaps 74 75 // Visualization attributes 76 auto worldVisAtt = new G4VisAttributes(G4Colour(.5, 1.0, .5)); 77 worldVisAtt->SetVisibility(true); 78 logicWorld->SetVisAttributes(worldVisAtt); 79 return physWorld; 80 } 81 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 83 84 void DetectorConstruction::ConstructSDandField() 85 { 86 G4SDManager::GetSDMpointer()->SetVerboseLevel(1); 87 /** 88 * declare World as a MultiFunctionalDetector scorer 89 */ 90 auto mfDetector = new G4MultiFunctionalDetector("mfDetector"); 91 92 // Kill primary track after a chosen energy loss OR under a chosen 93 // kinetic energy 94 auto primaryKiller = new PrimaryKiller("PrimaryKiller"); 95 primaryKiller->SetMinLossEnergyLimit(500. * eV); // default value 96 primaryKiller->SetMaxLossEnergyLimit(1. * keV); // default value 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 values) 103 G4VPrimitiveScorer* gValues = new ScoreSpecies("Species"); 104 mfDetector->RegisterPrimitive(gValues); 105 G4SDManager::GetSDMpointer()->AddNewDetector(mfDetector); 106 SetSensitiveDetector("World", mfDetector); 107 } 108 109 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 110 111 } // namespace scavenger