#include "DetectorConstruction.hh" #include "G4RunManager.hh" #include "G4SDManager.hh" #include "G4NistManager.hh" #include "G4LogicalVolume.hh" #include "G4PVPlacement.hh" #include "globals.hh" #include "G4Box.hh" #include "G4VPhysicalVolume.hh" #include "G4SystemOfUnits.hh" #include "G4Tubs.hh" #include "G4UnionSolid.hh" #include "mySD.hh" #include "G4PhysicalConstants.hh" #include "G4Isotope.hh" #include "G4Element.hh" #include "G4Material.hh" #include "G4UnitsTable.hh" #include "G4ElectricField.hh" #include "G4UniformElectricField.hh" #include "G4FieldManager.hh" #include "G4ChordFinder.hh" #include "G4EquationOfMotion.hh" #include "G4Mag_EqRhs.hh" #include "G4EqMagElectricField.hh" #include "G4MagIntegratorStepper.hh" #include "G4MultiFunctionalDetector.hh" #include "G4TransportationManager.hh" #include "G4DormandPrince745.hh" #include "G4MagIntegratorDriver.hh" #include "G4VPrimitiveScorer.hh" DetectorConstruction::DetectorConstruction() {} DetectorConstruction::~DetectorConstruction() {} G4VPhysicalVolume* DetectorConstruction::Construct() { G4NistManager* ext = G4NistManager::Instance();G4Material* H2O = ext->FindOrBuildMaterial("G4_WATER"); //H2O->AddElement(H,2); G4Material* car = ext->FindOrBuildMaterial("G4_C"); G4Material* hyd = ext->FindOrBuildMaterial("G4_H"); G4Material* az = ext->FindOrBuildMaterial("G4_N"); G4Material* Oxy=ext->FindOrBuildMaterial("G4_O"); G4Material* iz = ext->FindOrBuildMaterial("G4_I"); G4Material* Sil=ext->FindOrBuildMaterial("G4_Si"); G4Material* OxySil= new G4Material("OxySil",2.65*g/cm3,2); OxySil->AddMaterial(Sil,46.67*perCent);OxySil->AddMaterial(Oxy,53.33*perCent); G4Material* Ali=ext->FindOrBuildMaterial("G4_Al"); G4Material* OxyAli= new G4Material("OxyAli",3.99*g/cm3,2); OxyAli->AddMaterial(Ali,52.94*perCent); OxyAli->AddMaterial(Oxy,47.06*perCent); G4Material* Cal=ext->FindOrBuildMaterial("G4_Ca"); G4Material* OxyCal= new G4Material("OxyCal",3.34*g/cm3,2); OxyCal->AddMaterial(Cal,71.43*perCent); OxyCal->AddMaterial(Oxy,28.57*perCent); G4Material* Fer=ext->FindOrBuildMaterial("G4_Fe"); G4Material* OxyFer= new G4Material("OxyFer",5.24*g/cm3,2); OxyFer->AddMaterial(Fer,70.*perCent); OxyFer->AddMaterial(Oxy,30.*perCent); G4Material* Mag=ext->FindOrBuildMaterial("G4_Mg"); G4Material* OxyMag= new G4Material("OxyMag",3.58*g/cm3,2); OxyMag->AddMaterial(Mag,60.*perCent); OxyMag->AddMaterial(Oxy,40.*perCent); G4Material* Sod=ext->FindOrBuildMaterial("G4_Na"); G4Material* OxySod= new G4Material("OxySod",2.27*g/cm3,2); OxySod->AddMaterial(Sod,74.19*perCent); OxySod->AddMaterial(Oxy,25.81*perCent); G4Material* NaI=new G4Material("NaI",3.67*g/cm3,2); NaI->AddMaterial(Sod,1); NaI->AddMaterial(iz,1); G4Material* Pot=ext->FindOrBuildMaterial("G4_K"); G4Material* OxyPot= new G4Material("OxyPot",2.35*g/cm3,2); OxyPot->AddMaterial(Pot,82.98*perCent); OxyPot->AddMaterial(Oxy,17.02*perCent); G4Material* Poh=ext->FindOrBuildMaterial("G4_P"); G4Material* OxyPoh= new G4Material("OxyPoh",2.39*g/cm3,2); OxyPoh->AddMaterial(Poh,43.66*perCent); OxyPoh->AddMaterial(Oxy,56.34*perCent); G4Material* Tih=ext->FindOrBuildMaterial("G4_Ti"); G4Material* OxyTih= new G4Material("OxyTih",4.23*g/cm3,2); OxyTih->AddMaterial(Tih,60.*perCent); OxyTih->AddMaterial(Oxy,40.*perCent); G4Material* Man=ext->FindOrBuildMaterial("G4_Mn"); G4Material* OxyMan= new G4Material("OxyMan",5.37*g/cm3,2); OxyMan->AddMaterial(Man,77.46*perCent); OxyMan->AddMaterial(Man,22.54*perCent); G4Material* Pro=OxyMan= new G4Material("Pro",1.1*g/cm3,4); Pro->AddMaterial(car,47.*perCent); Pro->AddMaterial(hyd,44.*perCent); Pro->AddMaterial(Oxy,8.*perCent); Pro->AddMaterial(car,1.*perCent); G4Material* Ter= new G4Material("Ter",0.01/cm3,11); Ter->AddMaterial(OxySil,68.23*perCent); Ter->AddMaterial(OxyAli,20.62*perCent); Ter->AddMaterial(OxyCal,0.06*perCent); Ter->AddMaterial(OxyFer,1.55*perCent); Ter->AddMaterial(OxyMag,0.33*perCent); Ter->AddMaterial(OxySod,0.009*perCent); Ter->AddMaterial(OxyPot,0.87*perCent); Ter->AddMaterial(OxyPoh,0.06*perCent); Ter->AddMaterial(OxyTih,0.56*perCent); Ter->AddMaterial(OxyMan,0.01*perCent); Ter->AddMaterial(Pro,7.701*perCent); G4NistManager* man = G4NistManager::Instance(); G4Material* ea=man->FindOrBuildMaterial("G4_AIR"); G4Box* cyl=new G4Box("cycl",50.*cm,50.*cm,15.*cm); G4Box* cylR=new G4Box("cyclR",15.*cm,11.*cm,15.*cm); logicEA=new G4LogicalVolume(cylR,Ter,"logicEA"); G4Box* Det1=new G4Box("Det1",14.75*cm,10.75*cm,13.95*cm); logicEB=new G4LogicalVolume(Det1,Sil,"logicEB"); logicDet=new G4LogicalVolume(Det1,Sil,"logicDet"); scoringvolume=logicEB; G4VPhysicalVolume* physDet=new G4PVPlacement(nullptr,G4ThreeVector(0.*cm,0.*cm,0.*cm),logicDet,"physDet",logicEA,false,0,true); // G4VPhysicalVolume* ch=new G4PVPlacement(nullptr,G4ThreeVector(0.*cm,0.*cm,0.*cm),logicEB,"ch",logicEA,false,0,true); G4VPhysicalVolume* world=new G4PVPlacement(nullptr,G4ThreeVector(0.*cm,0.*cm,0.*cm),logicEA,"world",nullptr,false,0,true); // G4MultiFunctionalDetector* det = new G4MultiFunctionalDetector(scoringvolume); // G4VPrimitiveScorer* primitive; return world; } void DetectorConstruction::ConstructSDandField() { fEMfield = new G4UniformElectricField(G4ThreeVector(0.,0.,20.*volt/cm)); G4int n = 8; pEquation= new G4EqMagElectricField(fEMfield); fStepper = new G4ClassicalRK4( pEquation, n); G4double minStep = 0.010*mm ; fIntgrDriver = new G4MagInt_Driver(minStep, fStepper, n); pChordFinder = new G4ChordFinder(fIntgrDriver); fieldMgr=G4TransportationManager::GetTransportationManager()->GetFieldManager(); fieldMgr->SetChordFinder(pChordFinder); fieldMgr->SetDetectorField(fEMfield);logicDet->SetFieldManager(fieldMgr, true); G4String sdname="/sensDet"; mySD* sensDet=new mySD(sdname,"hitsCollectionName"); G4SDManager* SDMan = G4SDManager::GetSDMpointer(); SDMan->AddNewDetector(sensDet); SetSensitiveDetector("logicDet",sensDet,true); }