ТЕЗИСЫ И МАТЕРИАЛЫ ПУБЛИКАЦИЙ
Федотова А.А. Твердотельные детекторы ионизирующего излучения в задачах персональной дозиметрии / А.А. Федотова // Итоговая научно- образовательная конференция студентов Казанского федерального университета 2021 года: сб. тезисов. Казань: Издательство Казанского Университета (в печати).
ПРИЛОЖЕНИЕ А
Часть кода, описывающая конструкцию детектора
DetectorConstruction.cc
#include "DetectorConstruction.hh" #include "G4Material.hh"
#include "G4MaterialTable.hh" #include "G4Element.hh" #include "G4ElementTable.hh" #include "G4Box.hh"
#include "G4Tubs.hh" #include "G4Polycone.hh"
#include "G4LogicalVolume.hh" #include "G4ThreeVector.hh" #include "G4PVPlacement.hh" #include "G4VisAttributes.hh"
#include "G4LogicalBorderSurface.hh" #include "G4OpticalSurface.hh"
using namespace CLHEP; DetectorConstruction::DetectorConstruction()
{ }
DetectorConstruction::DetectorConstruction()
{ }
G4VPhysicalVolume* DetectorConstruction::Construct()
{ //
// Material definitions
// G4String name, symbol; //a=mass of a mole; G4double a, z, density; //z=mean number of protons; G4int ncomponents, natoms;
G4double pressure = 3.e-18*pascal; G4double temperature = 2.73*kelvin; density = 1.e-25*g/cm3;
G4Material* Vacuum = new G4Material(name="Galactic", z=1., a=1.01*g/mole,
density,kStateGas,temperature,pressure); // define simple Elements
// O
a = 15.999*g/mole;
G4Element* O = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a); // Si
a = 28.0855*g/mole;
G4Element* Si = new G4Element(name="Silicon" ,symbol="Si" , z= 14., a); // Cs
a = 132.905*g/mole;
G4Element* Cs = new G4Element(name="Cesium",symbol="Cs" , z= 55., a); // define simple materials
// Al reflector density = 2.700*g/cm3; a = 26.98*g/mole;
G4Material* AluR = new G4Material(name="AluR", z=13., a, density); // MgO reflector density = 2.0*g/cm3;
G4Material* MgO = new G4Material(name="MgO", density, ncomponents=2); MgO->AddElement(Mg, natoms=1);
MgO->AddElement(O, natoms=1); // CsI(Tl)
// Set my own material a = 132.9054519*g/mole;
G4Element* elCs = new G4Element(name="Cesium",symbol="Cs" , z= 55., a); a = 126.90447*g/mole;
G4Element* elI = new G4Element(name="Iodine" ,symbol="I" , z= 53., a); density = 4.51*g/cm3;
G4Material* CsI = new G4Material(name="CsI",density,ncomponents=2); CsI->AddElement(elCs, natoms=1);
CsI->AddElement(elI, natoms=1);
G4Element* Tl = new G4Element(name="Thallium", symbol="Tl",z= 81., a= 204.385*g/mole);
G4Material* CsI_Tl = new G4Material("CsI_Tl",density= 4.51*g/cm3, ncomponents=2);
CsI_Tl->AddMaterial(CsI,99.6*perCent); CsI_Tl->AddElement(Tl,0.4*perCent); //Si
density = 2.33*g/cm3;
G4Material* Silicon = new G4Material(name="Silicon", density= 2.33*g/cm3, ncomponents=1);
Silicon->AddElement(Si, natoms=1); //
// Optical properties
// const G4int nEntries = 2;
G4double PhotonEnergy[nEntries] = {1.0*eV,7.0*eV}; // MgO reflector
G4double MgORefractionIndex[nEntries] = {1.0,1.0};
G4double MgOAbsorptionLength[nEntries] = {1.0E-9*m,1.0E-9*m}; G4MaterialPropertiesTable* MgOMPT = new G4MaterialPropertiesTable();
MgOMPT->AddProperty("RINDEX",PhotonEnergy,MgORefractionIndex,
nEntries);
MgOMPT->AddProperty("ABSLENGTH",PhotonEnergy,MgOAbsorptionLength, nEntries);
MgO->SetMaterialPropertiesTable(MgOMPT); // AluR reflector
G4double AluRRindex[nEntries] = {0.9,0.9};//{0.98,0.98}; G4MaterialPropertiesTable* AluRMPT = new G4MaterialPropertiesTable(); AluRMPT->AddProperty("REFLECTIVITY",PhotonEnergy,AluRRindex,
nEntries); AluR->SetMaterialPropertiesTable(AluRMPT); // CsI(Tl)
G4double CsI_TlRefractionIndex[nEntries] = {1.79,1.79}; G4double CsI_TlAbsorptionLength[nEntries] = {50.*cm,50.*cm};
G4MaterialPropertiesTable* CsI_TlMPT = new G4MaterialPropertiesTable(); CsI_TlMPT->AddProperty("RINDEX",PhotonEnergy,CsI_TlRefractionIndex,
nEntries);
CsI_TlMPT->AddProperty("ABSLENGTH",PhotonEnergy,CsI_TlAbsorptionLength,
nEntries); G4double ScintEnergy2[nEntries] = {3.26*eV,3.44*eV}; G4double ScintFast2[nEntries] = {1.0,1.0}; CsI_TlMPT->AddProperty("FASTCOMPONENT",ScintEnergy2,ScintFast2,nEntries); CsI_TlMPT->AddConstProperty("SCINTILLATIONYIELD",54./keV);
CsI_TlMPT->AddConstProperty("RESOLUTIONSCALE",1.); CsI_TlMPT->AddConstProperty("FASTTIMECONSTANT",600.*ns); CsI_TlMPT->AddConstProperty("YIELDRATIO",1.);
CsI_Tl->SetMaterialPropertiesTable(CsI_TlMPT); // Vacuum
G4double vacRefractionIndex[nEntries] = {1.0,1.0}; G4MaterialPropertiesTable* vacMPT = new G4MaterialPropertiesTable();
vacMPT-
>AddProperty("RINDEX",PhotonEnergy,vacRefractionIndex,nEntries); Vacuum->SetMaterialPropertiesTable(vacMPT); //
// Detector geometry
//
// World
G4double WorldSize= 0.4*30.*cm; G4Box*
solidWorld = new G4Box("World", //its name WorldSize/2,WorldSize/2,WorldSize/2); //its size
G4LogicalVolume*
logicWorld = new G4LogicalVolume(solidWorld, //its solid
G4VPhysicalVolume*
Vacuum, //its material
"World"); //its name
physiWorld = new G4PVPlacement(0, //no rotation G4ThreeVector(),//at (0,0,0)
"World", //its name logicWorld, //its logical volume
NULL, //its mother volume false, //no boolean operation
0); //copy number
// Detector
G4double ScintpX = 7.5*mm; // red G4double ScintpY = 1.5*mm; // green G4double ScintpZ = 7.5*mm; // blue G4double AirGap = 0.5*mm;
G4double ReflectorThickness = 0.1*mm; G4double PMTWindowThickness = 0.1*mm; // Reflector
G4Box* solidReflectorX = new G4Box("ReflectorX", ReflectorThickness , ScintpY + AirGap+ ReflectorThickness , ScintpZ + AirGap+ ReflectorThickness);
G4Box* solidReflectorY = new G4Box("ReflectorY", ScintpX + AirGap + ReflectorThickness, ReflectorThickness , ScintpZ + AirGap+ ReflectorThickness);
G4Box* solidReflectorZ = new G4Box("ReflectorZ", ScintpX + AirGap + ReflectorThickness, ScintpY + AirGap + ReflectorThickness, ReflectorThickness );
G4Box* solidReflectorZ2 = new G4Box("ReflectorZ2", 3.3*mm , ScintpY + AirGap + ReflectorThickness, ReflectorThickness ); G4LogicalVolume* logicReflectorX = new G4LogicalVolume(solidReflectorX,AluR, "ReflectorX"); G4LogicalVolume* logicReflectorY = new G4LogicalVolume(solidReflectorY,AluR, "ReflectorY"); G4LogicalVolume* logicReflectorZ = new G4LogicalVolume(solidReflectorZ,AluR, "ReflectorZ"); G4LogicalVolume* logicReflectorZ2 = new G4LogicalVolume(solidReflectorZ2,AluR, "ReflectorZ2"); G4ThreeVector positionReflectorXm = G4ThreeVector(-ScintpX - ReflectorThickness - AirGap, 0.*cm,0.*cm);
G4ThreeVector positionReflectorXp = G4ThreeVector( ScintpX + ReflectorThickness + AirGap, 0.*cm,0.*cm);
G4ThreeVector positionReflectorYm = G4ThreeVector(0.*cm, -ScintpY - ReflectorThickness - AirGap, 0.*cm);
G4ThreeVector positionReflectorYp = G4ThreeVector(0.*cm, ScintpY + ReflectorThickness + AirGap, 0.*cm);
G4ThreeVector positionReflectorZ = G4ThreeVector(0.*cm, 0.*cm,-ScintpZ - ReflectorThickness - AirGap );
G4ThreeVector positionReflectorZ2m = G4ThreeVector( 4.8*mm + ReflectorThickness + AirGap, 0.*cm,+ScintpZ + ReflectorThickness + AirGap
);
G4ThreeVector positionReflectorZ2p = G4ThreeVector(-4.8*mm - ReflectorThickness - AirGap, 0.*cm,+ScintpZ + ReflectorThickness + AirGap
); G4VPhysicalVolume* physiReflectorXm = new G4PVPlacement(0,positionReflectorXm,
"ReflectorXm",logicReflectorX,
physiWorld,false,0); G4VPhysicalVolume* physiReflectorXp = new G4PVPlacement(0,positionReflectorXp, "ReflectorXp",logicReflectorX,
physiWorld,false,0); G4VPhysicalVolume* physiReflectorYm = new
G4PVPlacement(0,positionReflectorYm,"ReflectorYm",logicReflectorY,
physiWorld,false,0); G4VPhysicalVolume* physiReflectorYp = new
G4PVPlacement(0,positionReflectorYp,"ReflectorYp",logicReflectorY,
physiWorld,false,0); G4VPhysicalVolume* physiReflectorZ = new G4PVPlacement(0,positionReflectorZ,"ReflectorZ",logicReflectorZ,
physiWorld,false,0); G4VPhysicalVolume* physiReflectorZ2m = new
G4PVPlacement(0,positionReflectorZ2m,"ReflectorZ2m",logicReflectorZ2,
physiWorld,false,0); G4VPhysicalVolume* physiReflectorZ2p = new
G4PVPlacement(0,positionReflectorZ2p,"ReflectorZ2p",logicReflectorZ2,
physiWorld,false,0); //Crystal
G4Box* solidCrystal = new G4Box("Crystal", ScintpX, ScintpY, ScintpZ);
G4LogicalVolume* logicCrystal = new G4LogicalVolume(solidCrystal,CsI_Tl
"Crystal"); G4ThreeVector positionCrystal = G4ThreeVector(0.*cm,0.*cm,0.*cm); G4VPhysicalVolume* physiCrystal = new G4PVPlacement(0,positionCrystal,
"Crystal",logicCrystal, physiWorld,false,0); // PMT window
G4Box* solidPMTWindow = new G4Box("PMT window", 1.5*mm, ScintpY + AirGap
+ PMTWindowThickness, ScintpZ/150);
G4LogicalVolume* logicPMTWindow = new G4LogicalVolume(solidPMTWindow,
Silicon,"PMTWindow"); G4ThreeVector positionPMTWindow = G4ThreeVector(0.*cm,0.*cm,
ScintpZ + AirGap +
PMTWindowThickness);
G4VPhysicalVolume* physiPMTWindow = new G4PVPlacement(0,positionPMTWindow,
"PMTWindow",logicPMTWindow,physiWorld,false,0);
|