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 /// \file scavenger/src/DetectorConstruction.c 26 /// \file scavenger/src/DetectorConstruction.cc 27 /// \brief Implementation of the scavenger::De 27 /// \brief Implementation of the scavenger::DetectorConstruction class 28 28 29 #include "DetectorConstruction.hh" 29 #include "DetectorConstruction.hh" 30 << 30 #include "G4NistManager.hh" 31 #include "PrimaryKiller.hh" << 32 #include "ScoreSpecies.hh" << 33 << 34 #include "G4Box.hh" 31 #include "G4Box.hh" 35 #include "G4LogicalVolume.hh" 32 #include "G4LogicalVolume.hh" 36 #include "G4MultiFunctionalDetector.hh" << 37 #include "G4NistManager.hh" << 38 #include "G4PVPlacement.hh" 33 #include "G4PVPlacement.hh" 39 #include "G4SDManager.hh" << 34 #include "G4VisAttributes.hh" 40 #include "G4SystemOfUnits.hh" 35 #include "G4SystemOfUnits.hh" >> 36 #include "G4SDManager.hh" >> 37 #include "G4MultiFunctionalDetector.hh" 41 #include "G4VPrimitiveScorer.hh" 38 #include "G4VPrimitiveScorer.hh" 42 #include "G4VisAttributes.hh" << 39 #include "ScoreSpecies.hh" >> 40 #include "PrimaryKiller.hh" 43 41 44 namespace scavenger 42 namespace scavenger 45 { 43 { 46 44 47 //....oooOO0OOooo........oooOO0OOooo........oo 45 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 48 46 49 DetectorConstruction::DetectorConstruction() : << 47 DetectorConstruction::DetectorConstruction() >> 48 : G4VUserDetectorConstruction() {} 50 49 51 //....oooOO0OOooo........oooOO0OOooo........oo 50 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 52 51 53 G4VPhysicalVolume* DetectorConstruction::Const << 52 G4VPhysicalVolume *DetectorConstruction::Construct() { 54 { << 55 // Water is defined from NIST material datab 53 // Water is defined from NIST material database 56 auto* man = G4NistManager::Instance(); << 54 auto *man = G4NistManager::Instance(); 57 auto* water = man->FindOrBuildMaterial("G4_W << 55 auto *water = man->FindOrBuildMaterial("G4_WATER"); 58 56 59 // World 57 // World 60 G4double world_sizeXYZ = 1. * km; 58 G4double world_sizeXYZ = 1. * km; 61 auto solidWorld = 59 auto solidWorld = 62 new G4Box("World", 0.5 * world_sizeXYZ, 0. << 60 new G4Box("World", 63 << 61 0.5 * world_sizeXYZ, 64 auto logicWorld = new G4LogicalVolume(solidW << 62 0.5 * world_sizeXYZ, 65 << 63 0.5 * world_sizeXYZ); 66 G4VPhysicalVolume* physWorld = new G4PVPlace << 64 67 << 65 auto logicWorld = 68 << 66 new G4LogicalVolume(solidWorld, 69 << 67 water, 70 << 68 "World"); 71 << 69 72 << 70 G4VPhysicalVolume *physWorld = 73 << 71 new G4PVPlacement(nullptr, //no rotation >> 72 G4ThreeVector(), //its position at (0,0,0) >> 73 logicWorld, //its logical volume >> 74 "World", //its name >> 75 nullptr, //its mother volume >> 76 false, //no boolean operation >> 77 0, //copy number >> 78 true); //checking overlaps 74 79 75 // Visualization attributes 80 // Visualization attributes 76 auto worldVisAtt = new G4VisAttributes(G4Col 81 auto worldVisAtt = new G4VisAttributes(G4Colour(.5, 1.0, .5)); 77 worldVisAtt->SetVisibility(true); 82 worldVisAtt->SetVisibility(true); 78 logicWorld->SetVisAttributes(worldVisAtt); 83 logicWorld->SetVisAttributes(worldVisAtt); 79 return physWorld; 84 return physWorld; 80 } 85 } 81 86 82 //....oooOO0OOooo........oooOO0OOooo........oo 87 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 83 88 84 void DetectorConstruction::ConstructSDandField << 89 void DetectorConstruction::ConstructSDandField() { 85 { << 86 G4SDManager::GetSDMpointer()->SetVerboseLeve 90 G4SDManager::GetSDMpointer()->SetVerboseLevel(1); 87 /** 91 /** 88 * declare World as a MultiFunctionalDetecto 92 * declare World as a MultiFunctionalDetector scorer 89 */ 93 */ 90 auto mfDetector = new G4MultiFunctionalDetec 94 auto mfDetector = new G4MultiFunctionalDetector("mfDetector"); 91 95 92 // Kill primary track after a chosen energy 96 // Kill primary track after a chosen energy loss OR under a chosen 93 // kinetic energy 97 // kinetic energy 94 auto primaryKiller = new PrimaryKiller("Prim 98 auto primaryKiller = new PrimaryKiller("PrimaryKiller"); 95 primaryKiller->SetMinLossEnergyLimit(500. * << 99 primaryKiller->SetMinLossEnergyLimit(500. * eV); // default value 96 primaryKiller->SetMaxLossEnergyLimit(1. * ke << 100 primaryKiller->SetMaxLossEnergyLimit(1. * keV); // default value 97 mfDetector->RegisterPrimitive(primaryKiller) 101 mfDetector->RegisterPrimitive(primaryKiller); 98 102 99 // Record Species scorer: 103 // Record Species scorer: 100 // - score number of species over time 104 // - score number of species over time 101 // - score the total energy deposition 105 // - score the total energy deposition 102 // - compute the radiochemical yields (G va 106 // - compute the radiochemical yields (G values) 103 G4VPrimitiveScorer* gValues = new ScoreSpeci << 107 G4VPrimitiveScorer *gValues = new ScoreSpecies("Species"); 104 mfDetector->RegisterPrimitive(gValues); 108 mfDetector->RegisterPrimitive(gValues); 105 G4SDManager::GetSDMpointer()->AddNewDetector 109 G4SDManager::GetSDMpointer()->AddNewDetector(mfDetector); 106 SetSensitiveDetector("World", mfDetector); 110 SetSensitiveDetector("World", mfDetector); 107 } 111 } 108 112 109 //....oooOO0OOooo........oooOO0OOooo........oo 113 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 110 114 111 } // namespace scavenger << 115 }