File indexing completed on 2026-03-29 07:51:38
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
0027
0028
0029 #include "DetectorConstruction.hh"
0030
0031 #include "G4Box.hh"
0032 #include "G4LogicalVolume.hh"
0033 #include "G4MoleculeGun.hh"
0034 #include "G4NistManager.hh"
0035 #include "G4PVPlacement.hh"
0036 #include "G4RunManager.hh"
0037 #include "G4SystemOfUnits.hh"
0038 #include "G4UserLimits.hh"
0039 #include "G4VPhysicalVolume.hh"
0040 #include "G4VSolid.hh"
0041
0042
0043
0044 DetectorConstruction::DetectorConstruction() : G4VUserDetectorConstruction()
0045 {
0046 fpDNAParser.reset(new DNAParser());
0047 fpDNAParser->ParseFile("VoxelStraight.fab2g4dna");
0048 fpGun = fpDNAParser->ReleaseMoleculeGun();
0049 }
0050
0051
0052
0053 G4VPhysicalVolume* DetectorConstruction::Construct()
0054 {
0055
0056 G4NistManager* pMan = G4NistManager::Instance();
0057 G4Material* pWater = pMan->FindOrBuildMaterial("G4_WATER");
0058 G4Box* pSolidWorld = new G4Box("solidWorld", 200 * nm, 200 * nm, 200 * nm);
0059 G4LogicalVolume* pLogicWorld = new G4LogicalVolume(pSolidWorld, pWater, "logicWorld");
0060 G4VPhysicalVolume* pPhysWorld =
0061 new G4PVPlacement(0, G4ThreeVector(), "physWorld", pLogicWorld, 0, false, 0);
0062
0063 G4LogicalVolume* pLogicStraightVoxel = fpDNAParser->CreateLogicVolume();
0064 fGeometryMap = fpDNAParser->ReleaseGeoData();
0065
0066 G4VPhysicalVolume* pPhyVoxel = new G4PVPlacement(0, G4ThreeVector(), pLogicStraightVoxel,
0067 "VoxelStraight", pLogicWorld, false, 0);
0068
0069 fGeometryMap.insert(std::make_pair(pPhysWorld, DNAVolumeType::physWorld));
0070 fGeometryMap.insert(std::make_pair(pPhyVoxel, DNAVolumeType::VoxelStraight));
0071
0072 return pPhysWorld;
0073 }
0074
0075
0076
0077 void DetectorConstruction::UpdateGeometry()
0078 {
0079 G4RunManager::GetRunManager()->GeometryHasBeenModified();
0080 }