// // /// \file B4DetectorConstruction.cc /// \brief Implementation of the B4DetectorConstruction class #include "B4DetectorConstruction.hh" #include "G4Material.hh" #include "G4NistManager.hh" #include "G4Box.hh" #include "G4Tubs.hh" #include "G4LogicalVolume.hh" #include "G4PVPlacement.hh" #include "G4PVReplica.hh" #include "G4GlobalMagFieldMessenger.hh" #include "G4AutoDelete.hh" #include "G4GeometryManager.hh" #include "G4PhysicalVolumeStore.hh" #include "G4LogicalVolumeStore.hh" #include "G4SolidStore.hh" #include "G4VisAttributes.hh" #include "G4Colour.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4ThreadLocal G4GlobalMagFieldMessenger* B4DetectorConstruction::fMagFieldMessenger = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... B4DetectorConstruction::B4DetectorConstruction() : G4VUserDetectorConstruction(), fSiliconPV(nullptr), fScintillatorPV(nullptr), fCheckOverlaps(true) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... B4DetectorConstruction::~B4DetectorConstruction() { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4VPhysicalVolume* B4DetectorConstruction::Construct() { // Define materials DefineMaterials(); // Define volumes return DefineVolumes(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void B4DetectorConstruction::DefineMaterials() { // material defined using NIST Manager auto nistManager = G4NistManager::Instance(); // nistManager->FindOrBuildMaterial("G4_Galactic"); nistManager->FindOrBuildMaterial("G4_Ge"); nistManager->FindOrBuildMaterial("G4_Si"); G4double density; G4double a; G4double z; new G4Material("Galactic", z = 1., a = 1.01 * g / mole, density = universe_mean_density, kStateGas, 77 * kelvin, 101325 * pascal); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4VPhysicalVolume* B4DetectorConstruction::DefineVolumes() { //world size auto worldSizeXY = 10.0*cm; auto worldSizeZ = 10.0*cm; // Get materials //auto nist = G4NistManager::Instance(); auto defaultMaterial = G4Material::GetMaterial("Galactic");;//G4Material::GetMaterial(“G4_Galactic”); // auto targetMaterial = nist->FindOrBuildMaterial("G4_Ge");//G4Material::GetMaterial("G4_Au"); auto siliconMaterial = G4Material::GetMaterial("G4_Si");//G4Material::GetMaterial("G4_Si"); auto scintillatorMaterial = G4Material::GetMaterial("G4_Ge");//G4Material::GetMaterial("G4_PLASTIC_SC_VINYLTOLUENE"); if ( ! defaultMaterial || ! siliconMaterial|| ! scintillatorMaterial) { G4ExceptionDescription msg; msg << "Cannot retrieve materials already defined."; G4Exception("B4DetectorConstruction::DefineVolumes()", "MyCode0001", FatalException, msg); } // // -------------------World--------------------------------------------- // auto worldS = new G4Box("World", // its name worldSizeXY, worldSizeXY, worldSizeZ); // its size auto worldLV = new G4LogicalVolume( worldS, // its solid defaultMaterial, // its material "World"); // its name auto worldPV = new G4PVPlacement( 0, // no rotation G4ThreeVector(0.,0.,0.), // at (0,0,0) worldLV, // its logical volume "World", // its name 0, // its mother volume false, // no boolean operation 0, // copy number fCheckOverlaps); // checking overlaps //silicon auto siliconS = new G4Tubs("Silicon", //its name 0.0*mm, 5.642*mm, 0.5*mm, 0*deg, 360*deg); //its size auto siliconLV = new G4LogicalVolume(siliconS, //its solid siliconMaterial, //its material "silicon"); //its name fSiliconPV = new G4PVPlacement(0, G4ThreeVector(0.0*mm,0.0*mm,11.75*mm), // siliconLV, //its logical volume "silicon", //its name worldLV,//logicEnv, //its mother volume false, //no boolean operation 0, //copy number fCheckOverlaps); //overlaps checking G4VisAttributes* VisAtt1 = new G4VisAttributes(G4Colour(1.0,1.25,0.0,2)); siliconLV -> SetVisAttributes(VisAtt1); //scintillator auto scintillatorS = new G4Tubs("Scintillator", //its name 0*mm,0.01*mm,0.01*mm,0*deg,360*deg); //its size auto scintillatorLV = new G4LogicalVolume(scintillatorS, //its solid scintillatorMaterial, //its material "Scintillator"); //its name fScintillatorPV = new G4PVPlacement(0,G4ThreeVector(0.0*mm,0.0*mm,0.0*mm), //rotation scintillatorLV, //its logical volume "Scintillator", //its name worldLV,//logicEnv, //its mother volume false, //no boolean operation 0, //copynumber fCheckOverlaps); // // return worldPV; }