File indexing completed on 2025-02-23 09:21:52
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 #include "DetectorConstruction.hh"
0027
0028 #include "G4Box.hh"
0029 #include "G4LogicalVolume.hh"
0030 #include "G4MoleculeGun.hh"
0031 #include "G4NistManager.hh"
0032 #include "G4PVPlacement.hh"
0033 #include "G4RunManager.hh"
0034 #include "G4SystemOfUnits.hh"
0035 #include "G4UserLimits.hh"
0036 #include "G4VPhysicalVolume.hh"
0037 #include "G4VSolid.hh"
0038
0039
0040
0041 DetectorConstruction::DetectorConstruction() : G4VUserDetectorConstruction()
0042 {
0043 fpDNAParser.reset(new DNAParser());
0044 fpDNAParser->ParseFile("VoxelStraight.fab2g4dna");
0045 fpGun = fpDNAParser->ReleaseMoleculeGun();
0046 }
0047
0048
0049
0050 DetectorConstruction::~DetectorConstruction() {}
0051
0052
0053
0054 G4VPhysicalVolume* DetectorConstruction::Construct()
0055 {
0056
0057 G4NistManager* pMan = G4NistManager::Instance();
0058 G4Material* pWater = pMan->FindOrBuildMaterial("G4_WATER");
0059 G4Box* pSolidWorld = new G4Box("solidWorld", 200 * nm, 200 * nm, 200 * nm);
0060 G4LogicalVolume* pLogicWorld = new G4LogicalVolume(pSolidWorld, pWater, "logicWorld");
0061 G4VPhysicalVolume* pPhysWorld =
0062 new G4PVPlacement(0, G4ThreeVector(), "physWorld", pLogicWorld, 0, false, 0);
0063
0064 G4LogicalVolume* pLogicStraightVoxel = fpDNAParser->CreateLogicVolume();
0065 fGeometryMap = fpDNAParser->ReleaseGeoData();
0066
0067 G4VPhysicalVolume* pPhyVoxel = new G4PVPlacement(0, G4ThreeVector(), pLogicStraightVoxel,
0068 "VoxelStraight", pLogicWorld, false, 0);
0069
0070 fGeometryMap.insert(std::make_pair(pPhysWorld, DNAVolumeType::physWorld));
0071 fGeometryMap.insert(std::make_pair(pPhyVoxel, DNAVolumeType::VoxelStraight));
0072
0073 return pPhysWorld;
0074 }
0075
0076
0077
0078 void DetectorConstruction::UpdateGeometry()
0079 {
0080 G4RunManager::GetRunManager()->GeometryHasBeenModified();
0081 }